Compare commits

...

1181 Commits

Author SHA1 Message Date
Shpuld Shpludson c3fcbbd918 Merge branch 'rc/2.3.0' into 'master'
2.3.0 to MASTER

See merge request pleroma/pleroma-fe!1366
2021-03-01 18:15:46 +00:00
Shpuld Shpludson 0ac34b3014 Merge branch 'master' into 'rc/2.3.0'
# Conflicts:
#   CHANGELOG.md
2021-03-01 18:06:55 +00:00
Shpuld Shpuldson 06cde8ad06 fix changelog entries in wrong places 2021-03-01 20:04:27 +02:00
Shpuld Shpuldson 434f9cdd7e changelog date 2021-03-01 19:59:57 +02:00
Shpuld Shpuldson 35cde98d2c Merge branch 'fix/punycode-buggy' into rc/2.3.0 2021-03-01 09:27:19 +02:00
Shpuld Shpuldson 49aa10e1c0 add screen_name_ui to tests 2021-02-26 16:37:46 +02:00
Shpuld Shpuldson 09fe160e8b separate screen_name and screen_name_ui with decoded punycode 2021-02-26 16:23:11 +02:00
Shpuld Shpludson 59db4582b0 Merge branch 'feat/focus-input-with-emoji-pickers' into 'develop'
close #1048: Focus input in emoji picker and react picker

Closes #1048

See merge request pleroma/pleroma-fe!1357
2021-02-26 11:13:33 +00:00
Shpuld Shpuldson 44e687653c set changelog version 2021-02-26 13:01:09 +02:00
HJ 20b755d57e Merge branch 'fix-build-warnings' into 'develop'
update shelljs to get rid of warnings on build

See merge request pleroma/pleroma-fe!1358
2021-02-26 10:16:21 +00:00
HJ a7a69d08a7 Merge branch 'fix/chat-unread-badge' into 'develop'
fix chat unread badge

See merge request pleroma/pleroma-fe!1359
2021-02-26 10:15:09 +00:00
Shpuld Shpuldson 2e7529cf50 changelog mention 2021-02-26 11:03:26 +02:00
Shpuld Shpuldson 6fefa5a9c5 fix chat unread badge 2021-02-26 11:00:21 +02:00
Shpuld Shpuldson cef6ecb916 update shelljs to get rid of warnings on build 2021-02-26 10:30:30 +02:00
Shpuld Shpuldson acc08932cd save a few characters 2021-02-25 17:32:54 +02:00
Shpuld Shpuldson 74caf42ed7 Merge branch 'develop' into feat/focus-input-with-emoji-pickers 2021-02-25 17:31:36 +02:00
Shpuld Shpuldson 34d18ac0c4 focus input in emoji picker and react picker 2021-02-25 17:27:29 +02:00
Shpuld Shpludson dd9e18fd34 Merge branch 'fix-vue-warnings-again' into 'develop'
fix vue warnings

See merge request pleroma/pleroma-fe!1356
2021-02-25 12:43:22 +00:00
Shpuld Shpuldson 59aaade7fc fix vue warnings 2021-02-25 14:32:21 +02:00
HJ 5faca01261 Merge branch 'fix/redline-final-v2' into 'develop'
fix redline again

See merge request pleroma/pleroma-fe!1353
2021-02-22 18:53:26 +00:00
Shpuld Shpuldson e14b9ddc02 changelog conflict fix 2021-02-22 18:00:02 +02:00
Shpuld Shpludson 3d013630ae Merge branch 'fix/scroll-lock-jumpiness' into 'develop'
Fix some UI jumpiness on scroll lock

See merge request pleroma/pleroma-fe!1343
2021-02-22 15:14:23 +00:00
Shpuld Shpludson 589ab6510c Merge branch 'feat/keep-chat-perf-up' into 'develop'
Optimize chat perf in long run

See merge request pleroma/pleroma-fe!1350
2021-02-22 15:01:05 +00:00
Shpuld Shpludson e8b8c3cc49 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1351
2021-02-22 15:00:47 +00:00
Shpuld Shpuldson 2f60c6a821 fix redline again 2021-02-22 16:44:12 +02:00
Kana 5ddfc787ed Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (684 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-02-22 03:28:44 +00:00
Ryo Ueno 226ec1c5be Translated using Weblate (Korean)
Currently translated at 66.8% (458 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ko/
2021-02-21 03:00:16 +00:00
Ryo Ueno 3983ea79cd Translated using Weblate (Korean)
Currently translated at 66.7% (457 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ko/
2021-02-21 02:51:00 +00:00
Ryo Ueno 20997d6cfc Translated using Weblate (Japanese)
Currently translated at 100.0% (685 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-21 02:50:57 +00:00
Ben Is d5f191db38 Translated using Weblate (Italian)
Currently translated at 100.0% (685 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-02-21 02:50:55 +00:00
Tirifto d0b1a68f86 Translated using Weblate (Esperanto)
Currently translated at 100.0% (683 of 683 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2021-02-20 20:37:20 +00:00
Shpuld Shpludson a89710452a Merge branch 'feat/reason-in-registration' into 'develop'
Close #1047 - add reason field for registration when needed

Closes #1047

See merge request pleroma/pleroma-fe!1347
2021-02-20 20:37:12 +00:00
HJ 663362db56 Merge branch 'fix/poll-type-text-overflow' into 'develop'
add padding to poll type to not have arrow icon overlap text

See merge request pleroma/pleroma-fe!1345
2021-02-20 19:29:02 +00:00
HJ a7f055a875 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1348
2021-02-20 19:27:51 +00:00
Shpuld Shpuldson 67f3532ac9 add additional check with timeout 2021-02-18 10:14:45 +02:00
Shpuld Shpuldson ee1cf36d52 update changelog 2021-02-17 10:54:14 +02:00
Shpuld Shpuldson 7834ff52b1 add test 2021-02-17 10:53:38 +02:00
Shpuld Shpuldson 47770ed715 get rid of older messages when scrolling down in chat to keep it from bloating dom 2021-02-17 10:16:58 +02:00
Kana e720d4dd8a Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (682 of 683 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-02-15 10:26:04 +00:00
rinpatch aa240f935f Merge branch 'chore/mailmap' into 'develop'
Add myself to .mailmap

See merge request pleroma/pleroma-fe!1349
2021-02-15 10:25:57 +00:00
rinpatch 265bb2cd41 Add myself to .mailmap
I changed my email to rin@patch.cx
2021-02-15 13:17:52 +03:00
Shpuld Shpuldson 23a5c601a7 changelog 2021-02-15 11:35:14 +02:00
Shpuld Shpuldson b4580d086f Merge branch 'develop' into feat/reason-in-registration 2021-02-15 11:10:38 +02:00
Shpuld Shpuldson a636e53404 add reason field when approval is required 2021-02-15 11:10:09 +02:00
HJ 2f8d4c7406 Merge branch 'fix/weblate-conflicts' into 'develop'
Merge Weblate updates

See merge request pleroma/pleroma-fe!1346
2021-02-15 08:33:58 +00:00
rinpatch 3d25946bbf Merge Weblate updates
There was a merge conflict so it had to be done manually.
2021-02-15 11:25:03 +03:00
Shpuld Shpuldson c3b267f2b9 add padding to poll type to not have arrow icon overlap text 2021-02-15 08:30:41 +02:00
Shpuld Shpludson 44bddf6cd2 Merge branch 'fix/usercard-use-general-roles' into 'develop'
User card: use general.role instead of card-specific roles

See merge request pleroma/pleroma-fe!1344
2021-02-15 06:20:55 +00:00
Ryo Ueno 7e11093fcd Translated using Weblate (Japanese)
Currently translated at 100.0% (685 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-14 09:49:18 +00:00
Ben Is cba48476ad Translated using Weblate (Italian)
Currently translated at 100.0% (685 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-02-14 09:49:16 +00:00
rinpatch 033b7eaeb9 Translated using Weblate (Russian)
Currently translated at 83.6% (573 of 685 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-02-13 22:05:02 +00:00
rinpatch 6acf812101 User card: use general.role instead of card-specific roles
Also removes admin_menu.roles from some localizations since it is not
used anywhere
2021-02-13 16:34:43 +03:00
Ben Is 376d431681 Translated using Weblate (Italian)
Currently translated at 100.0% (682 of 682 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-02-12 19:15:48 +00:00
Ryo Ueno 0dc6937bf8 Translated using Weblate (Korean)
Currently translated at 57.3% (390 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ko/
2021-02-12 19:15:48 +00:00
Anonymous a848462f19 Translated using Weblate (Japanese)
Currently translated at 98.8% (672 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-12 19:15:48 +00:00
Ryo Ueno cccdda3a7b Translated using Weblate (Japanese)
Currently translated at 98.8% (672 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-12 19:15:48 +00:00
Anonymous e85fa160c7 Translated using Weblate (Japanese)
Currently translated at 98.0% (667 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-12 19:15:48 +00:00
Ryo Ueno 586c538aa0 Translated using Weblate (Japanese)
Currently translated at 98.0% (667 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_PEDANTIC/
2021-02-12 19:15:48 +00:00
tarteka 21e2b3ce0e Translated using Weblate (Spanish)
Currently translated at 100.0% (680 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2021-02-12 19:15:48 +00:00
Ben Is 11081c2870 Translated using Weblate (Italian)
Currently translated at 100.0% (680 of 680 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-02-12 19:15:48 +00:00
Snow 4c845a1a99 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-02-12 19:15:48 +00:00
Snow 0a3f40eebb Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-02-12 19:15:48 +00:00
Snow 63317a2fdf Translated using Weblate (Chinese (Traditional))
Currently translated at 99.2% (674 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-02-12 19:15:48 +00:00
LibertAdmin 0ffb7b67ed Translated using Weblate (French)
Currently translated at 98.2% (667 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2021-02-12 19:15:48 +00:00
fiftyffs 1a836c8527 Translated using Weblate (Norwegian Bokmål)
Currently translated at 70.1% (476 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nb_NO/
2021-02-12 19:15:48 +00:00
Shpuld Shpludson 7f3fd9ca21 Merge branch 'multi-choice-poll-wording' into 'develop'
Display 'people voted' instead of 'votes' for multi-answers polls

Closes #993

See merge request pleroma/pleroma-fe!1341
2021-02-12 19:15:42 +00:00
Shpuld Shpuldson c7018057f1 changelog 2021-02-12 18:49:57 +02:00
Shpuld Shpuldson 398aac6558 remove redundant opacity2 2021-02-12 18:47:10 +02:00
eugenijm 01275fbac0 Ensure poll.voters_count doesn't fallback to poll.votes when it's 0 2021-02-12 19:43:57 +03:00
Shpuld Shpuldson 4859e63a89 Remove body scrollbar in chat layout, keep nav bar still on scroll lock, add tiny fade for media modal 2021-02-12 18:14:54 +02:00
Shpuld Shpludson b2a96417cf Merge branch 'fix/localize-bot-label' into 'develop'
Make bot label localizable

See merge request pleroma/pleroma-fe!1342
2021-02-12 13:58:11 +00:00
rinpatch da807a12fb Make bot label localizable 2021-02-12 13:48:39 +03:00
Shpuld Shpludson 8b7c367b04 Merge branch 'staff-grouping' into 'develop'
Group staff by role in the About page

Closes #737

See merge request pleroma/pleroma-fe!1309
2021-02-12 08:05:55 +00:00
Eugenij 13ff99881b Apply 1 suggestion(s) to 1 file(s) 2021-02-10 12:28:39 +00:00
eugenijm 1506b97e35 Display 'people voted' instead of 'votes' for multi-choice polls 2021-02-09 16:36:45 +03:00
HJ 647d75f27c Merge branch 'reactbutton-consistency' into 'develop'
Some fixes for reactbutton/extrabuttons

See merge request pleroma/pleroma-fe!1340
2021-02-09 13:12:42 +00:00
Henry Jameson 213c5637d4 Cleanup ReactButton's CSS, fix hitboxes of reactbutton and extrabuttons 2021-02-03 09:18:44 +02:00
HJ 6f3acb3c1b Merge branch 'fix-otp-login-kbd' into 'develop'
Fix #1033 as well as other (potential) similar issues

Closes #1033

See merge request pleroma/pleroma-fe!1338
2021-02-03 06:23:35 +00:00
HJ 7d4c7e3b3f Merge branch 'settings-changed' into 'develop'
Boolean settings improvements

See merge request pleroma/pleroma-fe!1257
2021-02-02 20:27:23 +00:00
Henry Jameson 78f8147aa6 change react button classnames for consistency 2021-02-01 21:07:40 +02:00
Henry Jameson 982c799b6f fix a bunch of <button>s acting as submit buttons breaking enter key 2021-02-01 21:07:09 +02:00
Henry Jameson 66f3e72b54 update branch with recent develop changes (FA, added settings) 2021-02-01 20:08:36 +02:00
Henry Jameson 8958f386be Merge remote-tracking branch 'origin/develop' into settings-changed
* origin/develop: (306 commits)
  fallback if shadows aren't defined
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Ukrainian)
  Translated using Weblate (Italian)
  Translated using Weblate (Ukrainian)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Italian)
  Translated using Weblate (Russian)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Russian)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Portuguese)
  ...
2021-02-01 19:39:57 +02:00
Shpuld Shpludson de66267a07 Merge branch 'fix/use-current-app-locale' into 'develop'
Use app locale with toLocaleString/toLocaleDateString

See merge request pleroma/pleroma-fe!1301
2021-01-29 08:38:15 +00:00
HJ 6e4a0d408c Merge branch 'fix-fix-themes' into 'develop'
fallback if shadows aren't defined

See merge request pleroma/pleroma-fe!1337
2021-01-28 12:14:28 +00:00
Henry Jameson 2576b75059 fallback if shadows aren't defined 2021-01-28 14:05:32 +02:00
HJ 11963de288 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1327
2021-01-27 06:51:53 +00:00
Snow 79e4df99dc Translated using Weblate (Chinese (Traditional))
Currently translated at 98.5% (669 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-01-25 17:04:16 +00:00
Pavlo Bilous 58a92c1b7d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-25 17:04:16 +00:00
Ben Is 286527b489 Translated using Weblate (Italian)
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-25 17:04:16 +00:00
rinpatch bc9cd4170d Translated using Weblate (Ukrainian)
Currently translated at 99.4% (675 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-25 17:04:16 +00:00
João Rodrigues c4fb123d07 Translated using Weblate (Portuguese)
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Ben Is 3b6a30ec9f Translated using Weblate (Italian)
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-25 17:04:16 +00:00
rinpatch 238e9dcd35 Translated using Weblate (Russian)
Currently translated at 83.9% (570 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-25 17:04:16 +00:00
Artur Mancha c3e5fd5fa1 Translated using Weblate (Portuguese)
Currently translated at 100.0% (679 of 679 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
rinpatch 05e5bb6404 Translated using Weblate (Russian)
Currently translated at 83.8% (568 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-25 17:04:16 +00:00
João Rodrigues 836fc4d205 Translated using Weblate (Portuguese)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Ana Margarida Guimarães Ribeiro Cardoso c8240a48d5 Translated using Weblate (Portuguese)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Anonymous d39e918cd3 Translated using Weblate (Portuguese)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Anonymous da47d9a43d Translated using Weblate (Portuguese)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
João Rodrigues 0c2b425682 Translated using Weblate (Portuguese)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
André Inácio ffd673d4a5 Translated using Weblate (Portuguese)
Currently translated at 74.0% (501 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Miguel Carreiro 6df5459ec9 Translated using Weblate (Portuguese)
Currently translated at 74.0% (501 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Anonymous c5477e489b Translated using Weblate (Portuguese)
Currently translated at 74.0% (501 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
João Rodrigues cdd632f04c Translated using Weblate (Portuguese)
Currently translated at 74.0% (501 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Miguel Carreiro e9c5e06f50 Translated using Weblate (Portuguese)
Currently translated at 71.9% (487 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Afonso Pereira a9cbf3eafe Translated using Weblate (Portuguese)
Currently translated at 71.9% (487 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Afonso Pereira ac43a8145b Translated using Weblate (Portuguese)
Currently translated at 70.0% (474 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Dr. António 21eac51029 Translated using Weblate (Portuguese)
Currently translated at 70.0% (474 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Afonso Pereira 600ff9a67b Translated using Weblate (Portuguese)
Currently translated at 69.8% (473 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Afonso Pereira a5def5cf56 Translated using Weblate (Portuguese)
Currently translated at 69.7% (472 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Dr. António 24f7cbf3c9 Translated using Weblate (Portuguese)
Currently translated at 69.7% (472 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Afonso Pereira 916d4e0496 Translated using Weblate (Portuguese)
Currently translated at 69.4% (470 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
João Rodrigues 1036395dfc Translated using Weblate (Portuguese)
Currently translated at 69.4% (470 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Artur Mancha 58528605c8 Translated using Weblate (Portuguese)
Currently translated at 56.8% (385 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
André Inácio 9a074fbdfa Translated using Weblate (Portuguese)
Currently translated at 56.8% (385 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Artur Mancha e8fb0f313e Translated using Weblate (Portuguese)
Currently translated at 49.0% (332 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Artur Mancha 67a0d83568 Translated using Weblate (Portuguese)
Currently translated at 48.7% (330 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pt/
2021-01-25 17:04:16 +00:00
Dmitriy Nelovchenko 7c295e1e0f Translated using Weblate (Russian)
Currently translated at 83.1% (563 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-25 17:04:16 +00:00
yasnost a02b769c8f Translated using Weblate (Russian)
Currently translated at 83.1% (563 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-25 17:04:16 +00:00
HJ 7b6f68ebcd Merge branch 'fix/shoutbox-mobile' into 'develop'
fix #1051 wrong route in side drawer shoutbox link

Closes #1051

See merge request pleroma/pleroma-fe!1335
2021-01-25 17:04:08 +00:00
Shpuld Shpuldson 9cf487497e fix wrong route in side drawer shoutbox link 2021-01-25 18:49:03 +02:00
HJ eb2975b64d Merge branch 'fix-p-themes' into 'develop'
Fix p's weird corrupt theme data crashing theme engine

See merge request pleroma/pleroma-fe!1334
2021-01-24 10:36:03 +00:00
Henry Jameson 272ba8f7a9 Fix p's weird corrupt theme data crashing theme engine 2021-01-23 13:58:40 +02:00
Shpuld Shpludson 28ebb8b0ae Merge branch 'fix/convert-more-hyperlinks-to-buttons' into 'develop'
convert more hyperlink buttons to real buttons

See merge request pleroma/pleroma-fe!1333
2021-01-22 13:21:16 +00:00
Shpuld Shpuldson 27a537d307 give delete field its own class 2021-01-22 12:06:39 +02:00
Shpuld Shpuldson daa9f211a6 Merge branch 'develop' into fix/convert-more-hyperlinks-to-buttons 2021-01-22 12:04:58 +02:00
rinpatch 60a8a89f5b Use app locale with toLocaleString/toLocaleDateString
Fixes inconsistent date formatting when browser language is different
from PleromaFE language.
2021-01-21 20:31:54 +03:00
Shpuld Shpludson 0358284ebf Merge branch 'feat/language-picker-native-names' into 'develop'
Use native language names in the language picker

See merge request pleroma/pleroma-fe!1302
2021-01-21 13:41:36 +00:00
rinpatch 11c7355749 Use native language names in the language picker
This seems more intuitive to me and is what I've seen in most other
language pickers.
2021-01-21 14:24:16 +03:00
feld f614da2abb Merge branch 'breaking/adminapi-user-deactivated' into 'develop'
Support old user.deactivated and new user.is_active fields

See merge request pleroma/pleroma-fe!1329
2021-01-20 22:49:42 +00:00
feld 831cf9eafb Apply 1 suggestion(s) to 1 file(s) 2021-01-20 14:47:13 -06:00
Shpuld Shpludson e14917e28d Merge branch 'feat/user-role-i18n' into 'develop'
UserCard: Make user roles translateable

See merge request pleroma/pleroma-fe!1331
2021-01-20 15:40:47 +00:00
Shpuld Shpuldson 02ab803725 change a few more buttons to real buttons 2021-01-20 17:36:40 +02:00
Shpuld Shpuldson 9bf80cc7be Merge branch 'develop' into fix/convert-more-hyperlinks-to-buttons 2021-01-20 17:14:09 +02:00
Shpuld Shpludson 62dcf34e0d Merge branch 'chore/backport-release-in-changelog' into 'develop'
Chore/backport release in changelog

See merge request pleroma/pleroma-fe!1332
2021-01-20 15:13:40 +00:00
Shpuld Shpuldson 8011556c28 backport 2.2.3 to changelog 2021-01-20 17:03:51 +02:00
Shpuld Shpuldson dcba920f92 fix profile field buttons, remove attachment button 2021-01-20 17:01:57 +02:00
rinpatch b76a68e622 UserCard: Make user roles translateable
I did not add a translation for my native language in this patch because
I am not sure how weblate would react, but I did add it locally and it
seems to work.
2021-01-20 14:04:00 +03:00
Mark Felder 36e56354e4 More robust backwards compatibility 2021-01-19 10:01:55 -06:00
Mark Felder 9656c9b969 Support old user.deactivated and new user.is_active fields 2021-01-18 15:54:12 -06:00
Shpuld Shpludson 320418d524 Merge branch 'rc/2.2.3' into 'master'
rc 2.2.3 to MASTER

See merge request pleroma/pleroma-fe!1328
2021-01-18 13:44:31 +00:00
Shpuld Shpludson 8f55cb151c Merge branch 'master' into 'rc/2.2.3'
# Conflicts:
#   CHANGELOG.md
2021-01-18 13:35:53 +00:00
Shpuld Shpuldson 4f0c43bd84 rc 2.2.3 2021-01-18 15:30:42 +02:00
Shpuld Shpludson fe78ed78fd Merge branch 'feat/dont-filter-own-posts' into 'develop'
Don't filter own posts

See merge request pleroma/pleroma-fe!1323
2021-01-18 13:09:25 +00:00
HJ 8c82bb61f1 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1325
2021-01-13 12:51:33 +00:00
Ben Is 38e5eec122 Translated using Weblate (Italian)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-13 11:00:37 +00:00
Shpuld Shpludson f52bca04c9 Merge branch 'feat/allow-reporting-status-directly' into 'develop'
Add report button to status ellipsis menu

See merge request pleroma/pleroma-fe!1324
2021-01-12 16:01:15 +00:00
Shpuld Shpuldson 0ee0551a47 fix changing reported status on same user 2021-01-12 14:55:31 +02:00
Shpuld Shpuldson 65dbf7b85d Add report button to status ellipsis menu 2021-01-12 14:43:21 +02:00
Shpuld Shpludson 728726cf17 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1305
2021-01-12 12:01:32 +00:00
Shpuld Shpuldson cdb9b4aea2 changelog update 2021-01-11 19:41:42 +02:00
Shpuld Shpuldson 5ab96ae0d2 don't filter own posts 2021-01-11 19:40:35 +02:00
Kana 1a89ec5d8a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
Marcin Mikołajczak 83db5f0916 Translated using Weblate (Polish)
Currently translated at 99.8% (676 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2021-01-05 08:09:18 +00:00
Dmitriy Nelovchenko 4f69c41fa5 Translated using Weblate (Russian)
Currently translated at 79.6% (539 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
Dmitriy Nelovchenko 8729c66374 Translated using Weblate (Russian)
Currently translated at 78.8% (534 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
rinpatch 6670668a7c Translated using Weblate (Russian)
Currently translated at 77.9% (528 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
tarteka c1de7b60e1 Translated using Weblate (Spanish)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2021-01-05 08:09:18 +00:00
Ben Is bdee1277b1 Translated using Weblate (Italian)
Currently translated at 100.0% (677 of 677 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-05 08:09:18 +00:00
Kana 12991f915f Translated using Weblate (Chinese (Traditional))
Currently translated at 98.9% (668 of 675 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-01-05 08:09:18 +00:00
Kana 2053b3396a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (675 of 675 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
Ben Is e98c19c725 Translated using Weblate (Italian)
Currently translated at 100.0% (675 of 675 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-05 08:09:18 +00:00
ZEN 3681d6bbd1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (675 of 675 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
Ben Is e3b02de6fb Translated using Weblate (Italian)
Currently translated at 100.0% (672 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2021-01-05 08:09:18 +00:00
Митець fa6cfc8238 Translated using Weblate (Ukrainian)
Currently translated at 99.8% (671 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
shironeko 2509bfc5e6 Translated using Weblate (Chinese (Traditional))
Currently translated at 99.4% (668 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2021-01-05 08:09:18 +00:00
Kana d50798e8ce Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (672 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
shironeko b5dca9bbe2 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (672 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
rinpatch 3987020216 Translated using Weblate (Russian)
Currently translated at 78.5% (528 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
Tirifto 271f9e539a Translated using Weblate (Esperanto)
Currently translated at 100.0% (672 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2021-01-05 08:09:18 +00:00
shironeko a2dff27737 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.7% (670 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
Kana 467efc4639 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.7% (670 of 672 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
Kana 646ff273ee Translated using Weblate (Chinese (Simplified))
Currently translated at 99.7% (669 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2021-01-05 08:09:18 +00:00
rinpatch 2b6b5ff227 Translated using Weblate (Russian)
Currently translated at 77.4% (520 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
Митець cf796d8f5c Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
ZEN 762204f3be Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
rinpatch d1f51d946b Translated using Weblate (Russian)
Currently translated at 77.3% (519 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2021-01-05 08:09:18 +00:00
ZEN 837df4f5a5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
ZEN 76809e9d24 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
Митець 1847315353 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
ZEN 07b31a7d9c Translated using Weblate (Ukrainian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
Митець 9780e1fc11 Translated using Weblate (Ukrainian)
Currently translated at 98.0% (658 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
ZEN 21f624609f Translated using Weblate (Ukrainian)
Currently translated at 98.0% (658 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2021-01-05 08:09:18 +00:00
Shpuld Shpludson 3e7d1fbf23 Merge branch 'fix/punycode-screen-names' into 'develop'
fix #1036 convert screen name to unicode with punycode

Closes #1036

See merge request pleroma/pleroma-fe!1320
2021-01-05 08:09:09 +00:00
Shpuld Shpludson ef6e2087ae fix #1036 convert screen name to unicode with punycode 2021-01-05 08:09:08 +00:00
HJ bc23266d70 Merge branch 'fix-emoji-sort-chrome' into 'develop'
fix #1037 chrome sorting didn't like 0, other sorter was just outright broken

Closes #1037

See merge request pleroma/pleroma-fe!1321
2021-01-04 19:44:19 +00:00
Henry Jameson 4b0308ad1f fix #1037 chrome sorting didn't like 0, other sorter was just outright broken 2021-01-04 21:09:12 +02:00
HJ 9d45db959f Merge branch 'lang-switcher-zh_Hant' into 'develop'
Added Traditional Chinese to language switcher

See merge request pleroma/pleroma-fe!1319
2021-01-01 15:57:24 +00:00
Kana 9bfc3c275c Added Traditional Chinese to language swithcer 2021-01-01 02:53:16 +00:00
HJ 34d8893f1c Merge branch 'fix/compat-aarch64-mac' into 'develop'
Newer chromedriver works on MacOS aarch64

See merge request pleroma/pleroma-fe!1318
2020-12-29 01:54:18 +00:00
Mark Felder a36922ae1b Newer chromedriver works on MacOS aarch64
https://github.com/giggio/node-chromedriver/commit/469dd0a6ee23540bfa832b5f09b4cbde3e152010
2020-12-28 13:27:13 -06:00
Shpuld Shpludson 3df84ccd5b Merge branch 'fix/follows-followers-not-displaying' into 'develop'
Fix #1034 follows/followers lists not working after update

Closes #1034

See merge request pleroma/pleroma-fe!1317
2020-12-28 18:07:47 +00:00
Shpuld Shpuldson 243383852b make with-load-more not use computeds when they don't work for it 2020-12-28 17:08:15 +02:00
Shpuld Shpludson 2312f6c15a Merge branch 'update-changelog-2.2.2' into 'develop'
update develop changelog with latest release

See merge request pleroma/pleroma-fe!1316
2020-12-28 09:41:46 +00:00
Shpuld Shpuldson f01dce99df update changelog with latest release 2020-12-28 11:32:52 +02:00
Shpuld Shpludson a39866308c Merge branch 'rc/2.2.2' into 'master'
prepare master for 2.2.2

See merge request pleroma/pleroma-fe!1315
2020-12-22 16:00:12 +00:00
Shpuld Shpludson 00cb8d9dce Merge branch 'master' into 'rc/2.2.2'
# Conflicts:
#   CHANGELOG.md
2020-12-22 15:51:18 +00:00
Shpuld Shpuldson 19bde84f6d mark unreleased as 2.2.2 in changelog 2020-12-22 17:49:13 +02:00
eugenijm 481c71517e Group staff members by role in the About page 2020-12-18 13:41:37 +03:00
HJ 8d9bf3efc8 Merge branch 'plain-bg' into 'develop'
Solid color wallpaper support

See merge request pleroma/pleroma-fe!1314
2020-12-18 08:37:01 +00:00
Henry Jameson 93af7ee36a simplified code, review 2020-12-18 01:01:58 +02:00
Shpuld Shpludson 3359d4ddf6 Merge branch 'fix/timeline-bar-clickables-offset' into 'develop'
Fix #923 block clicks in blank area of timeline menu, fix 'up-to-date' align

Closes #923

See merge request pleroma/pleroma-fe!1300
2020-12-16 17:57:59 +00:00
Shpuld Shpludson a2f1ad93f5 Merge branch 'develop' into 'fix/timeline-bar-clickables-offset'
# Conflicts:
#   CHANGELOG.md
2020-12-16 17:49:11 +00:00
Shpuld Shpludson 10399c193a Merge branch 'feat/move-external-source-button-to-extra-buttons' into 'develop'
Move external source link to extra buttons, expand the expand button

See merge request pleroma/pleroma-fe!1303
2020-12-16 17:46:15 +00:00
Shpuld Shpludson 466fc84e82 Merge branch 'fix/fix-error-handling-in-profile-tab' into 'develop'
fix #1020 fix error handling in profile tab

Closes #1020

See merge request pleroma/pleroma-fe!1299
2020-12-16 16:51:03 +00:00
Henry Jameson 0cf06cb9ec Merge remote-tracking branch 'origin/develop' into plain-bg
* origin/develop:
  fix remote follow button style
  Disable horizontal textarea resize
  Add uk.json in messages.js
  Display upload limit on the Features panel
  use title html for poll options before vote
  fix recent mistakes in react button
2020-12-16 18:43:38 +02:00
Henry Jameson 81bac9f8ac change your log 2020-12-16 18:33:54 +02:00
Henry Jameson 5cb41c7175 theme ui 2020-12-16 18:28:10 +02:00
Henry Jameson c197756767 Basic no-wallpaper support 2020-12-16 18:25:07 +02:00
Shpuld Shpludson 34c65e3bcf Merge branch 'fix/remote-follow-button-style' into 'develop'
fix remote follow button style

See merge request pleroma/pleroma-fe!1313
2020-12-16 10:14:10 +00:00
Shpuld Shpuldson 6a469963b0 fix remote follow button style 2020-12-16 12:05:13 +02:00
Shpuld Shpludson e8cebb568b Merge branch 'develop' into 'fix/timeline-bar-clickables-offset'
# Conflicts:
#   CHANGELOG.md
2020-12-15 19:54:00 +00:00
Shpuld Shpludson 22546ea813 Merge branch 'develop' into 'feat/move-external-source-button-to-extra-buttons'
# Conflicts:
#   CHANGELOG.md
2020-12-15 19:50:59 +00:00
Shpuld Shpludson 5077549c73 Merge branch 'fix/no-emoji-in-poll-when-voting' into 'develop'
fix #1026 use title html for poll options before vote

Closes #1026

See merge request pleroma/pleroma-fe!1307
2020-12-15 19:49:32 +00:00
HJ 32ed09bae5 Merge branch 'prevent-textarea-resize-in-bio' into 'develop'
Disable horizontal textarea resize

Closes #741

See merge request pleroma/pleroma-fe!1312
2020-12-15 18:27:59 +00:00
eugenijm 6d9c79fb6d Disable horizontal textarea resize 2020-12-15 21:18:59 +03:00
HJ 39c4672175 Merge branch 'patch-1' into 'develop'
Add uk.json in messages.js

See merge request pleroma/pleroma-fe!1311
2020-12-14 20:03:45 +00:00
W. W 4451ac9f7c Add uk.json in messages.js 2020-12-14 19:52:07 +00:00
Shpuld Shpludson bdb994d450 Merge branch 'file-limit-info' into 'develop'
Display the upload limit on the Features panel

Closes #785

See merge request pleroma/pleroma-fe!1308
2020-12-12 14:39:46 +00:00
eugenijm 51e6f5e255 Display upload limit on the Features panel 2020-12-11 17:16:59 +03:00
Shpuld Shpuldson 415119cda9 use title html for poll options before vote 2020-12-07 00:11:21 +02:00
Shpuld Shpludson 99e12091b7 Merge branch 'fix/react-button-whoops' into 'develop'
fix #1025 recent mistakes in react button

Closes #1025

See merge request pleroma/pleroma-fe!1306
2020-12-06 21:54:31 +00:00
Shpuld Shpuldson 83bc74de0a fix recent mistakes in react button 2020-12-06 23:45:34 +02:00
HJ 674c302350 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1298
2020-12-04 14:46:53 +00:00
ZEN 45e08f83aa Translated using Weblate (Ukrainian)
Currently translated at 94.6% (635 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-04 13:04:15 +00:00
rinpatch 3b037218b2 Translated using Weblate (Russian)
Currently translated at 76.9% (516 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-04 13:04:14 +00:00
Митець 506cf0902e Translated using Weblate (Ukrainian)
Currently translated at 94.1% (632 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-04 10:56:24 +00:00
Anonymous bfeb8ed14b Translated using Weblate (Ukrainian)
Currently translated at 93.8% (630 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-04 06:54:47 +00:00
ZEN ffd0bbbf16 Translated using Weblate (Ukrainian)
Currently translated at 93.8% (630 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-04 06:54:46 +00:00
rinpatch ff93f43468 Translated using Weblate (Russian)
Currently translated at 76.1% (511 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-03 22:18:56 +00:00
ZEN 56927c5a09 Translated using Weblate (Ukrainian)
Currently translated at 90.4% (607 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 21:38:54 +00:00
Митець c74ee1153d Translated using Weblate (Ukrainian)
Currently translated at 90.4% (607 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 21:38:53 +00:00
Митець ccf357c206 Translated using Weblate (Ukrainian)
Currently translated at 90.1% (605 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 20:24:08 +00:00
Митець 99c1fb0068 Translated using Weblate (Ukrainian)
Currently translated at 85.6% (575 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 18:02:32 +00:00
ZEN dc90db91fd Translated using Weblate (Ukrainian)
Currently translated at 85.6% (575 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 18:02:31 +00:00
ZEN 0c3f62642b Translated using Weblate (Ukrainian)
Currently translated at 85.5% (574 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:49:21 +00:00
Anonymous 6b7f82174c Translated using Weblate (Ukrainian)
Currently translated at 85.5% (574 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:49:01 +00:00
ZEN a8d3ce4671 Translated using Weblate (Ukrainian)
Currently translated at 85.5% (574 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:49:00 +00:00
Anonymous 95b911d7a0 Translated using Weblate (Ukrainian)
Currently translated at 84.6% (568 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:24:42 +00:00
Митець f1066c393f Translated using Weblate (Ukrainian)
Currently translated at 84.5% (567 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:01:57 +00:00
ZEN 215e3753e1 Translated using Weblate (Ukrainian)
Currently translated at 84.5% (567 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 17:01:56 +00:00
Митець 426441b51c Translated using Weblate (Ukrainian)
Currently translated at 81.3% (546 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:57:18 +00:00
Shpuld Shpludson fc4a17aa8c Merge branch 'develop' into 'fix/fix-error-handling-in-profile-tab'
# Conflicts:
#   CHANGELOG.md
2020-12-03 14:41:55 +00:00
Anonymous f30450be12 Translated using Weblate (Ukrainian)
Currently translated at 81.0% (544 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 17abcda2aa Translated using Weblate (Ukrainian)
Currently translated at 81.0% (544 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
rinpatch 0f8587463c Translated using Weblate (Russian)
Currently translated at 72.1% (484 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-03 14:30:36 +00:00
Anonymous 3d8af7256b Translated using Weblate (Ukrainian)
Currently translated at 80.7% (542 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Митець 60598f9bda Translated using Weblate (Ukrainian)
Currently translated at 80.7% (542 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 800964ea6b Translated using Weblate (Ukrainian)
Currently translated at 80.1% (538 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Митець 06d05b7b82 Translated using Weblate (Ukrainian)
Currently translated at 80.1% (538 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous ac45e410d3 Translated using Weblate (Ukrainian)
Currently translated at 80.0% (537 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Митець 4667137fff Translated using Weblate (Ukrainian)
Currently translated at 80.0% (537 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 037185a463 Translated using Weblate (Ukrainian)
Currently translated at 79.8% (536 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Митець 33e3ada7da Translated using Weblate (Ukrainian)
Currently translated at 79.8% (536 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 00c762474f Translated using Weblate (Ukrainian)
Currently translated at 79.8% (536 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Митець ee0748bff5 Translated using Weblate (Ukrainian)
Currently translated at 79.5% (534 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 2bbb01e751 Translated using Weblate (Ukrainian)
Currently translated at 79.5% (534 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 2ac23d8318 Translated using Weblate (Ukrainian)
Currently translated at 74.8% (502 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W 3dcbc2c294 Translated using Weblate (Ukrainian)
Currently translated at 74.8% (502 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W 0f2841a98a Translated using Weblate (Ukrainian)
Currently translated at 66.4% (446 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 8a260f4102 Translated using Weblate (Ukrainian)
Currently translated at 66.4% (446 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous c20c418e6d Translated using Weblate (Ukrainian)
Currently translated at 63.1% (424 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN fdcd4828ed Translated using Weblate (Ukrainian)
Currently translated at 63.1% (424 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 6923d5f983 Translated using Weblate (Ukrainian)
Currently translated at 63.0% (423 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 35773e2339 Translated using Weblate (Ukrainian)
Currently translated at 63.0% (423 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 291d9929f8 Translated using Weblate (Ukrainian)
Currently translated at 62.7% (421 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN a3f6476ae1 Translated using Weblate (Ukrainian)
Currently translated at 62.7% (421 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W be2e6f39aa Translated using Weblate (Ukrainian)
Currently translated at 62.5% (420 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 6111affc61 Translated using Weblate (Ukrainian)
Currently translated at 62.5% (420 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 4f54b0123a Translated using Weblate (Ukrainian)
Currently translated at 62.5% (420 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous a5b961ed31 Translated using Weblate (Ukrainian)
Currently translated at 61.9% (416 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN ed5c1c0a4c Translated using Weblate (Ukrainian)
Currently translated at 61.9% (416 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 061a500e0a Translated using Weblate (Ukrainian)
Currently translated at 61.6% (414 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 78b052b6fc Translated using Weblate (Ukrainian)
Currently translated at 61.6% (414 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous 66ad886e33 Translated using Weblate (Ukrainian)
Currently translated at 59.7% (401 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN c823800a67 Translated using Weblate (Ukrainian)
Currently translated at 59.7% (401 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
Anonymous d9b4c87dda Translated using Weblate (Ukrainian)
Currently translated at 58.8% (395 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 60121775f2 Translated using Weblate (Ukrainian)
Currently translated at 58.8% (395 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
rinpatch 8fbf91f3e8 Translated using Weblate (Russian)
Currently translated at 68.5% (460 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-03 14:30:36 +00:00
rinpatch e713e17e9d Translated using Weblate (Russian)
Currently translated at 68.5% (460 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-03 14:30:36 +00:00
ZEN a4a0695c57 Translated using Weblate (Ukrainian)
Currently translated at 58.4% (392 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 9657a5a098 Translated using Weblate (Ukrainian)
Currently translated at 58.4% (392 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W 55b0b81252 Translated using Weblate (Ukrainian)
Currently translated at 51.5% (346 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN ae3ded9185 Translated using Weblate (Ukrainian)
Currently translated at 51.5% (346 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W 8140501e37 Translated using Weblate (Ukrainian)
Currently translated at 45.0% (302 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 71b0ef8f1b Translated using Weblate (Ukrainian)
Currently translated at 39.3% (264 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 0dc0c816ea Translated using Weblate (Ukrainian)
Currently translated at 35.4% (238 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 2478b5a306 Translated using Weblate (Ukrainian)
Currently translated at 34.5% (232 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W a464135cbd Translated using Weblate (Ukrainian)
Currently translated at 30.2% (203 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 3f452a5462 Translated using Weblate (Ukrainian)
Currently translated at 30.2% (203 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
rinpatch 431e9369c2 Translated using Weblate (Russian)
Currently translated at 60.8% (408 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-12-03 14:30:36 +00:00
W.W c789db82df Translated using Weblate (Ukrainian)
Currently translated at 24.4% (164 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 171462b246 Translated using Weblate (Ukrainian)
Currently translated at 24.2% (163 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 0cccb39710 Translated using Weblate (Ukrainian)
Currently translated at 23.9% (161 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN a7b2c5cdad Translated using Weblate (Ukrainian)
Currently translated at 23.3% (157 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W a6c93c5eab Translated using Weblate (Ukrainian)
Currently translated at 23.3% (157 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN badbd27e27 Translated using Weblate (Ukrainian)
Currently translated at 21.4% (144 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
ZEN 1116b2cd32 Translated using Weblate (Ukrainian)
Currently translated at 21.3% (143 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
W.W 9cb83648e3 Translated using Weblate (Ukrainian)
Currently translated at 21.3% (143 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-12-03 14:30:36 +00:00
lain 42c747a342 Merge branch 'fix/own-chat-messages-disappearing' into 'develop'
fix #1021: own chat messages disappearing

Closes #1021

See merge request pleroma/pleroma-fe!1304
2020-12-03 14:30:25 +00:00
Shpuld Shpuldson 2427757184 fix your own chat messages disappearing 2020-12-03 16:09:40 +02:00
Shpuld Shpuldson 5d95376bef update changelog 2020-12-03 12:03:23 +02:00
Shpuld Shpuldson 46320090e3 move external source button to extra buttons, make expand button easier to click and highlight on hover 2020-12-03 11:57:17 +02:00
Shpuld Shpuldson fa01030641 make click blocking actually work 2020-12-03 10:07:42 +02:00
Shpuld Shpuldson f4b18df644 block clicks in blank area of timeline menu, fix 'up-to-date' align 2020-12-02 16:07:31 +02:00
Shpuld Shpuldson 15ea735006 remove vertical align, update changelog 2020-12-02 12:58:13 +02:00
Shpuld Shpuldson 0d53af786b fix the close button on global notices 2020-12-02 12:55:14 +02:00
Shpuld Shpuldson b537032e6d Merge branch 'develop' into fix/fix-error-handling-in-profile-tab 2020-12-02 12:48:21 +02:00
Shpuld Shpuldson 4dde9c4d52 refactor error handling in profile tab 2020-12-02 12:46:31 +02:00
Shpuld Shpludson fdfb8810c1 Merge branch 'fix/use-semantically-correct-buttons' into 'develop'
Fix #1001 Accessibility: Use semantically correct buttons (almost) everywhere

Closes #1001

See merge request pleroma/pleroma-fe!1293
2020-12-01 11:02:46 +00:00
Shpuld Shpludson c655699935 Merge branch 'feat/react-picker-titles-support-filter-by-emoji' into 'develop'
Fix #1014 add titles in react picker, support filtering by emoji itself

Closes #1014

See merge request pleroma/pleroma-fe!1294
2020-12-01 11:01:29 +00:00
Shpuld Shpludson 10e2648142 Merge branch 'develop' into 'feat/react-picker-titles-support-filter-by-emoji'
# Conflicts:
#   CHANGELOG.md
2020-12-01 10:54:29 +00:00
Shpuld Shpludson 655d985a82 Merge branch 'develop' into 'fix/use-semantically-correct-buttons'
# Conflicts:
#   CHANGELOG.md
2020-12-01 10:47:10 +00:00
Shpuld Shpludson 133294dc2a Merge branch 'feat/add-missing-emoji-and-script' into 'develop'
Update emoji.json, add script that merges new emoji from another source

See merge request pleroma/pleroma-fe!1295
2020-12-01 10:40:33 +00:00
HJ 397622078f Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1297
2020-11-30 20:16:03 +00:00
W.W f1b36f3b1a Translated using Weblate (Ukrainian)
Currently translated at 10.5% (71 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-11-30 19:41:30 +00:00
HJ c4b098be0e Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1296
2020-11-30 19:37:42 +00:00
Anonymous cf3ad0632a Translated using Weblate (Russian)
Currently translated at 55.8% (375 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-11-30 19:28:53 +00:00
rinpatch 848b77acaa Translated using Weblate (Russian)
Currently translated at 55.8% (375 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-11-30 19:28:52 +00:00
ZEN bd1564765c Translated using Weblate (Ukrainian)
Currently translated at 8.3% (56 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-11-30 19:28:00 +00:00
W.W c17a0523d5 Translated using Weblate (Ukrainian)
Currently translated at 8.3% (56 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/uk/
2020-11-30 19:27:58 +00:00
HJ e0d08490a4 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1269
2020-11-30 19:04:15 +00:00
W.W 2506b2629a Added translation using Weblate (Ukrainian) 2020-11-30 17:57:16 +00:00
Shpuld Shpuldson e98e285f50 changelog 2020-11-30 14:46:37 +02:00
Shpuld Shpuldson 767db567ad update emoji.json, add script that merges new emoji from another source 2020-11-30 14:43:39 +02:00
Shpuld Shpuldson a4e76067db changelog 2020-11-28 15:36:48 +02:00
Shpuld Shpuldson 8f118c01a4 add titles in react picker, support filtering by emoji itself 2020-11-28 15:27:58 +02:00
Ben Is 00b93c0947 Translated using Weblate (Italian)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-11-27 13:57:44 +00:00
tarteka 95ad9efff3 Translated using Weblate (Spanish)
Currently translated at 100.0% (671 of 671 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-11-27 13:57:44 +00:00
Kana aec6dc7858 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-11-27 13:57:44 +00:00
Kana 6fbd6ee9ea Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-11-27 13:57:44 +00:00
Guy Sheffer 83319904c7 Translated using Weblate (Hebrew)
Currently translated at 48.1% (322 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/he/
2020-11-27 13:57:44 +00:00
Tirifto a68899b4a9 Translated using Weblate (Esperanto)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-27 13:57:44 +00:00
tarteka 4ac2bc1c44 Translated using Weblate (Spanish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-11-27 13:57:44 +00:00
Shpuld Shpludson 32f77cfbd7 Merge branch 'fix/make-autocomplete-wait-for-request-to-finish' into 'develop'
Fix #1011 Make autocomplete wait for user search to finish before suggesting

Closes #1011

See merge request pleroma/pleroma-fe!1289
2020-11-27 13:57:36 +00:00
Shpuld Shpuldson e6e3b752d6 review fixes 2020-11-27 15:51:58 +02:00
Shpuld Shpuldson 276ef31145 fix alternative icons having wrong offsets 2020-11-26 23:01:16 +02:00
Shpuld Shpuldson 5dfcf2acac updated changelog 2020-11-26 18:40:39 +02:00
Shpuld Shpuldson 1172feaa72 Add changelog mention for changed button sizes 2020-11-26 18:38:36 +02:00
Shpuld Shpuldson aea172a6f7 forgot to save a file 2020-11-26 18:25:21 +02:00
Shpuld Shpuldson bee77ffdb2 fix retweet event handler, fix text being selectable for status action counters 2020-11-26 18:23:53 +02:00
Shpuld Shpuldson ebe3b38a90 fix nav bar button active style 2020-11-26 17:05:38 +02:00
Shpuld Shpuldson 2137d6395a fix wrong button style, add new option for popover to better deal with different layouts 2020-11-25 18:33:08 +02:00
Shpuld Shpuldson e771fd8f13 fix missing button style 2020-11-25 10:36:14 +02:00
Shpuld Shpuldson 1d178b7341 fix too big hide button, fix weird 28px hack 2020-11-24 21:35:14 +02:00
Shpuld Shpuldson 04af772c1e address missing button style, fix remaining warning 2020-11-24 17:47:37 +02:00
Shpuld Shpuldson a6e495e413 fix warnings 2020-11-24 16:10:03 +02:00
Shpuld Shpuldson 38c32c7f7a renames and removals of cursor: pointer 2020-11-24 15:22:01 +02:00
Shpuld Shpuldson 8b775f94a9 more fixes, add fullwidth 2020-11-24 14:52:01 +02:00
Shpuld Shpuldson 7b99d98c55 Replace all use of <a> + href='#' with proper buttons 2020-11-24 12:32:42 +02:00
HJ 14ce0c1c07 Merge branch 'fix/RED-LINE' into 'develop'
fix #1010 Add back conversation red line

Closes #1010

See merge request pleroma/pleroma-fe!1292
2020-11-21 12:10:39 +00:00
Shpuld Shpuldson 11f7b818b4 try another approach 2020-11-20 16:20:08 +02:00
Shpuld Shpuldson f5186e1a33 add back red line 2020-11-20 16:02:47 +02:00
Shpuld Shpludson 838cbd8715 Merge branch 'nsfw-link-preview' into 'develop'
Click-to-reveal cover for link previews in NSFW posts

Closes #973

See merge request pleroma/pleroma-fe!1287
2020-11-20 07:54:26 +00:00
HJ 4922a8ded9 Merge branch 'features/video-preload-metadata' into 'develop'
video_attachment: Only preload metadata

See merge request pleroma/pleroma-fe!1291
2020-11-19 18:13:58 +00:00
eugenijm 45180d4069 Added the NSFW alert to the link preview. 2020-11-19 20:08:56 +03:00
Haelwenn (lanodan) Monnier 0089d1e8d1 video_attachment: Only preload metadata
This hints browsers that only the metadata and maybe the first few frames are
needed. Which avoids downloading the entire video, which isn't really needed
in our case.
2020-11-19 18:01:21 +01:00
HJ 9684bf6e94 Merge branch 'fix/missing-play-circle-icon' into 'develop'
add missing play-circle icon

See merge request pleroma/pleroma-fe!1290
2020-11-19 12:51:40 +00:00
Shpuld Shpuldson 4001c075d4 add missing play-circle icon 2020-11-19 14:19:03 +02:00
Shpuld Shpuldson b1ab09b348 fix merge conflict 2020-11-19 12:38:35 +02:00
Shpuld Shpuldson 419df9d446 update some documentation 2020-11-19 12:35:21 +02:00
Shpuld Shpuldson 1cd222d85c changelog mention 2020-11-19 11:42:30 +02:00
Shpuld Shpuldson 1495db084a fix keyboard highlight 2020-11-19 11:37:06 +02:00
Shpuld Shpuldson 0f386ccbc7 use users state + fetching with delay 2020-11-18 18:43:24 +02:00
Shpuld Shpludson d770bab1b0 Merge branch 'fix/timeline-error-handling-fixes' into 'develop'
Various timeline fixes

See merge request pleroma/pleroma-fe!1283
2020-11-18 11:49:54 +00:00
HJ cd784396e7 Merge branch 'fix-pinned' into 'develop'
Fix pinned statuses and perhaps some other stuff

See merge request pleroma/pleroma-fe!1288
2020-11-17 18:41:43 +00:00
Henry Jameson b66b4124f4 Merge remote-tracking branch 'origin/develop' into fix-pinned
* origin/develop:
  change favicon dimensions for high res, add handling when favicon isn't available
  remove the favicon changes
  make badge just a ball, make it use theming
  add favicon badge for unread notifs
2020-11-17 20:32:56 +02:00
Henry Jameson 5c47aeeccf changelong 2020-11-17 20:32:39 +02:00
Shpuld Shpludson d905a6cb70 Merge branch 'feat/favicon-badge' into 'develop'
Add favicon badge for unread notifs

See merge request pleroma/pleroma-fe!1273
2020-11-17 18:25:05 +00:00
Shpuld Shpuldson dd3c8631bf store failed experiment 2020-11-17 17:46:26 +02:00
Henry Jameson 49f7c84e3f Fix pinned statuses and perhaps some other stuff 2020-11-17 15:25:38 +02:00
Shpuld Shpludson fa2884a805 Merge branch 'chore/update-changelog-to-match-release' into 'develop'
Update develop changelog to contain 2.2.1 release

See merge request pleroma/pleroma-fe!1286
2020-11-11 21:13:09 +00:00
Shpuld Shpuldson 6cdf347ed1 update changelog 2020-11-11 23:04:07 +02:00
Shpuld Shpludson fb5d3d3292 Merge branch 'develop' into 'fix/timeline-error-handling-fixes'
# Conflicts:
#   CHANGELOG.md
2020-11-11 20:58:47 +00:00
HJ 3e1c828ba9 Merge branch 'fix/html-title-name' into 'develop'
Remove title from index.html, title is now from server generated meta

See merge request pleroma/pleroma-fe!1285
2020-11-11 20:51:12 +00:00
Shpuld Shpuldson a7567ce6d0 set patch date to correct 2020-11-11 22:32:44 +02:00
Sean King 476154d0ee Remove title from index.html, title is now from server generated meta 2020-11-11 11:57:42 -07:00
HJ 563377b59c Merge branch 'fix/field-name-emoji-parsing' into 'develop'
fix #999  emoji not working in profile field names

Closes #999

See merge request pleroma/pleroma-fe!1284
2020-11-11 10:15:29 +00:00
Shpuld Shpuldson b536c6e3c5 changelog mention 2020-11-11 10:42:13 +02:00
Shpuld Shpuldson 41dbdc2b28 fix emoji not working in profile field names 2020-11-11 10:40:26 +02:00
Shpuld Shpuldson 1d2ba946b6 make notifications also use the popup errors, remove all error from status/notif state 2020-11-10 14:28:10 +02:00
Shpuld Shpuldson d150dae5d1 fixes to timeline error handling 2020-11-10 12:52:54 +02:00
Shpuld Shpludson e6ca489d30 Merge branch 'fix/fix-1px-scroll-on-input' into 'develop'
Fix that 1px scroll on input for real this time maybe

See merge request pleroma/pleroma-fe!1282
2020-11-09 13:18:35 +00:00
Shpuld Shpuldson c1c207788a change method of fix to rounding 2020-11-09 15:02:48 +02:00
Shpuld Shpuldson fb80dbbc77 changelog 2020-11-09 14:47:42 +02:00
Shpuld Shpuldson 553155fc49 prevent call to scroll if the value doesn't change because firefox is stupid 2020-11-09 14:42:16 +02:00
Shpuld Shpuldson 8e87e3d88b Update MASTER with develop for 2.2.1 2020-11-09 11:13:49 +02:00
Shpuld Shpludson 3963f240d5 Merge branch 'patch-1' into 'develop'
Update CHANGELOG.md

See merge request pleroma/pleroma-fe!1281
2020-11-09 09:08:41 +00:00
Shpuld Shpludson 9ff48b88bf Update CHANGELOG.md 2020-11-09 09:01:16 +00:00
Shpuld Shpludson 3220e72eb9 Merge branch 'patch-1' into 'develop'
Update CHANGELOG.md to match master

See merge request pleroma/pleroma-fe!1279
2020-11-09 08:58:17 +00:00
HJ def1bd0676 Merge branch 'fix/react-menu-overflow-fix' into 'develop'
Fix #994 react popover overflowing

Closes #994

See merge request pleroma/pleroma-fe!1280
2020-11-09 08:40:59 +00:00
Shpuld Shpuldson 9f96b592d4 wrap react button icon to a span to fix popover overflow 2020-11-09 09:40:20 +02:00
Shpuld Shpludson 82f17961d1 Update CHANGELOG.md to match master 2020-11-06 17:36:43 +00:00
Shpuld Shpuldson 6aa276374f update changelog for 2.2.0 2020-11-06 19:35:01 +02:00
Shpuld Shpludson 23232e1c8f Merge branch 'develop' into 'master'
Merge develop into master for 2.2.0

See merge request pleroma/pleroma-fe!1278
2020-11-06 17:27:25 +00:00
Shpuld Shpuldson 56c1d65384 Merge branch 'develop' into feat/favicon-badge 2020-11-06 14:57:50 +02:00
Shpuld Shpludson 60983ae42b Merge branch 'chat-fix-for-vertical-screen' into 'develop'
Chat scroll fix for vertical screen

Closes #997

See merge request pleroma/pleroma-fe!1277
2020-11-06 12:55:57 +00:00
eugenijm 15ea9d8c91 Fix the chat scroll behavior for vertical screens.
Fetch the messages until the scrollbar becomes visible, so that the user
always has the ability to scroll up and load new messages.
2020-11-06 11:11:19 +03:00
Shpuld Shpludson dbeecd18ac Merge branch 'advanced-misclick-guard' into 'develop'
Instead of blocking all interaction, only block interaction in places that matter

See merge request pleroma/pleroma-fe!1276
2020-11-04 06:04:19 +00:00
Shpuld Shpludson b485d21ba9 Merge branch 'fix-chat-badge' into 'develop'
Few more minor fixes

See merge request pleroma/pleroma-fe!1275
2020-11-03 17:09:10 +00:00
Henry Jameson 4e4b258c54 fix mobile badge alignment 2020-11-03 18:45:23 +02:00
Henry Jameson d126eddfca change approach to disable all, enable some 2020-11-03 18:39:46 +02:00
Shpuld Shpludson 22bc0c0840 Merge branch 'svg-logo' into 'develop'
change logo to svg

See merge request pleroma/pleroma-fe!1274
2020-11-03 11:05:33 +00:00
Shpuld Shpuldson 0206b2bcc5 change favicon dimensions for high res, add handling when favicon isn't available 2020-11-03 11:55:29 +02:00
Henry Jameson 979efb301a fix mobile navbar hitboxes 2020-11-03 11:37:11 +02:00
Shpuld Shpuldson 19fd1d4a1e remove the favicon changes 2020-11-03 10:29:03 +02:00
Henry Jameson e351665bb3 Instead of blocking all interaction, only block interaction in places
that matter
2020-11-02 23:43:32 +02:00
Henry Jameson b6a8ca44ef added comment 2020-11-02 21:08:22 +02:00
Henry Jameson bdf2f36f11 fix chat heading not being aligned and using wrong styles 2020-11-02 21:03:55 +02:00
Henry Jameson 08e6e66642 fix chat badge and unify styles across all badges including follow
request count.
2020-11-02 20:51:38 +02:00
Henry Jameson 3db218dec1 change logo to svg 2020-11-02 19:37:01 +02:00
Shpuld Shpuldson 1fa046126e make badge just a ball, make it use theming 2020-11-02 16:45:15 +02:00
Shpuld Shpuldson 350eb489c2 add favicon badge for unread notifs 2020-11-02 15:46:49 +02:00
HJ f0a66448ee Merge branch 'chchchchangechangelog' into 'develop'
Update CHANGELOG.md

See merge request pleroma/pleroma-fe!1272
2020-11-02 09:43:44 +00:00
HJ a1e7852c10 Update CHANGELOG.md 2020-11-02 09:36:23 +00:00
Shpuld Shpludson 5ab1b0ab0e Merge branch 'update-changelog' into 'develop'
update changelog for optimistic chat posting

See merge request pleroma/pleroma-fe!1271
2020-11-02 08:51:40 +00:00
Shpuld Shpuldson 279205ade5 update changelog for optimistic chat posting 2020-11-02 10:42:38 +02:00
HJ bcb6ee328f Merge branch 'fix/use-ids-for-chat-last-seen' into 'develop'
Fix: Use ids for chat last seen instead of timestamp

See merge request pleroma/pleroma-fe!1270
2020-11-02 08:35:22 +00:00
Shpuld Shpuldson 757706425a fix test 2020-11-02 09:42:09 +02:00
Shpuld Shpuldson 5e8db7ed93 move from using timestamps to ids when tracking last seen in chats 2020-11-02 09:15:13 +02:00
Shpuld Shpludson 5254fdba75 Merge branch 'optimistic-chat-posting' into 'develop'
Optimistic / nonblocking message posting for chats

See merge request pleroma/pleroma-fe!1228
2020-11-02 05:36:42 +00:00
HJ 590f8e1754 Merge branch 'various-css-fixes' into 'develop'
Various css fixes

Closes #992

See merge request pleroma/pleroma-fe!1267
2020-11-01 20:50:02 +00:00
Eugenij 78e5a63922 Apply 1 suggestion(s) to 1 file(s) 2020-11-01 23:36:58 +03:00
eugenijm e798e9a417 Optimistic message sending for chat 2020-11-01 23:36:58 +03:00
Shpuld Shpludson 148789767a Merge branch 'fix/chat-misc-fixes' into 'develop'
Misc Chat fixes

See merge request pleroma/pleroma-fe!1265
2020-11-01 17:50:43 +00:00
Shpuld Shpludson 40ce3a9bd8 Merge branch 'fix/block-misclicks-when-timeline-shifts' into 'develop'
block clicks for a second on timeline when timeline moves

See merge request pleroma/pleroma-fe!1266
2020-11-01 17:44:16 +00:00
HJ 8ae77e14d0 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1264
2020-11-01 15:18:08 +00:00
Henry Jameson 64da9a8e69 fix build warnings 2020-11-01 16:47:17 +02:00
Henry Jameson 8b1213ea1e lint 2020-11-01 16:44:57 +02:00
Henry Jameson 994b49ddfe Merge remote-tracking branch 'origin/develop' into various-css-fixes
* origin/develop:
  remove 'md' size that doesn't exist
2020-11-01 16:44:15 +02:00
Henry Jameson 02bb015c4f fix #992 2020-11-01 16:40:23 +02:00
Tirifto 4cf4de8d28 Translated using Weblate (Esperanto)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-01 14:33:22 +00:00
Tirifto 5095143c47 Translated using Weblate (Esperanto)
Currently translated at 99.1% (663 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-01 14:33:22 +00:00
Tirifto 1c7ec321d9 Translated using Weblate (Esperanto)
Currently translated at 98.9% (662 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-01 14:33:22 +00:00
Kana 599256a6be Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-11-01 14:33:22 +00:00
Kana 66d07b6d08 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-11-01 14:33:22 +00:00
Kana ea300a7a1c Translated using Weblate (Chinese (Traditional))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-11-01 14:33:22 +00:00
Kana 891593169f Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-11-01 14:33:22 +00:00
Tirifto 6040c1ebfc Translated using Weblate (Esperanto)
Currently translated at 98.2% (657 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-01 14:33:22 +00:00
Tirifto 9d1d695627 Translated using Weblate (Esperanto)
Currently translated at 97.7% (654 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-11-01 14:33:22 +00:00
HJ 918563d15c Merge branch 'fix/extra-buttons-icon-errors' into 'develop'
Fix errors: remove 'md' size that doesn't exist

See merge request pleroma/pleroma-fe!1268
2020-11-01 14:33:14 +00:00
Shpuld Shpuldson 8c5586dda4 remove 'md' size that doesn't exist 2020-11-01 11:53:20 +02:00
Henry Jameson fb00f8459c fix chat count 2020-10-31 13:59:58 +02:00
Henry Jameson 0653f18994 fix play-on-hover gifs issues 2020-10-29 22:54:28 +02:00
Henry Jameson 4e1f2aeabc fix preview spinner 2020-10-29 22:54:28 +02:00
Henry Jameson 633349ddff Refactor desktop navbar into a component, change layout to grid for
better compatibility with search field and simpler CSS
2020-10-29 22:54:28 +02:00
Henry Jameson 0f8a7037ea fix lain's issue in reaction picker 2020-10-29 20:06:13 +02:00
Henry Jameson 8225717a7c Update and fix avatar shadow in user card 2020-10-29 20:03:53 +02:00
Shpuld Shpuldson 3ead79ddb4 document thie this. check 2020-10-29 12:45:44 +02:00
Shpuld Shpuldson 6acb61f296 fix conflict, keep the touchable button big 2020-10-29 08:55:54 +02:00
Shpuld Shpuldson 93f9ab6f2b Merge branch 'fix/block-misclicks-when-timeline-shifts' of git.pleroma.social:pleroma/pleroma-fe into fix/block-misclicks-when-timeline-shifts 2020-10-29 08:37:31 +02:00
Shpuld Shpuldson cb3578fcca fix conflicts 2020-10-29 08:36:39 +02:00
HJ a84db4bd8f Merge branch 'fontawesome5' into 'develop'
FontAwesome 5

Closes #982

See merge request pleroma/pleroma-fe!1260
2020-10-28 21:21:35 +00:00
Henry Jameson ef36ca44f6 >boxes 2020-10-28 22:52:20 +02:00
Henry Jameson 2e6c51dfd4 better icon for picker 2020-10-28 22:49:53 +02:00
Henry Jameson 0ac9d81788 fix settings tabs on mobile, update follow request badge 2020-10-28 21:55:08 +02:00
Henry Jameson fc7dfb3b9e update & unify the navbars heights 2020-10-28 21:47:42 +02:00
Henry Jameson 7c4af4ce3f improved side-drawer alignments 2020-10-28 21:41:42 +02:00
Henry Jameson b6cf2bcefd improved the semantics for our icon scale, fixed preview, fixed navbar desktop 2020-10-28 21:31:16 +02:00
Shpuld Shpludson 6d7ecd7d80 Apply 1 suggestion(s) to 1 file(s) 2020-10-28 10:02:51 +00:00
Shpuld Shpuldson 7007659e05 change input blocking to use css 2020-10-28 08:53:23 +02:00
Shpuld Shpuldson 24d85ce6dc update changelog 2020-10-27 13:24:05 +02:00
Shpuld Shpuldson 85dc4002a1 update changelog 2020-10-27 13:17:49 +02:00
Shpuld Shpuldson 1403f20f9f block clicks for a second when timeline moves 2020-10-27 12:59:50 +02:00
Shpuld Shpuldson 2c441c7922 fix back button size, fix missing chat notifications being marked as read too eagerly, fix promiseinterval erroring when not getting a promise 2020-10-27 10:03:04 +02:00
HJ e2c4816feb Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1262
2020-10-22 18:53:25 +00:00
shironeko 22f3801be7 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (668 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-22 18:25:04 +00:00
Shpuld Shpludson 9ef4d473cb Merge branch 'fixlainsissueforgood' into 'develop'
make subjectline input use size=1 for compatibility with CJK fonts

Closes #922

See merge request pleroma/pleroma-fe!1261
2020-10-21 06:18:25 +00:00
Henry Jameson 048e67f5fc make subjectline input use size=1 for compatibility with CJK fonts 2020-10-21 02:07:05 +03:00
Henry Jameson eb04ed865e fontello aftermath 2020-10-21 01:56:21 +03:00
Henry Jameson 1b50d700aa bye bye fontello 2020-10-21 00:34:42 +03:00
Henry Jameson f561e75553 lint 2020-10-21 00:31:16 +03:00
Henry Jameson 1ec41302f7 rotate the shackle of the lock for better accessibility 2020-10-21 00:28:24 +03:00
Henry Jameson 6aa7445ea7 come on and slam 2020-10-21 00:25:59 +03:00
Henry Jameson 7495c6b698 fix attachment remove pointer 2020-10-21 00:02:58 +03:00
Henry Jameson a50cd7e37d remaining changes... 2020-10-21 00:01:28 +03:00
Henry Jameson 3cbaa00449 more replacements + small renames 2020-10-20 22:54:43 +03:00
Henry Jameson b19c2eb0fb More stuff. Buttons in user card's corner now have MUCH bigger hitboxes 2020-10-20 22:13:19 +03:00
Henry Jameson 046c60cb61 cancel -> times 2020-10-20 21:18:23 +03:00
Henry Jameson e8650d3409 chevrons-downs, settings 2020-10-20 21:03:46 +03:00
Henry Jameson 8b3a7ae8c0 more FA5 stuff with small related refactoring 2020-10-20 20:28:11 +03:00
Henry Jameson 3814218277 Some initial work on replacing icons with FA5 2020-10-20 20:28:11 +03:00
HJ 350f25016f Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1259
2020-10-20 17:24:49 +00:00
Marcin Mikołajczak cf65ecb99d Translated using Weblate (Polish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-10-20 15:56:12 +00:00
HJ f31df6406a Merge branch 'docs_split_up_user_guide' into 'develop'
DOCS: Split up user guide

See merge request pleroma/pleroma-fe!1179
2020-10-20 10:45:05 +00:00
Ilja 54987b0bc8 Split up user guide
* I split up the user guide into seperate section to make it more clear/orderly
* I added a general overview page for the FE from where it links to the other sections that give more detailed information
* I updated outdated information and added new information where I felt was required
* I fixed broken links in other parts of the docs as well
2020-10-20 10:45:05 +00:00
HJ 750680d1d8 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1258
2020-10-20 09:27:01 +00:00
Kana 4835f567d4 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.7% (667 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-18 10:46:51 +00:00
Ben Is 81a59feab1 Translated using Weblate (Italian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-10-17 19:40:44 +00:00
Henry Jameson e695506c51 proper modified icon + popup 2020-10-17 22:28:49 +03:00
Henry Jameson a664fde02f Merge remote-tracking branch 'origin/develop' into settings-changed
* origin/develop:
  fix fontello
  Translated using Weblate (Russian)
  Translated using Weblate (Italian)
  lint fix
  fixed copy-pasting leftovers
  improved algorithm, possibly speed too
  fix 8x spaces inside this paren
  feat/reorder-emojis-by-position-of-keyword
  rename to gravestone
  Apply 1 suggestion(s) to 1 file(s)
  change i18n phrasing
  separate reply button to its own component, add changelog entry
  add basic deletes support that works with masto WS
2020-10-17 21:26:13 +03:00
HJ 76a9a51620 Merge branch 'fixfontello' into 'develop'
fix fontello

See merge request pleroma/pleroma-fe!1256
2020-10-17 18:25:14 +00:00
Henry Jameson c7dddb1ec3 fix fontello 2020-10-17 21:09:51 +03:00
Henry Jameson 29ff0be92c Merge remote-tracking branch 'origin/develop' into settings-changed
* origin/develop: (48 commits)
  fix/leftover-emoji-checkboxes-in-settings
  Apply 1 suggestion(s) to 1 file(s)
  Translated using Weblate (Spanish)
  Translated using Weblate (Persian)
  Translated using Weblate (Persian)
  Translated using Weblate (Polish)
  update changelog
  Stop click propagation when unhiding nsfw
  Fix Follow Requests title style
  Translated using Weblate (Persian)
  Translated using Weblate (Persian)
  Translated using Weblate (French)
  Added translation using Weblate (Persian)
  Translated using Weblate (Chinese (Traditional))
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (Italian)
  Translated using Weblate (English)
  Translated using Weblate (English)
  Translated using Weblate (Basque)
  Translated using Weblate (Spanish)
  ...
2020-10-17 19:24:07 +03:00
HJ 4df033a3ba Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1254
2020-10-16 20:54:14 +00:00
Anonymous 85326ee9e2 Translated using Weblate (Russian)
Currently translated at 55.0% (368 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-10-16 20:41:05 +00:00
Ben Is def04380da Translated using Weblate (Italian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-10-16 20:41:03 +00:00
Shpuld Shpludson 0e14cd6102 Merge branch 'feat/reorder-emojis-by-position-of-keyword' into 'develop'
feat/reorder-emojis-by-position-of-keyword

See merge request pleroma/pleroma-fe!1240
2020-10-13 15:00:06 +00:00
Shpuld Shpludson d86cd3e850 Merge branch 'feat/masto-ws-deletes' into 'develop'
Support for WS deletes

See merge request pleroma/pleroma-fe!1227
2020-10-12 06:05:21 +00:00
HJ 3ca729d098 Merge branch 'fix/leftover-emoji-checkboxes-in-settings' into 'develop'
fix/leftover-emoji-checkboxes-in-settings

See merge request pleroma/pleroma-fe!1248
2020-10-11 18:00:13 +00:00
Dym Sohin e5bd1c20b0 fix/leftover-emoji-checkboxes-in-settings 2020-10-11 02:03:45 +02:00
Shpuld Shpludson 069a4b0801 Merge branch 'fix/nsfw-hider-closing-preview' into 'develop'
Stop click propagation when unhiding nsfw

See merge request pleroma/pleroma-fe!1245
2020-10-09 16:15:30 +00:00
Shpuld Shpludson e7a67e33ad Merge branch 'fix/follow-requests-title' into 'develop'
Fix Follow Requests title style

See merge request pleroma/pleroma-fe!1243
2020-10-09 16:14:43 +00:00
HJ 6a3c775006 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1232
2020-10-08 15:49:27 +00:00
feld 09da102a4c Apply 1 suggestion(s) to 1 file(s) 2020-10-06 16:18:30 +00:00
tarteka 20bdf32658 Translated using Weblate (Spanish)
Currently translated at 100.0% (668 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-10-06 15:28:18 +00:00
nickiii ba25c618cc Translated using Weblate (Persian)
Currently translated at 15.1% (101 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
2020-10-05 11:43:55 +00:00
nickiii 0042cf3809 Translated using Weblate (Persian)
Currently translated at 15.1% (101 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
2020-10-04 23:08:33 +00:00
Jędrzej Tomaszewski 3e86b891e1 Translated using Weblate (Polish)
Currently translated at 100.0% (668 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-10-02 18:39:51 +00:00
Shpuld Shpuldson 6cf15dce96 update changelog 2020-10-02 12:23:04 +03:00
Shpuld Shpuldson a0da6c31d9 Stop click propagation when unhiding nsfw 2020-10-02 12:21:56 +03:00
Mark Felder ff2fe5c68c Fix Follow Requests title style 2020-10-01 17:05:46 -05:00
nickiii 6dec154450 Translated using Weblate (Persian)
Currently translated at 2.6% (18 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
2020-10-01 13:20:25 +00:00
nickiii b12b6a84a4 Translated using Weblate (Persian)
Currently translated at 2.5% (17 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fa/
2020-10-01 13:20:25 +00:00
Haelwenn (lanodan) Monnier 14dc0eef3b Translated using Weblate (French)
Currently translated at 92.0% (615 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2020-10-01 13:20:25 +00:00
nickiii 7e4d1b0abb Added translation using Weblate (Persian) 2020-10-01 13:20:25 +00:00
Snow dff7e38154 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (668 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-10-01 13:20:25 +00:00
Snow f110258fa1 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.6% (659 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
Ben Is 71fca987a8 Translated using Weblate (Italian)
Currently translated at 100.0% (668 of 668 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-10-01 13:20:25 +00:00
hj e9f13895b9 Translated using Weblate (English)
Currently translated at 100.0% (661 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
2020-10-01 13:20:25 +00:00
Not HJ d11ecc5987 Translated using Weblate (English)
Currently translated at 100.0% (661 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
2020-10-01 13:20:25 +00:00
tarteka 38fa2111f9 Translated using Weblate (Basque)
Currently translated at 83.3% (551 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
2020-10-01 13:20:25 +00:00
tarteka c9033e0351 Translated using Weblate (Spanish)
Currently translated at 100.0% (661 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-10-01 13:20:25 +00:00
tarteka f10abd29f0 Translated using Weblate (Basque)
Currently translated at 77.6% (513 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
2020-10-01 13:20:25 +00:00
Kana cd6adac59a Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (659 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
Kana fffce4aa98 Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (659 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
Snow 14a2328b85 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (661 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-10-01 13:20:25 +00:00
Snow b3e1cb81a3 Translated using Weblate (Chinese (Traditional))
Currently translated at 72.1% (477 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-10-01 13:20:25 +00:00
Kana 970bfa2bdd Translated using Weblate (Chinese (Simplified))
Currently translated at 97.7% (646 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
Kana beec425cce Translated using Weblate (Chinese (Simplified))
Currently translated at 90.4% (598 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
Snow c55e09a513 Translated using Weblate (Chinese (Traditional))
Currently translated at 67.1% (444 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-10-01 13:20:25 +00:00
Kana 887ff4dec3 Translated using Weblate (Chinese (Simplified))
Currently translated at 90.0% (595 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
snow 32ddb38736 Translated using Weblate (Chinese (Traditional))
Currently translated at 18.9% (125 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hant/
2020-10-01 13:20:25 +00:00
snow ad6b7148d4 Translated using Weblate (Chinese (Simplified))
Currently translated at 83.2% (550 of 661 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-10-01 13:20:25 +00:00
snow aca8570b86 Added translation using Weblate (Chinese (Traditional)) 2020-10-01 13:20:25 +00:00
titizen 3f119c6875 Translated using Weblate (Catalan)
Currently translated at 48.7% (323 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ca/
2020-10-01 13:20:25 +00:00
Shpuld Shpludson 6bd38c7d6f Merge branch 'fix/wait-for-request-before-starting-interval' into 'develop'
Fix/wait for request before starting interval - fix #937

Closes #937

See merge request pleroma/pleroma-fe!1222
2020-10-01 13:20:14 +00:00
Shpuld Shpuldson 414558665f lint fix 2020-10-01 16:01:57 +03:00
Shpuld Shpludson 8a34ff2957 Merge branch 'develop' into 'feat/masto-ws-deletes'
# Conflicts:
#   CHANGELOG.md
#   src/components/status/status.js
#   src/components/status/status.scss
2020-10-01 12:54:54 +00:00
Henry Jameson a463959a36 Initial work on highlighting changed settings. Some refactoring to
simplify addition of new settings
2020-10-01 01:43:07 +03:00
Shpuld Shpludson 68c2a5b18f Merge branch 'fix/excessive-underline-in-sidebar' into 'develop'
fix excessive underline in sidebar

See merge request pleroma/pleroma-fe!1238
2020-09-30 06:59:09 +00:00
Dym Sohin c17012cfe1 fix appended 0.65em on wrong line 2020-09-29 13:20:16 +02:00
Dym Sohin 1675f1a133 scoped back margin-right on icons 2020-09-29 13:13:42 +02:00
Shpuld Shpludson 91778a0276 Merge branch 'feat/custom-virtual-scrolling' into 'develop'
Timeline virtual scrolling

See merge request pleroma/pleroma-fe!1043
2020-09-29 10:18:37 +00:00
Shpuld Shpludson f174f289a9 Timeline virtual scrolling 2020-09-29 10:18:37 +00:00
Shpuld Shpludson 3781e521e6 Merge branch 'feature/import_export_mutes' into 'develop'
[#2099] Added import/export mutes [FE]

See merge request pleroma/pleroma-fe!1229
2020-09-29 08:18:02 +00:00
Shpuld Shpludson 787f52e06e Merge branch 'remove-bio-tables-max-width' into 'develop'
remove bio-table's max-width

See merge request pleroma/pleroma-fe!1241
2020-09-29 06:19:20 +00:00
Dym Sohin 3dacef944c remove bio-table's max-width 2020-09-24 12:05:51 +02:00
Dym Sohin bb59b8ee56 fixed copy-pasting leftovers 2020-09-21 18:13:31 +02:00
Dym Sohin cff202241b improved algorithm, possibly speed too 2020-09-21 18:10:55 +02:00
Dym Sohin f1e1f20a8d fix 8x spaces inside this paren 2020-09-21 17:42:17 +02:00
Dym Sohin fee654f1ee feat/reorder-emojis-by-position-of-keyword 2020-09-21 17:29:36 +02:00
HJ 0c0722a092 Merge branch 'fix/overflow-for-chat-unread' into 'develop'
fix/overflow-for-chat-unread

See merge request pleroma/pleroma-fe!1239
2020-09-19 19:59:57 +00:00
Dym Sohin 20362546d1 fix/overflow-for-chat-unread 2020-09-19 21:50:56 +02:00
Dym Sohin f9977dbb3c fix excessive underline in sidebar 2020-09-19 21:28:03 +02:00
Maksim Pechnikov 5942001626 updated changelog 2020-09-18 22:09:05 +03:00
Maksim Pechnikov 3dbc1bedbf Merge branch 'develop' into feature/import_export_mutes 2020-09-18 22:04:01 +03:00
Maksim Pechnikov b725df6352 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-09-18 22:03:11 +03:00
HJ 0fee9a8fe7 Merge branch 'fix/case--in-sensitive--emoji--search' into 'develop'
fix case in/sensitive emoji search

See merge request pleroma/pleroma-fe!1237
2020-09-18 09:37:17 +00:00
Dym Sohin 70a5619496 [fix] case in/sensitive emoji search 2020-09-18 11:07:38 +02:00
Shpuld Shpludson b225c3578f Merge branch 'rc/2.1.2' into 'master'
Merge 2.1.2 to MASTER

See merge request pleroma/pleroma-fe!1236
2020-09-17 17:26:22 +00:00
Shpuld Shpludson 30efbaab34 Merge branch 'master' into 'rc/2.1.2'
# Conflicts:
#   CHANGELOG.md
2020-09-17 17:17:21 +00:00
Shpuld Shpuldson 8ca0586c0f update changelog for 2.1.2 2020-09-17 20:15:08 +03:00
lain ee620f6028 Merge branch 'fix/use-shoutbox-name-in-sidedrawer' into 'develop'
change side drawer to use shoutbox name - fix #956

Closes #956

See merge request pleroma/pleroma-fe!1235
2020-09-16 09:22:05 +00:00
Shpuld Shpuldson 20d33c2fbc change icon to a megaphone 2020-09-16 11:53:54 +03:00
Shpuld Shpuldson 1b811d8b93 change side drawer to use shoutbox name 2020-09-16 11:29:10 +03:00
Shpuld Shpuldson d6fe4f6a4f update changelog 2020-09-16 10:27:31 +03:00
Shpuld Shpludson 38189ee838 Merge branch 'fix-chat-message-list-fetch' into 'develop'
Fix chat messages being missed sometimes when the streaming is disabled and the messages are sent by both participants simultaneously

Closes #957

See merge request pleroma/pleroma-fe!1233
2020-09-16 07:13:31 +00:00
Shpuld Shpludson c00c20a31f Merge branch 'fix-chat-list-order' into 'develop'
Fix the chat list order update

Closes #955

See merge request pleroma/pleroma-fe!1234
2020-09-16 06:59:04 +00:00
eugenijm 8c4514013d Fix chat messages being missed when the streaming is disabled and the messages are sent by both participants simultaneously 2020-09-16 09:21:24 +03:00
eugenijm 92caaa2d7f Fix the chat list order and last message timestamp updates 2020-09-16 05:10:09 +03:00
Shpuld Shpludson 679a1f5e1c Merge branch 'fix/fix-vue-errors' into 'develop'
fix vue warnings and errors

See merge request pleroma/pleroma-fe!1230
2020-09-09 10:21:54 +00:00
Shpuld Shpuldson afb2241a5b change a eslint disable to nextline only 2020-09-08 16:29:10 +03:00
Shpuld Shpludson 938887ef91 Merge branch 'rc/2.1.1' into 'master'
Update master with 2.1.1

See merge request pleroma/pleroma-fe!1231
2020-09-08 09:46:19 +00:00
Shpuld Shpludson f31bc5310e Merge branch 'master' into 'rc/2.1.1'
# Conflicts:
#   CHANGELOG.md
2020-09-08 09:35:36 +00:00
Shpuld Shpuldson 925bf5b5a4 update changelog with 2.1.1 2020-09-08 12:30:45 +03:00
Shpuld Shpuldson 8975589bca fix vue warnings and errors 2020-09-08 10:44:08 +03:00
Maksim Pechnikov 947d7cd6f2 added import/export mutes 2020-09-08 09:41:42 +03:00
Shpuld Shpuldson fa91766519 rename to gravestone 2020-09-08 09:32:43 +03:00
Shpuld Shpludson 1ec9cde963 Apply 1 suggestion(s) to 1 file(s) 2020-09-08 06:31:02 +00:00
Shpuld Shpludson da63894072 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1226
2020-09-07 08:11:54 +00:00
tarteka 26c42484f0 Translated using Weblate (Basque)
Currently translated at 77.4% (513 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
2020-09-07 08:01:49 +00:00
tarteka 002cd61353 Translated using Weblate (Spanish)
Currently translated at 100.0% (662 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-09-07 08:01:49 +00:00
Anonymous a0aa45d328 Translated using Weblate (Spanish)
Currently translated at 83.2% (551 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-09-07 08:01:48 +00:00
tarteka 31a9da05ff Translated using Weblate (Spanish)
Currently translated at 83.2% (551 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-09-07 08:01:48 +00:00
Shpuld Shpludson 8a0f280cd8 Merge branch 'chat-desktop-notifications-fix' into 'develop'
Do not show desktop notifications for your own chat messages

Closes #951

See merge request pleroma/pleroma-fe!1225
2020-09-07 08:01:06 +00:00
Shpuld Shpuldson 0758569625 change i18n phrasing 2020-09-07 10:39:30 +03:00
Shpuld Shpuldson f9ac23b9a9 separate reply button to its own component, add changelog entry 2020-09-07 10:35:49 +03:00
Maksim Pechnikov fa2b680855 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-09-07 09:47:17 +03:00
Shpuld Shpuldson 40ca0b394e add basic deletes support that works with masto WS 2020-09-06 15:28:09 +03:00
eugenijm b8afdb4c02 Do not show desktop notifications for your own chat messages 2020-09-04 23:11:10 +03:00
Shpuld Shpludson e331db79e5 Merge branch 'develop' into 'fix/wait-for-request-before-starting-interval'
# Conflicts:
#   CHANGELOG.md
2020-09-04 08:38:13 +00:00
Shpuld Shpuldson c89ac79140 fix chat fetcher stops, change fetcher code 2020-09-04 11:22:14 +03:00
Shpuld Shpuldson 3fb35e8123 rename to promiseInterval 2020-09-04 11:19:53 +03:00
Shpuld Shpludson a73b09c732 Merge branch 'fix/locked-account-link-fix' into 'develop'
Open profile tab from 'locked' link in FO-post warning - Fix #945

Closes #945

See merge request pleroma/pleroma-fe!1223
2020-09-04 08:11:31 +00:00
lain 4adccf2216 Merge branch 'fix/autocomplete-fixes' into 'develop'
Rewrite word split for autocomplete, fix #930 fix #681

Closes #681 and #930

See merge request pleroma/pleroma-fe!1218
2020-09-03 14:08:36 +00:00
Shpuld Shpuldson f281663b49 Add hacky functionality to open specific settings tabs 2020-09-03 15:45:13 +03:00
Shpuld Shpuldson 5b403ba7d1 fix timeline showimmediately being set wrongly 2020-09-02 22:12:50 +03:00
Shpuld Shpuldson 4d080a1654 add mention to changelog 2020-09-02 21:26:02 +03:00
Shpuld Shpuldson d939f2ffbc document makeFetcher a bit 2020-09-02 21:08:06 +03:00
Shpuld Shpuldson 1b6eee0497 change chats to use custom makeFetcher 2020-09-02 21:01:31 +03:00
Shpuld Shpuldson 2d914c331e replace setInterval for timelne, notifications and follow requests 2020-09-02 20:40:47 +03:00
Shpuld Shpludson 02ea173947 Merge branch 'fix/password-reset-behavior' into 'develop'
Password reset no longer informs user of errors or account existence

See merge request pleroma/pleroma-fe!1221
2020-09-02 14:18:35 +00:00
Mark Felder 5809f33c86 Password reset no longer informs user of errors or account existence 2020-09-01 16:48:51 -05:00
Shpuld Shpludson 5b7decea3d Merge branch 'develop' into 'fix/autocomplete-fixes'
# Conflicts:
#   CHANGELOG.md
2020-08-31 13:58:02 +00:00
HJ acc45b49a5 Merge branch 'fix/hide-polls-in-collapsed-posts' into 'develop'
hide poll when subject collapsed, fix #683

Closes #683

See merge request pleroma/pleroma-fe!1220
2020-08-31 12:30:29 +00:00
Shpuld Shpuldson ca0ce902ea add changelog entry 2020-08-31 11:54:27 +03:00
Shpuld Shpuldson b5d15eddcf hide poll when subject collapsed, but show poll icon 2020-08-31 11:50:26 +03:00
Shpuld Shpuldson 4da248f8bc update changelog for autocomplete fixes 2020-08-28 12:35:02 +03:00
Shpuld Shpuldson c01a3720ac Merge branch 'develop' into fix/autocomplete-fixes 2020-08-28 12:34:20 +03:00
Shpuld Shpludson 39f8587171 Merge branch 'chore/fix-changelog' into 'develop'
Chore/fix-changelog

See merge request pleroma/pleroma-fe!1219
2020-08-28 09:33:45 +00:00
Shpuld Shpuldson 82b872df44 update changelog with 2.1.0, fix Add -> Added in older releases 2020-08-28 12:24:48 +03:00
Shpuld Shpuldson 0347d79bda Rewrite word split imperatively for control 2020-08-28 12:02:52 +03:00
Shpuld Shpludson e768ec1fca Merge branch '2.1.0-rc0' into 'master'
2.1.0 into master

See merge request pleroma/pleroma-fe!1217
2020-08-27 14:45:03 +00:00
Shpuld Shpuldson d09f43ba7a Merge branch '2.1.0-rc0' of git.pleroma.social:pleroma/pleroma-fe into 2.1.0-rc0 2020-08-27 17:13:43 +03:00
Shpuld Shpuldson 748c4d8c71 fix boomarks mistake in changelog 2020-08-27 17:13:14 +03:00
Shpuld Shpludson c7ddfefe34 Merge branch 'master' into '2.1.0-rc0'
# Conflicts:
#   CHANGELOG.md
#   src/services/api/api.service.js
2020-08-27 13:59:56 +00:00
Shpuld Shpuldson c0205d582a add missing release to changelog to fix conflicts 2020-08-27 16:56:47 +03:00
Shpuld Shpuldson 4ac882a3b0 add back unreleased/patch 2020-08-27 16:51:16 +03:00
Shpuld Shpuldson bdbc4b27b6 set 2.1.0 date and remove rc from changelog 2020-08-27 16:49:01 +03:00
Shpuld Shpuldson f5e4ad601a wip start 2020-08-27 16:46:23 +03:00
Shpuld Shpuldson 42598fc675 change changelog 2020-08-26 14:28:43 +03:00
lain 65ac71139e Merge branch 'fix/long-poll-words' into 'develop'
fix long poll labels overflowing

See merge request pleroma/pleroma-fe!1216
2020-08-25 09:32:11 +00:00
Shpuld Shpuldson c9ea2db69d fix long poll labels overflowing 2020-08-25 12:17:42 +03:00
lain ff328e7c55 Merge branch 'fix/user-card-avatar-too-small' into 'develop'
Fix some Avatar related css bugs

See merge request pleroma/pleroma-fe!1215
2020-08-25 08:50:28 +00:00
Shpuld Shpuldson f0ac40a428 change more animated gif avatars to work properly 2020-08-25 11:40:02 +03:00
Shpuld Shpuldson 06159101cf fix avatar overwrite classes in usercard 2020-08-25 11:33:38 +03:00
lain 0ed5d40ad7 Merge branch 'fix/fix-tests' into 'develop'
Fix tests

See merge request pleroma/pleroma-fe!1214
2020-08-19 13:28:57 +00:00
Shpuld Shpuldson a0c17e1fd0 fix tests by removing only and adding empty func for notification tests 2020-08-19 16:19:36 +03:00
Shpuld Shpludson 7599244968 Merge branch 'support-thumbnails' into 'develop'
EntityNormalizer: Normalize thumbnail url.

See merge request pleroma/pleroma-fe!1213
2020-08-19 13:01:33 +00:00
lain c649f28faf EntityNormalizer: Normalize thumbnail url. 2020-08-19 14:54:00 +02:00
lain 45add8f5bc Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1208
2020-08-19 12:09:38 +00:00
Ben Is a26fc61efa Translated using Weblate (Italian)
Currently translated at 100.0% (663 of 663 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-08-19 12:00:19 +00:00
lain 54b7e986a7 Merge branch 'fix/tag-timeline-title' into 'develop'
Fix #928 show tag name in title for tag timelines

Closes #928

See merge request pleroma/pleroma-fe!1212
2020-08-19 12:00:12 +00:00
HJ ddeeb240ac Merge branch 'css-fixes' into 'develop'
Css fixes

See merge request pleroma/pleroma-fe!1211
2020-08-19 10:20:38 +00:00
Shpuld Shpuldson 54b619dfec show tag name in title for tag timelines 2020-08-19 13:06:46 +03:00
Henry Jameson 800047b81f fixed 2020-08-19 12:14:00 +03:00
Henry Jameson d7c42f1469 lint 2020-08-19 00:38:54 +03:00
Henry Jameson 61966d290a fix lain's bug 2020-08-19 00:22:08 +03:00
Henry Jameson 36c9368ae5 fix reply popovers being too slim 2020-08-19 00:18:52 +03:00
Henry Jameson 815f230ac7 fixed some issues related to user avatar 2020-08-18 23:57:42 +03:00
Henry Jameson 7de78b1401 revert change to form resize logic 2020-08-18 23:50:23 +03:00
Henry Jameson a6223cec0c Fix last line having slightly cut-off low-hanging parts of characters 2020-08-18 00:52:51 +03:00
Henry Jameson ecbbec7b97 work around incorrect styles ordering in status popover 2020-08-18 00:26:44 +03:00
Henry Jameson 30219098a6 fix issues with reply-link 2020-08-18 00:26:31 +03:00
Henry Jameson 2fa050b163 Fix muted notifications 2020-08-18 00:26:02 +03:00
lain 1a8840c7c3 Merge branch 'fix/treat-field-name-as-text' into 'develop'
treat field name as text

See merge request pleroma/pleroma-fe!1210
2020-08-13 14:01:30 +00:00
Shpuld Shpuldson ae4dc3e439 treat field name as text 2020-08-13 16:29:12 +03:00
HJ b9d1ecec44 Merge branch 'stylelint-rscss-1' into 'develop'
Stylelint + RSCSS initial approach

See merge request pleroma/pleroma-fe!1205
2020-08-06 13:38:07 +00:00
lain 3e6e6096bf Merge branch 'feat/separate-timeline-navigation-from-navpanel' into 'develop'
Separate timeline navigation from navpanel

See merge request pleroma/pleroma-fe!1172
2020-08-06 10:17:44 +00:00
Shpuld Shpludson 9a10ad3826 Merge branch 'mobile-setting-modal-fix' into 'develop'
Mobile setting modal behavior fixes

Closes #908

See merge request pleroma/pleroma-fe!1200
2020-08-06 09:53:24 +00:00
Shpuld Shpludson 7bd6846703 Merge branch 'chat-list-single-line-fix' into 'develop'
Fix single line status content mode in the chat list

See merge request pleroma/pleroma-fe!1202
2020-08-06 09:46:19 +00:00
Henry Jameson 0feab1d97c more broken reply improvements 2020-08-04 19:41:03 +03:00
Henry Jameson a962ca6065 lint 2020-08-04 19:34:18 +03:00
Henry Jameson 0d02b04726 bring back red stripe 2020-08-04 19:32:47 +03:00
Henry Jameson 10bb2b288d remove unnecessary border-radius 2020-08-04 19:26:07 +03:00
Henry Jameson 24fd9372ce i am an idiot sandwich 2020-08-04 19:18:13 +03:00
Henry Jameson dce057f24e lint 2020-08-04 19:16:55 +03:00
Henry Jameson 839681bbc7 add stylelint to CI/npm, only one file for now. 2020-08-04 19:12:13 +03:00
Henry Jameson 2a1c9e094c more fixes 2020-08-04 19:08:49 +03:00
Henry Jameson 4c8e9bc0c2 Merge remote-tracking branch 'origin/develop' into stylelint-rscss-1
* origin/develop:
  Let's serve the README image from GitLab
2020-08-04 18:01:09 +03:00
feld b3f3e87411 Merge branch 'chore/readme-image-link' into 'develop'
Let's serve the README image from GitLab

See merge request pleroma/pleroma-fe!1206
2020-07-28 21:18:05 +00:00
Mark Felder fbdcec1a22 Let's serve the README image from GitLab 2020-07-28 16:08:36 -05:00
Shpuld Shpuldson e57562959f fix oops 2020-07-28 09:41:00 +03:00
Shpuld Shpuldson e86c5ea1fa fix non-timeline routes breaking current/previous timeline 2020-07-28 09:40:04 +03:00
Henry Jameson 5cf5325de2 bump node to 10 for stylint 2020-07-28 02:03:41 +03:00
Henry Jameson 7870b3f7ec neater way to do hover thing with still image 2020-07-28 01:54:40 +03:00
Henry Jameson 65b6e23c00 refactor status 2020-07-28 01:27:11 +03:00
Henry Jameson 61d78ff11b separate status scss into another file 2020-07-27 22:49:57 +03:00
HJ f293dc39dc Merge branch 'fix/preview-styles-polish' into 'develop'
polish preview styles a bit

See merge request pleroma/pleroma-fe!1186
2020-07-27 18:42:43 +00:00
HJ bcde140753 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1201
2020-07-27 18:34:12 +00:00
Ben Is 28cafdd1bb Translated using Weblate (Italian)
Currently translated at 100.0% (662 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-27 14:45:21 +00:00
Tirifto 023d1c01bd Translated using Weblate (Esperanto)
Currently translated at 97.5% (646 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-27 14:45:21 +00:00
Tirifto 536d035913 Translated using Weblate (Esperanto)
Currently translated at 86.7% (574 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-27 14:45:21 +00:00
Karol Kosek 1c44376cc8 Translated using Weblate (Polish)
Currently translated at 95.6% (633 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-07-27 14:45:21 +00:00
Tirifto 6e651c7693 Translated using Weblate (Esperanto)
Currently translated at 77.4% (513 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-27 14:45:21 +00:00
Tirifto b73c62b17a Translated using Weblate (Esperanto)
Currently translated at 77.4% (513 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-27 14:45:21 +00:00
lain 5be55b6162 Merge branch 'fix/poll-option-delete' into 'develop'
Fix #903: update poll to post-status-form on deleting option

Closes #903

See merge request pleroma/pleroma-fe!1204
2020-07-27 14:45:15 +00:00
Shpuld Shpuldson f9e4afa3e9 update poll to post status form on deleting option 2020-07-24 17:24:34 +03:00
HJ 9726edd8c0 Merge branch 'chat-to-shoutbox' into 'develop'
ChatPanel: Rename `chat` to `shoutbox`.

See merge request pleroma/pleroma-fe!1203
2020-07-23 15:49:03 +00:00
Lain Soykaf 96929d9930 ChatPanel: Rename chat to shoutbox.
To remove confusion with the new ChatMessages.
2020-07-23 17:31:35 +02:00
eugenijm 222ad2dd50 Make the single line mode is consistent with status-content line height 2020-07-23 16:39:01 +03:00
eugenijm 77d65d6cec Ensures the minimized modal is always 50px above the mobile browser bottom bar regardless of whether or not it is visible. 2020-07-23 16:36:21 +03:00
lain 0ea23a03ce Merge branch 'feat/idempotency' into 'develop'
Status posting Idempotency

See merge request pleroma/pleroma-fe!1194
2020-07-23 13:17:44 +00:00
Shpuld Shpuldson fdbacba36a resume last lasttime instead of always friends/public 2020-07-23 15:09:32 +03:00
eugenijm 2298ad0011 Use bock-scroll-lock directive for the settings modal 2020-07-23 12:15:44 +03:00
eugenijm 61dd1a3b49 Add body 100% width for the preview, refactor the modalActivated watcher, use body scroll lock for the setting tab content 2020-07-23 09:53:51 +03:00
eugenijm dac075c61a Fix mobile setting modal behavior: ensure the mobile browser address bar doesn't overlap the modal top panel. 2020-07-23 09:53:51 +03:00
Shpuld Shpuldson 0546326b22 update icon to hopefully look fine on both browsers 2020-07-22 09:43:22 +03:00
HJ 25a015b471 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1190
2020-07-21 13:10:08 +00:00
Karol Kosek c7966a2028 Translated using Weblate (Polish)
Currently translated at 92.5% (613 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-07-21 09:11:21 +00:00
Karol Kosek 537c1fd817 Translated using Weblate (Polish)
Currently translated at 92.4% (612 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-07-21 09:11:21 +00:00
Tirifto dee8f7febe Translated using Weblate (Esperanto)
Currently translated at 72.6% (481 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-21 09:11:21 +00:00
Tirifto 51fd4bd5ba Translated using Weblate (Esperanto)
Currently translated at 68.2% (452 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-21 09:11:21 +00:00
Tirifto 6e49afcac4 Translated using Weblate (Esperanto)
Currently translated at 60.1% (398 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-21 09:11:21 +00:00
Tirifto 70129c934c Translated using Weblate (Esperanto)
Currently translated at 60.1% (398 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-21 09:11:21 +00:00
Ben Is 9db096fa69 Translated using Weblate (Japanese)
Currently translated at 81.8% (542 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ja_EASY/
2020-07-21 09:11:21 +00:00
Ben Is 18e2396da4 Translated using Weblate (Hebrew)
Currently translated at 48.7% (323 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/he/
2020-07-21 09:11:21 +00:00
Ben Is 89379b10cc Translated using Weblate (Irish)
Currently translated at 29.4% (195 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ga/
2020-07-21 09:11:21 +00:00
Haelwenn (lanodan) Monnier 2fe8b3937b Translated using Weblate (French)
Currently translated at 89.8% (595 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2020-07-21 09:11:21 +00:00
Ben Is 83962f90c8 Translated using Weblate (Basque)
Currently translated at 77.3% (512 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eu/
2020-07-21 09:11:21 +00:00
Ben Is 98d2160303 Translated using Weblate (Esperanto)
Currently translated at 49.5% (328 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/eo/
2020-07-21 09:11:21 +00:00
Ben Is bfb768cdde Translated using Weblate (German)
Currently translated at 68.7% (455 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-07-21 09:11:21 +00:00
Ben Is c0144b5187 Translated using Weblate (Czech)
Currently translated at 55.1% (365 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/cs/
2020-07-21 09:11:21 +00:00
Ben Is 10fce88f37 Translated using Weblate (Catalan)
Currently translated at 29.0% (192 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ca/
2020-07-21 09:11:21 +00:00
Ben Is 8f61892833 Translated using Weblate (Italian)
Currently translated at 100.0% (662 of 662 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-21 09:11:21 +00:00
Karol Kosek 9ff59ad113 Translated using Weblate (Polish)
Currently translated at 92.1% (614 of 666 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-07-21 09:11:21 +00:00
Shpuld Shpludson f0e296296c Merge branch 'feat/show-fav-rt-lists-on-hover' into 'develop'
Feat/show fav rt lists on hover

See merge request pleroma/pleroma-fe!1196
2020-07-21 09:11:11 +00:00
Shpuld Shpludson 4528c5c982 Merge branch 'feat/more-title-attributes-in-status-header' into 'develop'
Add title attributes to more things in status header

See merge request pleroma/pleroma-fe!1195
2020-07-20 14:37:21 +00:00
Shpuld Shpludson a06ab08f96 Merge branch 'desktop-notifications-for-chat' into 'develop'
Desktop chat notifications

Closes #893

See merge request pleroma/pleroma-fe!1185
2020-07-20 14:34:50 +00:00
Shpuld Shpludson e0add7a44e Merge branch 'features/favicons' into 'develop'
status.vue: Add support for favicons

See merge request pleroma/pleroma-fe!1076
2020-07-20 14:06:16 +00:00
Shpuld Shpludson 92377beab1 Merge branch 'fix-notification-polling' into 'develop'
Fix the notifications polling when all the latest notifications are unread

Closes #896

See merge request pleroma/pleroma-fe!1198
2020-07-20 08:22:51 +00:00
eugenijm 5b9d22e2c5 Fix the notifications polling when all the latest notifications are unread 2020-07-17 18:27:47 +03:00
lain 067caacb29 Merge branch 'fix/reply-filtering-limit-to-friends-public' into 'develop'
Fix #898 and #900 Limit reply filtering to home and public timelines

Closes #900 and #898

See merge request pleroma/pleroma-fe!1197
2020-07-17 10:36:06 +00:00
Shpuld Shpuldson f28ba3dfdb Limit reply filtering to home and public 2020-07-17 09:33:18 +03:00
Shpuld Shpuldson caae2668ce add 16 users cap to user list popover 2020-07-16 18:08:00 +03:00
Shpuld Shpuldson 85e09d81c7 update changelog 2020-07-16 17:47:26 +03:00
Shpuld Shpuldson 8e0414dc7c change class names to not have reacts in them 2020-07-16 17:45:07 +03:00
Shpuld Shpuldson 6079301ec4 Move user list from reactions to its own component, make favs and rts use it 2020-07-16 17:42:16 +03:00
Shpuld Shpuldson 717adf22cc add title to user card account name too 2020-07-16 11:10:45 +03:00
Shpuld Shpuldson 476954295e add title attributes to more things in status header 2020-07-16 11:00:18 +03:00
Shpuld Shpuldson bca77ef97f update changelog 2020-07-16 10:50:03 +03:00
Shpuld Shpuldson 0c7c24d3d1 make idempotency watch entire status 2020-07-16 10:18:18 +03:00
Shpuld Shpludson 950ae6d89a Merge branch 'reactions-search' into 'develop'
make reactions-search case-insensitive

See merge request pleroma/pleroma-fe!1189
2020-07-16 06:04:49 +00:00
Shpuld Shpludson 0478e82bab Merge branch 'refactor/notification_settings_more' into 'develop'
Improve layout of the Notifications Filters section

See merge request pleroma/pleroma-fe!1192
2020-07-15 15:06:29 +00:00
Mark Felder 149941828f Improve layout of the Notifications Filters section 2020-07-15 09:56:46 -05:00
feld 1454d33e53 Merge branch 'refactor/notification_settings' into 'develop'
Updated Notification Settings API use

See merge request pleroma/pleroma-fe!1124
2020-07-15 14:29:37 +00:00
Mark Felder d4dfc5dcdf JSON and the Quest For Punishing Trailing Commas 2020-07-15 09:02:42 -05:00
Mark Felder 49aaf9dc57 Merge branch 'develop' into refactor/notification_settings 2020-07-15 09:01:40 -05:00
HJ fd94dba6d0 Merge branch 'fix/stabilize-input-bux' into 'develop'
fix: stabilize post status form input box

See merge request pleroma/pleroma-fe!1191
2020-07-15 13:49:21 +00:00
Shpuld Shpuldson d85904f42f add extra sanity stuff to make input boxes more stable 2020-07-15 16:36:06 +03:00
Shpuld Shpuldson 89a677f5e8 add basic idempotency support 2020-07-15 16:19:57 +03:00
Shpuld Shpuldson 51b235f7aa adjust icon use 2020-07-15 12:26:14 +03:00
Shpuld Shpuldson 3cac26a2ac Merge branch 'develop' into fix/preview-styles-polish 2020-07-15 08:30:32 +03:00
Dym Sohin 00d662c4a0 make reactions-search case-insensitive 2020-07-14 19:47:02 +00:00
Shpuld Shpludson 297a0c1f7f Merge branch 'fix-chrome69' into 'develop'
Fix chrome 69 + some theme data related to chats

Closes #890

See merge request pleroma/pleroma-fe!1183
2020-07-14 13:13:23 +00:00
HJ 5af0949491 Apply suggestion to src/services/theme_data/theme_data.service.js 2020-07-14 13:04:00 +00:00
HJ 6fe0751037 Merge branch 'cleanup/remove-stupid-optns' into 'develop'
Cleanup/remove stupid options

See merge request pleroma/pleroma-fe!1187
2020-07-14 12:47:10 +00:00
Shpuld Shpuldson 97a01b057d mention removed options in changelog 2020-07-14 15:35:39 +03:00
Shpuld Shpuldson 89d1fb5cf4 remove remaining autoload i18n 2020-07-14 15:15:02 +03:00
Shpuld Shpuldson b8c1b25397 remove most of reply preview and autoload related stuff 2020-07-14 15:08:04 +03:00
Shpuld Shpuldson 7859c5fe4b polish preview styles a bit 2020-07-14 14:43:26 +03:00
Shpuld Shpuldson 3598360ce5 fix missed conflict 2020-07-14 11:54:03 +03:00
Shpuld Shpuldson cac1418aff fix merge conflicts 2020-07-14 11:44:06 +03:00
Mark Felder 8fcd37a3b9 Remove i18n entries that are deprecated or need to be retranslated 2020-07-13 13:29:44 -05:00
Mark Felder da94935aaa Merge branch 'develop' into refactor/notification_settings 2020-07-13 13:25:23 -05:00
eugenijm 54dea24bb8 Do not display desktop chat notification when the chat is focused 2020-07-13 15:48:19 +03:00
eugenijm 2c35afeebf Add desktop chat notifications 2020-07-13 06:27:51 +03:00
Henry Jameson 40e3595ad3 fix chrome69 2020-07-12 16:21:43 +03:00
HJ 3e09a708f6 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1182
2020-07-12 10:56:37 +00:00
Ben Is cf0ee51821 Translated using Weblate (Italian)
Currently translated at 100.0% (667 of 667 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-12 10:47:02 +00:00
HJ 4cdfe4235d Merge branch 'feat/add-you-to-last-message' into 'develop'
fix #894 add simple You: to chat list last message

Closes #894

See merge request pleroma/pleroma-fe!1181
2020-07-12 10:46:52 +00:00
Shpuld Shpuldson 4a6300bbee add simple You: to chat list last message 2020-07-12 11:11:12 +03:00
HJ 0c5e4f89e3 Merge branch 'develop' into 'develop'
fixed checkbox using emoji instead of dingbat

See merge request pleroma/pleroma-fe!1180
2020-07-11 11:48:05 +00:00
Dym Sohin a754e89eed fixed checkbox using emoji instead of dingbat 2020-07-11 06:39:44 +00:00
Shpuld Shpludson 7d5d3e4d7b Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1174
2020-07-10 11:07:02 +00:00
Ben Is b32394c2ef Translated using Weblate (Italian)
Currently translated at 100.0% (645 of 645 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-10 10:56:44 +00:00
Shpuld Shpuldson dca13d9a3b Translated using Weblate (Finnish)
Currently translated at 100.0% (645 of 645 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fi/
2020-07-10 10:56:44 +00:00
Ben Is 053af7b385 Translated using Weblate (Italian)
Currently translated at 100.0% (641 of 641 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-10 10:56:44 +00:00
Ben Is 8606cedfb5 Translated using Weblate (Italian)
Currently translated at 93.9% (602 of 641 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-10 10:56:44 +00:00
lain 4c59a17499 Merge branch 'fix/ctrl-enter-before-chat-loading-breaks' into 'develop'
fix #891 Fix early send killing the chat

Closes #891

See merge request pleroma/pleroma-fe!1178
2020-07-10 10:56:39 +00:00
lain fd37957abd Merge branch 'feat/add-chat-notification-dot-mobilenav' into 'develop'
add simple red dot for chat notifs on mobile

See merge request pleroma/pleroma-fe!1177
2020-07-10 10:55:39 +00:00
Shpuld Shpuldson 5734dd05a0 change misnamed member field check to actually disable sending 2020-07-10 13:48:37 +03:00
Shpuld Shpuldson 0038a9794b add simple red dot for chat notifs 2020-07-10 13:21:42 +03:00
HJ c1a20079be Merge branch 'direct-conversations' into 'develop'
Chats

Closes #201

See merge request pleroma/pleroma-fe!1019
2020-07-10 09:04:45 +00:00
Shpuld Shpuldson 78ec84477e fix pixel offset hack in panel heading 2020-07-09 12:49:16 +03:00
Shpuld Shpludson d2f0e4e7d5 Merge branch '888-fix-utf8-base64-decoding' into 'develop'
After Store: Correctly decode UTF-8 encoded base64 strings.

Closes #888

See merge request pleroma/pleroma-fe!1176
2020-07-09 09:29:20 +00:00
lain 905de12980 After Store: Correctly decode UTF-8 encoded base64 strings. 2020-07-09 11:20:07 +02:00
HJ 2b3c4ccfae Merge branch 'fix/notifications-jumping-based-on-time' into 'develop'
Fix notifications (favs and rts) jumping based on timeago width

See merge request pleroma/pleroma-fe!1175
2020-07-08 12:57:31 +00:00
Eugenij b756c83e8d Apply suggestion to src/components/chat_list/chat_list.vue 2020-07-08 15:21:31 +03:00
eugenijm 3b2dfcaf5c Add the single-line prop to StatusContent and use it for chat list items 2020-07-08 15:21:31 +03:00
eugenijm fc865d3a12 Remove direct style manipulations in favor of classes 2020-07-08 15:21:31 +03:00
eugenijm ed7310c04b Undo the promise rejection on the json parser error in promisedRequest
to keep the existing behavior in case some parts of the code rely on it
and to limit the overall scope of the changes.
2020-07-08 15:21:31 +03:00
eugenijm 18a1f5d62a Add the empty chat list placeholder.
Do not use full height when displaying the chat list.
Remove an unsued chat action.
2020-07-08 15:21:31 +03:00
eugenijm 45901c8da6 Disable status preview in the chat posting form 2020-07-08 15:21:31 +03:00
eugenijm f05f832bff Address feedback
Use more specific css rules for the emoji dimensions in the chat list status preview.

Use more round em value for chat list item height.
Add global html overflow and height for smoother chat navigation in
the desktop Safari.

Use offsetHeight instad of a computed style when setting the window height on resize.

Remove margin-bottom from the last message to avoid occasional layout shift in the desktop Safari

Use break-word to prevent chat message text overflow

Resize and scroll the textarea when inserting a new line on ctrl+enter

Remove fade transition on route change

Ensure proper border radius at the bottom of the chat, remove unused border-radius

Prevent the chat header "jumping" on the avatar load.
2020-07-08 15:21:31 +03:00
eugenijm aa2cf51c05 Add Chats 2020-07-08 15:21:31 +03:00
Shpuld Shpuldson 60921be5a0 give notification timeago a min width 2020-07-08 14:11:42 +03:00
Shpuld Shpludson a0ddcbdf5b Merge branch 'patch-1' into 'develop'
corrected tos.html location

See merge request pleroma/pleroma-fe!1173
2020-07-08 10:18:28 +00:00
lain 4f96418143 Merge branch 'wyatt777/pleroma-fe-issue-353' into 'develop'
Allow remove of banner, avatar images issue #353 v2

See merge request pleroma/pleroma-fe!1156
2020-07-08 10:11:17 +00:00
Shpuld Shpludson eea002e6f5 streamline profile image api, update reset ui for all profile images to match avatar, remove unnecessary stuff 2020-07-08 10:11:17 +00:00
Shpuld Shpuldson 5186929efa add hack to not overlap menu with timeline header 2020-07-08 10:42:40 +03:00
Dym Sohin 1767ee01d0 corrected tos.html location 2020-07-07 19:34:45 +00:00
Shpuld Shpuldson cde6acdbbd update navigation, rename timeline link in nav panel to timelines 2020-07-07 18:20:37 +03:00
Shpuld Shpuldson ddde05771f update with bookmarks, clean up some code 2020-07-07 17:34:35 +03:00
Shpuld Shpludson 7206fee437 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1169
2020-07-07 13:03:12 +00:00
Ben Is 0ab6d92ab8 Translated using Weblate (Italian)
Currently translated at 85.2% (545 of 639 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-07 12:53:55 +00:00
Ben Is a6606df01a Translated using Weblate (Chinese (Simplified))
Currently translated at 88.2% (564 of 639 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-07-07 12:53:55 +00:00
Ben Is 5b48954644 Translated using Weblate (Italian)
Currently translated at 75.1% (480 of 639 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-07-07 12:53:55 +00:00
Ben Is e9be206a65 Translated using Weblate (Finnish)
Currently translated at 95.4% (610 of 639 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fi/
2020-07-07 12:53:55 +00:00
Shpuld Shpludson 8f87a36a5a Merge branch '884-about-panel-optimizations' into 'develop'
StaffPanel: Move staff loading to panel creation.

Closes #884

See merge request pleroma/pleroma-fe!1171
2020-07-07 12:53:49 +00:00
Shpuld Shpludson 7d881d97fe Apply suggestion to src/components/staff_panel/staff_panel.js 2020-07-07 12:44:29 +00:00
lain 431b3f527d StaffPanel: Move staff loading to panel creation. 2020-07-07 14:39:43 +02:00
Shpuld Shpludson ec26ff04ce Merge branch 'xenofem/pleroma-fe-rebased-image-description-authoring' into 'develop'
media description authoring v3

See merge request pleroma/pleroma-fe!1161
2020-07-07 12:14:58 +00:00
Shpuld Shpludson 0fe5d4cf10 Merge branch 'develop' into 'xenofem/pleroma-fe-rebased-image-description-authoring'
# Conflicts:
#   src/components/post_status_form/post_status_form.js
2020-07-07 12:05:30 +00:00
Shpuld Shpludson bbb977a044 Merge branch '885-fix-preloading-html' into 'develop'
After Store: Correctly handle preloaded HTML

Closes #885

See merge request pleroma/pleroma-fe!1170
2020-07-07 11:59:36 +00:00
lain 7c9ba8995c Apply suggestion to src/boot/after_store.js 2020-07-07 11:47:01 +00:00
Shpuld Shpuldson f7f8181dcf fix preview opening automatically 2020-07-07 14:46:53 +03:00
lain 1f97f36e1c After Store: Correctly handle preloaded HTML 2020-07-07 13:17:25 +02:00
Shpuld Shpuldson 97c62587d0 remove console log 2020-07-07 11:34:40 +03:00
Shpuld Shpuldson 84d728b970 fix issue on posting another status 2020-07-07 11:31:24 +03:00
Shpuld Shpuldson e3991db5c4 fix conflicts and add error handling to media descriptions 2020-07-07 10:01:37 +03:00
Shpuld Shpuldson f4bdbf7691 remove unnecessary code 2020-07-07 09:08:50 +03:00
Shpuld Shpuldson b4709f93d4 add more ways to set description 2020-07-07 09:07:20 +03:00
Shpuld Shpuldson d55c09df18 fix edge case of videos and unknown files together 2020-07-06 15:06:13 +03:00
Shpuld Shpuldson 87b5f828d7 fix conflicts, use file icon instead of link, add support for audio and file icon in cw'd posts 2020-07-06 14:01:03 +03:00
Shpuld Shpuldson 4d25be7cb3 fix modal types check being broken 2020-07-06 13:42:33 +03:00
Shpuld Shpludson 9ccc6174a7 Merge branch 'feat/rich-text-preview' into 'develop'
Status preview #459

See merge request pleroma/pleroma-fe!1159
2020-07-06 10:17:26 +00:00
Shpuld Shpuldson ada5a3806b don't close preview on post, move visibility notices above the preview where they belong 2020-07-06 11:36:35 +03:00
Shpuld Shpuldson 7bdc3d6ce9 remove contenttype check from content type watcher 2020-07-06 11:12:33 +03:00
Shpuld Shpuldson f254a847d2 move translation strings to correct place, translate error message 2020-07-06 10:53:03 +03:00
Shpuld Shpuldson 105254d73d Merge branch 'feat/rich-text-preview' of git.pleroma.social:pleroma/pleroma-fe into feat/rich-text-preview 2020-07-06 10:46:23 +03:00
Shpuld Shpuldson afdc3f96f0 fix conflicts, make subject update the preview 2020-07-06 10:45:47 +03:00
Shpuld Shpludson b761bcf333 Merge branch 'fix/remove-extra-notifications-fetch' into 'develop'
Fix: notifications fetcher double fetching on every tick

See merge request pleroma/pleroma-fe!1164
2020-07-05 07:03:27 +00:00
Shpuld Shpludson 9178908c1e Apply suggestion to src/components/notifications/notifications.js 2020-07-05 06:54:12 +00:00
Shpuld Shpludson af4a26b588 Merge branch 'feat/allow-use-without-cookies' into 'develop'
Fix #815: Allow use without cookies, Add a global notice popup system

Closes #815

See merge request pleroma/pleroma-fe!1166
2020-07-05 06:53:29 +00:00
Shpuld Shpludson acc3b083aa Merge branch 'feat/parent-visible-support' into 'develop'
#874 Add strike-through to "Reply to" when parent_visible is set to false

See merge request pleroma/pleroma-fe!1162
2020-07-05 06:15:35 +00:00
HJ 5b8875e3d8 Merge branch 'fix-emoji-panel-height' into 'develop'
Fix emoji panel for settings modal

See merge request pleroma/pleroma-fe!1168
2020-07-04 23:53:39 +00:00
HJ b448871d23 Merge branch 'fix/allow-over-scrolling-on-bottom-mobile' into 'develop'
Fix #854: allow overscrolling enough to not have FAB block interactables

Closes #854

See merge request pleroma/pleroma-fe!1165
2020-07-04 20:41:54 +00:00
kPherox 9b40cf43d8 fix height for emoji panel of settings modal 2020-07-04 18:42:15 +09:00
Shpuld Shpludson 76de4a3132 Merge branch 'bookmarks' into 'develop'
Bookmarks

Closes #472

See merge request pleroma/pleroma-fe!903
2020-07-03 19:45:49 +00:00
Eugenij de291e2e33 Add bookmarks
Co-authored-by: jared <jaredrmain@gmail.com>
2020-07-03 19:45:49 +00:00
Shpuld Shpuldson 77bb31b474 remove extra computed from nav panel 2020-07-03 13:26:11 +03:00
lain 7bd89b579f Merge branch 'fix_BE_1586_provide_index_md' into 'develop'
FE part of BE issue 1586 provide index md

See merge request pleroma/pleroma-fe!1154
2020-07-03 10:17:42 +00:00
Ilja 08b593746f FE part of BE issue 1586 provide index md
* I added an index.md which will be the landing page for the docs. It has an explanation of Pleroma-FE from the user point of view
* See also BE MR: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/2669
* And issue: https://git.pleroma.social/pleroma/pleroma/-/issues/1586
2020-07-03 10:17:42 +00:00
Shpuld Shpuldson ebe885953c change more opinionated translation 2020-07-03 12:59:30 +03:00
Shpuld Shpuldson 21d1f557f6 change styles for the dropdown, make things work nicely on mobile 2020-07-03 12:56:31 +03:00
Shpuld Shpuldson 961099d34a basic version done, needs cleanup from nav panel styles 2020-07-02 18:03:02 +03:00
Shpuld Shpuldson 9cac5d94dd change alert popup alpha 2020-07-02 15:17:58 +03:00
Shpuld Shpuldson 150516df4e Merge branch 'xenofem/pleroma-fe-rebased-image-description-authoring' of git.pleroma.social:pleroma/pleroma-fe into xenofem/pleroma-fe-rebased-image-description-authoring 2020-07-02 14:31:07 +03:00
Shpuld Shpuldson b8ed904c0c change px to em 2020-07-02 14:28:35 +03:00
Shpuld Shpludson e1cf6bd41c Merge branch 'fix/follow-requests-usercard-crash' into 'develop'
Fix #877 Follow request user card crash

Closes #877

See merge request pleroma/pleroma-fe!1167
2020-07-02 09:28:57 +00:00
Shpuld Shpuldson f0668c9ff8 add follow request users to store 2020-07-02 12:19:33 +03:00
Shpuld Shpuldson 685ab4f33e make the addNotice dispatch return the notice 2020-07-02 10:46:43 +03:00
Shpuld Shpuldson 1293bec77e change storage error one-off into a global notice system 2020-07-02 10:40:41 +03:00
Shpuld Shpludson c0fb35b106 Merge branch 'develop' into 'xenofem/pleroma-fe-rebased-image-description-authoring'
# Conflicts:
#   CHANGELOG.md
2020-07-02 04:50:03 +00:00
Shpuld Shpuldson 0997e5ff66 remove accidental log 2020-07-01 19:25:31 +03:00
Shpuld Shpuldson 15d492ace4 revert accidental change in instance.js 2020-07-01 19:24:17 +03:00
Shpuld Shpuldson 43b7a5d9b3 update the message and changelog 2020-07-01 19:22:39 +03:00
Shpuld Shpuldson d30b0b28c9 catch localforage error and let the application work, add an alert for user to dismiss 2020-07-01 19:15:28 +03:00
Shpuld Shpuldson 3ebd4e4429 document the 'mark-as-read-detection' system 2020-07-01 17:55:42 +03:00
Shpuld Shpuldson ca997f45e8 allow overscrolling enough to not have FAB block interactables 2020-07-01 15:56:45 +03:00
lain beb160bd53 Merge branch 'fix/use-backend-reply-filtering' into 'develop'
Make use of backend reply filtering

See merge request pleroma/pleroma-fe!1163
2020-07-01 12:46:42 +00:00
Shpuld Shpuldson a3e370e9f8 add initial fetching back in a more streamlined way 2020-07-01 15:19:45 +03:00
Shpuld Shpuldson 62d0bc47b3 remove unnecessary fetchAndUpdate, change notifications fetcher to not double fetch 2020-07-01 14:15:04 +03:00
Shpuld Shpuldson 38d8526660 change Show New text to Reload when flushing 2020-06-30 17:37:36 +03:00
Shpuld Shpuldson ea09bbecf8 Make use of backend reply filtering 2020-06-30 17:02:38 +03:00
Shpuld Shpuldson 3a79918b89 update changelog for reply-to strikethrough 2020-06-30 15:23:47 +03:00
Shpuld Shpuldson ee1364a167 add no-statusId support for status popover 2020-06-30 15:15:27 +03:00
Shpuld Shpuldson 6529f9fa34 add strikethrough when parent isn't visible 2020-06-30 15:04:16 +03:00
Shpuld Shpuldson 0ca3a6e63d fix gallery-videos being weirdly offset 2020-06-30 11:02:10 +03:00
Shpuld Shpludson a290f53694 Merge branch 'develop' into 'feat/rich-text-preview'
# Conflicts:
#   src/i18n/en.json
2020-06-29 13:20:53 +00:00
Shpuld Shpuldson a09709f71d update changelog with media-descriptions and the fixes 2020-06-29 15:37:46 +03:00
Shpuld Shpuldson 79011e02ef Merge branch 'develop' into xenofem/pleroma-fe-rebased-image-description-authoring 2020-06-29 15:19:41 +03:00
Shpuld Shpuldson 8c2335f84f conflict whem merging xenofem changes 2020-06-29 15:03:51 +03:00
Shpuld Shpuldson 96d2c86d3b change placeholders to use descriptions, use icons with placeholders, change uploads to use attachment component 2020-06-29 14:48:22 +03:00
lain 82944f862d Merge branch '812-subject-separation' into 'develop'
StatusContent: Better separate subject from status content.

Closes #812

See merge request pleroma/pleroma-fe!1150
2020-06-29 07:53:12 +00:00
Maksim Pechnikov 12519a54b5 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-06-29 09:16:00 +03:00
xenofem 529d72c297 suppress enter key on media description input field 2020-06-28 16:05:22 -04:00
Shpuld Shpuldson 61f34ff361 remove panel-footer in userpanel, simplify preview header, fix word-wrap in preview 2020-06-28 16:40:39 +03:00
Shpuld Shpuldson ed5b36f751 make line sizes match for errors/loading and statuses, make X hitbox bigger, remove attachments, add shorter custom message for empty status preview. fix auto update triggering 2020-06-28 15:43:08 +03:00
Shpuld Shpuldson 3c47036101 add automatic updating 2020-06-28 15:14:01 +03:00
lain d0c9aef668 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1158
2020-06-28 12:00:23 +00:00
Shpuld Shpuldson 0287d5c07e update changelog with status previews 2020-06-28 13:29:07 +03:00
Shpuld Shpuldson 6e2de20367 show preview with plaintext too 2020-06-28 13:17:04 +03:00
Shpuld Shpuldson cecf3d4f89 remove unnecessary type=button 2020-06-28 13:03:25 +03:00
Shpuld Shpuldson 9d6f233202 fix preview attachments getting wrong styles 2020-06-28 12:48:17 +03:00
Shpuld Shpuldson 3d5da3caf9 update styles in preview heading 2020-06-28 12:35:05 +03:00
Shpuld Shpuldson 223fabfe90 add rich text preview 2020-06-28 12:16:41 +03:00
xenofem 03aa1f3154 fix vue style warnings 2020-06-28 02:31:57 -04:00
Fristi 195e83d0c8 Translated using Weblate (Dutch)
Currently translated at 100.0% (626 of 626 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-06-28 06:24:57 +00:00
xenofem 1ff55e17b1 fix invalid end tag on input element 2020-06-28 02:16:58 -04:00
William Pitcock 2c6ec37e6a media description support 2020-06-28 02:10:06 -04:00
lain 391f796cb4 Merge branch 'feat/preload-data-from-html' into 'develop'
Add basic preloading for nodeinfo/config

See merge request pleroma/pleroma-fe!1155
2020-06-27 10:21:06 +00:00
Shpuld Shpuldson 46cf50a4d6 rename variable requestJson when it's not actually json 2020-06-27 12:59:24 +03:00
Shpuld Shpuldson a8cb5e71d9 don't block ui with stickers or tos 2020-06-27 12:32:01 +03:00
Shpuld Shpuldson 5ab62c4cb8 make use of api/v1/instance 2020-06-27 12:26:19 +03:00
Shpuld Shpludson 4d52b8bf56 Merge branch 'remove-twitterapi-config' into 'develop'
Remove StatusNet config endpoint usage

See merge request pleroma/pleroma-fe!1084
2020-06-27 09:19:43 +00:00
Shpuld Shpuldson 58f9c1cc49 fix conflict in after_store 2020-06-27 12:10:02 +03:00
Shpuld Shpuldson 3113d904b9 update changelog with profile fields 2020-06-27 10:34:28 +03:00
Shpuld Shpludson c658f57abb Merge branch 'iss-149/profile-fields-setting' into 'develop'
Profile fields setting

See merge request pleroma/pleroma-fe!997
2020-06-27 07:32:59 +00:00
Shpuld Shpludson 8150899a73 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1152
2020-06-27 07:21:32 +00:00
translate 4528b31256 Translated using Weblate (Italian)
Currently translated at 72.7% (452 of 621 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-27 07:21:32 +00:00
Shpuld Shpludson ea0a12f604 Merge branch 'develop' into 'iss-149/profile-fields-setting'
# Conflicts:
#   src/components/settings_modal/tabs/profile_tab.vue
2020-06-27 07:19:49 +00:00
Mark Felder 2eda3d687e Sync up key names properly 2020-06-26 17:02:17 -05:00
Mark Felder 6606b57f44 Update english i18n 2020-06-26 16:59:22 -05:00
Mark Felder caf9a2a8f6 Revert i18n to develop 2020-06-26 16:56:57 -05:00
Mark Felder 5321415641 Update notification filters to reflect new settings 2020-06-26 16:56:31 -05:00
Shpuld Shpuldson 8c3106c588 Change the show/hide strings about, remove subjected status toggle when 'collapse' option not used 2020-06-26 18:20:32 +03:00
Shpuld Shpuldson a2c5175d14 add basic preloading for nodeinfo/config 2020-06-26 14:47:02 +03:00
Shpuld Shpuldson 44edb730c1 rip restyle subject, fix some issues with long subject 2020-06-26 14:07:39 +03:00
Mark Felder 8e1e7144fd Change notification settings keys to new names, remove the defunct non_follows key. 2020-06-25 15:34:48 -05:00
Mark Felder 199fc9351d Merge branch 'develop' into refactor/notification_settings 2020-06-25 15:28:17 -05:00
lain 504d48fc5a After Store: Remove last statusnet vestiges. 2020-06-24 17:54:35 +02:00
lain 143da55c56 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into remove-twitterapi-config 2020-06-24 17:50:05 +02:00
lain bbb91d8ae3 Merge branch 'feature/bot-flag' into 'develop'
Add 'Bot' settings option and badge

Closes #832

See merge request pleroma/pleroma-fe!1153
2020-06-22 12:51:51 +00:00
Sergey Suprunenko 2b6d16900b Use more correct class name for user badges 2020-06-21 15:36:20 +02:00
Sergey Suprunenko c04f8b2ccb Show a 'bot' badge on the service account page 2020-06-21 15:06:07 +02:00
Sergey Suprunenko 2451956d83 Add 'bot' flag to Profile settings 2020-06-21 14:59:05 +02:00
lain 1afa0f0044 Merge branch 'notification-unification-experiments' into 'develop'
Notification unification / WebPush i18n.

See merge request pleroma/pleroma-fe!1142
2020-06-19 13:34:04 +00:00
lain ed908e0195 Changelog: Add info about push notifications. 2020-06-19 15:25:57 +02:00
lain aa725010c5 ServiceWorker: Use clearer variable names 2020-06-19 15:24:06 +02:00
HJ 267102809d Merge branch 'fix-username-emoji' into 'develop'
fix huge emoji in usernames

See merge request pleroma/pleroma-fe!1151
2020-06-19 13:15:22 +00:00
Henry Jameson 5aa65e32ef fix huge emoji in usernames 2020-06-19 16:09:44 +03:00
kPherox bad3dacfac implement user suggestor for profile fields 2020-06-19 21:18:36 +09:00
kPherox fd2157efe4 Fix emoji input error 2020-06-19 20:51:53 +09:00
lain 4da0a0c0bf StatusContent: Fix greentext. 2020-06-19 12:49:42 +02:00
lain a79bad5cdb StatusContent: Better separate subject from status content. 2020-06-19 12:46:48 +02:00
Shpuld Shpludson 95f5c7fff6 Merge branch 'iss-149/profile-fields-display' into 'develop'
Display profile fields

See merge request pleroma/pleroma-fe!1004
2020-06-19 08:04:54 +00:00
Shpuld Shpuldson c4340ad467 move favicon 2020-06-18 17:09:30 +03:00
Shpuld Shpuldson 8a9654b511 Merge branch 'develop' into features/favicons 2020-06-18 16:47:37 +03:00
Shpuld Shpuldson 6d2befa452 move favicon to name 2020-06-18 16:47:32 +03:00
Shpuld Shpludson 6343ee929c Merge branch '589-poll-options' into 'develop'
Polls: Construct an html field during normalization.

Closes #589

See merge request pleroma/pleroma-fe!1146
2020-06-18 13:33:00 +00:00
lain b0b33be9dd Poll, StatusContent: Move emoji css to status body. 2020-06-18 14:41:40 +02:00
lain 2ea5bff3a7 Merge branch 'feat/tweak-autocomplete-search' into 'develop'
Autocomplete tweaks: remove search blocker, fix debounce params #869

See merge request pleroma/pleroma-fe!1149
2020-06-18 11:29:50 +00:00
Shpuld Shpuldson 4e0b4427a9 remove recentqueries thing 2020-06-18 14:19:21 +03:00
kPherox eed58a7b97 fix width of long field value 2020-06-18 20:13:44 +09:00
kPherox bb513dd961 change key-value to look like one 2020-06-18 20:08:00 +09:00
Shpuld Shpuldson f1175b4e9b revert import style 2020-06-18 13:41:04 +03:00
Shpuld Shpuldson fa7bcb74ce return the correct promise type from action 2020-06-18 13:00:09 +03:00
Shpuld Shpuldson abbad84b00 update changelog 2020-06-18 12:56:22 +03:00
Shpuld Shpuldson 9c884fef11 remove search blocker, fix debounce params 2020-06-18 12:29:13 +03:00
Shpuld Shpludson ebf4321e64 Merge branch 'fix/popovers-cutting-off-in-notifications' into 'develop'
Fix popovers cutting off in notifications #809

Closes #809

See merge request pleroma/pleroma-fe!1147
2020-06-18 06:08:07 +00:00
Maksim Pechnikov 08444c3903 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-06-18 08:47:50 +03:00
Shpuld Shpuldson 632f62ee0f resume the previous emoji size for now 2020-06-17 18:34:24 +03:00
Shpuld Shpuldson 580fcd3ad9 restyle the fields 2020-06-17 18:26:06 +03:00
Shpuld Shpuldson f8cf92a01f Merge branch 'develop' into kPherox/pleroma-fe-iss-149/profile-fields-display 2020-06-17 11:23:32 +03:00
Shpuld Shpludson 24e47eb604 Update popover.js 2020-06-16 15:12:44 +00:00
Shpuld Shpludson 84a69f9502 Merge branch 'develop' into 'fix/popovers-cutting-off-in-notifications'
# Conflicts:
#   CHANGELOG.md
2020-06-16 14:51:12 +00:00
HJ 57626c125d Merge branch 'fix/disable-subject-when-posting' into 'develop'
disable subject field when posting #868

See merge request pleroma/pleroma-fe!1148
2020-06-16 14:43:48 +00:00
Shpuld Shpuldson c18a8ab308 update changelog 2020-06-16 17:35:12 +03:00
Shpuld Shpuldson fc6ca20a42 disable subject field when posting 2020-06-16 17:34:22 +03:00
Shpuld Shpuldson 5a8a428c15 remove log whoops 2020-06-16 17:30:56 +03:00
Shpuld Shpuldson 5cf1574fdb fix popovers cutting off in notifications, port popover changes from chats mr 2020-06-16 17:20:36 +03:00
lain 14540e2a07 Service Worker: Extract messages to own module. 2020-06-16 13:27:58 +02:00
lain 8427c5a067 Changelog: Add info about poll option emoji. 2020-06-15 09:59:39 +02:00
HJ 8a15900c81 Merge branch 'themes-fixes' into 'develop'
Several small fixes

Closes #866 and #864

See merge request pleroma/pleroma-fe!1145
2020-06-14 13:38:24 +00:00
Henry Jameson c0a4752bd5 changelog 2020-06-14 16:14:32 +03:00
lain 72ee51c85c Apply suggestion to src/services/entity_normalizer/entity_normalizer.service.js 2020-06-14 13:09:14 +00:00
lain d41c9a717c Polls: Construct an html field during normalization. 2020-06-14 13:16:08 +02:00
Henry Jameson ac270d7060 fix #866 2020-06-13 14:42:53 +03:00
Henry Jameson 8cd5041663 add support for defining the greentext 2020-06-13 13:25:56 +03:00
Henry Jameson e4b18deece fix redmond themes 2020-06-13 13:16:53 +03:00
Henry Jameson c13d5b4f1b Fix faint links in notifications 2020-06-13 13:09:55 +03:00
lain 1e57adf6d4 Linting + docs 2020-06-13 11:53:16 +02:00
lain 9bfb3754c1 ServiceWorker: Use loader to only notification messages.
This keeps the translation size very small and makes it easy to
integrate all the languages, as dynamically loading them isn't
easy in the service worker.
2020-06-13 11:48:02 +02:00
lain 7de56a8063 Merge branch 'chore/improve-default-tos' into 'develop'
update terms of service instructions

See merge request pleroma/pleroma-fe!986
2020-06-12 14:26:40 +00:00
lain fd109fa355 Merge branch 'develop' into 'chore/improve-default-tos'
# Conflicts:
#   static/terms-of-service.html
2020-06-12 14:17:56 +00:00
lain 33c1adbef4 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into notification-unification-experiments 2020-06-12 12:58:01 +02:00
Shpuld Shpludson 48365819d1 Merge branch 'depatchou' into 'develop'
Remove pizza

See merge request pleroma/pleroma-fe!1143
2020-06-11 17:48:15 +00:00
lain 17b6396333 Update lockfile 2020-06-11 19:11:56 +02:00
lain 0c36486299 API: Remove fetch polyfill
All browser except IE have supported this for longer than
Pleroma even exists.
2020-06-11 18:49:39 +02:00
lain 178ff1672d PersistedState: Replace object-path with lodash function
We were loading that one anyway.
2020-06-11 18:44:45 +02:00
lain 8d7d4980b9 StatusParser: Remove unused removeAttachmentLinks.
Brings down the vendor by over 200kb
2020-06-11 18:39:19 +02:00
lain dc7489fd8b Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1140
2020-06-11 14:00:24 +00:00
lain 98819ae32c NotificationUtils: Add tag to notifications. 2020-06-11 15:49:39 +02:00
lain e2ca107e01 ServiceWorker: Don't show message via sw if a client is active. 2020-06-11 15:26:52 +02:00
lain 5b0190bef5 ServiceWorker: Grab the notification and display it with i18n. 2020-06-11 15:22:58 +02:00
lain a52a393266 NotificationUtils: Extract preparation of notification object. 2020-06-11 15:22:31 +02:00
Ben Is c59c0ec4be Translated using Weblate (Italian)
Currently translated at 72.6% (451 of 621 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-11 12:48:44 +00:00
lain 4acac3c38c Merge branch 'fix/attachment-sizing-cover-fix' into 'develop'
Fix attachment cover/contain again

See merge request pleroma/pleroma-fe!1141
2020-06-11 12:48:38 +00:00
Shpuld Shpuldson 14348d8ddf fix the contain option 2020-06-11 14:27:36 +03:00
Shpuld Shpuldson 2b6a6fe7ea make object-fit cover work like it should 2020-06-11 13:44:32 +03:00
Shpuld Shpludson 4e3ce18703 Merge branch 'feature/autocomplete-domain-mutes' into 'develop'
Autocomplete domain mutes from list of known instances

Closes #824

See merge request pleroma/pleroma-fe!1103
2020-06-10 11:18:30 +00:00
lain 23b7424913 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1121
2020-06-10 11:13:29 +00:00
Ben Is 7b9fa32585 Translated using Weblate (Italian)
Currently translated at 68.5% (426 of 621 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-10 10:27:55 +00:00
hj ff2cd3d672 Translated using Weblate (Russian)
Currently translated at 60.0% (373 of 621 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-06-10 10:27:55 +00:00
Shpuld Shpludson 02ba992476 Merge branch 'feat/drag-and-drop-improovements' into 'develop'
Add visual indication for drag&dropping files, make dropzone bigger

See merge request pleroma/pleroma-fe!1137
2020-06-10 10:27:48 +00:00
Shpuld Shpuldson ea2b2a35bb add fade-in fade-out 2020-06-10 12:41:02 +03:00
Shpuld Shpuldson 855b8d4dad fix conflict 2020-06-10 11:52:46 +03:00
Shpuld Shpuldson d3187720c5 remove useless captures 2020-06-10 11:49:04 +03:00
Shpuld Shpuldson 1308fdd3bc update changelog 2020-06-10 11:29:28 +03:00
lain 4f66221adc Merge branch 'half-a-ctrl-press' into 'develop'
Attempt to fix that elusive bug with post being sent on copypaste

See merge request pleroma/pleroma-fe!1138
2020-06-10 08:27:01 +00:00
Henry Jameson cad42eec2a changelog 2020-06-10 11:20:40 +03:00
Henry Jameson 3cfdfec72d attempt to fix that one bug with submitting on copy-pasting 2020-06-10 11:18:07 +03:00
Shpuld Shpuldson cd9d732afa add better visual indication for dropping files, make dropzone bigger 2020-06-10 11:01:38 +03:00
kPherox cc4691a4ef Fix merging array field for users 2020-06-10 03:48:49 +09:00
kPherox de9cc033df Add i18n en 2020-06-10 03:48:41 +09:00
kPherox 54fdc22001 Add profile fields form 2020-06-10 03:37:58 +09:00
HJ aa125072b3 Merge branch 'async-language-loading' into 'develop'
Messages: Load languages asynchronously.

See merge request pleroma/pleroma-fe!1136
2020-06-09 09:31:33 +00:00
lain 44db3af0db Messages: DRY things up a bit. 2020-06-09 09:27:57 +02:00
Shpuld Shpludson 951f25707a Merge branch '572-multiple-file-drag-and-drop' into 'develop'
MediaUpload: Allow drag-and-drop of multiple files at once

Closes #572

See merge request pleroma/pleroma-fe!1135
2020-06-08 17:31:40 +00:00
lain d8211392c4 Apply suggestion to CHANGELOG.md 2020-06-08 17:24:08 +00:00
lain d5ec269d88 Update changelog. 2020-06-08 19:14:13 +02:00
lain fbc4889ece Linting. 2020-06-08 18:26:16 +02:00
lain e45f7fe877 MediaUpload: Correctly handle multiple uploads. 2020-06-08 18:22:17 +02:00
lain 99eaec8547 Messages: Load languages asynchronously.
Reduces the size of the initial app bundle by about half.
2020-06-08 17:22:07 +02:00
lain e6a27bcaca MediaUpload: Allow drag-and-drop of multiple files at once 2020-06-08 13:30:16 +02:00
Sergey Suprunenko 1007039478 Autocomplete domain mutes from list of known instances 2020-06-08 13:17:18 +02:00
HJ acbef1ebdc Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Weblate pleroma pleroma fe

See merge request pleroma/pleroma-fe!1134
2020-06-07 15:21:05 +00:00
Henry Jameson 1e554ee287 indent 2 2020-06-07 18:19:34 +03:00
HJ 66b4121dad Merge branch 'fix-cropped-button-shadow' into 'develop'
Fix the cropped button shadow in 2FA settings

See merge request pleroma/pleroma-fe!1133
2020-06-07 13:52:52 +00:00
HJ a5de8db579 Merge branch 'settings-modal' into 'develop'
Settings modal

See merge request pleroma/pleroma-fe!1118
2020-06-06 21:24:47 +00:00
Henry Jameson 68482fd3a6 move helpers out of tabs directory 2020-06-07 00:15:10 +03:00
Henry Jameson 9e3e6b0c69 Merge remote-tracking branch 'origin/develop' into settings-modal
* origin/develop: (22 commits)
  changelog
  alignment fixes
  Update CHANGELOG.md
  StillImage: Make it work properly in both firefox and chrome.
  ReactButton: Change the combined emoji (heart) to a simple one.
  Linting fixes.
  Settings: Keep a local version of the mutedWordsString
  MediaModal: Close on browser navigation events.
  StatusContent: Try to get hashtag from dataset first.
  Docs: Change wrong documentation.
  EntityNormalizerSpec: More fixes.
  EntityNormalizerSpec: Test new behavior.
  EntityNormalizer: Add colons to emoji alt text.
  fixed case in class name
  The sidebarRight option wasn't being read
  Use consistent naming for Pleroma-FE in README
  Remove mention of GNU Social
  lint
  multiple fixes
  fix non-mention notifs
  ...
2020-06-07 00:10:21 +03:00
Karol Kosek 03952832b4 Fix the cropped button shadow in 2FA settings 2020-06-06 22:43:56 +02:00
HJ e47d0f2103 Merge branch 'fix-reprooted-muted-posts' into 'develop'
Fixed some issues with muting

See merge request pleroma/pleroma-fe!1120
2020-06-06 20:31:43 +00:00
Henry Jameson 7d695fc8f2 changelog 2020-06-06 23:22:58 +03:00
Henry Jameson ebf2ce84fd alignment fixes 2020-06-06 23:08:52 +03:00
Ben Is 8b43893c47 Translated using Weblate (Italian)
Currently translated at 65.7% (403 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-05 16:13:45 +00:00
Evert Prants 419fdd58a5 Translated using Weblate (Estonian)
Currently translated at 61.5% (377 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/et/
2020-06-05 16:13:45 +00:00
Anonymous 1c4be95384 Translated using Weblate (French)
Currently translated at 99.8% (612 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2020-06-05 16:13:45 +00:00
Haelwenn (lanodan) Monnier 49d0a05644 Translated using Weblate (French)
Currently translated at 99.8% (612 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2020-06-05 16:13:45 +00:00
Evert Prants f5c4d7d989 Translated using Weblate (Estonian)
Currently translated at 54.3% (333 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/et/
2020-06-05 16:13:45 +00:00
Fristi 790825257f Translated using Weblate (Dutch)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-06-05 16:13:45 +00:00
Anonymous 654105d5c1 Translated using Weblate (Dutch)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-06-05 16:13:45 +00:00
Ben Is a0d935649b Translated using Weblate (Italian)
Currently translated at 65.0% (399 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-05 16:13:45 +00:00
Ben Is e1475d7f57 Translated using Weblate (English)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
2020-06-05 16:13:45 +00:00
Ben Is 5048f203a3 Translated using Weblate (Italian)
Currently translated at 64.1% (393 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-05 16:13:45 +00:00
Chuculate 18997c2d07 Translated using Weblate (Spanish)
Currently translated at 84.3% (517 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/es/
2020-06-05 16:13:45 +00:00
Ben Is e0e1fe5e20 Translated using Weblate (Italian)
Currently translated at 51.8% (318 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-06-05 16:13:45 +00:00
lain 0a3069aec0 Update CHANGELOG.md 2020-06-05 16:13:41 +00:00
Shpuld Shpludson f6d5922e65 Merge branch '851-fix-squishy-images' into 'develop'
StillImage: Make it work properly in both firefox and chrome.

Closes #851

See merge request pleroma/pleroma-fe!1132
2020-06-05 16:06:19 +00:00
lain 2aabd8ed1a StillImage: Make it work properly in both firefox and chrome. 2020-06-05 17:55:19 +02:00
Shpuld Shpludson 63f237d736 Merge branch '848-change-emoji-reaction-defaults' into 'develop'
ReactButton: Change the combined emoji (heart) to a simple one.

Closes #848

See merge request pleroma/pleroma-fe!1131
2020-06-05 15:36:15 +00:00
lain ba4c189c53 ReactButton: Change the combined emoji (heart) to a simple one. 2020-06-05 17:26:13 +02:00
HJ 0bf2b372d0 Merge branch '790-unable-to-filter' into 'develop'
Settings: Keep a local version of the mutedWordsString

Closes #790

See merge request pleroma/pleroma-fe!1130
2020-06-05 12:03:46 +00:00
lain c4c5568b98 Linting fixes. 2020-06-05 13:51:47 +02:00
lain 282e10e3be Settings: Keep a local version of the mutedWordsString
Without this it was impossible to use newlines
2020-06-05 13:42:39 +02:00
HJ 585bb5727a Merge branch '593-doc-change' into 'develop'
Docs: Change wrong documentation.

Closes #593

See merge request pleroma/pleroma-fe!1127
2020-06-04 16:07:13 +00:00
HJ c678756eba Merge branch '748-hashtag-link-fixes' into 'develop'
StatusContent: Try to get hashtag from dataset first.

Closes #748

See merge request pleroma/pleroma-fe!1128
2020-06-04 16:06:33 +00:00
HJ a6f73d7da5 Merge branch '788-hide-media-viewer-on-navigation' into 'develop'
MediaModal: Close on browser navigation events.

Closes #788

See merge request pleroma/pleroma-fe!1129
2020-06-04 16:00:53 +00:00
HJ 7f755878d5 Merge branch '802-emoji-alt' into 'develop'
EntityNormalizer: Add colons to emoji alt text.

Closes #802

See merge request pleroma/pleroma-fe!1126
2020-06-04 15:59:29 +00:00
lain cb99dc2b27 MediaModal: Close on browser navigation events. 2020-06-04 16:30:28 +02:00
lain d872d55832 StatusContent: Try to get hashtag from dataset first. 2020-06-04 15:50:44 +02:00
lain c0497b6f1f Docs: Change wrong documentation. 2020-06-04 15:34:29 +02:00
lain 05167f202f EntityNormalizerSpec: More fixes. 2020-06-04 15:31:52 +02:00
lain c2dfe1f6cc EntityNormalizerSpec: Test new behavior. 2020-06-04 15:25:00 +02:00
lain f197a2aa39 EntityNormalizer: Add colons to emoji alt text.
This makes it possible to copy them and still have them work.
2020-06-04 15:12:03 +02:00
lain 5ac2c365a7 Merge branch 'update-readme' into 'develop'
Update readme

See merge request pleroma/pleroma-fe!1123
2020-06-02 14:42:10 +00:00
Henry Jameson de3a376beb fixed case in class name 2020-06-02 01:16:10 +03:00
Henry Jameson 4fae2f8ea8 track if settings modal has been opened once 2020-06-02 01:10:52 +03:00
Henry Jameson 94436c1f85 fixed tab not hiding 2020-05-29 13:39:30 +03:00
Henry Jameson 9a20a90932 fixed the remaining issues 2020-05-28 21:28:01 +03:00
HJ f288178b67 Merge branch 'fix/sidebarRight_option' into 'develop'
The sidebarRight option wasn't being read

Closes #858

See merge request pleroma/pleroma-fe!1125
2020-05-28 17:36:05 +00:00
Mark Felder 5f41ee8864 The sidebarRight option wasn't being read 2020-05-28 12:28:32 -05:00
Mark Felder b8350423d9 Updated Notification Settings API use 2020-05-28 10:57:02 -05:00
Francis Dinh 3111fc5dbc Use consistent naming for Pleroma-FE in README 2020-05-28 05:14:11 -04:00
Francis Dinh 6ecd1dd15b Remove mention of GNU Social
Pleroma-FE has not supported GNU Social for a while now. Plus the
wiki page for setting it up has been deleted.
2020-05-28 05:14:01 -04:00
Henry Jameson 5ffcddd3b9 fixes. sorry for bad commit message i'm tired 2020-05-27 03:32:57 +03:00
Henry Jameson 3938ccb8e7 lint 2020-05-27 00:02:36 +03:00
Henry Jameson a8e013bd65 Move modal frame parts away from modal-content into modal, improve error handling 2020-05-26 23:58:55 +03:00
Henry Jameson 5187b37aca moved multiChoiceProperties where it fits better 2020-05-26 22:50:37 +03:00
Henry Jameson 1f205b87ac lint 2020-05-26 01:06:34 +03:00
Henry Jameson 9d09e4090f multiple fixes 2020-05-26 01:01:25 +03:00
Henry Jameson 83e5ee5494 fix non-mention notifs 2020-05-26 00:22:15 +03:00
Henry Jameson b5c1d074f8 fix reprööted posts not being muted properly. fix muted posts making
desktop notifications
2020-05-25 23:38:31 +03:00
Henry Jameson a14635f4f2 oops 2020-05-25 19:57:32 +03:00
Henry Jameson dc8f78e84d fix for a previous fix 2020-05-25 17:22:57 +03:00
Henry Jameson 101f657d36 improve big spinner visibility 2020-05-25 17:21:05 +03:00
Henry Jameson ccdbba2348 Change flex for tab switcher lines to always have some small space reserved 2020-05-25 17:18:57 +03:00
Henry Jameson c0fe39af7a increase gap between buttons in titlebars 2020-05-25 17:15:02 +03:00
Henry Jameson 0eea5c6b80 fix icon changing color 2020-05-25 17:11:30 +03:00
Henry Jameson 500511b415 fix sidebar not closing in mobile 2020-05-25 17:05:30 +03:00
Henry Jameson 534e1fef88 lint 2020-05-25 16:56:32 +03:00
Henry Jameson 5d1b539da2 lint 2020-05-25 16:48:23 +03:00
Henry Jameson 097216c49e remove timeout, was meant for testing 2020-05-25 16:32:32 +03:00
Henry Jameson bb418bf155 fix tests. user-profile didn't have tab-switcher compnent imported!! 2020-05-25 16:23:14 +03:00
Henry Jameson 0286e1024c fix cursor on desktop, add modal link on mobile 2020-05-25 16:16:30 +03:00
Henry Jameson 7951192cd9 Improve settings-modal async loading, update vue to 2.6.11 to be able
to use Vue.observable, to implmement resettable async component
2020-05-25 16:11:05 +03:00
Henry Jameson a6ca923a76 icons update 2020-05-25 16:10:43 +03:00
Henry Jameson 79c03984bc scroll to top when switching tabs 2020-05-25 14:16:03 +03:00
Henry Jameson 6a4ad1fe62 added "settings saved" notice back 2020-05-25 14:04:36 +03:00
HJ cf3fbdd610 Merge branch 'fix/favorites-timeline-unsupported-with-muted' into 'develop'
Removed `with_muted` param usage for user favorites timeline endpoint

See merge request pleroma/pleroma-fe!1119
2020-05-25 10:48:45 +00:00
Ivan Tashkinov 5235e7ea1e Removed with_muted param usage for user favorites timeline endpoint (it only supports pagination params). 2020-05-25 08:48:44 +03:00
Henry Jameson e7ba4255bb eslint --fix + small fix 2020-05-25 03:43:55 +03:00
Henry Jameson bcea2e4d12 cleanup 2020-05-25 03:30:14 +03:00
Henry Jameson 138ec85003 Merge remote-tracking branch 'origin/develop' into settings-modal
* origin/develop: (95 commits)
  Translated using Weblate (Italian)
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (Russian)
  Translated using Weblate (Polish)
  Translated using Weblate (Dutch)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  Translated using Weblate (German)
  ...
2020-05-25 03:29:48 +03:00
Henry Jameson 1e606d2f26 split modal's content into another component, add lazy loading 2020-05-25 03:14:41 +03:00
Henry Jameson a872c53472 misc fixes 2020-05-24 02:29:09 +03:00
Henry Jameson ab74cd4972 Multiple fixes for CSS, added proper auth checking 2020-05-24 02:06:55 +03:00
HJ 1ae8935977 Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1115
2020-05-22 14:52:31 +00:00
Ben Is 306ed13087 Translated using Weblate (Italian)
Currently translated at 42.2% (259 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-20 17:26:11 +00:00
Master Sparker e300f08e09 Translated using Weblate (Chinese (Simplified))
Currently translated at 92.0% (564 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/zh_Hans/
2020-05-20 17:26:11 +00:00
rinpatch 866fe78bba Translated using Weblate (Russian)
Currently translated at 61.1% (375 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-20 17:26:11 +00:00
Jędrzej Tomaszewski 0a2aeb5d1a Translated using Weblate (Polish)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-05-20 17:26:11 +00:00
Fristi b4f8d91905 Translated using Weblate (Dutch)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-20 17:26:11 +00:00
Anonymous 7f9eb23759 Translated using Weblate (German)
Currently translated at 75.2% (461 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 1478ff7fc7 Translated using Weblate (German)
Currently translated at 75.2% (461 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous 91da315af9 Translated using Weblate (German)
Currently translated at 74.0% (454 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 9ede7db8df Translated using Weblate (German)
Currently translated at 74.0% (454 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous 3e260661d0 Translated using Weblate (German)
Currently translated at 73.0% (448 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 53b2ae0f73 Translated using Weblate (German)
Currently translated at 73.0% (448 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous c8cf939cdd Translated using Weblate (German)
Currently translated at 71.4% (438 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 9202eeef4b Translated using Weblate (German)
Currently translated at 71.4% (438 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 495b3d819c Translated using Weblate (German)
Currently translated at 71.2% (437 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous c1834b3156 Translated using Weblate (German)
Currently translated at 71.2% (437 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous 7bd0f1a5f1 Translated using Weblate (German)
Currently translated at 70.3% (431 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino f141fa2a66 Translated using Weblate (German)
Currently translated at 70.3% (431 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous e7fd793438 Translated using Weblate (German)
Currently translated at 69.0% (423 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 9e43a83c48 Translated using Weblate (German)
Currently translated at 69.0% (423 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous 1179a6687a Translated using Weblate (German)
Currently translated at 68.8% (422 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino f91bb4dc7c Translated using Weblate (German)
Currently translated at 68.8% (422 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous f22d3c18cf Translated using Weblate (German)
Currently translated at 68.6% (421 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 14ac5a5fdb Translated using Weblate (German)
Currently translated at 68.6% (421 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous 9374002de0 Translated using Weblate (German)
Currently translated at 68.5% (420 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino ab4790034b Translated using Weblate (German)
Currently translated at 68.5% (420 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Toromino 9e306efe2e Translated using Weblate (German)
Currently translated at 68.3% (419 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Anonymous b994bde3e2 Translated using Weblate (German)
Currently translated at 68.3% (419 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-20 17:26:11 +00:00
Ben Is 00b4b1f4f6 Translated using Weblate (Italian)
Currently translated at 40.6% (249 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-20 17:26:11 +00:00
Fristi a62d504fab Translated using Weblate (Dutch)
Currently translated at 78.1% (479 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-20 17:26:11 +00:00
Ben Is 7f7919bf6f Translated using Weblate (Italian)
Currently translated at 36.2% (222 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-20 17:26:11 +00:00
Fristi 3cd6bc9cfb Translated using Weblate (Dutch)
Currently translated at 77.9% (478 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-20 17:26:11 +00:00
feld 24901ed98f Merge branch 'chore/update-docs' into 'develop'
Document the sidebarRight feature

See merge request pleroma/pleroma-fe!1117
2020-05-20 17:26:04 +00:00
Mark Felder 4aaa3f87d8 Document the sidebarRight feature 2020-05-20 12:16:43 -05:00
Shpuld Shpludson a8e9c05f09 Merge branch 'feat/sidebar-alignment' into 'develop'
[#765] Permit sidebar alignment with instance configuration option

See merge request pleroma/pleroma-fe!1106
2020-05-20 15:42:42 +00:00
Shpuld Shpludson 0b44a5b601 Merge branch 'fix/its-me-elements' into 'develop'
Show "it's you" label and hide follow btn for current user

Closes #839 and #827

See merge request pleroma/pleroma-fe!1111
2020-05-20 14:48:52 +00:00
Shpuld Shpludson d53a4a754f Merge branch 'chore/remote-unused-option' into 'develop'
Remove unused noAttachmentLinks option

See merge request pleroma/pleroma-fe!1109
2020-05-20 14:42:29 +00:00
lain bc9ed36424 Merge branch 'feat/add-embed-relationships' into 'develop'
Add `with_relationships` query param

Closes #838

See merge request pleroma/pleroma-fe!1107
2020-05-17 07:27:07 +00:00
Mark Felder 2135dc8510 Merge branch 'develop' into feat/sidebar-alignment 2020-05-15 12:26:38 -05:00
rinpatch 671ecfb152 Merge branch 'resolve-weblate-merge-conflicts' into 'develop'
Resolve weblate merge conflicts

See merge request pleroma/pleroma-fe!1114
2020-05-15 05:02:47 +00:00
rinpatch ca52a7321d Merge remote-tracking branch 'weblate/develop' into resolve-weblate-merge-conflicts 2020-05-14 22:53:08 +03:00
Anonymous 8db7cba9e1 Translated using Weblate (English)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/en/
2020-05-14 18:13:04 +00:00
Ben Is 7a0f27f3b0 Translated using Weblate (Italian)
Currently translated at 35.0% (215 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-14 18:13:03 +00:00
Fristi 9c62b90212 Translated using Weblate (Dutch)
Currently translated at 77.8% (477 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-14 18:13:00 +00:00
HJ 2eea36f623 Merge branch 'i18n/update-delete-description' into 'develop'
Clarify that we only delete data, not the account

See merge request pleroma/pleroma-fe!1102
2020-05-14 18:12:53 +00:00
Mark Felder 840c6f40b6 Merge branch 'develop' into chore/remote-unused-option 2020-05-14 12:22:28 -05:00
Fristi f2bcaec8dc Translated using Weblate (Dutch)
Currently translated at 77.8% (477 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-14 16:48:25 +00:00
Fristi 9d2935e72f Translated using Weblate (Dutch)
Currently translated at 77.6% (476 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/nl/
2020-05-14 11:06:22 +00:00
Sergey Suprunenko db8dd1223c Make a condition clear and unambiguous 2020-05-14 09:27:58 +02:00
Sergey Suprunenko e50857d0ff Show "it's you" label and hide follow btn for current user 2020-05-14 09:25:07 +02:00
HJ dbf9285ed7 Merge branch 'chore/update-config-docs' into 'develop'
Update settings documentation and sample static/config.json

See merge request pleroma/pleroma-fe!1110
2020-05-13 22:31:48 +00:00
Mark Felder 229bf79d90 name setting should be with apiConfig section 2020-05-13 17:20:35 -05:00
Mark Felder 79c53b849e registrationOpen is not an FE setting 2020-05-13 16:46:58 -05:00
Mark Felder 03318b64aa Really alpha sort this 2020-05-13 15:48:21 -05:00
Mark Felder 17b65e06be Merge branch 'develop' into chore/update-config-docs 2020-05-13 15:43:26 -05:00
Mark Felder e80fa3ff6d Split apiConfig options from static/config.json options;
Move safeDM to nasty section, alpha sort things
2020-05-13 15:40:13 -05:00
Mark Felder d91f5189ef Config setting is actually called disableChat 2020-05-13 15:33:01 -05:00
Shpuld Shpludson cc9dd28e6b Merge branch 'weblate-pleroma-pleroma-fe' into 'develop'
Translations update from Weblate

See merge request pleroma/pleroma-fe!1108
2020-05-13 20:32:10 +00:00
Mark Felder 0ebf1bebb4 SafeDM is enabled by default and won't take effect if BE not enabled anyway. 2020-05-13 15:32:02 -05:00
Mark Felder 55fe6e4703 Alpha sort indirect section 2020-05-13 15:30:54 -05:00
Mark Felder cad40133d2 Alpha sort docs, add missing options 2020-05-13 15:29:38 -05:00
rinpatch 346f3a285a Translated using Weblate (Russian)
Currently translated at 61.0% (374 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-13 20:08:00 +00:00
Ben Is 1f53f0a844 Translated using Weblate (Italian)
Currently translated at 28.3% (174 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-13 20:07:59 +00:00
Shpuld Shpuldson fc12f44f7a Translated using Weblate (Finnish)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fi/
2020-05-13 20:07:58 +00:00
Mark Felder 0ef5965b3b Add missing settings: disableChat, greentext, hideFilteredStatuses, hideMutedPosts, hidePostStats, hideSitename 2020-05-13 14:52:48 -05:00
Mark Felder 1db2fc3f41 alpha sort 2020-05-13 14:52:21 -05:00
Mark Felder 62e0fda597 loginMethod was missing 2020-05-13 14:46:31 -05:00
Mark Felder a4a25105ba Separate the user configurable section 2020-05-13 14:43:36 -05:00
Mark Felder 98d332793c alpha sort 2020-05-13 14:40:46 -05:00
Mark Felder eea6d772ad Also remove from docs 2020-05-13 14:31:00 -05:00
Mark Felder c2bba3f5ad Remove unused noAttachmentLinks option 2020-05-13 14:28:35 -05:00
Michał Sidor bc215d70f5 Translated using Weblate (Polish)
Currently translated at 100.0% (613 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/pl/
2020-05-13 18:41:14 +00:00
rinpatch 8ac78e92f8 Translated using Weblate (Russian)
Currently translated at 59.3% (364 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-13 18:41:13 +00:00
Ben Is 21ecca4c62 Translated using Weblate (Italian)
Currently translated at 28.3% (174 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-13 18:41:11 +00:00
Toro Mino a26731de30 Translated using Weblate (German)
Currently translated at 66.7% (409 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/de/
2020-05-13 18:41:10 +00:00
Shpuld Shpuldson c360a23845 Translated using Weblate (Finnish)
Currently translated at 78.7% (483 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/fi/
2020-05-13 18:41:07 +00:00
Anonymous 433d64827d Translated using Weblate (Italian)
Currently translated at 27.5% (169 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/it/
2020-05-13 17:41:40 +00:00
rinpatch 625d9b7320 Translated using Weblate (Russian)
Currently translated at 54.4% (334 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-13 17:17:13 +00:00
hj 1a944efa33 Translated using Weblate (Russian)
Currently translated at 54.4% (334 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-13 17:17:12 +00:00
Alibek Omarov fa403bbcbd Translated using Weblate (Russian)
Currently translated at 54.4% (334 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-13 17:17:11 +00:00
Shpuld Shpuldson 9c7cb3a954 remove search1 with_relationships 2020-05-13 18:04:30 +03:00
Shpuld Shpuldson 355281081a don't send undefined 2020-05-13 17:53:43 +03:00
Shpuld Shpuldson 8e39971098 add with_relationships where necessary 2020-05-13 17:48:31 +03:00
Mark Felder bc5005b3dd Permit sidebar alignment with instance configuration option 2020-05-12 13:59:52 -05:00
Egor 26bcfea727 Translated using Weblate (Russian)
Currently translated at 53.8% (330 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: https://translate.pleroma.social/projects/pleroma/pleroma-fe/ru/
2020-05-12 15:52:53 +00:00
Haelwenn (lanodan) Monnier c412856716 Translated using Weblate (French)
Currently translated at 97.3% (597 of 613 strings)

Translation: Pleroma/Pleroma-FE
Translate-URL: http://translate.pleroma.social/projects/pleroma/pleroma-fe/fr/
2020-05-12 08:31:01 +00:00
Henry Jameson bcebec478e moved stuff from settings, cleaned up naming for tabs, added close and peek 2020-05-10 06:46:06 +03:00
Mark Felder 9180fdb492 Clarify that we only delete data, not the account 2020-05-08 15:56:53 -05:00
Henry Jameson 2e35289c33 initial work on settings modal 2020-05-03 17:36:12 +03:00
rinpatch 7dfa734665 after_store: Remove most of StatusNet config usage
Information under `pleromafe` key is equivalent to the one under
`pleroma_fe` key in  `/api/pleroma/frontend_configurations`.

All other information had equivalents in `/nodeinfo/2.0.json`, except
`textlimit` and `vapidPublicKey`.
2020-03-25 20:06:48 +03:00
Haelwenn (lanodan) Monnier 88fbbb5e9b status.vue: Add support for favicons
Put in replacement to the external icon when possible
2020-03-01 09:47:21 +01:00
kPherox 064b59812c Change to use tags removed fields instead of raw fields 2020-02-19 21:00:50 +09:00
kPherox da55b0d435 Add fields_text for tooltip 2020-02-19 20:57:58 +09:00
Maksim Pechnikov e3d0b2f137 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-02-13 09:32:45 +03:00
Maksim Pechnikov a52ae1ebeb Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-02-10 21:09:36 +03:00
Maksim Pechnikov 64c180c838 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-02-04 10:07:20 +03:00
Maksim Pechnikov f892b26d73 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-01-14 22:08:24 +03:00
Maksim Pechnikov 40c4a49223 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-01-14 16:14:51 +03:00
Maksim Pechnikov 99db89fa17 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-01-13 14:45:43 +03:00
Maksim Pechnikov 2810f10d14 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-01-06 15:47:36 +03:00
Maksim Pechnikov 50bb8865c5 dd 2019-12-18 21:17:06 +03:00
kPherox bfdf7c876c Change field name to right justify 2019-11-20 19:26:04 +09:00
kPherox a15baa8962 Use fields_html only 2019-11-20 19:26:04 +09:00
kPherox d2e334daa3 Add tooltip 2019-11-20 19:26:02 +09:00
kPherox 87940ead8a Change css selectors to classname from elementname 2019-11-20 18:59:37 +09:00
kPherox 004827a7f1 Change profile fields design to horizontal 2019-11-20 00:19:47 +09:00
kPherox 2bc549a66a Fix emoji size 2019-11-20 00:19:47 +09:00
kPherox ca4d5950d0 Display user profile fields 2019-11-20 00:19:47 +09:00
Ariadne Conill 1946661911 update terms of service instructions 2019-11-09 00:27:09 -06:00
314 changed files with 28577 additions and 9203 deletions
+2 -1
View File
@@ -1,7 +1,7 @@
# This file is a template, and might need editing before it works on your project. # This file is a template, and might need editing before it works on your project.
# Official framework image. Look for the different tagged releases at: # Official framework image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/node/tags/ # https://hub.docker.com/r/library/node/tags/
image: node:8 image: node:10
stages: stages:
- lint - lint
@@ -14,6 +14,7 @@ lint:
script: script:
- yarn - yarn
- npm run lint - npm run lint
- npm run stylelint
test: test:
stage: test stage: test
+1
View File
@@ -0,0 +1 @@
rinpatch <rin@patch.cx> <rinpatch@sdf.org>
+19
View File
@@ -0,0 +1,19 @@
{
"extends": [
"stylelint-rscss/config",
"stylelint-config-recommended",
"stylelint-config-standard"
],
"rules": {
"declaration-no-important": true,
"rscss/no-descendant-combinator": false,
"rscss/class-format": [
true,
{
"component": "pascal-case",
"variant": "^-[a-z]\\w+",
"element": "^[a-z]\\w+"
}
]
}
}
+156 -3
View File
@@ -2,12 +2,163 @@
All notable changes to this project will be documented in this file. 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
## [2.3.0] - 2021-03-01
### Fixed
- Button to remove uploaded media in post status form is now properly placed and sized.
- Fixed shoutbox not working in mobile layout
- Fixed missing highlighted border in expanded conversations again
- Fixed some UI jumpiness when opening images particularly in chat view
- Fixed chat unread badge looking weird
- Fixed punycode names not working properly
### Changed ### Changed
- Display 'people voted' instead of 'votes' for multi-choice polls
- Optimized chat to not get horrible performance after keeping the same chat open for a long time
- When opening emoji picker or react picker, it automatically focuses the search field
- Language picker now uses native language names
### Added
- Added reason field for registration when approval is required
- Group staff members by role in the About page
## [2.2.3] - 2021-01-18
### Added
- Added Report button to status ellipsis menu for easier reporting
### Fixed
- Follows/Followers tabs on user profiles now display the content properly.
- Handle punycode in screen names
### Changed
- Don't filter own posts when they hit your wordfilter
## [2.2.2] - 2020-12-22
### Added
- Mouseover titles for emojis in reaction picker
- Support to input emoji into the search box in reaction picker
- Added some missing unicode emoji
- Added the upload limit to the Features panel in the About page
- Support for solid color wallpaper, instance doesn't have to define a wallpaper anymore
### Fixed
- Fixed the occasional bug where screen would scroll 1px when typing into a reply form
- Fixed timeline errors locking timelines
- Fixed missing highlighted border in expanded conversations
- Fixed custom emoji not working in profile field names
- Fixed pinned statuses not appearing in user profiles
- Fixed some elements not being keyboard navigation friendly
- Fixed error handling when updating various profile images
- Fixed your latest chat messages disappearing when closing chat view and opening it again during the same session
- Fixed custom emoji not showing in poll options before voting
- Fixed link color not applied to instance name in topbar
### Changed
- Errors when fetching are now shown with popup errors instead of "Error fetching updates" in panel headers
- Made reply/fav/repeat etc buttons easier to hit
- Adjusted timeline menu clickable area to match the visible button
- Moved external source link from status heading to the ellipsis menu
- Disabled horizontal textarea resize
- Wallpaper is now top-aligned, horizontally centered.
## [2.2.1] - 2020-11-11
### Fixed
- Fixed regression in react popup alignment and overflowing
## [2.2.0] - 2020-11-06
### Added
- New option to optimize timeline rendering to make the site more responsive (enabled by default)
- New instance option `logoLeft` to move logo to the left side in desktop nav bar
- Import/export a muted users
- Proper handling of deletes when using websocket streaming
- Added optimistic chat message sending, so you can start writing next message before the previous one has been sent
- Added a small red badge to the favicon when there's unread notifications
- Added the NSFW alert to link previews
### Fixed
- Fixed clicking NSFW hider through status popover
- Fixed chat-view back button being hard to click
- Fixed fresh chat notifications being cleared immediately while leaving the chat view and not having time to actually see the messages
- Fixed multiple regressions in CSS styles
- Fixed multiple issues with input fields when using CJK font as default
- Fixed search field in navbar infringing into logo in some cases
- Fixed not being able to load the chat history in vertical screens when the message list doesn't take the full height of the scrollable container on the first fetch.
### Changed
- Clicking immediately when timeline shifts is now blocked to prevent misclicks
- Icons changed from fontello (FontAwesome 4 + others) to FontAwesome 5 due to problems with fontello.
- Some icons changed for better accessibility (lock, globe)
- Logo is now clickable
- Changed default logo to SVG version
## [2.1.2] - 2020-09-17
### Fixed
- Fixed chats list not updating its order when new messages come in
- Fixed chat messages sometimes getting lost when you receive a message at the same time
## [2.1.1] - 2020-09-08
### Changed
- Polls will be hidden with status content if "Collapse posts with subjects" is enabled and the post is collapsed.
### Fixed
- Network fetches don't pile up anymore but wait for previous ones to finish to reduce throttling.
- Autocomplete won't stop at the second @, so it'll still work with "@lain@l" and not start over.
- Fixed weird autocomplete behavior when you write ":custom_emoji: ?"
## [2.1.0] - 2020-08-28
### Added
- Autocomplete domains from list of known instances
- 'Bot' settings option and badge
- Added profile meta data fields that can be set in profile settings
- Added option to reset avatar/banner in profile settings
- Descriptions can be set on uploaded files before posting
- Added status preview option to preview your statuses before posting
- When a post is a reply to an unavailable post, the 'Reply to'-text has a strike-through style
- Added ability to see all favoriting or repeating users when hovering the number on highlighted statuses
- Bookmarks
### Changed
- Change heart to thumbs up in reaction picker
- Close the media modal on navigation events
- Add colons to the emoji alt text, to make them copyable
- Add better visual indication for drag-and-drop for files
- When disabling attachments, the placeholder links now show an icon and the description instead of just IMAGE or VIDEO etc
- Remove unnecessary options for 'automatic loading when loading older' and 'reply previews'
- Greentext now has separate color slot for it
- Removed the use of with_move parameters when fetching notifications - Removed the use of with_move parameters when fetching notifications
- Push notifications now are the same as normal notfication, and are localized.
- Updated Notification Settings to match new BE API
### Fixed
- Custom Emoji will display in poll options now.
- Status ellipsis menu closes properly when selecting certain options
- Cropped images look correct in Chrome
- Newlines in the muted words settings work again
- Clicking on non-latin hashtags won't open a new window
- Uploading and drag-dropping multiple files works correctly now.
- Subject field now appears disabled when posting
- Fix status ellipsis menu being cut off in notifications column
- Fixed autocomplete sometimes not returning the right user when there's already some results
- Videos and audio and misc files show description as alt/title properly now
- Clicking on non-image/video files no longer opens an empty modal
- Audio files can now be played back in the frontend with hidden attachments
- Videos are not cropped awkwardly in the uploads section anymore
- Reply filtering options in Settings -> Filtering now work again using filtering on server
- Don't show just blank-screen when cookies are disabled
- Add status idempotency to prevent accidental double posting when posting returns an error
- Weird bug related to post being sent seemingly after pasting with keyboard (hopefully)
- Multiple issues with muted statuses/notifications
## [2.0.5] - 2020-05-12 ## [2.0.5] - 2020-05-12
### Add ### Added
- Added private notifications option for push notifications - Added private notifications option for push notifications
- 'Copy link' button for statuses (in the ellipsis menu) - 'Copy link' button for statuses (in the ellipsis menu)
@@ -25,7 +176,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed ### Changed
- Emoji autocomplete will match any part of the word and not just start, for example :drool will now helpfully suggest :blobcatdrool: and :blobcatdroolreach: - Emoji autocomplete will match any part of the word and not just start, for example :drool will now helpfully suggest :blobcatdrool: and :blobcatdroolreach:
### Add ### Added
- Follow request notification support - Follow request notification support
## [2.0.2] - 2020-04-08 ## [2.0.2] - 2020-04-08
@@ -77,7 +228,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Ability to change user's email - Ability to change user's email
- About page - About page
- Added remote user redirect - Added remote user redirect
### Changed ### Changed
- changed the way fading effects for user profile/long statuses works, now uses css-mask instead of gradient background hacks which weren't exactly compatible with semi-transparent themes - changed the way fading effects for user profile/long statuses works, now uses css-mask instead of gradient background hacks which weren't exactly compatible with semi-transparent themes
### Fixed ### Fixed
- improved hotkey behavior on autocomplete popup - improved hotkey behavior on autocomplete popup
+3 -4
View File
@@ -1,8 +1,8 @@
# pleroma_fe # Pleroma-FE
> A single column frontend for both Pleroma and GS servers. > A single column frontend designed for Pleroma.
![screenshot](https://i.imgur.com/DJVqSJ0.png) ![screenshot](/uploads/796c5ecf985ed1e2b0943ee0df131ed0/DJVqSJ0.png)
# For Translators # For Translators
@@ -11,7 +11,6 @@ To translate Pleroma-FE, add your language to [src/i18n/messages.js](https://git
# FOR ADMINS # FOR ADMINS
You don't need to build Pleroma-FE yourself. Those using the Pleroma backend will be able to use it out of the box. You don't need to build Pleroma-FE yourself. Those using the Pleroma backend will be able to use it out of the box.
For the GNU social backend, check out https://git.pleroma.social/pleroma/pleroma-fe/wikis/dual-boot-with-qvitter to see how to run Pleroma-FE and Qvitter at the same time.
## Build Setup ## Build Setup
-9
View File
@@ -3,7 +3,6 @@ var config = require('../config')
var utils = require('./utils') var utils = require('./utils')
var projectRoot = path.resolve(__dirname, '../') var projectRoot = path.resolve(__dirname, '../')
var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin') var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin')
var FontelloPlugin = require("fontello-webpack-plugin")
var env = process.env.NODE_ENV var env = process.env.NODE_ENV
// check env & config/index.js to decide weither to enable CSS Sourcemaps for the // check env & config/index.js to decide weither to enable CSS Sourcemaps for the
@@ -94,14 +93,6 @@ module.exports = {
new ServiceWorkerWebpackPlugin({ new ServiceWorkerWebpackPlugin({
entry: path.join(__dirname, '..', 'src/sw.js'), entry: path.join(__dirname, '..', 'src/sw.js'),
filename: 'sw-pleroma.js' filename: 'sw-pleroma.js'
}),
new FontelloPlugin({
config: require('../static/fontello.json'),
name: 'fontello',
output: {
css: 'static/[name].' + now + '.css', // [hash] is not supported. Use the current timestamp instead for versioning.
font: 'static/font/[name].' + now + '.[ext]'
}
}) })
] ]
} }
+55 -45
View File
@@ -1,13 +1,13 @@
# Pleroma-FE configuration and customization for instance administrators # Pleroma-FE configuration and customization for instance administrators
* *For user configuration, see [Pleroma-FE user guide](USER_GUIDE.md)* * *For user configuration, see [Pleroma-FE user guide](../user_guide)*
* *For local development server configuration, see [Hacking, tweaking, contributing](HACKING.md)* * *For local development server configuration, see [Hacking, tweaking, contributing](HACKING.md)*
## Where configuration is stored ## Where configuration is stored
PleromaFE gets its configuration from several sources, in order of preference (the one above overrides ones below it) PleromaFE gets its configuration from several sources, in order of preference (the one above overrides ones below it)
1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](https://docs-develop.pleroma.social/config.html#frontend_configurations) 1. `/api/statusnet/config.json` - this is generated on Backend and contains multiple things including instance name, char limit etc. It also contains FE/Client-specific data, PleromaFE uses `pleromafe` field of it. For more info on changing config on BE, look [here](../backend/configuration/cheatsheet.md#frontend_configurations)
2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/static/config.json). 2. `/static/config.json` - this is a static FE-provided file, containing only FE specific configuration. This file is completely optional and could be removed but is useful as a fallback if some configuration JSON property isn't present in BE-provided config. It's also a reference point to check what default configuration are and what JSON properties even exist. In local dev mode it could be used to override BE configuration, more about that in HACKING.md. File is located [here](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/static/config.json).
3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/src/modules/instance.js) ) 3. Built-in defaults. Those are hard-coded defaults that are used when `/static/config.json` is not available and BE-provided configuration JSON is missing some JSON properties. ( [Code](https://git.pleroma.social/pleroma/pleroma-fe/blob/develop/src/modules/instance.js) )
@@ -19,32 +19,69 @@ There's currently no mechanism for user-settings synchronization across several
## Options ## Options
### `theme` ### `alwaysShowSubjectInput`
Default theme used for new users. De-facto instance-default, user can change theme. `true` - will always show subject line input, `false` - only show when it's not empty (i.e. replying). To hide subject line input completely, set it to `false` and `subjectLineBehavior` to `"noop"`
### `background` ### `background`
Default image background. Be aware of using too big images as they may take longer to load. Currently image is fitted with `background-size: cover` which means "scaled and cropped", currently left-aligned. De-facto instance default, user can choose their own background, if they remove their own background, instance default will be used instead. Default image background. Be aware of using too big images as they may take longer to load. Currently image is fitted with `background-size: cover` which means "scaled and cropped", currently left-aligned. De-facto instance default, user can choose their own background, if they remove their own background, instance default will be used instead.
### `collapseMessageWithSubject`
Collapse post content when post has a subject line (content warning). Instance-default.
### `disableChat`
hides the chat (TODO: even if it's enabled on backend)
### `greentext`
Changes lines prefixed with the `>` character to have a green text color
### `hideFilteredStatuses`
Removes filtered statuses from timelines.
### `hideMutedPosts`
Removes muted statuses from timelines.
### `hidePostStats`
Hide repeats/favorites counters for posts.
### `hideSitename`
Hide instance name in header.
### `hideUserStats`
Hide followers/friends counters for users.
### `loginMethod`
`"password"` - show simple password field
`"token"` - show button to log in with external method (will redirect to login form, more details in BE documentation)
### `logo`, `logoMask`, `logoMargin` ### `logo`, `logoMask`, `logoMargin`
Instance `logo`, could be any image, including svg. By default it assumes logo used will be monochrome-with-alpha one, this is done to be compatible with both light and dark themes, so that white logo designed with dark theme in mind won't be invisible over light theme, this is done via [CSS3 Masking](https://www.html5rocks.com/en/tutorials/masking/adobe/). Basically - it will take alpha channel of the image and fill non-transparent areas of it with solid color. If you really want colorful logo - it can be done by setting `logoMask` to `false`. Instance `logo`, could be any image, including svg. By default it assumes logo used will be monochrome-with-alpha one, this is done to be compatible with both light and dark themes, so that white logo designed with dark theme in mind won't be invisible over light theme, this is done via [CSS3 Masking](https://www.html5rocks.com/en/tutorials/masking/adobe/). Basically - it will take alpha channel of the image and fill non-transparent areas of it with solid color. If you really want colorful logo - it can be done by setting `logoMask` to `false`.
`logoMargin` allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout. `logoMargin` allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.
### `minimalScopesMode`
Limit scope selection to *Direct*, *User default* and *Scope of post replying to*. This also makes it impossible to reply to a DM with a non-DM post from PleromaFE.
### `nsfwCensorImage`
Use custom image for NSFW'd images
### `postContentType`
Default post formatting option (markdown/bbcode/plaintext/etc...)
### `redirectRootNoLogin`, `redirectRootLogin` ### `redirectRootNoLogin`, `redirectRootLogin`
These two settings should point to where FE should redirect visitor when they login/open up website root These two settings should point to where FE should redirect visitor when they login/open up website root
### `chatDisabled` ### `scopeCopy`
hides the chat (TODO: even if it's enabled on backend) Copy post scope (visibility) when replying to a post. Instance-default.
### `sidebarRight`
Change alignment of sidebar and panels to the right. Defaults to `false`.
### `showFeaturesPanel`
Show panel showcasing instance features/settings to logged-out visitors
### `showInstanceSpecificPanel` ### `showInstanceSpecificPanel`
This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel. This allows you to include arbitrary HTML content in a panel below navigation menu. PleromaFE looks for an html page `instance/panel.html`, by default it's not provided in FE, but BE bundles some [default one](https://git.pleroma.social/pleroma/pleroma/blob/develop/priv/static/instance/panel.html). De-facto instance-defaults, since user can hide instance-specific panel.
### `collapseMessageWithSubject`
Collapse post content when post has a subject line (content warning). Instance-default.
### `scopeCopy`
Copy post scope (visibility) when replying to a post. Instance-default.
### `subjectLineBehavior` ### `subjectLineBehavior`
How to handle subject line (CW) when replying to a post. How to handle subject line (CW) when replying to a post.
* `"email"` - like EMail - prepend `re: ` to subject line if it doesn't already start with it. * `"email"` - like EMail - prepend `re: ` to subject line if it doesn't already start with it.
@@ -52,39 +89,22 @@ How to handle subject line (CW) when replying to a post.
* `"noop"` - do not copy * `"noop"` - do not copy
Instance-default. Instance-default.
### `postContentType` ### `theme`
Default post formatting option (markdown/bbcode/plaintext/etc...) Default theme used for new users. De-facto instance-default, user can change theme.
### `alwaysShowSubjectInput`
`true` - will always show subject line input, `false` - only show when it's not empty (i.e. replying). To hide subject line input completely, set it to `false` and `subjectLineBehavior` to `"noop"`
### `hidePostStats` and `hideUserStats`
Hide counters for posts and users respectively, i.e. hiding repeats/favorites counts for posts, hiding followers/friends counts for users. This is just cosmetic and aimed to ease pressure and bias imposed by stat numbers of people and/or posts. (as an example: so that people care less about how many followers someone has since they can't see that info)
### `loginMethod`
`"password"` - show simple password field
`"token"` - show button to log in with external method (will redirect to login form, more details in BE documentation)
### `webPushNotifications` ### `webPushNotifications`
Enables [PushAPI](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) - based notifications for users. Instance-default. Enables [PushAPI](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) - based notifications for users. Instance-default.
### `noAttachmentLinks`
**TODO Currently doesn't seem to be doing anything code-wise**, but implication is to disable adding links for attachments, which looks nicer but breaks compatibility with old GNU/Social servers.
### `nsfwCensorImage`
Use custom image for NSFW'd images
### `showFeaturesPanel`
Show panel showcasing instance features/settings to logged-out visitors
### `hideSitename`
Hide instance name in header
## Indirect configuration ## Indirect configuration
Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it. Some features are configured depending on how backend is configured. In general the approach is "if backend allows it there's no need to hide it, if backend doesn't allow it there's no need to show it.
### Chat ### Chat
**TODO somewhat broken, see: chatDisabled** chat can be disabled by disabling it in backend **TODO somewhat broken, see: disableChat** chat can be disabled by disabling it in backend
### Private Mode
If the `private` instance setting is enabled in the backend, features that are not accessible without authentication, such as the timelines and search will be disabled for unauthenticated users.
### Rich text formatting in post formatting ### Rich text formatting in post formatting
Rich text formatting options are displayed depending on how many formatting options are enabled on backend, if you don't want your users to use rich text at all you can only allow "text/plain" one, frontend then will only display post text format as a label instead of dropdown (just so that users know for example if you only allow Markdown, only BBCode or only Plain text) Rich text formatting options are displayed depending on how many formatting options are enabled on backend, if you don't want your users to use rich text at all you can only allow "text/plain" one, frontend then will only display post text format as a label instead of dropdown (just so that users know for example if you only allow Markdown, only BBCode or only Plain text)
@@ -92,13 +112,3 @@ Rich text formatting options are displayed depending on how many formatting opti
### Who to follow ### Who to follow
This is a panel intended for users to find people to follow based on randomness or on post contents. Being potentially privacy unfriendly feature it needs to be enabled and configured in backend to be enabled. This is a panel intended for users to find people to follow based on randomness or on post contents. Being potentially privacy unfriendly feature it needs to be enabled and configured in backend to be enabled.
### Safe DM message display
Setting this will change the warning text that is displayed for direct messages.
ATTENTION: If you actually want the behavior to change. You will need to set the appropriate option at the backend. See the backend documentation for information about that.
DO NOT activate this without checking the backend configuration first!
### Private Mode
If the `private` instance setting is enabled in the backend, features that are not accessible without authentication, such as the timelines and search will be disabled for unauthenticated users.
+3 -3
View File
@@ -25,7 +25,7 @@ This could be a bit trickier, you basically need steps 1-4 from *develop build*
### Replacing your instance's frontend with custom FE build ### Replacing your instance's frontend with custom FE build
This is the most easiest way to use and test FE build: you just need to copy or symlink contents of `dist` folder into backend's [static directory](https://docs.pleroma.social/static_dir.html), by default it is located in `instance/static`, or in `/var/lib/pleroma/static` for OTP release installations, create it if it doesn't exist already. Be aware that running `yarn build` wipes the contents of `dist` folder. This is the most easiest way to use and test FE build: you just need to copy or symlink contents of `dist` folder into backend's [static directory](../backend/configuration/static_dir.md), by default it is located in `instance/static`, or in `/var/lib/pleroma/static` for OTP release installations, create it if it doesn't exist already. Be aware that running `yarn build` wipes the contents of `dist` folder.
### Running production build locally or on a separate server ### Running production build locally or on a separate server
@@ -67,9 +67,9 @@ server {
### API, Data, Operations ### API, Data, Operations
In 99% cases PleromaFE uses [MastoAPI](https://docs.joinmastodon.org/api/) with [Pleroma Extensions](https://docs-develop.pleroma.social/differences_in_mastoapi_responses.html) to fetch the data. The rest is either QvitterAPI leftovers or pleroma-exclusive APIs. QvitterAPI doesn't exactly have documentation and uses different JSON structure and sometimes different parameters and workflows, [this](https://twitter-api.readthedocs.io/en/latest/index.html) could be a good reference though. Some pleroma-exclusive API may still be using QvitterAPI JSON structure. In 99% cases PleromaFE uses [MastoAPI](https://docs.joinmastodon.org/api/) with [Pleroma Extensions](../backend/API/differences_in_mastoapi_responses.md) to fetch the data. The rest is either QvitterAPI leftovers or pleroma-exclusive APIs. QvitterAPI doesn't exactly have documentation and uses different JSON structure and sometimes different parameters and workflows, [this](https://twitter-api.readthedocs.io/en/latest/index.html) could be a good reference though. Some pleroma-exclusive API may still be using QvitterAPI JSON structure.
PleromaFE supports both formats by transforming them into internal format which is basically QvitterAPI one with some additions and renaming. All data is passed trough [Entity Normalizer](/src/services/entity_normalizer/entity_normalizer.service.js) which can serve as a reference of API and what's actually used, it's also a host for all the hacks and data transformation. PleromaFE supports both formats by transforming them into internal format which is basically QvitterAPI one with some additions and renaming. All data is passed trough [Entity Normalizer](https://git.pleroma.social/pleroma/pleroma-fe/-/blob/develop/src/services/entity_normalizer/entity_normalizer.service.js) which can serve as a reference of API and what's actually used, it's also a host for all the hacks and data transformation.
For most part, PleromaFE tries to store all the info it can get in global vuex store - every user and post are passed trough updating mechanism where data is either added or merged with existing data, reactively updating the information throughout UI, so if in newest request user's post counter increased, it will be instantly updated in open user profile cards. This is also used to find users, posts and sometimes to build timelines and/or request parameters. For most part, PleromaFE tries to store all the info it can get in global vuex store - every user and post are passed trough updating mechanism where data is either added or merged with existing data, reactively updating the information throughout UI, so if in newest request user's post counter increased, it will be instantly updated in open user profile cards. This is also used to find users, posts and sometimes to build timelines and/or request parameters.
-209
View File
@@ -1,209 +0,0 @@
# Pleroma-FE user guide
> Be prepared for breaking changes, unexpected behavior and this user guide becoming obsolete and wrong.
> If there was no insanity
>
> it would be necessary to create it.
>
> --Catbag
Pleroma-FE user interface is modeled after Qvitter which is modeled after older Twitter design. It provides a simple 2-column interface for microblogging. While being simple by default it also provides many powerful customization options.
## Posting, reading, basic functions.
After registering and logging in you're presented with your timeline in right column and new post form with timeline list and notifications in the left column.
Posts will contain the text you are posting, but some content will be modified:
1. Mentions: Mentions have the form of @user or @user<span></span>@instance.tld. These will become links to the user's profile. In addition, the mentioned user will always get a notification about the post they have been mentioned in, so only mention users that you want to receive this message.
2. URLs: URLs like `http://example.com` will be automatically be turned into a clickable links.
3. Hashtags: Hashtags like #cofe will also be turned into links.
**Depending on your instance some of the options might not be available or have different defaults**
Let's clear up some basic stuff. When you post something it's called a **post** or it could be called a **status** or even a **toot** or a **prööt** depending on whom you ask. Post has body/content but it also has some other stuff in it - from attachments, visibility scope, subject line.
* **Emoji** are small images embedded in text, there are two major types of emoji: [unicode emoji](https://en.wikipedia.org/wiki/Emoji) and custom emoji. While unicode emoji are universal and standardized, they can appear differently depending on where you are using them or may not appear at all on older systems. Custom emoji are more *fun* kind - instance administrator can define many images as *custom emoji* for their users. This works very simple - custom emoji is defined by its *shortcode* and an image, so that any shortcode enclosed in colons get replaced with image if such shortcode exist.
Let's say there's `:pleroma:` emoji defined on instance. That means
> First time using :pleroma: pleroma!
will become
> First time using ![pleroma](./example_emoji.png) pleroma!
Note that you can only use emoji defined on your instance, you cannot "copy" someone else's emoji, and will have to ask your administrator to copy emoji from other instance to yours.
Lastly, there's two convenience options for emoji: an emoji picker (smiley face to the right of "submit" button) and autocomplete suggestions - when you start typing :shortcode: it will automatically try to suggest you emoj and complete the shortcode for you if you select one. **Note** that if emoji doesn't show up in suggestions nor in emoji picker it means there's no such emoji on your instance, if shortcode doesn't match any defined emoji it will appear as text.
* **Attachments** are fairly simple - you can attach any file to a post as long as the file is within maximum size limits. If you're uploading explicit material you can mark all of your attachments as sensitive (or add `#nsfw` tag) - it will hide the images and videos behind a warning so that it won't be displayed instantly.
* **Subject line** also known as **CW** (Content Warning) could be used as a header to the post and/or to warn others about contents of the post having something that might upset somebody or something among those lines. Several applications allow to hide post content leaving only subject line visible. As a side-effect using subject line will also mark your images as sensitive (see above).
* **Visiblity scope** controls who will be able to see your posts. There are four scopes available:
1. `Public`: This is the default, and some fediverse software like GNU Social only supports this. This means that your post is accessible by anyone and will be shown in the public timelines.
2. `Unlisted`: This is the same as public, but your post won't appear in the public timelines. The post will still be accessible by anyone who comes across it (for example, by looking at your profile) or by direct linking. They will also appear in public searches.
3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](#profle).
4. `Direct`: This will only send the message to the people explicitly mentioned in the post.
A few things to consider about the security and usage of these scopes:
- None of these options will change the fact that the messages are all saved in the database unencrypted. They will be visible to your server admin and to any other admin of a server who receives this post. Do not share information that you would consider secret or dangerous. Use encrypted messaging systems for these things.
- Follower-only posts can lead to fragmented conversations. If you post a follower-only post and somebody else replies to it with a follower-only post, only people following both of you will see the whole conversation thread. Everybody else will only see half of it. Keep this in mind and keep conversations public if possible.
- Changing scopes during a thread or adding people to a direct message will not retroactively make them see the whole conversation. If you add someone to a direct message conversation, they will not see the post that happened before they were mentioned.
* **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to.
Sometimes you may encounter posts that seem different than what they are supposed to. For example, you might see a direct message without any mentions in the text. This can happen because internally, the Fediverse has a different addressing mechanism similar to email, with `to` and `cc` fields. While these are not directly accessible in PleromaFE, other software in the Fediverse might generate those posts. Do not worry in these cases, these are normal and not a bug.
#### Rich text
By default new posts you make are plaintext, meaning you can't make text **bold** or add custom links or make lists or anything like that. However if your instance allows it you can use Markdown or BBCode or HTML to spice up your text, however there are certain limitations to what HTML tags and what features of Markdown you can use.
this section will be expanded later
### Other actions
In addition to posting you can also *favorite* post also known as *liking* them and *repeat* posts (also known as *retweeting*, *boosting* and even *reprööting*). Favoriting a post increments a counter on it, notifies post author of your affection towards that post and also adds that post to your "favorited" posts list (in your own profile, "Favorites" tab). Reprööting a post does all that and also repeats this post to your followers and your profile page with a note "*user* repeated post".
Your own posts can be deleted, but this will only reliably delete the post from your own instance. Other instances will receive a deletion notice, but there's no way to force them to actually delete a post. In addition, not all instances that contain the message might even receive the deletion notice, because they might be offline or not known to have the post because they received it through a repeat. Lastly, deletion notice might not reach certain frontends and clients - post will be visible for them until page refresh or cache clear, they probably won't be able to interact with it apart from replying to it (which will have reply-to mark missing).
If you are a moderator, you can also delete posts by other people. If those people are on your instance, it will delete the post and send out the deletion notice to other servers. If they are not on your instance, it will just remove the post from your local instance.
There's also an option to report a user via a post (if the feature is available on your instance) which could be used to notify your (and probably other instance's) admin that someone is being naughty.
## Users
When you see someone, you can click on their user picture to view their profile, and click on the userpic in that to see *full* profile. You can *follow* them, *mute* and *block* them. Following is self-explanatory, it adds them t your Home Timeline, lists you as a follower and gives you access to follower-only posts if they have any. Muting makes posts and notifications made by them very tiny, giving you an option to see the post if you're curious. However on clients other than PleromaFE their posts will be completely removed. *Blocking* a user removes them from your timeline and notifications and prevents them from following you (automatically unfollows them from you).
Please note that some users can be "locked", meaning instead of following them you send a follow request they need to approve for you to become their follower.
## Timelines
Currently you have several timelines to browse trough:
* **Timeline** aka Home Timeline - this timeline contains all posts by people you follow and your own posts, as well as posts mentioning you directly.
* **Interactions** all interactions you've had with people on the network, basically same as notifications except grouped in convenient way - mentions separate from favorites with repeats separate from follows
* **Direct Messages** all posts with `direct` scope addressed to you or mentioning you.
* **Public Timelines** all posts made by users on instance you're on
* **The Whole Known Network** also known as **TWKN** or **Federated Timeline** - all posts on the network by everyone, almost. Due to nature of the network your instance may not know *all** the instances on the network, so only posts originating from known instances are shown there.
## Your profile
By clicking wrench icon above the post form you can access the profile edit or "user settings" screen.
### Profle
Here you can set up how you appear to other users among with some other settings:
- Name: this is text that displays next to your avatar in posts. Please note that you **cannot** change your *@<span></span>handle*
- Bio: this will be displayed under your profile - you can put anything you want there you want for everyone to see.
- Restrict your account to approved followers only: this makes your account "locked", when people follow you - you have to approve or deny their follow requests, this gives more control over who sees your followers only posts.
- Default visibility scope: this chooses your default post scope for new posts
- Strip rich text from all posts: this strips rich text formatting (bold/italics/lists etc) from all incoming posts. Will only affect newly fetched posts.
If you're admin or moderator on your instance you also get "Show [role] badge in my profile" - this controls whether to show "Admin" or "Moderator** label on your profile page.
**For all options mentioned above you have to click "Submit" button for changes to take place**
- Avatar: this changes picture next to your posts. Your avatar shouldn't exceed 2 MiB (2097152 bytes) or it could cause problems with certain instances.
- Banner: this changes background on your profile card. Same as avatar it shouldn't exceed 2 MiB limit.
- Profile Background: this changes background picture for UI. It isn't shown to anyone else **yet**, but some time later it will be shown when viewing your profile.
### Security
Here you can change your password, revoke access tokens, configure 2-factor authentication (if available).
### Notifications
This screen allows more fine-grained control over what notifications to show to you based on whom it comes from
### Data Import/Export
This allows you to export and import a list of people you follow, in case instance's database gets reverted or if you want to move to another server. Note that you **CANNOT export/import list of people who *follow you***, they'll just need to follow you back after you move.
### Blocks and Mutes
These screens give access to full list of people you block/mute, useful for *un*blocking/*un*muting people because blocking/muting them most likely removes them out of your sight completely.
## Other stuff
By default you can see **ALL** posts made by other users on your Home Timeline, this contrast behavior of Twitter and Mastodon, which shows you only non-reply posts and replies to people you follow. You can set it up to replicate the said behavior, however the option is currently broken.
You can view other people's profiles and search for users (top-right corner, person with a plus icon). Tag search is possible but not implemented properly yet, right now you can click on tag link in a post to see posts tagged with that post.
You can also view posts you've favorited on your own profile, but you cannot see favorites by other people.
Due to nature of how Pleroma (backend) operates you might see old posts appear as if they are new, this is because instance just learned about that post (i.e. your instance is younger that some other ones) and someone interacted with old post. Posts are sorted by date of when they are received, not date they have been posted because it's very easy to spoof the date, so a post claiming it "was" made in year 2077 could hand at top of your TL forever.
# Customization and configuration
Clicking on the cog icon in the upper right will go to the settings screen.
## General
### Interface
- Language: Here you can set the interface language. The default language is the one that you set in your browser settings.
- Hide instance-specific panel: This hides the panel in the lower left that usually contains general information about the server.
### Timeline
- Hide posts of muted users: If this is set, 'muting' a user will completely hide their posts instead of collapsing them.
- Collapse posts with subjects: This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings.
- Enable automatic streaming of new posts when scrolled to the top: With this enabled, new posts will automatically stream in when you are scrolled to the top. Otherwise, you will see a button on the timeline that will let you display the new posts.
- Pause streaming when tab is not focused: This pauses the automatic streaming that the previous option enables when the tab is out of focus. This is useful if you don't want to miss any new posts.
- Enable automatic loading when scrolled to the bottom: When this is disabled, a button will be shown on the bottom of the timeline that will let you load older posts.
- Enable reply-link preview on hover: Status posts in the timeline and notifications contain links to replies and to the post they are a reply to. If this setting is enabled, hovering over that link will display that linked post in a small hovering overlay.
### Composing
- Copy scope when replying: When this is activated, the scope of a reply will be the same as the scope of the post it is replying to. This is useful to prevent accidentally moving private discussions to public, or vice versa.
- Always show subject field: Whether or not to display the 'subject' input field in the post form. If you do not want to use subjects, you can deactivate this.
- Copy subject when replying: This controls if the subject of a post will be copied from the post it is replying to.
- Post status content type: Selects the default content type of your post. The options are: Plain text, HTML, BBCode and Markdown.
- Minimize scope selection options: Selecting this will reduce the visibility scopes to 'direct', your default post scope and post scope of post you're replying to.
- Automatically hide New Post button: Mobile interface only: hide floating "New post" button when scrolling
### Attachments
- Hide attachments in timeline: Do not display attachments in timelines. They will still display in expanded conversations. This is useful to save bandwidth and for browsing in public.
- Hide attachments in conversations: Also hide attachments in expanded conversations.
- Maximum amount of thumbnails per post: Exactly that :)
- Enable clickthrough NSFW attachment hiding: Hide attachments that are marked as NSFW/sensitive behind a click-through image.`
- Preload images: This will preload the hidden images so that they display faster when clicking through.
- Open NSFW attachments with just one click: Directly open NSFW attachments in a maximised state instead of revealing the image thumbnail.
- Play-on-hover GIFs: With this activated, GIFs images and avatars will only be animated on mouse hover. Otherwise, they will be always animated. This is very useful if your timeline looks too flashy from people's animated avatars and eases the CPU load.
- Loop videos: Whether to loop videos indefinitely.
- Loop only videos without sound: Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay.
- Play videos directly in the media viewer: Play videos right in the timeline instead of opening it in a modal
- Don't crop the attachment in thumbnails: if enabled, images in attachments will be fit entirely inside the container instead of being zoomed in and cropped.
### Notifications
- Enable web push notifications: this enables Web Push notifications, to allow receiving notifications even when the page isn't opened, doesn't affect regular notifications.
## Theme
You can change the look and feel of Pleroma Frontend here. You can choose from several instance-provided presets and you can load one from file and save current theme to file. Before you apply new theme you can see what it will look like approximately in preview section.
Themes engine was made to be easy to use while giving an option for powerful in-depth customization - you can just tweak colors on "Common" tab and leave everything else as is.
If there's a little check box next to a color picker it means that color is optional and unless checked will be automatically picked based on some other color or defaults.
For some features you can also adjust transparency of it by changing its opacity, you just need to tick checkbox next to it, otherwise it will be using default opacity.
Contrast information is also provided - you can see how readable text is based on contrast between text color and background, icons under color pickers represent contrast rating based on [WCAG](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast) - thumbs up means AAA rating (good), half-filled circle means AA rating (acceptable) and warning icon means it doesn't pass the minimal contrast requirement and probably will be less readable, especially for vision-challenged people, you can hover over icon to see more detailed information. *Please note* that if background is not opaque (opacity != 1) contrast will be measured based on "worst case scenario", i.e. behind semi-transparent background lies some solid color that makes text harder to read, this however is still inaccurate because it doesn't account that background can be noisy/busy, making text even harder to read.
Apart from colors you can also tweak shadow and lighting, which is used mostly to give buttons proper relief based on their state, give panes their shade, make things glow etc. It's quite powerful, and basically provides somewhat convenient interface for [CSS Shadows](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow).
Another thing you can tweak is theme's roundness - some people like sharp edges, some want things more rounded. This is also used if you want circled or square avatars.
Lastly, you can redefine fonts used in UI without changing fonts in your browser or system, this however requires you to enter font's full name and having that font installed on your system.
## Filtering
- Types of notifications to show: This controls what kind of notifications will appear in notification column and which notifications to get in your system outside the web page
- Replies in timeline: You may know that other social networks like Twitter will often not display replies to other people in your timeline, even if you are following the poster. Pleroma usually will show these posts to you to encourage conversation. If you do not like this behavior, you can change it here.
- Hide post statistics: This hides the number of favorites, number of replies, etc.
- Hide user statistics: This hides the number of followers, friends, etc.
- Muted words: A list of words that will be muted (i.e. displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. Posts can always be expanded when you actually want to see them.
- Hide filtered statuses: Selecting this will hide the filtered / muted posts completely instead of collapsing them.
## Version
Just displays the backend and frontend version. Useful to mention in bug reports.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+8
View File
@@ -0,0 +1,8 @@
# Introduction to Pleroma-FE
## What is Pleroma-FE?
Pleroma-FE is the default user-facing frontend for Pleroma. It's user interface is modeled after Qvitter which is modeled after an older Twitter design. It provides a simple 2-column interface for microblogging. While being simple by default it also provides many powerful customization options.
## How can I use it?
If your instance uses Pleroma-FE, you can acces it by going to your instance (e.g. <https://pleroma.soykaf.com>). You can read more about it's basic functionality in the [Pleroma-FE User Guide](./user_guide/). We also have [a guide for administrators](./CONFIGURATION.md) and for [hackers/contributors](./HACKING.md).
+44
View File
@@ -0,0 +1,44 @@
# General overview
> Be prepared for breaking changes, unexpected behavior and this user guide becoming obsolete and wrong.
> If there was no insanity
>
> it would be necessary to create it.
>
> --Catbag
Pleroma-FE is the default user-facing frontend for Pleroma. If your instance uses Pleroma-FE, you can access it by going to your instance (e.g. <https://pleroma.soykaf.com>). After logging in you will have two columns in front of you. Here we're going to keep it to the default behaviour, but some instances swap the left and right columns. If you're on such an instance what we refer to as the left column will be on your right and vice versa.
### Left column
- first block: This section is dedicated to [posting](posting_reading_basic_functions.md)
- second block: Here you can switch between the different views for the right column.
- Optional third block: This is the Instance panel that can be activated, but is deactivated by default. It's fully customisable by instance admins and by default has links to the Pleroma-FE and Mastodon-FE.
- fourth block: This is the Notifications block, here you will get notified whenever somebody mentions you, follows you, repeats or favorites one of your statuses
### Right column
This is where the interesting stuff happens! There are different views depending on what you choose in the second block of the left panel.
- **Timelines** Depending on the [timeline](timelines.md) you will see different statuses, but each status has a standard structure:
- Profile pic, name and link to profile. An optional left-arrow if it's a reply to another status (hovering will reveal the reply-to status). Clicking on the profile pic will uncollapse the user's profile where you can find information about the account and can [follow, mute or block the account](users_follow_mute_block.md).
- An arrow icon on the right side allows you to open the status on the instance where it's originating from.
- A `+` button on the rightmost side allows you to Expand/Collapse an entire discussion thread.
- The text of the status, including mentions and attachments. If you click on a mention, it will automatically open the profile page of that person.
- Four buttons (left to right): Reply, Repeat, Favorite and Add Reaction. The three dots next to it are a dropdown menu for extra options including simple moderation, bookmarking, deleting posts, pinning your own posts to your profile and more.
- **Interactions** shows all interactions you've had with people on the network, basically same as notifications except grouped in convenient way.
- **Chats** is the chat feature. You can find your friends and start chatting with them. At the moment chat are only one-on-one, but once groups are introduced groupchats will also be possible.
- **About** is the about-page and lists the staff, the TOS, activated MRF's, and enabled features
### Top right
- The magnifier icon opens the search screen
- You can search for statuses, people and hashtags.
- You can import statuses from remote servers by pasting the url to the post in the search field.
- If you want to search for users that your instance doesn't know about yet, you can search for them using the full `name@instance.tld` handle. You can also use the full url from their remote profile.
- The gear icon gives you [settings](settings.md)
- If you have admin rights, you'll see an icon that opens the admin interface
- The last icon is to log out
### Bottom right
On the bottom right you have the Shoutbox. Here you can communicate with people on the same instance in realtime. It is local-only, very basic and will most probably be removed once the Chats functionality allows group chats.
@@ -0,0 +1,76 @@
# Posting, reading, basic functions.
!!! warning
Depending on your instance some of the options might not be available or have different defaults
After registering and logging in you're presented with your timeline in right column and new post form with timeline list and notifications in the left column.
Posts will contain the text you are posting, but some content will be modified:
1. Mentions: Mentions have the form of @user or @user<span></span>@instance.tld. These will become links to the user's profile. In addition, the mentioned user will always get a notification about the post they have been mentioned in, so only mention users that you want to receive this message.
2. URLs: URLs like `http://example.com` will be automatically be turned into a clickable links.
3. Hashtags: Hashtags like #cofe will also be turned into links.
4. There is a default character limit of 5000 characters.
Let's clear up some basic stuff. When you post something it's called a **post** or it could be called a **status** or even a **toot** or a **prööt** depending on whom you ask. Post has body/content but it also has some other stuff in it - from attachments, visibility scope, subject line...
**Emoji** are small images embedded in text, there are two major types of emoji: [unicode emoji](https://en.wikipedia.org/wiki/Emoji) and custom emoji. While unicode emoji are universal and standardized, they can appear differently depending on where you are using them or may not appear at all on older systems. Custom emoji are a more *fun* kind - instance administrator can define many images as *custom emoji* for their users. This works very simple - custom emoji is defined by its *shortcode* and an image, so that any shortcode enclosed in colons get replaced with image if such shortcode exist.
Let's say there's a `:pleroma:` emoji defined on an instance. That means
> First time using :pleroma: pleroma!
will become
> First time using ![pleroma](../assets/example_emoji.png) pleroma!
Note that you can only use emoji defined on your instance, you cannot "copy" someone else's emoji, and will have to ask your administrator to copy emoji from other instance to yours.
Lastly, there's two convenience options for emoji: an emoji picker (smiley face to the right of "submit" button) and autocomplete suggestions - when you start typing :shortcode: it will automatically try to suggest you emoji and complete the shortcode for you if you select one. If emoji doesn't show up in suggestions nor in emoji picker it means there's no such emoji on your instance, if shortcode doesn't match any defined emoji it will appear as text.
**Attachments** are fairly simple - you can attach any file to a post as long as the file is within maximum size limits. If you're uploading explicit material you can mark all of your attachments as sensitive (or add the `#nsfw` tag) - it will hide the images and videos behind a warning so that it won't be displayed instantly.
**Subject line** also known as **CW** (Content Warning) could be used as a header to the post and/or to warn others about contents of the post having something that might upset somebody or something among those lines. Several applications allow to hide post content leaving only subject line visible. Using a subject line will not mark your images as sensitive, you will have to do that explicitly (see above).
**Visiblity scope** controls who will be able to see your posts. There are four scopes available:
1. `Public`: This is the default, and some fediverse software, like GNU Social, only supports this. This means that your post is accessible by anyone and will be shown in the public timelines.
2. `Unlisted`: This is the same as public, but your post won't appear in the public timelines. The post will still be accessible by anyone who comes across it (for example, by looking at your profile) or by direct linking. They will also appear in public searches.
3. `Followers only`: This will show your post only to your followers. Only they will be able to interact with it. Be careful: When somebody follows you, they will be able to see all your previous `followers only` posts as well! If you want to restrict who can follow you, consider [locking your account down to only approved followers](../settings#profile).
4. `Direct`: This will only send the message to the people explicitly mentioned in the post.
A few things to consider about the security and usage of these scopes:
- None of these options will change the fact that the messages are all saved in the database unencrypted. They will be visible to your server admin and to any other admin of a server who receives this post. Do not share information that you would consider secret or dangerous. Use encrypted messaging systems for these things.
- Follower-only posts can lead to fragmented conversations. If you post a follower-only post and somebody else replies to it with a follower-only post, only people following both of you will see the whole conversation thread. Everybody else will only see half of it. Keep this in mind and keep conversations public if possible.
- Changing scopes during a thread or adding people to a direct message will not retroactively make them see the whole conversation. If you add someone to a direct message conversation, they will not see the post that happened before they were mentioned.
* **Reply-to** if you are replying to someone, your post will also contain a note that your post is referring to the post you're replying to. Person you're replying to will receive a notification *even* if you remove them from mentioned people. You won't receive notifications when replying to your own posts, but it's useful to reply to your own posts to provide people some context if it's a follow-up to a previous post. There's a small "Reply to ..." label under post author's name which you can hover on to see what post it's referring to.
Sometimes you may encounter posts that seem different than what they are supposed to. For example, you might see a direct message without any mentions in the text. This can happen because internally, the Fediverse has a different addressing mechanism similar to email, with `to` and `cc` fields. While these are not directly accessible in PleromaFE, other software in the Fediverse might generate those posts. Do not worry in these cases, these are normal and not a bug.
## Rich text
By default new posts you make are plaintext, meaning you can't make text **bold** or add custom links or make lists or anything like that. However if your instance allows it you can use Markdown or BBCode or HTML to spice up your text, however there are certain limitations to what HTML tags and what features of Markdown you can use.
Here is a small example of some text in markdown.
```
This is an example of markdown text using **bold** and *cursive* text.
To get a newline we add two spaces at the end of the previous line.
Let's also add a list
* with
* some
* items
```
If you set the input-method to Markdown, and post this, it will look something like
![example_markdown](../assets/example_markdown.png)
## Other actions
In addition to posting you can also *favorite* posts also known as *liking* them and *repeat* posts (also known as *retweeting*, *boosting* and even *reprööting*). Favoriting a post increments a counter on it, notifies the post author of your affection towards that post and also adds that post to your "favorited" posts list (in your own profile, "Favorites" tab). Reprööting a post does all that and also repeats this post to your followers and your profile page with a note "*user* repeated post".
Your own posts can be deleted, but this will only reliably delete the post from your own instance. Other instances will receive a deletion notice, but there's no way to force them to actually delete a post. In addition, not all instances that contain the message might even receive the deletion notice, because they might be offline or not known to have the post because they received it through a repeat. Lastly, deletion notice might not reach certain frontends and clients - post will be visible for them until page refresh or cache clear, they probably won't be able to interact with it apart from replying to it (which will have reply-to mark missing).
If you are a moderator, you can also delete posts by other people. If those people are on your instance, it will delete the post and send out the deletion notice to other servers. If they are not on your instance, it will just remove the post from your local instance.
There's also an option to report a user's post which can be used to notify your (and optionally the other instance's) admin that someone is being naughty.
+116
View File
@@ -0,0 +1,116 @@
# Settings
On the top-right you will see a gear icon. Click it to open the settings.
## General
### Interface
- **Interface language** is where you can set the interface language. The default language is the one that you set in your browser settings.
- **Hide instance-specific panel** hides the panel in the lower left that usually contains general information about the server. This will only be visible if your admin has activated this panel and is deactivated by default.
### Timeline
- **Hide posts of muted users** If this is set, 'muting' a user will completely hide their posts instead of collapsing them.
- **Collapse posts with subjects** This will collapse posts that contain a subject, hiding their content. Subjects are also sometimes called content warnings.
- **Enable automatic streaming of new posts when scrolled to the top** With this enabled, new posts will automatically stream in when you are scrolled to the top. Otherwise, you will see a button on the timeline that will let you display the new posts.
- **Pause streaming when tab is not focused** This pauses the automatic streaming that the previous option enables when the tab is out of focus. This is useful if you don't want to miss any new posts.
- **Enable automatic loading when scrolled to the bottom** When this is disabled, a button will be shown on the bottom of the timeline that will let you load older posts.
- **Enable reply-link preview on hover** Status posts in the timeline and notifications contain links to replies and to the post they are a reply to. If this setting is enabled, hovering over that link will display that linked post in a small hovering overlay.
### Composing
- **Copy scope when replying** makes the scope of a reply be the same as the scope of the post it is replying to. This is useful to prevent accidentally moving private discussions to public, or vice versa.
- **Always show subject field** Whether or not to display the 'subject' input field in the post form. If you do not want to use subjects, you can deactivate this.
- **Copy subject when replying** controls if the subject of a post will be copied from the post it is replying to.
- **Post status content type** selects the default content type of your post. The options are: Plain text, HTML, BBCode and Markdown.
- **Minimize scope selection options** will reduce the visibility scopes to 'direct', your default post scope and post scope of post you're replying to.
- **Automatically hide New Post button** hides the floating "New post" button when scrolling on mobile view.
- **Pad emoji with spaces when adding from picker** Will add spaces around emoji you select it from the picker.
### Attachments
- **Hide attachments in timeline** Do not display attachments in timelines. They will still display in expanded conversations. This is useful to save bandwidth and for browsing in public.
- **Hide attachments in conversations** Also hide attachments in expanded conversations.
- **Maximum amount of thumbnails per post** Exactly that :)
- **Enable clickthrough NSFW attachment hiding** Hide attachments that are marked as NSFW/sensitive behind a click-through image.`
- **Preload images** This will preload the hidden images so that they display faster when clicking through.
- **Open NSFW attachments with just one click** Directly open NSFW attachments in a maximised state instead of revealing the image thumbnail.
- **Play-on-hover GIFs** With this activated, GIFs images and avatars will only be animated on mouse hover. Otherwise, they will be always animated. This is very useful if your timeline looks too flashy from people's animated avatars and eases the CPU load.
- **Loop videos** Whether to loop videos indefinitely.
- **Loop only videos without sound** Some instances will use videos without sounds instead of GIFs. This will make only those videos autoplay.
- **Play videos directly in the media viewer** Play videos right in the timeline instead of opening it in a modal
- **Don't crop the attachment in thumbnails** if enabled, images in attachments will be fit entirely inside the container instead of being zoomed in and cropped.
### Notifications
- **Enable web push notifications** this enables Web Push notifications, to allow receiving notifications even when the page isn't opened, doesn't affect regular notifications.
### Fun
- **Meme arrows** will make `> greentext` be shown in green (using the "green" from the theme that is used).
## Profile
Here you can set up how you appear to other users among with some other settings:
- **Name** is text that displays next to your avatar in posts. Please note that you **cannot** change your *@handle*
- **Bio** will be displayed under your profile - you can put anything you want there you want for everyone to see.
- **Restrict your account to approved followers only** makes your account "locked", when people follow you - you have to approve or deny their follow requests, this gives more control over who sees your followers only posts.
- **Default visibility scope** is your default post scope for new posts
- **Strip rich text from all posts** strips rich text formatting (bold/italics/lists etc) from all incoming posts. This will only affect newly fetched posts.
If you're admin or moderator on your instance you also get **Show [role] badge in my profile** - this controls whether to show "Admin" or "Moderator** label on your profile page.
**For all options mentioned above you have to click "Submit" button for changes to take place**
- **Avatar** this changes picture next to your posts. Your avatar shouldn't exceed 2 MiB (2097152 bytes) or it could cause problems with certain instances.
- **Banner** this changes background on your profile card. Same as avatar it shouldn't exceed 2 MiB limit.
- **Profile Background** this changes background picture for UI. It isn't shown to anyone else *yet*, but some time later it will be shown when viewing your profisle.
## Security
Here you can change your password, revoke access tokens, configure 2-factor authentication (if available).
## Filtering
- **Types of notifications to show** This controls what kind of notifications will appear in notification column and which notifications to get in your system outside the web page
- **Replies in timeline** You may know that other social networks like Twitter will often not display replies to other people in your timeline, even if you are following the poster. Pleroma usually will show these posts to you to encourage conversation. If you do not like this behavior, you can change it here.
- **Hide post statistics** This hides the number of favorites, number of replies, etc.
- **Hide user statistics** This hides the number of followers, friends, etc.
- **Muted words** allows a list of words that will be muted (i.e. displayed in a collapsed state) on the timeline and in notifications. An easy way to tune down noise in your timeline. By default posts can be expanded if you want to see them.
- **Hide filtered statuses** will hide the filtered / muted posts completely instead of collapsing them.
## Theme
Here you can change the look and feel of Pleroma-FE. You can choose from several instance-provided presets and you can load one from file and save current theme to file. Before you apply new theme you can see what it will look like approximately in preview section.
The themes engine was made to be easy to use while giving an option for powerful in-depth customization - you can just tweak colors on "Common" tab and leave everything else as is.
If there's a little check box next to a color picker it means that color is optional and unless checked will be automatically picked based on some other color or defaults.
For some features you can also adjust transparency of it by changing its opacity, you just need to tick checkbox next to it, otherwise it will be using default opacity.
Contrast information is also provided - you can see how readable text is based on contrast between text color and background, icons under color pickers represent contrast rating based on [WCAG](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast) - thumbs up means AAA rating (good), half-filled circle means AA rating (acceptable) and warning icon means it doesn't pass the minimal contrast requirement and probably will be less readable, especially for vision-challenged people, you can hover over icon to see more detailed information. *Please note* that if background is not opaque (opacity != 1) contrast will be measured based on "worst case scenario", i.e. behind semi-transparent background lies some solid color that makes text harder to read, this however is still inaccurate because it doesn't account that background can be noisy/busy, making text even harder to read.
Apart from colors you can also tweak shadow and lighting, which is used mostly to give buttons proper relief based on their state, give panes their shade, make things glow etc. It's quite powerful, and basically provides somewhat convenient interface for [CSS Shadows](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow).
Another thing you can tweak is theme's roundness - some people like sharp edges, some want things more rounded. This is also used if you want circled or square avatars.
Lastly, you can redefine fonts used in UI without changing fonts in your browser or system, this however requires you to enter font's full name and having that font installed on your system.
## Notifications
This screen allows more fine-grained control over what notifications to show to you based on whom it comes from.
## Data Import/Export
This allows you to export and import a list of people you follow and block, in case instance's database gets reverted or if you want to move to another server. Note that you **CANNOT export/import list of people who *follow you***, they'll need to follow you back themselves.
## Mutes and Blocks
These screens give access to full list of people you block/mute, useful for *un*blocking/*un*muting people because blocking/muting them most likely removes them out of your sight completely.
## Version
Just displays the backend and frontend version. Useful to mention in bug reports.
+13
View File
@@ -0,0 +1,13 @@
# Timelines
You have several timelines to browse trough
- **Timeline** aka Home Timeline - this timeline contains all posts by people you follow and your own posts, as well as posts mentioning you directly.
- **Bookmarks** all the posts you've bookmarked. You can bookmark a post by clicking the three dots on the bottom right of the post and choose Bookmark.
- **Direct Messages** all posts with `direct` scope addressed to you or mentioning you.
- **Public Timelines** all public posts made by users on the instance you're on
- **The Whole Known Network** also known as **TWKN** or **Federated Timeline** - all public posts known by your instance. Due to nature of the network your instance may not know *all* the posts on the network, so only posts known by your instance are shown there.
Note that by default you will see all posts made by other users on your Home Timeline, this contrast behavior of Twitter and Mastodon, which shows you only non-reply posts and replies to people you follow. You can change said behavior in the [settings](settings.md#filtering).
By default instances will try to send activities (e.g. posts, favorites, etc.) up to 7 days or until the target server received them. For this reason posts that are up to 7 days old and your server didn't know about yet can pop up on your timeline. This is the default behaviour and can be changed by your admin.
@@ -0,0 +1,11 @@
# Users: follow, mute, block
When you see someone, you can click on their user picture to view their profile, and click on the userpic in that to see *full* profile. You can **follow** them, **mute** and **block** them.
**Following** is self-explanatory, it adds them to your Home Timeline, lists you as a follower and gives you access to follower-only posts if they have any.
**Muting** collapses posts and notifications made by them, giving you an option to see the post if you're curious. Clients other than PleromaFE may completely remove their posts.
**Blocking** a user removes them from your timeline and notifications and prevents them from following you (automatically unfollows them from you).
Please note that some users can be "locked", meaning instead of following them you send a follow request they need to approve for you to become their follower.
-1
View File
@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<title>Pleroma</title>
<!--server-generated-meta--> <!--server-generated-meta-->
<link rel="icon" type="image/png" href="/favicon.png"> <link rel="icon" type="image/png" href="/favicon.png">
</head> </head>
+16 -10
View File
@@ -11,32 +11,35 @@
"unit:watch": "karma start test/unit/karma.conf.js --single-run=false", "unit:watch": "karma start test/unit/karma.conf.js --single-run=false",
"e2e": "node test/e2e/runner.js", "e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e", "test": "npm run unit && npm run e2e",
"stylelint": "npx stylelint src/components/status/status.scss",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs", "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
"lint-fix": "eslint --fix --ext .js,.vue src test/unit/specs test/e2e/specs" "lint-fix": "eslint --fix --ext .js,.vue src test/unit/specs test/e2e/specs"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.7.6", "@babel/runtime": "^7.7.6",
"@chenfengyuan/vue-qrcode": "^1.0.0", "@chenfengyuan/vue-qrcode": "^1.0.0",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-regular-svg-icons": "^5.15.1",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/vue-fontawesome": "^2.0.0",
"body-scroll-lock": "^2.6.4", "body-scroll-lock": "^2.6.4",
"chromatism": "^3.0.0", "chromatism": "^3.0.0",
"cropperjs": "^1.4.3", "cropperjs": "^1.4.3",
"diff": "^3.0.1", "diff": "^3.0.1",
"escape-html": "^1.0.3", "escape-html": "^1.0.3",
"karma-mocha-reporter": "^2.2.1",
"localforage": "^1.5.0", "localforage": "^1.5.0",
"object-path": "^0.11.3", "parse-link-header": "^1.0.1",
"phoenix": "^1.3.0", "phoenix": "^1.3.0",
"portal-vue": "^2.1.4", "portal-vue": "^2.1.4",
"sanitize-html": "^1.13.0", "punycode.js": "^2.1.0",
"v-click-outside": "^2.1.1", "v-click-outside": "^2.1.1",
"vue": "^2.5.13", "vue": "^2.6.11",
"vue-chat-scroll": "^1.2.1", "vue-chat-scroll": "^1.2.1",
"vue-i18n": "^7.3.2", "vue-i18n": "^7.3.2",
"vue-router": "^3.0.1", "vue-router": "^3.0.1",
"vue-template-compiler": "^2.3.4", "vue-template-compiler": "^2.6.11",
"vuelidate": "^0.7.4", "vuelidate": "^0.7.4",
"vuex": "^3.0.1", "vuex": "^3.0.1"
"whatwg-fetch": "^2.0.3"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.7.5", "@babel/core": "^7.7.5",
@@ -53,7 +56,7 @@
"babel-plugin-lodash": "^3.3.4", "babel-plugin-lodash": "^3.3.4",
"chai": "^3.5.0", "chai": "^3.5.0",
"chalk": "^1.1.3", "chalk": "^1.1.3",
"chromedriver": "^2.21.2", "chromedriver": "^87.0.1",
"connect-history-api-fallback": "^1.1.0", "connect-history-api-fallback": "^1.1.0",
"cross-spawn": "^4.0.2", "cross-spawn": "^4.0.2",
"css-loader": "^0.28.0", "css-loader": "^0.28.0",
@@ -70,7 +73,6 @@
"eventsource-polyfill": "^0.9.6", "eventsource-polyfill": "^0.9.6",
"express": "^4.13.3", "express": "^4.13.3",
"file-loader": "^3.0.1", "file-loader": "^3.0.1",
"fontello-webpack-plugin": "https://github.com/w3geo/fontello-webpack-plugin.git#6149eac8f2672ab6da089e8802fbfcac98487186",
"function-bind": "^1.0.2", "function-bind": "^1.0.2",
"html-webpack-plugin": "^3.0.0", "html-webpack-plugin": "^3.0.0",
"http-proxy-middleware": "^0.17.2", "http-proxy-middleware": "^0.17.2",
@@ -82,6 +84,7 @@
"karma-coverage": "^1.1.1", "karma-coverage": "^1.1.1",
"karma-firefox-launcher": "^1.1.0", "karma-firefox-launcher": "^1.1.0",
"karma-mocha": "^1.2.0", "karma-mocha": "^1.2.0",
"karma-mocha-reporter": "^2.2.1",
"karma-sinon-chai": "^2.0.2", "karma-sinon-chai": "^2.0.2",
"karma-sourcemap-loader": "^0.3.7", "karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.26", "karma-spec-reporter": "0.0.26",
@@ -100,9 +103,12 @@
"selenium-server": "2.53.1", "selenium-server": "2.53.1",
"semver": "^5.3.0", "semver": "^5.3.0",
"serviceworker-webpack-plugin": "^1.0.0", "serviceworker-webpack-plugin": "^1.0.0",
"shelljs": "^0.7.4", "shelljs": "^0.8.4",
"sinon": "^2.1.0", "sinon": "^2.1.0",
"sinon-chai": "^2.8.0", "sinon-chai": "^2.8.0",
"stylelint": "^13.6.1",
"stylelint-config-standard": "^20.0.0",
"stylelint-rscss": "^0.4.0",
"url-loader": "^1.1.2", "url-loader": "^1.1.2",
"vue-loader": "^14.0.0", "vue-loader": "^14.0.0",
"vue-style-loader": "^4.0.0", "vue-style-loader": "^4.0.0",
+29 -56
View File
@@ -1,18 +1,21 @@
import UserPanel from './components/user_panel/user_panel.vue' import UserPanel from './components/user_panel/user_panel.vue'
import NavPanel from './components/nav_panel/nav_panel.vue' import NavPanel from './components/nav_panel/nav_panel.vue'
import Notifications from './components/notifications/notifications.vue' import Notifications from './components/notifications/notifications.vue'
import SearchBar from './components/search_bar/search_bar.vue'
import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue' import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue'
import FeaturesPanel from './components/features_panel/features_panel.vue' import FeaturesPanel from './components/features_panel/features_panel.vue'
import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue' import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue'
import ChatPanel from './components/chat_panel/chat_panel.vue' import ChatPanel from './components/chat_panel/chat_panel.vue'
import SettingsModal from './components/settings_modal/settings_modal.vue'
import MediaModal from './components/media_modal/media_modal.vue' import MediaModal from './components/media_modal/media_modal.vue'
import SideDrawer from './components/side_drawer/side_drawer.vue' import SideDrawer from './components/side_drawer/side_drawer.vue'
import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue' import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'
import MobileNav from './components/mobile_nav/mobile_nav.vue' import MobileNav from './components/mobile_nav/mobile_nav.vue'
import DesktopNav from './components/desktop_nav/desktop_nav.vue'
import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue' import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'
import PostStatusModal from './components/post_status_modal/post_status_modal.vue' import PostStatusModal from './components/post_status_modal/post_status_modal.vue'
import { windowWidth } from './services/window_utils/window_utils' import GlobalNoticeList from './components/global_notice_list/global_notice_list.vue'
import { windowWidth, windowHeight } from './services/window_utils/window_utils'
import { mapGetters } from 'vuex'
export default { export default {
name: 'app', name: 'app',
@@ -20,7 +23,6 @@ export default {
UserPanel, UserPanel,
NavPanel, NavPanel,
Notifications, Notifications,
SearchBar,
InstanceSpecificPanel, InstanceSpecificPanel,
FeaturesPanel, FeaturesPanel,
WhoToFollowPanel, WhoToFollowPanel,
@@ -29,23 +31,19 @@ export default {
SideDrawer, SideDrawer,
MobilePostStatusButton, MobilePostStatusButton,
MobileNav, MobileNav,
DesktopNav,
SettingsModal,
UserReportingModal, UserReportingModal,
PostStatusModal PostStatusModal,
GlobalNoticeList
}, },
data: () => ({ data: () => ({
mobileActivePanel: 'timeline', mobileActivePanel: 'timeline'
searchBarHidden: true,
supportsMask: window.CSS && window.CSS.supports && (
window.CSS.supports('mask-size', 'contain') ||
window.CSS.supports('-webkit-mask-size', 'contain') ||
window.CSS.supports('-moz-mask-size', 'contain') ||
window.CSS.supports('-ms-mask-size', 'contain') ||
window.CSS.supports('-o-mask-size', 'contain')
)
}), }),
created () { created () {
// Load the locale from the storage // Load the locale from the storage
this.$i18n.locale = this.$store.getters.mergedConfig.interfaceLanguage const val = this.$store.getters.mergedConfig.interfaceLanguage
this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
window.addEventListener('resize', this.updateMobileState) window.addEventListener('resize', this.updateMobileState)
}, },
destroyed () { destroyed () {
@@ -53,44 +51,21 @@ export default {
}, },
computed: { computed: {
currentUser () { return this.$store.state.users.currentUser }, currentUser () { return this.$store.state.users.currentUser },
background () { userBackground () { return this.currentUser.background_image },
return this.currentUser.background_image || this.$store.state.instance.background instanceBackground () {
return this.mergedConfig.hideInstanceWallpaper
? null
: this.$store.state.instance.background
}, },
enableMask () { return this.supportsMask && this.$store.state.instance.logoMask }, background () { return this.userBackground || this.instanceBackground },
logoStyle () {
return {
'visibility': this.enableMask ? 'hidden' : 'visible'
}
},
logoMaskStyle () {
return this.enableMask ? {
'mask-image': `url(${this.$store.state.instance.logo})`
} : {
'background-color': this.enableMask ? '' : 'transparent'
}
},
logoBgStyle () {
return Object.assign({
'margin': `${this.$store.state.instance.logoMargin} 0`,
opacity: this.searchBarHidden ? 1 : 0
}, this.enableMask ? {} : {
'background-color': this.enableMask ? '' : 'transparent'
})
},
logo () { return this.$store.state.instance.logo },
bgStyle () { bgStyle () {
return { if (this.background) {
'background-image': `url(${this.background})`
}
},
bgAppStyle () {
return { return {
'--body-background-image': `url(${this.background})` '--body-background-image': `url(${this.background})`
} }
}
}, },
sitename () { return this.$store.state.instance.name },
chat () { return this.$store.state.chat.channel.state === 'joined' }, chat () { return this.$store.state.chat.channel.state === 'joined' },
hideSitename () { return this.$store.state.instance.hideSitename },
suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled }, suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },
showInstanceSpecificPanel () { showInstanceSpecificPanel () {
return this.$store.state.instance.showInstanceSpecificPanel && return this.$store.state.instance.showInstanceSpecificPanel &&
@@ -99,25 +74,23 @@ export default {
}, },
showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel }, showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },
isMobileLayout () { return this.$store.state.interface.mobileLayout }, isMobileLayout () { return this.$store.state.interface.mobileLayout },
privateMode () { return this.$store.state.instance.private } privateMode () { return this.$store.state.instance.private },
sidebarAlign () {
return {
'order': this.$store.state.instance.sidebarRight ? 99 : 0
}
},
...mapGetters(['mergedConfig'])
}, },
methods: { methods: {
scrollToTop () {
window.scrollTo(0, 0)
},
logout () {
this.$router.replace('/main/public')
this.$store.dispatch('logout')
},
onSearchBarToggled (hidden) {
this.searchBarHidden = hidden
},
updateMobileState () { updateMobileState () {
const mobileLayout = windowWidth() <= 800 const mobileLayout = windowWidth() <= 800
const layoutHeight = windowHeight()
const changed = mobileLayout !== this.isMobileLayout const changed = mobileLayout !== this.isMobileLayout
if (changed) { if (changed) {
this.$store.dispatch('setMobileLayout', mobileLayout) this.$store.dispatch('setMobileLayout', mobileLayout)
} }
this.$store.dispatch('setLayoutHeight', layoutHeight)
} }
} }
} }
+134 -190
View File
@@ -14,7 +14,9 @@
right: -20px; right: -20px;
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 0 50%; background-color: var(--wallpaper);
background-image: var(--body-background-image);
background-position: 50% 50px;
} }
i[class^='icon-'] { i[class^='icon-'] {
@@ -33,6 +35,7 @@ h4 {
max-width: 980px; max-width: 980px;
align-content: flex-start; align-content: flex-start;
} }
.underlay { .underlay {
background-color: rgba(0,0,0,0.15); background-color: rgba(0,0,0,0.15);
background-color: var(--underlay, rgba(0,0,0,0.15)); background-color: var(--underlay, rgba(0,0,0,0.15));
@@ -47,6 +50,7 @@ html {
} }
body { body {
overscroll-behavior-y: none;
font-family: sans-serif; font-family: sans-serif;
font-family: var(--interfaceFont, sans-serif); font-family: var(--interfaceFont, sans-serif);
margin: 0; margin: 0;
@@ -68,7 +72,7 @@ a {
color: var(--link, $fallback--link); color: var(--link, $fallback--link);
} }
button { .button-default {
user-select: none; user-select: none;
color: $fallback--text; color: $fallback--text;
color: var(--btnText, $fallback--text); color: var(--btnText, $fallback--text);
@@ -84,7 +88,8 @@ button {
font-family: sans-serif; font-family: sans-serif;
font-family: var(--interfaceFont, sans-serif); font-family: var(--interfaceFont, sans-serif);
i[class*=icon-] { i[class*=icon-],
.svg-inline--fa {
color: $fallback--text; color: $fallback--text;
color: var(--btnText, $fallback--text); color: var(--btnText, $fallback--text);
} }
@@ -105,6 +110,8 @@ button {
color: var(--btnPressedText, $fallback--text); color: var(--btnPressedText, $fallback--text);
background-color: $fallback--fg; background-color: $fallback--fg;
background-color: var(--btnPressed, $fallback--fg); background-color: var(--btnPressed, $fallback--fg);
svg,
i { i {
color: $fallback--text; color: $fallback--text;
color: var(--btnPressedText, $fallback--text); color: var(--btnPressedText, $fallback--text);
@@ -117,6 +124,8 @@ button {
color: var(--btnDisabledText, $fallback--text); color: var(--btnDisabledText, $fallback--text);
background-color: $fallback--fg; background-color: $fallback--fg;
background-color: var(--btnDisabled, $fallback--fg); background-color: var(--btnDisabled, $fallback--fg);
svg,
i { i {
color: $fallback--text; color: $fallback--text;
color: var(--btnDisabledText, $fallback--text); color: var(--btnDisabledText, $fallback--text);
@@ -130,6 +139,8 @@ button {
background-color: var(--btnToggled, $fallback--fg); background-color: var(--btnToggled, $fallback--fg);
box-shadow: 0px 0px 4px 0px rgba(255, 255, 255, 0.3), 0px 1px 0px 0px rgba(0, 0, 0, 0.2) inset, 0px -1px 0px 0px rgba(255, 255, 255, 0.2) inset; box-shadow: 0px 0px 4px 0px rgba(255, 255, 255, 0.3), 0px 1px 0px 0px rgba(0, 0, 0, 0.2) inset, 0px -1px 0px 0px rgba(255, 255, 255, 0.2) inset;
box-shadow: var(--buttonPressedShadow); box-shadow: var(--buttonPressedShadow);
svg,
i { i {
color: $fallback--text; color: $fallback--text;
color: var(--btnToggledText, $fallback--text); color: var(--btnToggledText, $fallback--text);
@@ -145,6 +156,37 @@ button {
} }
} }
.button-unstyled {
background: none;
border: none;
outline: none;
display: inline;
text-align: initial;
font-size: 100%;
font-family: inherit;
padding: 0;
line-height: unset;
cursor: pointer;
box-sizing: content-box;
color: inherit;
&.-link {
color: $fallback--link;
color: var(--link, $fallback--link);
}
&.-fullwidth {
width: 100%;
}
&.-hover-highlight {
&:hover svg {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
}
}
input, textarea, .select, .input { input, textarea, .select, .input {
&.unstyled { &.unstyled {
@@ -184,7 +226,7 @@ input, textarea, .select, .input {
opacity: 0.5; opacity: 0.5;
} }
.icon-down-open { .select-down-icon {
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
@@ -278,7 +320,7 @@ input, textarea, .select, .input {
+ label::before { + label::before {
flex-shrink: 0; flex-shrink: 0;
display: inline-block; display: inline-block;
content: ''; content: '';
transition: color 200ms; transition: color 200ms;
width: 1.1em; width: 1.1em;
height: 1.1em; height: 1.1em;
@@ -299,6 +341,10 @@ input, textarea, .select, .input {
box-sizing: border-box; box-sizing: border-box;
} }
} }
&.resize-height {
resize: vertical;
}
} }
option { option {
@@ -317,9 +363,9 @@ option {
} }
} }
i[class*=icon-] { i[class*=icon-], .svg-inline--fa {
color: $fallback--icon; color: $fallback--icon;
color: var(--icon, $fallback--icon) color: var(--icon, $fallback--icon);
} }
.btn-block { .btn-block {
@@ -355,117 +401,10 @@ i[class*=icon-] {
padding: 0 10px 0 10px; padding: 0 10px 0 10px;
} }
.item {
flex: 1;
line-height: 50px;
height: 50px;
overflow: hidden;
display: flex;
flex-wrap: wrap;
.nav-icon {
margin-left: 0.4em;
}
&.right {
justify-content: flex-end;
}
}
.auto-size { .auto-size {
flex: 1 flex: 1
} }
.nav-bar {
padding: 0;
width: 100%;
align-items: center;
position: fixed;
height: 50px;
box-sizing: border-box;
button {
&, i[class*=icon-] {
color: $fallback--text;
color: var(--btnTopBarText, $fallback--text);
}
&:active {
background-color: $fallback--fg;
background-color: var(--btnPressedTopBar, $fallback--fg);
color: $fallback--text;
color: var(--btnPressedTopBarText, $fallback--text);
}
&:disabled {
color: $fallback--text;
color: var(--btnDisabledTopBarText, $fallback--text);
}
&.toggled {
color: $fallback--text;
color: var(--btnToggledTopBarText, $fallback--text);
background-color: $fallback--fg;
background-color: var(--btnToggledTopBar, $fallback--fg)
}
}
.logo {
display: flex;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
align-items: stretch;
justify-content: center;
flex: 0 0 auto;
z-index: -1;
transition: opacity;
transition-timing-function: ease-out;
transition-duration: 100ms;
.mask {
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
background-color: $fallback--fg;
background-color: var(--topBarText, $fallback--fg);
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
img {
height: 100%;
object-fit: contain;
display: block;
flex: 0;
}
}
.inner-nav {
position: relative;
margin: auto;
box-sizing: border-box;
padding-left: 10px;
padding-right: 10px;
display: flex;
align-items: center;
flex-basis: 970px;
height: 50px;
a, a i {
color: $fallback--link;
color: var(--topBarLink, $fallback--link);
}
}
}
main-router { main-router {
flex: 1; flex: 1;
} }
@@ -545,6 +484,7 @@ main-router {
color: $fallback--faint; color: $fallback--faint;
color: var(--panelFaint, $fallback--faint); color: var(--panelFaint, $fallback--faint);
} }
.faint-link { .faint-link {
color: $fallback--faint; color: $fallback--faint;
color: var(--faintLink, $fallback--faint); color: var(--faintLink, $fallback--faint);
@@ -556,23 +496,23 @@ main-router {
overflow-x: hidden; overflow-x: hidden;
} }
button { .button-default,
flex-shrink: 0; .alert {
}
button, .alert {
// height: 100%; // height: 100%;
line-height: 21px; line-height: 21px;
min-height: 0; min-height: 0;
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
margin-left: .25em; margin-left: .5em;
min-width: 1px; min-width: 1px;
align-self: stretch; align-self: stretch;
} }
button { .button-default {
&, i[class*=icon-] { flex-shrink: 0;
&,
i[class*=icon-] {
color: $fallback--text; color: $fallback--text;
color: var(--btnPanelText, $fallback--text); color: var(--btnPanelText, $fallback--text);
} }
@@ -595,7 +535,8 @@ main-router {
} }
} }
a { a,
.-link {
color: $fallback--link; color: $fallback--link;
color: var(--panelLink, $fallback--link) color: var(--panelLink, $fallback--link)
} }
@@ -610,15 +551,15 @@ main-router {
border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius; border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;
border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius); border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);
.faint { .faint {
color: $fallback--faint; color: $fallback--faint;
color: var(--panelFaint, $fallback--faint); color: var(--panelFaint, $fallback--faint);
} }
a { a,
.-link {
color: $fallback--link; color: $fallback--link;
color: var(--panelLink, $fallback--link) color: var(--panelLink, $fallback--link);
} }
} }
@@ -645,6 +586,7 @@ nav {
color: var(--faint, $fallback--faint); color: var(--faint, $fallback--faint);
box-shadow: 0px 0px 4px rgba(0,0,0,.6); box-shadow: 0px 0px 4px rgba(0,0,0,.6);
box-shadow: var(--topBarShadow); box-shadow: var(--topBarShadow);
box-sizing: border-box;
} }
.fade-enter-active, .fade-leave-active { .fade-enter-active, .fade-leave-active {
@@ -706,19 +648,24 @@ nav {
flex-grow: 0; flex-grow: 0;
} }
} }
.badge { .badge {
box-sizing: border-box;
display: inline-block; display: inline-block;
border-radius: 99px; border-radius: 99px;
min-width: 22px; max-width: 10em;
max-width: 22px; min-width: 1.7em;
min-height: 22px; height: 1.3em;
max-height: 22px; padding: 0.15em 0.15em;
font-size: 15px;
line-height: 22px;
text-align: center;
vertical-align: middle; vertical-align: middle;
font-weight: normal;
font-style: normal;
font-size: 0.9em;
line-height: 1;
text-align: center;
white-space: nowrap; white-space: nowrap;
padding: 0; overflow: hidden;
text-overflow: ellipsis;
&.badge-notification { &.badge-notification {
background-color: $fallback--cRed; background-color: $fallback--cRed;
@@ -775,16 +722,6 @@ nav {
} }
} }
@media all and (min-width: 800px) {
.logo {
opacity: 1 !important;
}
}
.item.right {
text-align: right;
}
.visibility-notice { .visibility-notice {
padding: .5em; padding: .5em;
border: 1px solid $fallback--faint; border: 1px solid $fallback--faint;
@@ -806,8 +743,16 @@ nav {
} }
} }
.button-icon { .fa-scale-110 {
font-size: 1.2em; &.svg-inline--fa {
font-size: 1.1em;
}
}
.fa-old-padding {
&.svg-inline--fa {
padding: 0 0.3em;
}
} }
@keyframes shakeError { @keyframes shakeError {
@@ -858,53 +803,12 @@ nav {
display: block; display: block;
margin-right: 0.8em; margin-right: 0.8em;
} }
}
.setting-item { .main {
border-bottom: 2px solid var(--fg, $fallback--fg); margin-bottom: 7em;
margin: 1em 1em 1.4em;
padding-bottom: 1.4em;
> div {
margin-bottom: .5em;
&:last-child {
margin-bottom: 0;
} }
} }
&:last-child {
border-bottom: none;
padding-bottom: 0;
margin-bottom: 1em;
}
select {
min-width: 10em;
}
textarea {
width: 100%;
max-width: 100%;
height: 100px;
}
.unavailable,
.unavailable i {
color: var(--cRed, $fallback--cRed);
color: $fallback--cRed;
}
.btn {
min-height: 28px;
min-width: 10em;
padding: 0 2em;
}
.number-input {
max-width: 6em;
}
}
.select-multiple { .select-multiple {
display: flex; display: flex;
.option-list { .option-list {
@@ -938,7 +842,7 @@ nav {
} }
} }
.btn.btn-default { .btn.button-default {
min-height: 28px; min-height: 28px;
} }
@@ -969,3 +873,43 @@ nav {
background-color: $fallback--fg; background-color: $fallback--fg;
background-color: var(--panel, $fallback--fg); background-color: var(--panel, $fallback--fg);
} }
.chat-layout {
// Needed for smoother chat navigation in the desktop Safari (otherwise the chat layout "jumps" as the chat opens).
overflow: hidden;
height: 100%;
// Get rid of scrollbar on body as scrolling happens on different element
body {
overflow: hidden;
}
// Ensures the fixed position of the mobile browser bars on scroll up / down events.
// Prevents the mobile browser bars from overlapping or hiding the message posting form.
@media all and (max-width: 800px) {
body {
height: 100%;
}
#app {
height: 100%;
overflow: hidden;
min-height: auto;
}
#app_bg_wrapper {
overflow: hidden;
}
.main {
overflow: hidden;
height: 100%;
}
#content {
padding-top: 0;
height: 100%;
overflow: visible;
}
}
}
+9 -72
View File
@@ -1,86 +1,23 @@
<template> <template>
<div <div
id="app" id="app"
:style="bgAppStyle" :style="bgStyle"
> >
<div <div
id="app_bg_wrapper" id="app_bg_wrapper"
class="app-bg-wrapper" class="app-bg-wrapper"
:style="bgStyle"
/> />
<MobileNav v-if="isMobileLayout" /> <MobileNav v-if="isMobileLayout" />
<nav <DesktopNav v-else />
v-else <div class="app-bg-wrapper app-container-wrapper" />
id="nav"
class="nav-bar container"
@click="scrollToTop()"
>
<div class="inner-nav">
<div
class="logo"
:style="logoBgStyle"
>
<div
class="mask"
:style="logoMaskStyle"
/>
<img
:src="logo"
:style="logoStyle"
>
</div>
<div class="item">
<router-link
v-if="!hideSitename"
class="site-name"
:to="{ name: 'root' }"
active-class="home"
>
{{ sitename }}
</router-link>
</div>
<div class="item right">
<search-bar
v-if="currentUser || !privateMode"
class="nav-icon mobile-hidden"
@toggled="onSearchBarToggled"
@click.stop.native
/>
<router-link
class="mobile-hidden"
:to="{ name: 'settings'}"
>
<i
class="button-icon icon-cog nav-icon"
:title="$t('nav.preferences')"
/>
</router-link>
<a
v-if="currentUser && currentUser.role === 'admin'"
href="/pleroma/admin/#/login-pleroma"
class="mobile-hidden"
target="_blank"
><i
class="button-icon icon-gauge nav-icon"
:title="$t('nav.administration')"
/></a>
<a
v-if="currentUser"
href="#"
class="mobile-hidden"
@click.prevent="logout"
><i
class="button-icon icon-logout nav-icon"
:title="$t('login.logout')"
/></a>
</div>
</div>
</nav>
<div <div
id="content" id="content"
class="container underlay" class="container underlay"
> >
<div class="sidebar-flexer mobile-hidden"> <div
class="sidebar-flexer mobile-hidden"
:style="sidebarAlign"
>
<div class="sidebar-bounds"> <div class="sidebar-bounds">
<div class="sidebar-scroller"> <div class="sidebar-scroller">
<div class="sidebar"> <div class="sidebar">
@@ -108,9 +45,7 @@
{{ $t("login.hint") }} {{ $t("login.hint") }}
</router-link> </router-link>
</div> </div>
<transition name="fade">
<router-view /> <router-view />
</transition>
</div> </div>
<media-modal /> <media-modal />
</div> </div>
@@ -122,7 +57,9 @@
<MobilePostStatusButton /> <MobilePostStatusButton />
<UserReportingModal /> <UserReportingModal />
<PostStatusModal /> <PostStatusModal />
<SettingsModal />
<portal-target name="modal" /> <portal-target name="modal" />
<GlobalNoticeList />
</div> </div>
</template> </template>
+1
View File
@@ -27,5 +27,6 @@ $fallback--tooltipRadius: 5px;
$fallback--avatarRadius: 4px; $fallback--avatarRadius: 4px;
$fallback--avatarAltRadius: 10px; $fallback--avatarAltRadius: 10px;
$fallback--attachmentRadius: 10px; $fallback--attachmentRadius: 10px;
$fallback--chatMessageRadius: 10px;
$fallback--buttonShadow: 0px 0px 2px 0px rgba(0, 0, 0, 1), 0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px 0px rgba(0, 0, 0, 0.2) inset; $fallback--buttonShadow: 0px 0px 2px 0px rgba(0, 0, 0, 1), 0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset, 0px -1px 0px 0px rgba(0, 0, 0, 0.2) inset;
+84 -28
View File
@@ -7,39 +7,75 @@ import { getOrCreateApp, getClientToken } from '../services/new_api/oauth.js'
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
import { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js' import { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'
import { applyTheme } from '../services/style_setter/style_setter.js' import { applyTheme } from '../services/style_setter/style_setter.js'
import FaviconService from '../services/favicon_service/favicon_service.js'
const getStatusnetConfig = async ({ store }) => { let staticInitialResults = null
const parsedInitialResults = () => {
if (!document.getElementById('initial-results')) {
return null
}
if (!staticInitialResults) {
staticInitialResults = JSON.parse(document.getElementById('initial-results').textContent)
}
return staticInitialResults
}
const decodeUTF8Base64 = (data) => {
const rawData = atob(data)
const array = Uint8Array.from([...rawData].map((char) => char.charCodeAt(0)))
const text = new TextDecoder().decode(array)
return text
}
const preloadFetch = async (request) => {
const data = parsedInitialResults()
if (!data || !data[request]) {
return window.fetch(request)
}
const decoded = decodeUTF8Base64(data[request])
const requestData = JSON.parse(decoded)
return {
ok: true,
json: () => requestData,
text: () => requestData
}
}
const getInstanceConfig = async ({ store }) => {
try { try {
const res = await window.fetch('/api/statusnet/config.json') const res = await preloadFetch('/api/v1/instance')
if (res.ok) { if (res.ok) {
const data = await res.json() const data = await res.json()
const { name, closed: registrationClosed, textlimit, uploadlimit, server, vapidPublicKey, safeDMMentionsEnabled } = data.site const textlimit = data.max_toot_chars
const vapidPublicKey = data.pleroma.vapid_public_key
store.dispatch('setInstanceOption', { name: 'name', value: name }) store.dispatch('setInstanceOption', { name: 'textlimit', value: textlimit })
store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') }) store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })
store.dispatch('setInstanceOption', { name: 'textlimit', value: parseInt(textlimit) })
store.dispatch('setInstanceOption', { name: 'server', value: server })
store.dispatch('setInstanceOption', { name: 'safeDM', value: safeDMMentionsEnabled !== '0' })
// TODO: default values for this stuff, added if to not make it break on
// my dev config out of the box.
if (uploadlimit) {
store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadlimit.uploadlimit) })
store.dispatch('setInstanceOption', { name: 'avatarlimit', value: parseInt(uploadlimit.avatarlimit) })
store.dispatch('setInstanceOption', { name: 'backgroundlimit', value: parseInt(uploadlimit.backgroundlimit) })
store.dispatch('setInstanceOption', { name: 'bannerlimit', value: parseInt(uploadlimit.bannerlimit) })
}
if (vapidPublicKey) { if (vapidPublicKey) {
store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey }) store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })
} }
return data.site.pleromafe
} else { } else {
throw (res) throw (res)
} }
} catch (error) { } catch (error) {
console.error('Could not load statusnet config, potentially fatal') console.error('Could not load instance config, potentially fatal')
console.error(error)
}
}
const getBackendProvidedConfig = async ({ store }) => {
try {
const res = await window.fetch('/api/pleroma/frontend_configurations')
if (res.ok) {
const data = await res.json()
return data.pleroma_fe
} else {
throw (res)
}
} catch (error) {
console.error('Could not load backend-provided frontend config, potentially fatal')
console.error(error) console.error(error)
} }
} }
@@ -96,6 +132,7 @@ const setSettings = async ({ apiConfig, staticConfig, store }) => {
? 0 ? 0
: config.logoMargin : config.logoMargin
}) })
copyInstanceOption('logoLeft')
store.commit('authFlow/setInitialStrategy', config.loginMethod) store.commit('authFlow/setInitialStrategy', config.loginMethod)
copyInstanceOption('redirectRootNoLogin') copyInstanceOption('redirectRootNoLogin')
@@ -108,9 +145,9 @@ const setSettings = async ({ apiConfig, staticConfig, store }) => {
copyInstanceOption('subjectLineBehavior') copyInstanceOption('subjectLineBehavior')
copyInstanceOption('postContentType') copyInstanceOption('postContentType')
copyInstanceOption('alwaysShowSubjectInput') copyInstanceOption('alwaysShowSubjectInput')
copyInstanceOption('noAttachmentLinks')
copyInstanceOption('showFeaturesPanel') copyInstanceOption('showFeaturesPanel')
copyInstanceOption('hideSitename') copyInstanceOption('hideSitename')
copyInstanceOption('sidebarRight')
return store.dispatch('setTheme', config['theme']) return store.dispatch('setTheme', config['theme'])
} }
@@ -132,7 +169,7 @@ const getTOS = async ({ store }) => {
const getInstancePanel = async ({ store }) => { const getInstancePanel = async ({ store }) => {
try { try {
const res = await window.fetch('/instance/panel.html') const res = await preloadFetch('/instance/panel.html')
if (res.ok) { if (res.ok) {
const html = await res.text() const html = await res.text()
store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html }) store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })
@@ -189,24 +226,34 @@ const getAppSecret = async ({ store }) => {
const resolveStaffAccounts = ({ store, accounts }) => { const resolveStaffAccounts = ({ store, accounts }) => {
const nicknames = accounts.map(uri => uri.split('/').pop()) const nicknames = accounts.map(uri => uri.split('/').pop())
nicknames.map(nickname => store.dispatch('fetchUser', nickname))
store.dispatch('setInstanceOption', { name: 'staffAccounts', value: nicknames }) store.dispatch('setInstanceOption', { name: 'staffAccounts', value: nicknames })
} }
const getNodeInfo = async ({ store }) => { const getNodeInfo = async ({ store }) => {
try { try {
const res = await window.fetch('/nodeinfo/2.0.json') const res = await preloadFetch('/nodeinfo/2.0.json')
if (res.ok) { if (res.ok) {
const data = await res.json() const data = await res.json()
const metadata = data.metadata const metadata = data.metadata
const features = metadata.features const features = metadata.features
store.dispatch('setInstanceOption', { name: 'name', value: metadata.nodeName })
store.dispatch('setInstanceOption', { name: 'registrationOpen', value: data.openRegistrations })
store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') }) store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') })
store.dispatch('setInstanceOption', { name: 'safeDM', value: features.includes('safe_dm_mentions') })
store.dispatch('setInstanceOption', { name: 'chatAvailable', value: features.includes('chat') }) store.dispatch('setInstanceOption', { name: 'chatAvailable', value: features.includes('chat') })
store.dispatch('setInstanceOption', { name: 'pleromaChatMessagesAvailable', value: features.includes('pleroma_chat_messages') })
store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') }) store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })
store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') }) store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })
store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits }) store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })
store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled }) store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })
const uploadLimits = metadata.uploadLimits
store.dispatch('setInstanceOption', { name: 'uploadlimit', value: parseInt(uploadLimits.general) })
store.dispatch('setInstanceOption', { name: 'avatarlimit', value: parseInt(uploadLimits.avatar) })
store.dispatch('setInstanceOption', { name: 'backgroundlimit', value: parseInt(uploadLimits.background) })
store.dispatch('setInstanceOption', { name: 'bannerlimit', value: parseInt(uploadLimits.banner) })
store.dispatch('setInstanceOption', { name: 'fieldsLimits', value: metadata.fieldsLimits })
store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames }) store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames })
store.dispatch('setInstanceOption', { name: 'postFormats', value: metadata.postFormats }) store.dispatch('setInstanceOption', { name: 'postFormats', value: metadata.postFormats })
@@ -257,7 +304,7 @@ const getNodeInfo = async ({ store }) => {
const setConfig = async ({ store }) => { const setConfig = async ({ store }) => {
// apiConfig, staticConfig // apiConfig, staticConfig
const configInfos = await Promise.all([getStatusnetConfig({ store }), getStaticConfig()]) const configInfos = await Promise.all([getBackendProvidedConfig({ store }), getStaticConfig()])
const apiConfig = configInfos[0] const apiConfig = configInfos[0]
const staticConfig = configInfos[1] const staticConfig = configInfos[1]
@@ -280,6 +327,13 @@ const checkOAuthToken = async ({ store }) => {
const afterStoreSetup = async ({ store, i18n }) => { const afterStoreSetup = async ({ store, i18n }) => {
const width = windowWidth() const width = windowWidth()
store.dispatch('setMobileLayout', width <= 800) store.dispatch('setMobileLayout', width <= 800)
FaviconService.initFaviconService()
const overrides = window.___pleromafe_dev_overrides || {}
const server = (typeof overrides.target !== 'undefined') ? overrides.target : window.location.origin
store.dispatch('setInstanceOption', { name: 'server', value: server })
await setConfig({ store }) await setConfig({ store })
const { customTheme, customThemeSource } = store.state.config const { customTheme, customThemeSource } = store.state.config
@@ -299,16 +353,18 @@ const afterStoreSetup = async ({ store, i18n }) => {
} }
// Now we can try getting the server settings and logging in // Now we can try getting the server settings and logging in
// Most of these are preloaded into the index.html so blocking is minimized
await Promise.all([ await Promise.all([
checkOAuthToken({ store }), checkOAuthToken({ store }),
getTOS({ store }),
getInstancePanel({ store }), getInstancePanel({ store }),
getStickers({ store }), getNodeInfo({ store }),
getNodeInfo({ store }) getInstanceConfig({ store })
]) ])
// Start fetching things that don't need to block the UI // Start fetching things that don't need to block the UI
store.dispatch('fetchMutes') store.dispatch('fetchMutes')
getTOS({ store })
getStickers({ store })
const router = new VueRouter({ const router = new VueRouter({
mode: 'history', mode: 'history',
+15 -6
View File
@@ -2,15 +2,16 @@ import PublicTimeline from 'components/public_timeline/public_timeline.vue'
import PublicAndExternalTimeline from 'components/public_and_external_timeline/public_and_external_timeline.vue' import PublicAndExternalTimeline from 'components/public_and_external_timeline/public_and_external_timeline.vue'
import FriendsTimeline from 'components/friends_timeline/friends_timeline.vue' import FriendsTimeline from 'components/friends_timeline/friends_timeline.vue'
import TagTimeline from 'components/tag_timeline/tag_timeline.vue' import TagTimeline from 'components/tag_timeline/tag_timeline.vue'
import BookmarkTimeline from 'components/bookmark_timeline/bookmark_timeline.vue'
import ConversationPage from 'components/conversation-page/conversation-page.vue' import ConversationPage from 'components/conversation-page/conversation-page.vue'
import Interactions from 'components/interactions/interactions.vue' import Interactions from 'components/interactions/interactions.vue'
import DMs from 'components/dm_timeline/dm_timeline.vue' import DMs from 'components/dm_timeline/dm_timeline.vue'
import ChatList from 'components/chat_list/chat_list.vue'
import Chat from 'components/chat/chat.vue'
import UserProfile from 'components/user_profile/user_profile.vue' import UserProfile from 'components/user_profile/user_profile.vue'
import Search from 'components/search/search.vue' import Search from 'components/search/search.vue'
import Settings from 'components/settings/settings.vue'
import Registration from 'components/registration/registration.vue' import Registration from 'components/registration/registration.vue'
import PasswordReset from 'components/password_reset/password_reset.vue' import PasswordReset from 'components/password_reset/password_reset.vue'
import UserSettings from 'components/user_settings/user_settings.vue'
import FollowRequests from 'components/follow_requests/follow_requests.vue' import FollowRequests from 'components/follow_requests/follow_requests.vue'
import OAuthCallback from 'components/oauth_callback/oauth_callback.vue' import OAuthCallback from 'components/oauth_callback/oauth_callback.vue'
import Notifications from 'components/notifications/notifications.vue' import Notifications from 'components/notifications/notifications.vue'
@@ -29,7 +30,7 @@ export default (store) => {
} }
} }
return [ let routes = [
{ name: 'root', { name: 'root',
path: '/', path: '/',
redirect: _to => { redirect: _to => {
@@ -42,6 +43,7 @@ export default (store) => {
{ name: 'public-timeline', path: '/main/public', component: PublicTimeline }, { name: 'public-timeline', path: '/main/public', component: PublicTimeline },
{ name: 'friends', path: '/main/friends', component: FriendsTimeline, beforeEnter: validateAuthenticatedRoute }, { name: 'friends', path: '/main/friends', component: FriendsTimeline, beforeEnter: validateAuthenticatedRoute },
{ name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline }, { name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline },
{ name: 'bookmarks', path: '/bookmarks', component: BookmarkTimeline },
{ name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } }, { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
{ name: 'remote-user-profile-acct', { name: 'remote-user-profile-acct',
path: '/remote-users/(@?):username([^/@]+)@:hostname([^/@]+)', path: '/remote-users/(@?):username([^/@]+)@:hostname([^/@]+)',
@@ -56,19 +58,26 @@ export default (store) => {
{ name: 'external-user-profile', path: '/users/:id', component: UserProfile }, { name: 'external-user-profile', path: '/users/:id', component: UserProfile },
{ name: 'interactions', path: '/users/:username/interactions', component: Interactions, beforeEnter: validateAuthenticatedRoute }, { name: 'interactions', path: '/users/:username/interactions', component: Interactions, beforeEnter: validateAuthenticatedRoute },
{ name: 'dms', path: '/users/:username/dms', component: DMs, beforeEnter: validateAuthenticatedRoute }, { name: 'dms', path: '/users/:username/dms', component: DMs, beforeEnter: validateAuthenticatedRoute },
{ name: 'settings', path: '/settings', component: Settings },
{ name: 'registration', path: '/registration', component: Registration }, { name: 'registration', path: '/registration', component: Registration },
{ name: 'password-reset', path: '/password-reset', component: PasswordReset, props: true }, { name: 'password-reset', path: '/password-reset', component: PasswordReset, props: true },
{ name: 'registration-token', path: '/registration/:token', component: Registration }, { name: 'registration-token', path: '/registration/:token', component: Registration },
{ name: 'friend-requests', path: '/friend-requests', component: FollowRequests, beforeEnter: validateAuthenticatedRoute }, { name: 'friend-requests', path: '/friend-requests', component: FollowRequests, beforeEnter: validateAuthenticatedRoute },
{ name: 'user-settings', path: '/user-settings', component: UserSettings, beforeEnter: validateAuthenticatedRoute },
{ name: 'notifications', path: '/:username/notifications', component: Notifications, beforeEnter: validateAuthenticatedRoute }, { name: 'notifications', path: '/:username/notifications', component: Notifications, beforeEnter: validateAuthenticatedRoute },
{ name: 'login', path: '/login', component: AuthForm }, { name: 'login', path: '/login', component: AuthForm },
{ name: 'chat', path: '/chat', component: ChatPanel, props: () => ({ floating: false }) }, { name: 'chat-panel', path: '/chat-panel', component: ChatPanel, props: () => ({ floating: false }) },
{ name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }, { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },
{ name: 'search', path: '/search', component: Search, props: (route) => ({ query: route.query.query }) }, { name: 'search', path: '/search', component: Search, props: (route) => ({ query: route.query.query }) },
{ name: 'who-to-follow', path: '/who-to-follow', component: WhoToFollow, beforeEnter: validateAuthenticatedRoute }, { name: 'who-to-follow', path: '/who-to-follow', component: WhoToFollow, beforeEnter: validateAuthenticatedRoute },
{ name: 'about', path: '/about', component: About }, { name: 'about', path: '/about', component: About },
{ name: 'user-profile', path: '/(users/)?:name', component: UserProfile } { name: 'user-profile', path: '/(users/)?:name', component: UserProfile }
] ]
if (store.state.instance.pleromaChatMessagesAvailable) {
routes = routes.concat([
{ name: 'chat', path: '/users/:username/chats/:recipient_id', component: Chat, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute },
{ name: 'chats', path: '/users/:username/chats', component: ChatList, meta: { dontScroll: false }, beforeEnter: validateAuthenticatedRoute }
])
}
return routes
} }
@@ -1,5 +1,14 @@
import { mapState } from 'vuex'
import ProgressButton from '../progress_button/progress_button.vue' import ProgressButton from '../progress_button/progress_button.vue'
import Popover from '../popover/popover.vue' import Popover from '../popover/popover.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faEllipsisV
} from '@fortawesome/free-solid-svg-icons'
library.add(
faEllipsisV
)
const AccountActions = { const AccountActions = {
props: [ props: [
@@ -26,8 +35,19 @@ const AccountActions = {
this.$store.dispatch('unblockUser', this.user.id) this.$store.dispatch('unblockUser', this.user.id)
}, },
reportUser () { reportUser () {
this.$store.dispatch('openUserReportingModal', this.user.id) this.$store.dispatch('openUserReportingModal', { userId: this.user.id })
},
openChat () {
this.$router.push({
name: 'chat',
params: { recipient_id: this.user.id }
})
} }
},
computed: {
...mapState({
pleromaChatMessagesAvailable: state => state.instance.pleromaChatMessagesAvailable
})
} }
} }
@@ -1,8 +1,10 @@
<template> <template>
<div class="account-actions"> <div class="AccountActions">
<Popover <Popover
trigger="click" trigger="click"
placement="bottom" placement="bottom"
:bound-to="{ x: 'container' }"
remove-padding
> >
<div <div
slot="content" slot="content"
@@ -12,14 +14,14 @@
<template v-if="relationship.following"> <template v-if="relationship.following">
<button <button
v-if="relationship.showing_reblogs" v-if="relationship.showing_reblogs"
class="btn btn-default dropdown-item" class="btn button-default dropdown-item"
@click="hideRepeats" @click="hideRepeats"
> >
{{ $t('user_card.hide_repeats') }} {{ $t('user_card.hide_repeats') }}
</button> </button>
<button <button
v-if="!relationship.showing_reblogs" v-if="!relationship.showing_reblogs"
class="btn btn-default dropdown-item" class="btn button-default dropdown-item"
@click="showRepeats" @click="showRepeats"
> >
{{ $t('user_card.show_repeats') }} {{ $t('user_card.show_repeats') }}
@@ -31,31 +33,41 @@
</template> </template>
<button <button
v-if="relationship.blocking" v-if="relationship.blocking"
class="btn btn-default btn-block dropdown-item" class="btn button-default btn-block dropdown-item"
@click="unblockUser" @click="unblockUser"
> >
{{ $t('user_card.unblock') }} {{ $t('user_card.unblock') }}
</button> </button>
<button <button
v-else v-else
class="btn btn-default btn-block dropdown-item" class="btn button-default btn-block dropdown-item"
@click="blockUser" @click="blockUser"
> >
{{ $t('user_card.block') }} {{ $t('user_card.block') }}
</button> </button>
<button <button
class="btn btn-default btn-block dropdown-item" class="btn button-default btn-block dropdown-item"
@click="reportUser" @click="reportUser"
> >
{{ $t('user_card.report') }} {{ $t('user_card.report') }}
</button> </button>
<button
v-if="pleromaChatMessagesAvailable"
class="btn button-default btn-block dropdown-item"
@click="openChat"
>
{{ $t('user_card.message') }}
</button>
</div> </div>
</div> </div>
<div <div
slot="trigger" slot="trigger"
class="btn btn-default ellipsis-button" class="ellipsis-button"
> >
<i class="icon-ellipsis trigger-button" /> <FAIcon
class="icon"
icon="ellipsis-v"
/>
</div> </div>
</Popover> </Popover>
</div> </div>
@@ -65,22 +77,22 @@
<style lang="scss"> <style lang="scss">
@import '../../_variables.scss'; @import '../../_variables.scss';
.account-actions { .AccountActions {
margin: 0 .8em; button.dropdown-item {
}
.account-actions button.dropdown-item {
margin-left: 0; margin-left: 0;
} }
.account-actions .trigger-button { .ellipsis-button {
cursor: pointer;
width: 2.5em;
margin: -0.5em 0;
padding: 0.5em 0;
text-align: center;
&:not(:hover) .icon {
color: $fallback--lightText; color: $fallback--lightText;
color: var(--lightText, $fallback--lightText); color: var(--lightText, $fallback--lightText);
opacity: .8; }
cursor: pointer;
&:hover {
color: $fallback--text;
color: var(--text, $fallback--text);
} }
} }
</style> </style>
@@ -0,0 +1,41 @@
<template>
<div class="async-component-error">
<div>
<h4>
{{ $t('general.generic_error') }}
</h4>
<p>
{{ $t('general.error_retry') }}
</p>
<button
class="btn button-default"
@click="retry"
>
{{ $t('general.retry') }}
</button>
</div>
</div>
</template>
<script>
export default {
methods: {
retry () {
this.$emit('resetAsyncComponent')
}
}
}
</script>
<style lang="scss">
.async-component-error {
display: flex;
height: 100%;
align-items: center;
justify-content: center;
.btn {
margin: .5em;
padding: .5em 2em;
}
}
</style>
+41 -9
View File
@@ -3,12 +3,29 @@ import VideoAttachment from '../video_attachment/video_attachment.vue'
import nsfwImage from '../../assets/nsfw.png' import nsfwImage from '../../assets/nsfw.png'
import fileTypeService from '../../services/file_type/file_type.service.js' import fileTypeService from '../../services/file_type/file_type.service.js'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faFile,
faMusic,
faImage,
faVideo,
faPlayCircle,
faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
faFile,
faMusic,
faImage,
faVideo,
faPlayCircle,
faTimes
)
const Attachment = { const Attachment = {
props: [ props: [
'attachment', 'attachment',
'nsfw', 'nsfw',
'statusId',
'size', 'size',
'allowPlay', 'allowPlay',
'setMedia', 'setMedia',
@@ -30,9 +47,21 @@ const Attachment = {
VideoAttachment VideoAttachment
}, },
computed: { computed: {
usePlaceHolder () { usePlaceholder () {
return this.size === 'hide' || this.type === 'unknown' return this.size === 'hide' || this.type === 'unknown'
}, },
placeholderName () {
if (this.attachment.description === '' || !this.attachment.description) {
return this.type.toUpperCase()
}
return this.attachment.description
},
placeholderIconClass () {
if (this.type === 'image') return 'image'
if (this.type === 'video') return 'video'
if (this.type === 'audio') return 'music'
return 'file'
},
referrerpolicy () { referrerpolicy () {
return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer' return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer'
}, },
@@ -49,7 +78,15 @@ const Attachment = {
return this.size === 'small' return this.size === 'small'
}, },
fullwidth () { fullwidth () {
return this.type === 'html' || this.type === 'audio' if (this.size === 'hide') return false
return this.type === 'html' || this.type === 'audio' || this.type === 'unknown'
},
useModal () {
const modalTypes = this.size === 'hide' ? ['image', 'video', 'audio']
: this.mergedConfig.playVideosInModal
? ['image', 'video']
: ['image']
return modalTypes.includes(this.type)
}, },
...mapGetters(['mergedConfig']) ...mapGetters(['mergedConfig'])
}, },
@@ -60,12 +97,7 @@ const Attachment = {
} }
}, },
openModal (event) { openModal (event) {
const modalTypes = this.mergedConfig.playVideosInModal if (this.useModal) {
? ['image', 'video']
: ['image']
if (fileTypeService.fileMatchesSomeType(modalTypes, this.attachment) ||
this.usePlaceHolder
) {
event.stopPropagation() event.stopPropagation()
event.preventDefault() event.preventDefault()
this.setMedia() this.setMedia()
+55 -30
View File
@@ -1,6 +1,7 @@
<template> <template>
<div <div
v-if="usePlaceHolder" v-if="usePlaceholder"
:class="{ 'fullwidth': fullwidth }"
@click="openModal" @click="openModal"
> >
<a <a
@@ -8,8 +9,11 @@
class="placeholder" class="placeholder"
target="_blank" target="_blank"
:href="attachment.url" :href="attachment.url"
:alt="attachment.description"
:title="attachment.description"
> >
[{{ nsfw ? "NSFW/" : "" }}{{ type.toUpperCase() }}] <FAIcon :icon="placeholderIconClass" />
<b>{{ nsfw ? "NSFW / " : "" }}</b>{{ placeholderName }}
</a> </a>
</div> </div>
<div <div
@@ -22,7 +26,9 @@
v-if="hidden" v-if="hidden"
class="image-attachment" class="image-attachment"
:href="attachment.url" :href="attachment.url"
@click.prevent="toggleHidden" :alt="attachment.description"
:title="attachment.description"
@click.prevent.stop="toggleHidden"
> >
<img <img
:key="nsfwImage" :key="nsfwImage"
@@ -30,20 +36,19 @@
:src="nsfwImage" :src="nsfwImage"
:class="{'small': isSmall}" :class="{'small': isSmall}"
> >
<i <FAIcon
v-if="type === 'video'" v-if="type === 'video'"
class="play-icon icon-play-circled" class="play-icon"
icon="play-circle"
/> />
</a> </a>
<div <button
v-if="nsfw && hideNsfwLocal && !hidden" v-if="nsfw && hideNsfwLocal && !hidden"
class="hider" class="button-unstyled hider"
>
<a
href="#"
@click.prevent="toggleHidden" @click.prevent="toggleHidden"
>Hide</a> >
</div> <FAIcon icon="times" />
</button>
<a <a
v-if="type === 'image' && (!hidden || preloadImage)" v-if="type === 'image' && (!hidden || preloadImage)"
@@ -51,14 +56,15 @@
:class="{'hidden': hidden && preloadImage }" :class="{'hidden': hidden && preloadImage }"
:href="attachment.url" :href="attachment.url"
target="_blank" target="_blank"
:title="attachment.description"
@click="openModal" @click="openModal"
> >
<StillImage <StillImage
class="image"
:referrerpolicy="referrerpolicy" :referrerpolicy="referrerpolicy"
:mimetype="attachment.mimetype" :mimetype="attachment.mimetype"
:src="attachment.large_thumb_url || attachment.url" :src="attachment.large_thumb_url || attachment.url"
:image-load-handler="onImageLoad" :image-load-handler="onImageLoad"
:alt="attachment.description"
/> />
</a> </a>
@@ -73,17 +79,24 @@
class="video" class="video"
:attachment="attachment" :attachment="attachment"
:controls="allowPlay" :controls="allowPlay"
@play="$emit('play')"
@pause="$emit('pause')"
/> />
<i <FAIcon
v-if="!allowPlay" v-if="!allowPlay"
class="play-icon icon-play-circled" class="play-icon"
icon="play-circle"
/> />
</a> </a>
<audio <audio
v-if="type === 'audio'" v-if="type === 'audio'"
:src="attachment.url" :src="attachment.url"
:alt="attachment.description"
:title="attachment.description"
controls controls
@play="$emit('play')"
@pause="$emit('pause')"
/> />
<div <div
@@ -116,22 +129,23 @@
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
.attachment.media-upload-container { .non-gallery {
flex: 0 0 auto;
max-height: 200px;
max-width: 100%; max-width: 100%;
display: flex;
align-items: center;
video {
max-width: 100%;
}
} }
.placeholder { .placeholder {
margin-right: 8px; display: inline-block;
margin-bottom: 4px; padding: 0.3em 1em 0.3em 0;
color: $fallback--link; color: $fallback--link;
color: var(--postLink, $fallback--link); color: var(--postLink, $fallback--link);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 100%;
svg {
color: inherit;
}
} }
.nsfw-placeholder { .nsfw-placeholder {
@@ -218,15 +232,23 @@
.hider { .hider {
position: absolute; position: absolute;
right: 0; right: 0;
white-space: nowrap;
margin: 10px; margin: 10px;
padding: 5px; padding: 0;
background: rgba(230,230,230,0.6);
font-weight: bold;
z-index: 4; z-index: 4;
line-height: 1;
border-radius: $fallback--tooltipRadius; border-radius: $fallback--tooltipRadius;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius); border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
text-align: center;
width: 2em;
height: 2em;
font-size: 1.25em;
// TODO: theming? hard to theme with unknown background image color
background: rgba(230, 230, 230, 0.7);
.svg-inline--fa {
color: rgba(0, 0, 0, 0.6);
}
&:hover .svg-inline--fa {
color: rgba(0, 0, 0, 0.9);
}
} }
video { video {
@@ -276,8 +298,11 @@
} }
.image-attachment { .image-attachment {
&,
& .image {
width: 100%; width: 100%;
height: 100%; height: 100%;
}
&.hidden { &.hidden {
display: none; display: none;
@@ -42,7 +42,7 @@
class="basic-user-card-screen-name" class="basic-user-card-screen-name"
:to="userProfileLink(user)" :to="userProfileLink(user)"
> >
@{{ user.screen_name }} @{{ user.screen_name_ui }}
</router-link> </router-link>
</div> </div>
<slot /> <slot />
+2 -2
View File
@@ -3,7 +3,7 @@
<div class="block-card-content-container"> <div class="block-card-content-container">
<button <button
v-if="blocked" v-if="blocked"
class="btn btn-default" class="btn button-default"
:disabled="progress" :disabled="progress"
@click="unblockUser" @click="unblockUser"
> >
@@ -16,7 +16,7 @@
</button> </button>
<button <button
v-else v-else
class="btn btn-default" class="btn button-default"
:disabled="progress" :disabled="progress"
@click="blockUser" @click="blockUser"
> >
@@ -0,0 +1,17 @@
import Timeline from '../timeline/timeline.vue'
const Bookmarks = {
computed: {
timeline () {
return this.$store.state.statuses.timelines.bookmarks
}
},
components: {
Timeline
},
destroyed () {
this.$store.commit('clearTimeline', { timeline: 'bookmarks' })
}
}
export default Bookmarks
@@ -0,0 +1,9 @@
<template>
<Timeline
:title="$t('nav.bookmarks')"
:timeline="timeline"
:timeline-name="'bookmarks'"
/>
</template>
<script src="./bookmark_timeline.js"></script>
+409
View File
@@ -0,0 +1,409 @@
import _ from 'lodash'
import { WSConnectionStatus } from '../../services/api/api.service.js'
import { mapGetters, mapState } from 'vuex'
import ChatMessage from '../chat_message/chat_message.vue'
import PostStatusForm from '../post_status_form/post_status_form.vue'
import ChatTitle from '../chat_title/chat_title.vue'
import chatService from '../../services/chat_service/chat_service.js'
import { promiseInterval } from '../../services/promise_interval/promise_interval.js'
import { getScrollPosition, getNewTopPosition, isBottomedOut, scrollableContainerHeight, isScrollable } from './chat_layout_utils.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faChevronDown,
faChevronLeft
} from '@fortawesome/free-solid-svg-icons'
import { buildFakeMessage } from '../../services/chat_utils/chat_utils.js'
library.add(
faChevronDown,
faChevronLeft
)
const BOTTOMED_OUT_OFFSET = 10
const JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET = 150
const SAFE_RESIZE_TIME_OFFSET = 100
const MARK_AS_READ_DELAY = 1500
const MAX_RETRIES = 10
const Chat = {
components: {
ChatMessage,
ChatTitle,
PostStatusForm
},
data () {
return {
jumpToBottomButtonVisible: false,
hoveredMessageChainId: undefined,
lastScrollPosition: {},
scrollableContainerHeight: '100%',
errorLoadingChat: false,
messageRetriers: {}
}
},
created () {
this.startFetching()
window.addEventListener('resize', this.handleLayoutChange)
},
mounted () {
window.addEventListener('scroll', this.handleScroll)
if (typeof document.hidden !== 'undefined') {
document.addEventListener('visibilitychange', this.handleVisibilityChange, false)
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.handleResize()
})
this.setChatLayout()
},
destroyed () {
window.removeEventListener('scroll', this.handleScroll)
window.removeEventListener('resize', this.handleLayoutChange)
this.unsetChatLayout()
if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)
this.$store.dispatch('clearCurrentChat')
},
computed: {
recipient () {
return this.currentChat && this.currentChat.account
},
recipientId () {
return this.$route.params.recipient_id
},
formPlaceholder () {
if (this.recipient) {
return this.$t('chats.message_user', { nickname: this.recipient.screen_name_ui })
} else {
return ''
}
},
chatViewItems () {
return chatService.getView(this.currentChatMessageService)
},
newMessageCount () {
return this.currentChatMessageService && this.currentChatMessageService.newMessageCount
},
streamingEnabled () {
return this.mergedConfig.useStreamingApi && this.mastoUserSocketStatus === WSConnectionStatus.JOINED
},
...mapGetters([
'currentChat',
'currentChatMessageService',
'findOpenedChatByRecipientId',
'mergedConfig'
]),
...mapState({
backendInteractor: state => state.api.backendInteractor,
mastoUserSocketStatus: state => state.api.mastoUserSocketStatus,
mobileLayout: state => state.interface.mobileLayout,
layoutHeight: state => state.interface.layoutHeight,
currentUser: state => state.users.currentUser
})
},
watch: {
chatViewItems () {
// We don't want to scroll to the bottom on a new message when the user is viewing older messages.
// Therefore we need to know whether the scroll position was at the bottom before the DOM update.
const bottomedOutBeforeUpdate = this.bottomedOut(BOTTOMED_OUT_OFFSET)
this.$nextTick(() => {
if (bottomedOutBeforeUpdate) {
this.scrollDown()
}
})
},
'$route': function () {
this.startFetching()
},
layoutHeight () {
this.handleResize({ expand: true })
},
mastoUserSocketStatus (newValue) {
if (newValue === WSConnectionStatus.JOINED) {
this.fetchChat({ isFirstFetch: true })
}
}
},
methods: {
// Used to animate the avatar near the first message of the message chain when any message belonging to the chain is hovered
onMessageHover ({ isHovered, messageChainId }) {
this.hoveredMessageChainId = isHovered ? messageChainId : undefined
},
onFilesDropped () {
this.$nextTick(() => {
this.handleResize()
this.updateScrollableContainerHeight()
})
},
handleVisibilityChange () {
this.$nextTick(() => {
if (!document.hidden && this.bottomedOut(BOTTOMED_OUT_OFFSET)) {
this.scrollDown({ forceRead: true })
}
})
},
setChatLayout () {
// This is a hacky way to adjust the global layout to the mobile chat (without modifying the rest of the app).
// This layout prevents empty spaces from being visible at the bottom
// of the chat on iOS Safari (`safe-area-inset`) when
// - the on-screen keyboard appears and the user starts typing
// - the user selects the text inside the input area
// - the user selects and deletes the text that is multiple lines long
// TODO: unify the chat layout with the global layout.
let html = document.querySelector('html')
if (html) {
html.classList.add('chat-layout')
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
})
},
unsetChatLayout () {
let html = document.querySelector('html')
if (html) {
html.classList.remove('chat-layout')
}
},
handleLayoutChange () {
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.scrollDown()
})
},
// Ensures the proper position of the posting form in the mobile layout (the mobile browser panel does not overlap or hide it)
updateScrollableContainerHeight () {
const header = this.$refs.header
const footer = this.$refs.footer
const inner = this.mobileLayout ? window.document.body : this.$refs.inner
this.scrollableContainerHeight = scrollableContainerHeight(inner, header, footer) + 'px'
},
// Preserves the scroll position when OSK appears or the posting form changes its height.
handleResize (opts = {}) {
const { expand = false, delayed = false } = opts
if (delayed) {
setTimeout(() => {
this.handleResize({ ...opts, delayed: false })
}, SAFE_RESIZE_TIME_OFFSET)
return
}
this.$nextTick(() => {
this.updateScrollableContainerHeight()
const { offsetHeight = undefined } = this.lastScrollPosition
this.lastScrollPosition = getScrollPosition(this.$refs.scrollable)
const diff = this.lastScrollPosition.offsetHeight - offsetHeight
if (diff < 0 || (!this.bottomedOut() && expand)) {
this.$nextTick(() => {
this.updateScrollableContainerHeight()
this.$refs.scrollable.scrollTo({
top: this.$refs.scrollable.scrollTop - diff,
left: 0
})
})
}
})
},
scrollDown (options = {}) {
const { behavior = 'auto', forceRead = false } = options
const scrollable = this.$refs.scrollable
if (!scrollable) { return }
this.$nextTick(() => {
scrollable.scrollTo({ top: scrollable.scrollHeight, left: 0, behavior })
})
if (forceRead) {
this.readChat()
}
},
readChat () {
if (!(this.currentChatMessageService && this.currentChatMessageService.maxId)) { return }
if (document.hidden) { return }
const lastReadId = this.currentChatMessageService.maxId
this.$store.dispatch('readChat', {
id: this.currentChat.id,
lastReadId
})
},
bottomedOut (offset) {
return isBottomedOut(this.$refs.scrollable, offset)
},
reachedTop () {
const scrollable = this.$refs.scrollable
return scrollable && scrollable.scrollTop <= 0
},
cullOlderCheck () {
window.setTimeout(() => {
if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {
this.$store.dispatch('cullOlderMessages', this.currentChatMessageService.chatId)
}
}, 5000)
},
handleScroll: _.throttle(function () {
if (!this.currentChat) { return }
if (this.reachedTop()) {
this.fetchChat({ maxId: this.currentChatMessageService.minId })
} else if (this.bottomedOut(JUMP_TO_BOTTOM_BUTTON_VISIBILITY_OFFSET)) {
this.jumpToBottomButtonVisible = false
this.cullOlderCheck()
if (this.newMessageCount > 0) {
// Use a delay before marking as read to prevent situation where new messages
// arrive just as you're leaving the view and messages that you didn't actually
// get to see get marked as read.
window.setTimeout(() => {
// Don't mark as read if the element doesn't exist, user has left chat view
if (this.$el) this.readChat()
}, MARK_AS_READ_DELAY)
}
} else {
this.jumpToBottomButtonVisible = true
}
}, 200),
handleScrollUp (positionBeforeLoading) {
const positionAfterLoading = getScrollPosition(this.$refs.scrollable)
this.$refs.scrollable.scrollTo({
top: getNewTopPosition(positionBeforeLoading, positionAfterLoading),
left: 0
})
},
fetchChat ({ isFirstFetch = false, fetchLatest = false, maxId }) {
const chatMessageService = this.currentChatMessageService
if (!chatMessageService) { return }
if (fetchLatest && this.streamingEnabled) { return }
const chatId = chatMessageService.chatId
const fetchOlderMessages = !!maxId
const sinceId = fetchLatest && chatMessageService.maxId
return this.backendInteractor.chatMessages({ id: chatId, maxId, sinceId })
.then((messages) => {
// Clear the current chat in case we're recovering from a ws connection loss.
if (isFirstFetch) {
chatService.clear(chatMessageService)
}
const positionBeforeUpdate = getScrollPosition(this.$refs.scrollable)
this.$store.dispatch('addChatMessages', { chatId, messages }).then(() => {
this.$nextTick(() => {
if (fetchOlderMessages) {
this.handleScrollUp(positionBeforeUpdate)
}
if (isFirstFetch) {
this.updateScrollableContainerHeight()
}
// In vertical screens, the first batch of fetched messages may not always take the
// full height of the scrollable container.
// If this is the case, we want to fetch the messages until the scrollable container
// is fully populated so that the user has the ability to scroll up and load the history.
if (!isScrollable(this.$refs.scrollable) && messages.length > 0) {
this.fetchChat({ maxId: this.currentChatMessageService.minId })
}
})
})
})
},
async startFetching () {
let chat = this.findOpenedChatByRecipientId(this.recipientId)
if (!chat) {
try {
chat = await this.backendInteractor.getOrCreateChat({ accountId: this.recipientId })
} catch (e) {
console.error('Error creating or getting a chat', e)
this.errorLoadingChat = true
}
}
if (chat) {
this.$nextTick(() => {
this.scrollDown({ forceRead: true })
})
this.$store.dispatch('addOpenedChat', { chat })
this.doStartFetching()
}
},
doStartFetching () {
this.$store.dispatch('startFetchingCurrentChat', {
fetcher: () => promiseInterval(() => this.fetchChat({ fetchLatest: true }), 5000)
})
this.fetchChat({ isFirstFetch: true })
},
handleAttachmentPosting () {
this.$nextTick(() => {
this.handleResize()
// When the posting form size changes because of a media attachment, we need an extra resize
// to account for the potential delay in the DOM update.
setTimeout(() => {
this.updateScrollableContainerHeight()
}, SAFE_RESIZE_TIME_OFFSET)
this.scrollDown({ forceRead: true })
})
},
sendMessage ({ status, media, idempotencyKey }) {
const params = {
id: this.currentChat.id,
content: status,
idempotencyKey
}
if (media[0]) {
params.mediaId = media[0].id
}
const fakeMessage = buildFakeMessage({
attachments: media,
chatId: this.currentChat.id,
content: status,
userId: this.currentUser.id,
idempotencyKey
})
this.$store.dispatch('addChatMessages', {
chatId: this.currentChat.id,
messages: [fakeMessage]
}).then(() => {
this.handleAttachmentPosting()
})
return this.doSendMessage({ params, fakeMessage, retriesLeft: MAX_RETRIES })
},
doSendMessage ({ params, fakeMessage, retriesLeft = MAX_RETRIES }) {
if (retriesLeft <= 0) return
this.backendInteractor.sendChatMessage(params)
.then(data => {
this.$store.dispatch('addChatMessages', {
chatId: this.currentChat.id,
updateMaxId: false,
messages: [{ ...data, fakeId: fakeMessage.id }]
})
return data
})
.catch(error => {
console.error('Error sending message', error)
this.$store.dispatch('handleMessageError', {
chatId: this.currentChat.id,
fakeId: fakeMessage.id,
isRetry: retriesLeft !== MAX_RETRIES
})
if ((error.statusCode >= 500 && error.statusCode < 600) || error.message === 'Failed to fetch') {
this.messageRetriers[fakeMessage.id] = setTimeout(() => {
this.doSendMessage({ params, fakeMessage, retriesLeft: retriesLeft - 1 })
}, 1000 * (2 ** (MAX_RETRIES - retriesLeft)))
}
return {}
})
return Promise.resolve(fakeMessage)
},
goBack () {
this.$router.push({ name: 'chats', params: { username: this.currentUser.screen_name } })
}
}
}
export default Chat
+170
View File
@@ -0,0 +1,170 @@
.chat-view {
display: flex;
height: calc(100vh - 60px);
width: 100%;
.chat-title {
// prevents chat header jumping on when the user avatar loads
height: 28px;
}
.chat-view-inner {
height: auto;
width: 100%;
overflow: visible;
display: flex;
margin: 0.5em 0.5em 0 0.5em;
}
.chat-view-body {
background-color: var(--chatBg, $fallback--bg);
display: flex;
flex-direction: column;
width: 100%;
overflow: visible;
min-height: 100%;
margin: 0 0 0 0;
border-radius: 10px 10px 0 0;
border-radius: var(--panelRadius, 10px) var(--panelRadius, 10px) 0 0;
&::after {
border-radius: 0;
}
}
.scrollable-message-list {
padding: 0 0.8em;
height: 100%;
overflow-y: scroll;
overflow-x: hidden;
display: flex;
flex-direction: column;
}
.footer {
position: sticky;
bottom: 0;
}
.chat-view-heading {
align-items: center;
justify-content: space-between;
top: 50px;
display: flex;
z-index: 2;
position: sticky;
overflow: hidden;
}
.go-back-button {
cursor: pointer;
width: 28px;
text-align: center;
padding: 0.6em;
margin: -0.6em 0.6em -0.6em -0.6em;
}
.jump-to-bottom-button {
width: 2.5em;
height: 2.5em;
border-radius: 100%;
position: absolute;
right: 1.3em;
top: -3.2em;
background-color: $fallback--fg;
background-color: var(--btn, $fallback--fg);
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.3);
z-index: 10;
transition: 0.35s all;
transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
opacity: 0;
visibility: hidden;
cursor: pointer;
&.visible {
opacity: 1;
visibility: visible;
}
i {
font-size: 1em;
color: $fallback--text;
color: var(--text, $fallback--text);
}
.unread-message-count {
font-size: 0.8em;
left: 50%;
margin-top: -1rem;
padding: 0.1em;
border-radius: 50px;
position: absolute;
}
.chat-loading-error {
width: 100%;
display: flex;
align-items: flex-end;
height: 100%;
.error {
width: 100%;
}
}
}
@media all and (max-width: 800px) {
height: 100%;
overflow: hidden;
.chat-view-inner {
overflow: hidden;
height: 100%;
margin-top: 0;
margin-left: 0;
margin-right: 0;
}
.chat-view-body {
display: flex;
min-height: auto;
overflow: hidden;
height: 100%;
margin: 0;
border-radius: 0;
}
.chat-view-heading {
box-sizing: border-box;
position: static;
z-index: 9999;
top: 0;
margin-top: 0;
border-radius: 0;
/* This practically overlays the panel heading color over panel background
* color. This is needed because we allow transparent panel background and
* it doesn't work well in this "disjointed panel header" case
*/
background:
linear-gradient(to top, var(--panel), var(--panel)),
linear-gradient(to top, var(--bg), var(--bg));
height: 50px;
}
.scrollable-message-list {
display: unset;
overflow-y: scroll;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
.footer {
position: sticky;
bottom: auto;
}
}
}
+105
View File
@@ -0,0 +1,105 @@
<template>
<div class="chat-view">
<div class="chat-view-inner">
<div
id="nav"
ref="inner"
class="panel-default panel chat-view-body"
>
<div
ref="header"
class="panel-heading chat-view-heading mobile-hidden"
>
<a
class="go-back-button"
@click="goBack"
>
<FAIcon
size="lg"
icon="chevron-left"
/>
</a>
<div class="title text-center">
<ChatTitle
:user="recipient"
:with-avatar="true"
/>
</div>
</div>
<template>
<div
ref="scrollable"
class="scrollable-message-list"
:style="{ height: scrollableContainerHeight }"
@scroll="handleScroll"
>
<template v-if="!errorLoadingChat">
<ChatMessage
v-for="chatViewItem in chatViewItems"
:key="chatViewItem.id"
:author="recipient"
:chat-view-item="chatViewItem"
:hovered-message-chain="chatViewItem.messageChainId === hoveredMessageChainId"
@hover="onMessageHover"
/>
</template>
<div
v-else
class="chat-loading-error"
>
<div class="alert error">
{{ $t('chats.error_loading_chat') }}
</div>
</div>
</div>
<div
ref="footer"
class="panel-body footer"
>
<div
class="jump-to-bottom-button"
:class="{ 'visible': jumpToBottomButtonVisible }"
@click="scrollDown({ behavior: 'smooth' })"
>
<span>
<FAIcon icon="chevron-down" />
<div
v-if="newMessageCount"
class="badge badge-notification unread-chat-count unread-message-count"
>
{{ newMessageCount }}
</div>
</span>
</div>
<PostStatusForm
:disable-subject="true"
:disable-scope-selector="true"
:disable-notice="true"
:disable-lock-warning="true"
:disable-polls="true"
:disable-sensitivity-checkbox="true"
:disable-submit="errorLoadingChat || !currentChat"
:disable-preview="true"
:optimistic-posting="true"
:post-handler="sendMessage"
:submit-on-enter="!mobileLayout"
:preserve-focus="!mobileLayout"
:auto-focus="!mobileLayout"
:placeholder="formPlaceholder"
:file-limit="1"
max-height="160"
emoji-picker-placement="top"
@resize="handleResize"
/>
</div>
</template>
</div>
</div>
</div>
</template>
<script src="./chat.js"></script>
<style lang="scss">
@import '../../_variables.scss';
@import './chat.scss';
</style>
+33
View File
@@ -0,0 +1,33 @@
// Captures a scroll position
export const getScrollPosition = (el) => {
return {
scrollTop: el.scrollTop,
scrollHeight: el.scrollHeight,
offsetHeight: el.offsetHeight
}
}
// A helper function that is used to keep the scroll position fixed as the new elements are added to the top
// Takes two scroll positions, before and after the update.
export const getNewTopPosition = (previousPosition, newPosition) => {
return previousPosition.scrollTop + (newPosition.scrollHeight - previousPosition.scrollHeight)
}
export const isBottomedOut = (el, offset = 0) => {
if (!el) { return }
const scrollHeight = el.scrollTop + offset
const totalHeight = el.scrollHeight - el.offsetHeight
return totalHeight <= scrollHeight
}
// Height of the scrollable container. The dynamic height is needed to ensure the mobile browser panel doesn't overlap or hide the posting form.
export const scrollableContainerHeight = (inner, header, footer) => {
return inner.offsetHeight - header.clientHeight - footer.clientHeight
}
// Returns whether or not the scrollbar is visible.
export const isScrollable = (el) => {
if (!el) return
return el.scrollHeight > el.clientHeight
}
+37
View File
@@ -0,0 +1,37 @@
import { mapState, mapGetters } from 'vuex'
import ChatListItem from '../chat_list_item/chat_list_item.vue'
import ChatNew from '../chat_new/chat_new.vue'
import List from '../list/list.vue'
const ChatList = {
components: {
ChatListItem,
List,
ChatNew
},
computed: {
...mapState({
currentUser: state => state.users.currentUser
}),
...mapGetters(['sortedChatList'])
},
data () {
return {
isNew: false
}
},
created () {
this.$store.dispatch('fetchChats', { latest: true })
},
methods: {
cancelNewChat () {
this.isNew = false
this.$store.dispatch('fetchChats', { latest: true })
},
newChat () {
this.isNew = true
}
}
}
export default ChatList
+67
View File
@@ -0,0 +1,67 @@
<template>
<div v-if="isNew">
<ChatNew @cancel="cancelNewChat" />
</div>
<div
v-else
class="chat-list panel panel-default"
>
<div class="panel-heading">
<span class="title">
{{ $t("chats.chats") }}
</span>
<button
class="button-default"
@click="newChat"
>
{{ $t("chats.new") }}
</button>
</div>
<div class="panel-body">
<div
v-if="sortedChatList.length > 0"
class="timeline"
>
<List :items="sortedChatList">
<template
slot="item"
slot-scope="{item}"
>
<ChatListItem
:key="item.id"
:compact="false"
:chat="item"
/>
</template>
</List>
</div>
<div
v-else
class="emtpy-chat-list-alert"
>
<span>{{ $t('chats.empty_chat_list_placeholder') }}</span>
</div>
</div>
</div>
</template>
<script src="./chat_list.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.chat-list {
min-height: 25em;
margin-bottom: 0;
}
.emtpy-chat-list-alert {
padding: 3em;
font-size: 1.2em;
display: flex;
justify-content: center;
color: $fallback--text;
color: var(--faint, $fallback--text);
}
</style>
@@ -0,0 +1,67 @@
import { mapState } from 'vuex'
import StatusContent from '../status_content/status_content.vue'
import fileType from 'src/services/file_type/file_type.service'
import UserAvatar from '../user_avatar/user_avatar.vue'
import AvatarList from '../avatar_list/avatar_list.vue'
import Timeago from '../timeago/timeago.vue'
import ChatTitle from '../chat_title/chat_title.vue'
const ChatListItem = {
name: 'ChatListItem',
props: [
'chat'
],
components: {
UserAvatar,
AvatarList,
Timeago,
ChatTitle,
StatusContent
},
computed: {
...mapState({
currentUser: state => state.users.currentUser
}),
attachmentInfo () {
if (this.chat.lastMessage.attachments.length === 0) { return }
const types = this.chat.lastMessage.attachments.map(file => fileType.fileType(file.mimetype))
if (types.includes('video')) {
return this.$t('file_type.video')
} else if (types.includes('audio')) {
return this.$t('file_type.audio')
} else if (types.includes('image')) {
return this.$t('file_type.image')
} else {
return this.$t('file_type.file')
}
},
messageForStatusContent () {
const message = this.chat.lastMessage
const isYou = message && message.account_id === this.currentUser.id
const content = message ? (this.attachmentInfo || message.content) : ''
const messagePreview = isYou ? `<i>${this.$t('chats.you')}</i> ${content}` : content
return {
summary: '',
statusnet_html: messagePreview,
text: messagePreview,
attachments: []
}
}
},
methods: {
openChat (_e) {
if (this.chat.id) {
this.$router.push({
name: 'chat',
params: {
username: this.currentUser.screen_name,
recipient_id: this.chat.account.id
}
})
}
}
}
}
export default ChatListItem
@@ -0,0 +1,94 @@
.chat-list-item {
display: flex;
flex-direction: row;
padding: 0.75em;
height: 5em;
overflow: hidden;
box-sizing: border-box;
cursor: pointer;
:focus {
outline: none;
}
&:hover {
background-color: var(--selectedPost, $fallback--lightBg);
box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.1);
}
.chat-list-item-left {
margin-right: 1em;
}
.chat-list-item-center {
width: 100%;
box-sizing: border-box;
overflow: hidden;
word-wrap: break-word;
}
.heading {
width: 100%;
display: inline-flex;
justify-content: space-between;
line-height: 1em;
}
.heading-right {
white-space: nowrap;
}
.name-and-account-name {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
flex-shrink: 1;
line-height: 1.4em;
}
.chat-preview {
display: inline-flex;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin: 0.35em 0;
color: $fallback--text;
color: var(--faint, $fallback--text);
width: 100%;
}
a {
color: var(--faintLink, $fallback--link);
text-decoration: none;
pointer-events: none;
}
&:hover .animated.avatar {
canvas {
display: none;
}
img {
visibility: visible;
}
}
.Avatar {
border-radius: $fallback--avatarAltRadius;
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
}
.StatusContent {
img.emoji {
width: 1.4em;
height: 1.4em;
}
}
.time-wrapper {
line-height: 1.4em;
}
.single-line {
padding-right: 1em;
}
}
@@ -0,0 +1,52 @@
<template>
<div
class="chat-list-item"
@click.capture.prevent="openChat"
>
<div class="chat-list-item-left">
<UserAvatar
:user="chat.account"
height="48px"
width="48px"
/>
</div>
<div class="chat-list-item-center">
<div class="heading">
<span
v-if="chat.account"
class="name-and-account-name"
>
<ChatTitle
:user="chat.account"
/>
</span>
<span class="heading-right" />
<div class="time-wrapper">
<Timeago
:time="chat.updated_at"
:auto-update="60"
/>
</div>
</div>
<div class="chat-preview">
<StatusContent
:status="messageForStatusContent"
:single-line="true"
/>
<div
v-if="chat.unread > 0"
class="badge badge-notification unread-chat-count"
>
{{ chat.unread }}
</div>
</div>
</div>
</div>
</template>
<script src="./chat_list_item.js"></script>
<style lang="scss">
@import '../../_variables.scss';
@import './chat_list_item.scss';
</style>
+106
View File
@@ -0,0 +1,106 @@
import { mapState, mapGetters } from 'vuex'
import Popover from '../popover/popover.vue'
import Attachment from '../attachment/attachment.vue'
import UserAvatar from '../user_avatar/user_avatar.vue'
import Gallery from '../gallery/gallery.vue'
import LinkPreview from '../link-preview/link-preview.vue'
import StatusContent from '../status_content/status_content.vue'
import ChatMessageDate from '../chat_message_date/chat_message_date.vue'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faTimes,
faEllipsisH
} from '@fortawesome/free-solid-svg-icons'
library.add(
faTimes,
faEllipsisH
)
const ChatMessage = {
name: 'ChatMessage',
props: [
'author',
'edited',
'noHeading',
'chatViewItem',
'hoveredMessageChain'
],
components: {
Popover,
Attachment,
StatusContent,
UserAvatar,
Gallery,
LinkPreview,
ChatMessageDate
},
computed: {
// Returns HH:MM (hours and minutes) in local time.
createdAt () {
const time = this.chatViewItem.data.created_at
return time.toLocaleTimeString('en', { hour: '2-digit', minute: '2-digit', hour12: false })
},
isCurrentUser () {
return this.message.account_id === this.currentUser.id
},
message () {
return this.chatViewItem.data
},
userProfileLink () {
return generateProfileLink(this.author.id, this.author.screen_name, this.$store.state.instance.restrictedNicknames)
},
isMessage () {
return this.chatViewItem.type === 'message'
},
messageForStatusContent () {
return {
summary: '',
statusnet_html: this.message.content,
text: this.message.content,
attachments: this.message.attachments
}
},
hasAttachment () {
return this.message.attachments.length > 0
},
...mapState({
betterShadow: state => state.interface.browserSupport.cssFilter,
currentUser: state => state.users.currentUser,
restrictedNicknames: state => state.instance.restrictedNicknames
}),
popoverMarginStyle () {
if (this.isCurrentUser) {
return {}
} else {
return { left: 50 }
}
},
...mapGetters(['mergedConfig', 'findUser'])
},
data () {
return {
hovered: false,
menuOpened: false
}
},
methods: {
onHover (bool) {
this.$emit('hover', { isHovered: bool, messageChainId: this.chatViewItem.messageChainId })
},
async deleteMessage () {
const confirmed = window.confirm(this.$t('chats.delete_confirm'))
if (confirmed) {
await this.$store.dispatch('deleteChatMessage', {
messageId: this.chatViewItem.data.id,
chatId: this.chatViewItem.data.chat_id
})
}
this.hovered = false
this.menuOpened = false
}
}
}
export default ChatMessage
@@ -0,0 +1,174 @@
@import '../../_variables.scss';
.chat-message-wrapper {
&.hovered-message-chain {
.animated.Avatar {
canvas {
display: none;
}
img {
visibility: visible;
}
}
}
.chat-message-menu {
transition: opacity 0.1s;
opacity: 0;
position: absolute;
top: -0.8em;
button {
padding-top: 0.2em;
padding-bottom: 0.2em;
}
}
.menu-icon {
cursor: pointer;
&:hover, .extra-button-popover.open & {
color: $fallback--text;
color: var(--text, $fallback--text);
}
}
.popover {
width: 12em;
}
.chat-message {
display: flex;
padding-bottom: 0.5em;
}
.avatar-wrapper {
margin-right: 0.72em;
width: 32px;
}
.link-preview, .attachments {
margin-bottom: 1em;
}
.chat-message-inner {
display: flex;
flex-direction: column;
align-items: flex-start;
max-width: 80%;
min-width: 10em;
width: 100%;
&.with-media {
width: 100%;
.gallery-row {
overflow: hidden;
}
.status {
width: 100%;
}
}
}
.status {
border-radius: $fallback--chatMessageRadius;
border-radius: var(--chatMessageRadius, $fallback--chatMessageRadius);
display: flex;
padding: 0.75em;
}
.created-at {
position: relative;
float: right;
font-size: 0.8em;
margin: -1em 0 -0.5em 0;
font-style: italic;
opacity: 0.8;
}
.without-attachment {
.status-content {
&::after {
margin-right: 5.4em;
content: " ";
display: inline-block;
}
}
}
.pending {
.status-content.media-body, .created-at {
color: var(--faint);
}
}
.error {
.status-content.media-body, .created-at {
color: $fallback--cRed;
color: var(--badgeNotification, $fallback--cRed);
}
}
.incoming {
a {
color: var(--chatMessageIncomingLink, $fallback--link);
}
.status {
color: var(--chatMessageIncomingText, $fallback--text);
background-color: var(--chatMessageIncomingBg, $fallback--bg);
border: 1px solid var(--chatMessageIncomingBorder, --border);
}
.created-at {
a {
color: var(--chatMessageIncomingText, $fallback--text);
}
}
.chat-message-menu {
left: 0.4rem;
}
}
.outgoing {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-content: end;
justify-content: flex-end;
a {
color: var(--chatMessageOutgoingLink, $fallback--link);
}
.status {
color: var(--chatMessageOutgoingText, $fallback--text);
background-color: var(--chatMessageOutgoingBg, $fallback--lightBg);
border: 1px solid var(--chatMessageOutgoingBorder, --lightBg);
}
.chat-message-inner {
align-items: flex-end;
}
.chat-message-menu {
right: 0.4rem;
}
}
.visible {
opacity: 1;
}
}
.chat-message-date-separator {
text-align: center;
margin: 1.4em 0;
font-size: 0.9em;
user-select: none;
color: $fallback--text;
color: var(--faintedText, $fallback--text);
}
@@ -0,0 +1,100 @@
<template>
<div
v-if="isMessage"
class="chat-message-wrapper"
:class="{ 'hovered-message-chain': hoveredMessageChain }"
@mouseover="onHover(true)"
@mouseleave="onHover(false)"
>
<div
class="chat-message"
:class="[{ 'outgoing': isCurrentUser, 'incoming': !isCurrentUser }]"
>
<div
v-if="!isCurrentUser"
class="avatar-wrapper"
>
<router-link
v-if="chatViewItem.isHead"
:to="userProfileLink"
>
<UserAvatar
:compact="true"
:better-shadow="betterShadow"
:user="author"
/>
</router-link>
</div>
<div class="chat-message-inner">
<div
class="status-body"
:style="{ 'min-width': message.attachment ? '80%' : '' }"
>
<div
class="media status"
:class="{ 'without-attachment': !hasAttachment, 'pending': chatViewItem.data.pending, 'error': chatViewItem.data.error }"
style="position: relative"
@mouseenter="hovered = true"
@mouseleave="hovered = false"
>
<div
class="chat-message-menu"
:class="{ 'visible': hovered || menuOpened }"
>
<Popover
trigger="click"
placement="top"
:bound-to-selector="isCurrentUser ? '' : '.scrollable-message-list'"
:bound-to="{ x: 'container' }"
:margin="popoverMarginStyle"
@show="menuOpened = true"
@close="menuOpened = false"
>
<div slot="content">
<div class="dropdown-menu">
<button
class="button-default dropdown-item dropdown-item-icon"
@click="deleteMessage"
>
<FAIcon icon="times" /> {{ $t("chats.delete") }}
</button>
</div>
</div>
<button
slot="trigger"
class="button-default menu-icon"
:title="$t('chats.more')"
>
<FAIcon icon="ellipsis-h" />
</button>
</Popover>
</div>
<StatusContent
:status="messageForStatusContent"
:full-content="true"
>
<span
slot="footer"
class="created-at"
>
{{ createdAt }}
</span>
</StatusContent>
</div>
</div>
</div>
</div>
</div>
<div
v-else
class="chat-message-date-separator"
>
<ChatMessageDate :date="chatViewItem.date" />
</div>
</template>
<script src="./chat_message.js" ></script>
<style lang="scss">
@import './chat_message.scss';
</style>
@@ -0,0 +1,26 @@
<template>
<time>
{{ displayDate }}
</time>
</template>
<script>
import localeService from 'src/services/locale/locale.service.js'
export default {
name: 'Timeago',
props: ['date'],
computed: {
displayDate () {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.date.getTime() === today.getTime()) {
return this.$t('display_date.today')
} else {
return this.date.toLocaleDateString(localeService.internalToBrowserLocale(this.$i18n.locale), { day: 'numeric', month: 'long' })
}
}
}
}
</script>
+83
View File
@@ -0,0 +1,83 @@
import { mapState, mapGetters } from 'vuex'
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
import UserAvatar from '../user_avatar/user_avatar.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faSearch,
faChevronLeft
} from '@fortawesome/free-solid-svg-icons'
library.add(
faSearch,
faChevronLeft
)
const chatNew = {
components: {
BasicUserCard,
UserAvatar
},
data () {
return {
suggestions: [],
userIds: [],
loading: false,
query: ''
}
},
async created () {
const { chats } = await this.backendInteractor.chats()
chats.forEach(chat => this.suggestions.push(chat.account))
},
computed: {
users () {
return this.userIds.map(userId => this.findUser(userId))
},
availableUsers () {
if (this.query.length !== 0) {
return this.users
} else {
return this.suggestions
}
},
...mapState({
currentUser: state => state.users.currentUser,
backendInteractor: state => state.api.backendInteractor
}),
...mapGetters(['findUser'])
},
methods: {
goBack () {
this.$emit('cancel')
},
goToChat (user) {
this.$router.push({ name: 'chat', params: { recipient_id: user.id } })
},
onInput () {
this.search(this.query)
},
addUser (user) {
this.selectedUserIds.push(user.id)
this.query = ''
},
removeUser (userId) {
this.selectedUserIds = this.selectedUserIds.filter(id => id !== userId)
},
search (query) {
if (!query) {
this.loading = false
return
}
this.loading = true
this.userIds = []
this.$store.dispatch('search', { q: query, resolve: true, type: 'accounts' })
.then(data => {
this.loading = false
this.userIds = data.accounts.map(a => a.id)
})
}
}
}
export default chatNew
+31
View File
@@ -0,0 +1,31 @@
.chat-new {
.input-wrap {
display: flex;
margin: 0.7em 0.5em 0.7em 0.5em;
input {
width: 100%;
}
}
.search-icon {
margin-right: 0.3em;
}
.member-list {
padding-bottom: 0.7rem;
}
.basic-user-card:hover {
cursor: pointer;
background-color: var(--selectedPost, $fallback--lightBg);
}
.go-back-button {
cursor: pointer;
width: 28px;
text-align: center;
padding: 0.6em;
margin: -0.6em 0.6em -0.6em -0.6em;
}
}
+52
View File
@@ -0,0 +1,52 @@
<template>
<div
id="nav"
class="panel-default panel chat-new"
>
<div
ref="header"
class="panel-heading"
>
<a
class="go-back-button"
@click="goBack"
>
<FAIcon
size="lg"
icon="chevron-left"
/>
</a>
</div>
<div class="input-wrap">
<div class="input-search">
<FAIcon
class="search-icon fa-scale-110 fa-old-padding"
icon="search"
/>
</div>
<input
ref="search"
v-model="query"
placeholder="Search people"
@input="onInput"
>
</div>
<div class="member-list">
<div
v-for="user in availableUsers"
:key="user.id"
class="member"
>
<div @click.capture.prevent="goToChat(user)">
<BasicUserCard :user="user" />
</div>
</div>
</div>
</div>
</template>
<script src="./chat_new.js"></script>
<style lang="scss">
@import '../../_variables.scss';
@import './chat_new.scss';
</style>
+10
View File
@@ -1,4 +1,14 @@
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faBullhorn,
faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
faBullhorn,
faTimes
)
const chatPanel = { const chatPanel = {
props: [ 'floating' ], props: [ 'floating' ],
+12 -6
View File
@@ -10,10 +10,10 @@
@click.stop.prevent="togglePanel" @click.stop.prevent="togglePanel"
> >
<div class="title"> <div class="title">
<span>{{ $t('chat.title') }}</span> <span>{{ $t('shoutbox.title') }}</span>
<i <FAIcon
v-if="floating" v-if="floating"
class="icon-cancel" icon="times"
/> />
</div> </div>
</div> </div>
@@ -63,8 +63,11 @@
@click.stop.prevent="togglePanel" @click.stop.prevent="togglePanel"
> >
<div class="title"> <div class="title">
<i class="icon-comment-empty" /> <FAIcon
{{ $t('chat.title') }} class="icon"
icon="bullhorn"
/>
{{ $t('shoutbox.title') }}
</div> </div>
</div> </div>
</div> </div>
@@ -84,9 +87,11 @@
max-width: 25em; max-width: 25em;
} }
.chat-panel {
.chat-heading { .chat-heading {
cursor: pointer; cursor: pointer;
.icon-comment-empty {
.icon {
color: $fallback--text; color: $fallback--text;
color: var(--text, $fallback--text); color: var(--text, $fallback--text);
} }
@@ -134,4 +139,5 @@
justify-content: space-between; justify-content: space-between;
} }
} }
}
</style> </style>
+26
View File
@@ -0,0 +1,26 @@
import Vue from 'vue'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import UserAvatar from '../user_avatar/user_avatar.vue'
export default Vue.component('chat-title', {
name: 'ChatTitle',
components: {
UserAvatar
},
props: [
'user', 'withAvatar'
],
computed: {
title () {
return this.user ? this.user.screen_name_ui : ''
},
htmlTitle () {
return this.user ? this.user.name_html : ''
}
},
methods: {
getUserProfileLink (user) {
return generateProfileLink(user.id, user.screen_name)
}
}
})
+67
View File
@@ -0,0 +1,67 @@
<template>
<!-- eslint-disable vue/no-v-html -->
<div
class="chat-title"
:title="title"
>
<router-link
v-if="withAvatar && user"
:to="getUserProfileLink(user)"
>
<UserAvatar
:user="user"
width="23px"
height="23px"
/>
</router-link>
<span
class="username"
v-html="htmlTitle"
/>
</div>
<!-- eslint-enable vue/no-v-html -->
</template>
<script src="./chat_title.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.chat-title {
display: flex;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
align-items: center;
.username {
max-width: 100%;
text-overflow: ellipsis;
white-space: nowrap;
display: inline;
word-wrap: break-word;
overflow: hidden;
text-overflow: ellipsis;
.emoji {
width: 14px;
height: 14px;
vertical-align: middle;
object-fit: contain
}
}
.Avatar {
width: 23px;
height: 23px;
margin-right: 0.5em;
border-radius: $fallback--avatarAltRadius;
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
&.animated::before {
display: none;
}
}
}
</style>
+1 -1
View File
@@ -52,7 +52,7 @@ export default {
right: 0; right: 0;
top: 0; top: 0;
display: block; display: block;
content: ''; content: '';
transition: color 200ms; transition: color 200ms;
width: 1.1em; width: 1.1em;
height: 1.1em; height: 1.1em;
@@ -8,13 +8,13 @@
class="rating" class="rating"
> >
<span v-if="contrast.aaa"> <span v-if="contrast.aaa">
<i class="icon-thumbs-up-alt" /> <FAIcon icon="thumbs-up" />
</span> </span>
<span v-if="!contrast.aaa && contrast.aa"> <span v-if="!contrast.aaa && contrast.aa">
<i class="icon-adjust" /> <FAIcon icon="adjust" />
</span> </span>
<span v-if="!contrast.aaa && !contrast.aa"> <span v-if="!contrast.aaa && !contrast.aa">
<i class="icon-attention" /> <FAIcon icon="exclamation-triangle" />
</span> </span>
</span> </span>
<span <span
@@ -23,29 +23,45 @@
:title="hint_18pt" :title="hint_18pt"
> >
<span v-if="contrast.laaa"> <span v-if="contrast.laaa">
<i class="icon-thumbs-up-alt" /> <FAIcon icon="thumbs-up" />
</span> </span>
<span v-if="!contrast.laaa && contrast.laa"> <span v-if="!contrast.laaa && contrast.laa">
<i class="icon-adjust" /> <FAIcon icon="adjust" />
</span> </span>
<span v-if="!contrast.laaa && !contrast.laa"> <span v-if="!contrast.laaa && !contrast.laa">
<i class="icon-attention" /> <FAIcon icon="exclamation-triangle" />
</span> </span>
</span> </span>
</span> </span>
</template> </template>
<script> <script>
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faAdjust,
faExclamationTriangle,
faThumbsUp
} from '@fortawesome/free-solid-svg-icons'
library.add(
faAdjust,
faExclamationTriangle,
faThumbsUp
)
export default { export default {
props: { props: {
large: { large: {
required: false required: false,
type: Boolean,
default: false
}, },
// TODO: Make theme switcher compute theme initially so that contrast // TODO: Make theme switcher compute theme initially so that contrast
// component won't be called without contrast data // component won't be called without contrast data
contrast: { contrast: {
required: false, required: false,
type: Object type: Object,
default: () => ({})
} }
}, },
computed: { computed: {
@@ -82,6 +98,7 @@ export default {
.rating { .rating {
display: inline-block; display: inline-block;
text-align: center; text-align: center;
margin-left: 0.5em;
} }
} }
</style> </style>
+19 -1
View File
@@ -44,7 +44,8 @@ const conversation = {
'isPage', 'isPage',
'pinnedStatusIdsObject', 'pinnedStatusIdsObject',
'inProfile', 'inProfile',
'profileUserId' 'profileUserId',
'virtualHidden'
], ],
created () { created () {
if (this.isPage) { if (this.isPage) {
@@ -52,6 +53,13 @@ const conversation = {
} }
}, },
computed: { computed: {
hideStatus () {
if (this.$refs.statusComponent && this.$refs.statusComponent[0]) {
return this.virtualHidden && this.$refs.statusComponent[0].suspendable
} else {
return this.virtualHidden
}
},
status () { status () {
return this.$store.state.statuses.allStatusesObject[this.statusId] return this.$store.state.statuses.allStatusesObject[this.statusId]
}, },
@@ -102,6 +110,10 @@ const conversation = {
}, },
isExpanded () { isExpanded () {
return this.expanded || this.isPage return this.expanded || this.isPage
},
hiddenStyle () {
const height = (this.status && this.status.virtualHeight) || '120px'
return this.virtualHidden ? { height } : {}
} }
}, },
components: { components: {
@@ -121,6 +133,12 @@ const conversation = {
if (value) { if (value) {
this.fetchConversation() this.fetchConversation()
} }
},
virtualHidden (value) {
this.$store.dispatch(
'setVirtualHeight',
{ statusId: this.statusId, height: `${this.$el.clientHeight}px` }
)
} }
}, },
methods: { methods: {
+26 -13
View File
@@ -1,23 +1,27 @@
<template> <template>
<div <div
class="timeline panel-default" v-if="!hideStatus"
:class="[isExpanded ? 'panel' : 'panel-disabled']" :style="hiddenStyle"
class="Conversation"
:class="{ '-expanded' : isExpanded, 'panel' : isExpanded }"
> >
<div <div
v-if="isExpanded" v-if="isExpanded"
class="panel-heading conversation-heading" class="panel-heading conversation-heading"
> >
<span class="title"> {{ $t('timeline.conversation') }} </span> <span class="title"> {{ $t('timeline.conversation') }} </span>
<span v-if="collapsable"> <button
<a v-if="collapsable"
href="#" class="button-unstyled -link"
@click.prevent="toggleExpanded" @click.prevent="toggleExpanded"
>{{ $t('timeline.collapse') }}</a> >
</span> {{ $t('timeline.collapse') }}
</button>
</div> </div>
<status <status
v-for="status in conversation" v-for="status in conversation"
:key="status.id" :key="status.id"
ref="statusComponent"
:inline-expanded="collapsable && isExpanded" :inline-expanded="collapsable && isExpanded"
:statusoid="status" :statusoid="status"
:expandable="!isExpanded" :expandable="!isExpanded"
@@ -28,11 +32,15 @@
:replies="getReplies(status.id)" :replies="getReplies(status.id)"
:in-profile="inProfile" :in-profile="inProfile"
:profile-user-id="profileUserId" :profile-user-id="profileUserId"
class="status-fadein panel-body" class="conversation-status status-fadein panel-body"
@goto="setHighlight" @goto="setHighlight"
@toggleExpanded="toggleExpanded" @toggleExpanded="toggleExpanded"
/> />
</div> </div>
<div
v-else
:style="hiddenStyle"
/>
</template> </template>
<script src="./conversation.js"></script> <script src="./conversation.js"></script>
@@ -40,15 +48,20 @@
<style lang="scss"> <style lang="scss">
@import '../../_variables.scss'; @import '../../_variables.scss';
.timeline { .Conversation {
.panel-disabled { .conversation-status {
.status-el {
border-left: none;
border-bottom-width: 1px; border-bottom-width: 1px;
border-bottom-style: solid; border-bottom-style: solid;
border-color: var(--border, $fallback--border); border-bottom-color: var(--border, $fallback--border);
border-radius: 0; border-radius: 0;
} }
&.-expanded {
.conversation-status:last-child {
border-bottom: none;
border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;
border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);
}
} }
} }
</style> </style>
+89
View File
@@ -0,0 +1,89 @@
import SearchBar from 'components/search_bar/search_bar.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faSignInAlt,
faSignOutAlt,
faHome,
faComments,
faBell,
faUserPlus,
faBullhorn,
faSearch,
faTachometerAlt,
faCog,
faInfoCircle
} from '@fortawesome/free-solid-svg-icons'
library.add(
faSignInAlt,
faSignOutAlt,
faHome,
faComments,
faBell,
faUserPlus,
faBullhorn,
faSearch,
faTachometerAlt,
faCog,
faInfoCircle
)
export default {
components: {
SearchBar
},
data: () => ({
searchBarHidden: true,
supportsMask: window.CSS && window.CSS.supports && (
window.CSS.supports('mask-size', 'contain') ||
window.CSS.supports('-webkit-mask-size', 'contain') ||
window.CSS.supports('-moz-mask-size', 'contain') ||
window.CSS.supports('-ms-mask-size', 'contain') ||
window.CSS.supports('-o-mask-size', 'contain')
)
}),
computed: {
enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
logoStyle () {
return {
'visibility': this.enableMask ? 'hidden' : 'visible'
}
},
logoMaskStyle () {
return this.enableMask ? {
'mask-image': `url(${this.$store.state.instance.logo})`
} : {
'background-color': this.enableMask ? '' : 'transparent'
}
},
logoBgStyle () {
return Object.assign({
'margin': `${this.$store.state.instance.logoMargin} 0`,
opacity: this.searchBarHidden ? 1 : 0
}, this.enableMask ? {} : {
'background-color': this.enableMask ? '' : 'transparent'
})
},
logo () { return this.$store.state.instance.logo },
sitename () { return this.$store.state.instance.name },
hideSitename () { return this.$store.state.instance.hideSitename },
logoLeft () { return this.$store.state.instance.logoLeft },
currentUser () { return this.$store.state.users.currentUser },
privateMode () { return this.$store.state.instance.private }
},
methods: {
scrollToTop () {
window.scrollTo(0, 0)
},
logout () {
this.$router.replace('/main/public')
this.$store.dispatch('logout')
},
onSearchBarToggled (hidden) {
this.searchBarHidden = hidden
},
openSettingsModal () {
this.$store.dispatch('openSettingsModal')
}
}
}
+117
View File
@@ -0,0 +1,117 @@
@import '../../_variables.scss';
.DesktopNav {
height: 50px;
width: 100%;
position: fixed;
a {
color: var(--topBarLink, $fallback--link);
}
.inner-nav {
display: grid;
grid-template-rows: 50px;
grid-template-columns: 2fr auto 2fr;
grid-template-areas: "sitename logo actions";
box-sizing: border-box;
padding: 0 1.2em;
margin: auto;
max-width: 980px;
}
&.-logoLeft {
grid-template-columns: auto 2fr 2fr;
grid-template-areas: "logo sitename actions";
}
.button-default {
&, svg {
color: $fallback--text;
color: var(--btnTopBarText, $fallback--text);
}
&:active {
background-color: $fallback--fg;
background-color: var(--btnPressedTopBar, $fallback--fg);
color: $fallback--text;
color: var(--btnPressedTopBarText, $fallback--text);
}
&:disabled {
color: $fallback--text;
color: var(--btnDisabledTopBarText, $fallback--text);
}
&.toggled {
color: $fallback--text;
color: var(--btnToggledTopBarText, $fallback--text);
background-color: $fallback--fg;
background-color: var(--btnToggledTopBar, $fallback--fg)
}
}
.logo {
grid-area: logo;
position: relative;
transition: opacity;
transition-timing-function: ease-out;
transition-duration: 100ms;
@media all and (min-width: 800px) {
opacity: 1 !important;
}
.mask {
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
background-color: $fallback--fg;
background-color: var(--topBarText, $fallback--fg);
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
img {
display: inline-block;
height: 50px;
}
}
.nav-icon {
margin-left: 0.2em;
width: 2em;
height: 100%;
text-align: center;
.svg-inline--fa {
color: $fallback--link;
color: var(--topBarLink, $fallback--link);
}
}
.sitename {
grid-area: sitename;
}
.actions {
grid-area: actions;
}
.item {
flex: 1;
line-height: 50px;
height: 50px;
overflow: hidden;
display: flex;
flex-wrap: wrap;
&.right {
justify-content: flex-end;
text-align: right;
}
}
}
@@ -0,0 +1,81 @@
<template>
<nav
id="nav"
class="DesktopNav"
:class="{ '-logoLeft': logoLeft }"
@click="scrollToTop()"
>
<div class="inner-nav">
<div class="item sitename">
<router-link
v-if="!hideSitename"
class="site-name"
:to="{ name: 'root' }"
active-class="home"
>
{{ sitename }}
</router-link>
</div>
<router-link
class="logo"
:to="{ name: 'root' }"
:style="logoBgStyle"
>
<div
class="mask"
:style="logoMaskStyle"
/>
<img
:src="logo"
:style="logoStyle"
>
</router-link>
<div class="item right actions">
<search-bar
v-if="currentUser || !privateMode"
@toggled="onSearchBarToggled"
@click.stop.native
/>
<button
class="button-unstyled nav-icon"
@click.stop="openSettingsModal"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="cog"
:title="$t('nav.preferences')"
/>
</button>
<a
v-if="currentUser && currentUser.role === 'admin'"
href="/pleroma/admin/#/login-pleroma"
class="nav-icon"
target="_blank"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="tachometer-alt"
:title="$t('nav.administration')"
/>
</a>
<button
v-if="currentUser"
class="button-unstyled nav-icon"
@click.prevent="logout"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding"
icon="sign-out-alt"
:title="$t('login.logout')"
/>
</button>
</div>
</div>
</nav>
</template>
<script src="./desktop_nav.js"></script>
<style src="./desktop_nav.scss" lang="scss"></style>
@@ -5,9 +5,20 @@ const DomainMuteCard = {
components: { components: {
ProgressButton ProgressButton
}, },
computed: {
user () {
return this.$store.state.users.currentUser
},
muted () {
return this.user.domainMutes.includes(this.domain)
}
},
methods: { methods: {
unmuteDomain () { unmuteDomain () {
return this.$store.dispatch('unmuteDomain', this.domain) return this.$store.dispatch('unmuteDomain', this.domain)
},
muteDomain () {
return this.$store.dispatch('muteDomain', this.domain)
} }
} }
} }
@@ -4,14 +4,25 @@
{{ domain }} {{ domain }}
</div> </div>
<ProgressButton <ProgressButton
v-if="muted"
:click="unmuteDomain" :click="unmuteDomain"
class="btn btn-default" class="btn button-default"
> >
{{ $t('domain_mute_card.unmute') }} {{ $t('domain_mute_card.unmute') }}
<template slot="progress"> <template slot="progress">
{{ $t('domain_mute_card.unmute_progress') }} {{ $t('domain_mute_card.unmute_progress') }}
</template> </template>
</ProgressButton> </ProgressButton>
<ProgressButton
v-else
:click="muteDomain"
class="btn button-default"
>
{{ $t('domain_mute_card.mute') }}
<template slot="progress">
{{ $t('domain_mute_card.mute_progress') }}
</template>
</ProgressButton>
</div> </div>
</template> </template>
@@ -34,5 +45,9 @@
button { button {
width: 10em; width: 10em;
} }
.autosuggest-results & {
padding-left: 1em;
}
} }
</style> </style>
+89 -23
View File
@@ -3,6 +3,15 @@ import EmojiPicker from '../emoji_picker/emoji_picker.vue'
import { take } from 'lodash' import { take } from 'lodash'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js' import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faSmileBeam
} from '@fortawesome/free-regular-svg-icons'
library.add(
faSmileBeam
)
/** /**
* EmojiInput - augmented inputs for emoji and autocomplete support in inputs * EmojiInput - augmented inputs for emoji and autocomplete support in inputs
* without having to give up the comfort of <input/> and <textarea/> elements * without having to give up the comfort of <input/> and <textarea/> elements
@@ -79,6 +88,20 @@ const EmojiInput = {
required: false, required: false,
type: Boolean, type: Boolean,
default: false default: false
},
placement: {
/**
* Forces the panel to take a specific position relative to the input element.
* The 'auto' placement chooses either bottom or top depending on which has the available space (when both have available space, bottom is preferred).
*/
required: false,
type: String, // 'auto', 'top', 'bottom'
default: 'auto'
},
newlineOnCtrlEnter: {
required: false,
type: Boolean,
default: false
} }
}, },
data () { data () {
@@ -91,7 +114,8 @@ const EmojiInput = {
showPicker: false, showPicker: false,
temporarilyHideSuggestions: false, temporarilyHideSuggestions: false,
keepOpen: false, keepOpen: false,
disableClickOutside: false disableClickOutside: false,
suggestions: []
} }
}, },
components: { components: {
@@ -101,21 +125,6 @@ const EmojiInput = {
padEmoji () { padEmoji () {
return this.$store.getters.mergedConfig.padEmoji return this.$store.getters.mergedConfig.padEmoji
}, },
suggestions () {
const firstchar = this.textAtCaret.charAt(0)
if (this.textAtCaret === firstchar) { return [] }
const matchedSuggestions = this.suggest(this.textAtCaret)
if (matchedSuggestions.length <= 0) {
return []
}
return take(matchedSuggestions, 5)
.map(({ imageUrl, ...rest }, index) => ({
...rest,
// eslint-disable-next-line camelcase
img: imageUrl || '',
highlighted: index === this.highlighted
}))
},
showSuggestions () { showSuggestions () {
return this.focused && return this.focused &&
this.suggestions && this.suggestions &&
@@ -162,12 +171,41 @@ const EmojiInput = {
input.elm.removeEventListener('input', this.onInput) input.elm.removeEventListener('input', this.onInput)
} }
}, },
watch: {
showSuggestions: function (newValue) {
this.$emit('shown', newValue)
},
textAtCaret: async function (newWord) {
const firstchar = newWord.charAt(0)
this.suggestions = []
if (newWord === firstchar) return
const matchedSuggestions = await this.suggest(newWord)
// Async: cancel if textAtCaret has changed during wait
if (this.textAtCaret !== newWord) return
if (matchedSuggestions.length <= 0) return
this.suggestions = take(matchedSuggestions, 5)
.map(({ imageUrl, ...rest }) => ({
...rest,
img: imageUrl || ''
}))
},
suggestions (newValue) {
this.$nextTick(this.resize)
}
},
methods: { methods: {
focusPickerInput () {
const pickerEl = this.$refs.picker.$el
if (!pickerEl) return
const pickerInput = pickerEl.querySelector('input')
if (pickerInput) pickerInput.focus()
},
triggerShowPicker () { triggerShowPicker () {
this.showPicker = true this.showPicker = true
this.$refs.picker.startEmojiLoad() this.$refs.picker.startEmojiLoad()
this.$nextTick(() => { this.$nextTick(() => {
this.scrollIntoView() this.scrollIntoView()
this.focusPickerInput()
}) })
// This temporarily disables "click outside" handler // This temporarily disables "click outside" handler
// since external trigger also means click originates // since external trigger also means click originates
@@ -183,6 +221,7 @@ const EmojiInput = {
if (this.showPicker) { if (this.showPicker) {
this.scrollIntoView() this.scrollIntoView()
this.$refs.picker.startEmojiLoad() this.$refs.picker.startEmojiLoad()
this.$nextTick(this.focusPickerInput)
} }
}, },
replace (replacement) { replace (replacement) {
@@ -190,7 +229,7 @@ const EmojiInput = {
this.$emit('input', newValue) this.$emit('input', newValue)
this.caret = 0 this.caret = 0
}, },
insert ({ insertion, keepOpen }) { insert ({ insertion, keepOpen, surroundingSpace = true }) {
const before = this.value.substring(0, this.caret) || '' const before = this.value.substring(0, this.caret) || ''
const after = this.value.substring(this.caret) || '' const after = this.value.substring(this.caret) || ''
@@ -209,8 +248,8 @@ const EmojiInput = {
* them, masto seem to be rendering :emoji::emoji: correctly now so why not * them, masto seem to be rendering :emoji::emoji: correctly now so why not
*/ */
const isSpaceRegex = /\s/ const isSpaceRegex = /\s/
const spaceBefore = !isSpaceRegex.exec(before.slice(-1)) && before.length && this.padEmoji > 0 ? ' ' : '' const spaceBefore = (surroundingSpace && !isSpaceRegex.exec(before.slice(-1)) && before.length && this.padEmoji > 0) ? ' ' : ''
const spaceAfter = !isSpaceRegex.exec(after[0]) && this.padEmoji ? ' ' : '' const spaceAfter = (surroundingSpace && !isSpaceRegex.exec(after[0]) && this.padEmoji) ? ' ' : ''
const newValue = [ const newValue = [
before, before,
@@ -367,6 +406,18 @@ const EmojiInput = {
}, },
onKeyDown (e) { onKeyDown (e) {
const { ctrlKey, shiftKey, key } = e const { ctrlKey, shiftKey, key } = e
if (this.newlineOnCtrlEnter && ctrlKey && key === 'Enter') {
this.insert({ insertion: '\n', surroundingSpace: false })
// Ensure only one new line is added on macos
e.stopPropagation()
e.preventDefault()
// Scroll the input element to the position of the cursor
this.$nextTick(() => {
this.input.elm.blur()
this.input.elm.focus()
})
}
// Disable suggestions hotkeys if suggestions are hidden // Disable suggestions hotkeys if suggestions are hidden
if (!this.temporarilyHideSuggestions) { if (!this.temporarilyHideSuggestions) {
if (key === 'Tab') { if (key === 'Tab') {
@@ -425,14 +476,29 @@ const EmojiInput = {
this.caret = selectionStart this.caret = selectionStart
}, },
resize () { resize () {
const { panel, picker } = this.$refs const panel = this.$refs.panel
if (!panel) return if (!panel) return
const picker = this.$refs.picker.$el
const panelBody = this.$refs['panel-body']
const { offsetHeight, offsetTop } = this.input.elm const { offsetHeight, offsetTop } = this.input.elm
const offsetBottom = offsetTop + offsetHeight const offsetBottom = offsetTop + offsetHeight
panel.style.top = offsetBottom + 'px' this.setPlacement(panelBody, panel, offsetBottom)
picker.$el.style.top = offsetBottom + 'px' this.setPlacement(picker, picker, offsetBottom)
picker.$el.style.bottom = 'auto' },
setPlacement (container, target, offsetBottom) {
if (!container || !target) return
target.style.top = offsetBottom + 'px'
target.style.bottom = 'auto'
if (this.placement === 'top' || (this.placement === 'auto' && this.overflowsBottom(container))) {
target.style.top = 'auto'
target.style.bottom = this.input.elm.offsetHeight + 'px'
}
},
overflowsBottom (el) {
return el.getBoundingClientRect().bottom > window.innerHeight
} }
} }
} }
+10 -6
View File
@@ -6,13 +6,14 @@
> >
<slot /> <slot />
<template v-if="enableEmojiPicker"> <template v-if="enableEmojiPicker">
<div <button
v-if="!hideEmojiButton" v-if="!hideEmojiButton"
class="emoji-picker-icon" class="button-unstyled emoji-picker-icon"
type="button"
@click.prevent="togglePicker" @click.prevent="togglePicker"
> >
<i class="icon-smile" /> <FAIcon :icon="['far', 'smile-beam']" />
</div> </button>
<EmojiPicker <EmojiPicker
v-if="enableEmojiPicker" v-if="enableEmojiPicker"
ref="picker" ref="picker"
@@ -29,12 +30,15 @@
class="autocomplete-panel" class="autocomplete-panel"
:class="{ hide: !showSuggestions }" :class="{ hide: !showSuggestions }"
> >
<div class="autocomplete-panel-body"> <div
ref="panel-body"
class="autocomplete-panel-body"
>
<div <div
v-for="(suggestion, index) in suggestions" v-for="(suggestion, index) in suggestions"
:key="index" :key="index"
class="autocomplete-item" class="autocomplete-item"
:class="{ highlighted: suggestion.highlighted }" :class="{ highlighted: index === highlighted }"
@click.stop.prevent="onClick($event, suggestion)" @click.stop.prevent="onClick($event, suggestion)"
> >
<span class="image"> <span class="image">
+50 -26
View File
@@ -1,4 +1,3 @@
import { debounce } from 'lodash'
/** /**
* suggest - generates a suggestor function to be used by emoji-input * suggest - generates a suggestor function to be used by emoji-input
* data: object providing source information for specific types of suggestions: * data: object providing source information for specific types of suggestions:
@@ -11,20 +10,20 @@ import { debounce } from 'lodash'
* doesn't support user linking you can just provide only emoji. * doesn't support user linking you can just provide only emoji.
*/ */
const debounceUserSearch = debounce((data, input) => { export default data => {
data.updateUsersList(input) const emojiCurry = suggestEmoji(data.emoji)
}, 500, { leading: true, trailing: false }) const usersCurry = data.store && suggestUsers(data.store)
return input => {
export default data => input => {
const firstChar = input[0] const firstChar = input[0]
if (firstChar === ':' && data.emoji) { if (firstChar === ':' && data.emoji) {
return suggestEmoji(data.emoji)(input) return emojiCurry(input)
} }
if (firstChar === '@' && data.users) { if (firstChar === '@' && usersCurry) {
return suggestUsers(data)(input) return usersCurry(input)
} }
return [] return []
} }
}
export const suggestEmoji = emojis => input => { export const suggestEmoji = emojis => input => {
const noPrefix = input.toLowerCase().substr(1) const noPrefix = input.toLowerCase().substr(1)
@@ -57,19 +56,46 @@ export const suggestEmoji = emojis => input => {
}) })
} }
export const suggestUsers = data => input => { export const suggestUsers = ({ dispatch, state }) => {
const noPrefix = input.toLowerCase().substr(1) // Keep some persistent values in closure, most importantly for the
const users = data.users // custom debounce to work. Lodash debounce does not return a promise.
let suggestions = []
let previousQuery = ''
let timeout = null
let cancelUserSearch = null
const newUsers = users.filter( const userSearch = (query) => dispatch('searchUsers', { query })
const debounceUserSearch = (query) => {
cancelUserSearch && cancelUserSearch()
return new Promise((resolve, reject) => {
timeout = setTimeout(() => {
userSearch(query).then(resolve).catch(reject)
}, 300)
cancelUserSearch = () => {
clearTimeout(timeout)
resolve([])
}
})
}
return async input => {
const noPrefix = input.toLowerCase().substr(1)
if (previousQuery === noPrefix) return suggestions
suggestions = []
previousQuery = noPrefix
// Fetch more and wait, don't fetch if there's the 2nd @ because
// the backend user search can't deal with it.
// Reference semantics make it so that we get the updated data after
// the await.
if (!noPrefix.includes('@')) {
await debounceUserSearch(noPrefix)
}
const newSuggestions = state.users.users.filter(
user => user =>
user.screen_name.toLowerCase().startsWith(noPrefix) || user.screen_name.toLowerCase().startsWith(noPrefix) ||
user.name.toLowerCase().startsWith(noPrefix) user.name.toLowerCase().startsWith(noPrefix)
/* taking only 20 results so that sorting is a bit cheaper, we display
* only 5 anyway. could be inaccurate, but we ideally we should query
* backend anyway
*/
).slice(0, 20).sort((a, b) => { ).slice(0, 20).sort((a, b) => {
let aScore = 0 let aScore = 0
let bScore = 0 let bScore = 0
@@ -90,17 +116,15 @@ export const suggestUsers = data => input => {
return diff + nameAlphabetically + screenNameAlphabetically return diff + nameAlphabetically + screenNameAlphabetically
/* eslint-disable camelcase */ /* eslint-disable camelcase */
}).map(({ screen_name, name, profile_image_url_original }) => ({ }).map(({ screen_name, screen_name_ui, name, profile_image_url_original }) => ({
displayText: screen_name, displayText: screen_name_ui,
detailText: name, detailText: name,
imageUrl: profile_image_url_original, imageUrl: profile_image_url_original,
replacement: '@' + screen_name + ' ' replacement: '@' + screen_name + ' '
})) }))
// BE search users if there are no matches
if (newUsers.length === 0 && data.updateUsersList) {
debounceUserSearch(data, noPrefix)
}
return newUsers
/* eslint-enable camelcase */ /* eslint-enable camelcase */
suggestions = newSuggestions || []
return suggestions
}
} }
+28 -3
View File
@@ -1,4 +1,16 @@
import Checkbox from '../checkbox/checkbox.vue' import Checkbox from '../checkbox/checkbox.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faBoxOpen,
faStickyNote,
faSmileBeam
} from '@fortawesome/free-solid-svg-icons'
library.add(
faBoxOpen,
faStickyNote,
faSmileBeam
)
// At widest, approximately 20 emoji are visible in a row, // At widest, approximately 20 emoji are visible in a row,
// loading 3 rows, could be overkill for narrow picker // loading 3 rows, could be overkill for narrow picker
@@ -8,7 +20,20 @@ const LOAD_EMOJI_BY = 60
const LOAD_EMOJI_MARGIN = 64 const LOAD_EMOJI_MARGIN = 64
const filterByKeyword = (list, keyword = '') => { const filterByKeyword = (list, keyword = '') => {
return list.filter(x => x.displayText.includes(keyword)) if (keyword === '') return list
const keywordLowercase = keyword.toLowerCase()
let orderedEmojiList = []
for (const emoji of list) {
const indexOfKeyword = emoji.displayText.toLowerCase().indexOf(keywordLowercase)
if (indexOfKeyword > -1) {
if (!Array.isArray(orderedEmojiList[indexOfKeyword])) {
orderedEmojiList[indexOfKeyword] = []
}
orderedEmojiList[indexOfKeyword].push(emoji)
}
}
return orderedEmojiList.flat()
} }
const EmojiPicker = { const EmojiPicker = {
@@ -164,13 +189,13 @@ const EmojiPicker = {
{ {
id: 'custom', id: 'custom',
text: this.$t('emoji.custom'), text: this.$t('emoji.custom'),
icon: 'icon-smile', icon: 'smile-beam',
emojis: customEmojis emojis: customEmojis
}, },
{ {
id: 'standard', id: 'standard',
text: this.$t('emoji.unicode'), text: this.$t('emoji.unicode'),
icon: 'icon-picture', icon: 'box-open',
emojis: filterByKeyword(standardEmojis, this.keyword) emojis: filterByKeyword(standardEmojis, this.keyword)
} }
] ]
@@ -82,7 +82,7 @@
&.active { &.active {
border-bottom: 4px solid; border-bottom: 4px solid;
i { svg {
color: $fallback--lightText; color: $fallback--lightText;
color: var(--lightText, $fallback--lightText); color: var(--lightText, $fallback--lightText);
} }
+8 -2
View File
@@ -13,7 +13,10 @@
:title="group.text" :title="group.text"
@click.prevent="highlight(group.id)" @click.prevent="highlight(group.id)"
> >
<i :class="group.icon" /> <FAIcon
:icon="group.icon"
fixed-width
/>
</span> </span>
</span> </span>
<span <span
@@ -26,7 +29,10 @@
:title="$t('emoji.stickers')" :title="$t('emoji.stickers')"
@click.prevent="toggleStickers" @click.prevent="toggleStickers"
> >
<i class="icon-star" /> <FAIcon
icon="sticky-note"
fixed-width
/>
</span> </span>
</span> </span>
</div> </div>
@@ -1,5 +1,5 @@
import UserAvatar from '../user_avatar/user_avatar.vue' import UserAvatar from '../user_avatar/user_avatar.vue'
import Popover from '../popover/popover.vue' import UserListPopover from '../user_list_popover/user_list_popover.vue'
const EMOJI_REACTION_COUNT_CUTOFF = 12 const EMOJI_REACTION_COUNT_CUTOFF = 12
@@ -7,7 +7,7 @@ const EmojiReactions = {
name: 'EmojiReactions', name: 'EmojiReactions',
components: { components: {
UserAvatar, UserAvatar,
Popover UserListPopover
}, },
props: ['status'], props: ['status'],
data: () => ({ data: () => ({
@@ -1,45 +1,12 @@
<template> <template>
<div class="emoji-reactions"> <div class="emoji-reactions">
<Popover <UserListPopover
v-for="(reaction) in emojiReactions" v-for="(reaction) in emojiReactions"
:key="reaction.name" :key="reaction.name"
trigger="hover" :users="accountsForEmoji[reaction.name]"
placement="top"
:offset="{ y: 5 }"
> >
<div
slot="content"
class="reacted-users"
>
<div v-if="accountsForEmoji[reaction.name].length">
<div
v-for="(account) in accountsForEmoji[reaction.name]"
:key="account.id"
class="reacted-user"
>
<UserAvatar
:user="account"
class="avatar-small"
:compact="true"
/>
<div class="reacted-user-names">
<!-- eslint-disable vue/no-v-html -->
<span
class="reacted-user-name"
v-html="account.name_html"
/>
<!-- eslint-enable vue/no-v-html -->
<span class="reacted-user-screen-name">{{ account.screen_name }}</span>
</div>
</div>
</div>
<div v-else>
<i class="icon-spin4 animate-spin" />
</div>
</div>
<button <button
slot="trigger" class="emoji-reaction btn button-default"
class="emoji-reaction btn btn-default"
:class="{ 'picked-reaction': reactedWith(reaction.name), 'not-clickable': !loggedIn }" :class="{ 'picked-reaction': reactedWith(reaction.name), 'not-clickable': !loggedIn }"
@click="emojiOnClick(reaction.name, $event)" @click="emojiOnClick(reaction.name, $event)"
@mouseenter="fetchEmojiReactionsByIfMissing()" @mouseenter="fetchEmojiReactionsByIfMissing()"
@@ -47,7 +14,7 @@
<span class="reaction-emoji">{{ reaction.name }}</span> <span class="reaction-emoji">{{ reaction.name }}</span>
<span>{{ reaction.count }}</span> <span>{{ reaction.count }}</span>
</button> </button>
</Popover> </UserListPopover>
<a <a
v-if="tooManyReactions" v-if="tooManyReactions"
class="emoji-reaction-expand faint" class="emoji-reaction-expand faint"
@@ -69,32 +36,6 @@
flex-wrap: wrap; flex-wrap: wrap;
} }
.reacted-users {
padding: 0.5em;
}
.reacted-user {
padding: 0.25em;
display: flex;
flex-direction: row;
.reacted-user-names {
display: flex;
flex-direction: column;
margin-left: 0.5em;
min-width: 5em;
img {
width: 1em;
height: 1em;
}
}
.reacted-user-screen-name {
font-size: 9px;
}
}
.emoji-reaction { .emoji-reaction {
padding: 0 0.5em; padding: 0 0.5em;
margin-right: 0.5em; margin-right: 0.5em;
@@ -2,13 +2,13 @@
<div class="import-export-container"> <div class="import-export-container">
<slot name="before" /> <slot name="before" />
<button <button
class="btn" class="btn button-default"
@click="exportData" @click="exportData"
> >
{{ exportLabel }} {{ exportLabel }}
</button> </button>
<button <button
class="btn" class="btn button-default"
@click="importData" @click="importData"
> >
{{ importLabel }} {{ importLabel }}
+7
View File
@@ -1,3 +1,10 @@
import { library } from '@fortawesome/fontawesome-svg-core'
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons'
library.add(
faCircleNotch
)
const Exporter = { const Exporter = {
props: { props: {
getContent: { getContent: {
+7 -3
View File
@@ -1,12 +1,17 @@
<template> <template>
<div class="exporter"> <div class="exporter">
<div v-if="processing"> <div v-if="processing">
<i class="icon-spin4 animate-spin exporter-processing" /> <FAIcon
icon="circle-notch"
size="lg"
spin
/>
<span>{{ processingMessage }}</span> <span>{{ processingMessage }}</span>
</div> </div>
<button <button
v-else v-else
class="btn btn-default" class="btn button-default"
@click="process" @click="process"
> >
{{ exportButtonLabel }} {{ exportButtonLabel }}
@@ -19,7 +24,6 @@
<style lang="scss"> <style lang="scss">
.exporter { .exporter {
&-processing { &-processing {
font-size: 1.5em;
margin: 0.25em; margin: 0.25em;
} }
} }
@@ -1,4 +1,28 @@
import Popover from '../popover/popover.vue' import Popover from '../popover/popover.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faEllipsisH,
faBookmark,
faEyeSlash,
faThumbtack,
faShareAlt,
faExternalLinkAlt
} from '@fortawesome/free-solid-svg-icons'
import {
faBookmark as faBookmarkReg,
faFlag
} from '@fortawesome/free-regular-svg-icons'
library.add(
faEllipsisH,
faBookmark,
faBookmarkReg,
faEyeSlash,
faThumbtack,
faShareAlt,
faExternalLinkAlt,
faFlag
)
const ExtraButtons = { const ExtraButtons = {
props: [ 'status' ], props: [ 'status' ],
@@ -34,6 +58,19 @@ const ExtraButtons = {
navigator.clipboard.writeText(this.statusLink) navigator.clipboard.writeText(this.statusLink)
.then(() => this.$emit('onSuccess')) .then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error)) .catch(err => this.$emit('onError', err.error.error))
},
bookmarkStatus () {
this.$store.dispatch('bookmark', { id: this.status.id })
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
},
unbookmarkStatus () {
this.$store.dispatch('unbookmark', { id: this.status.id })
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
},
reportStatus () {
this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] })
} }
}, },
computed: { computed: {
+97 -19
View File
@@ -1,8 +1,11 @@
<template> <template>
<Popover <Popover
class="ExtraButtons"
trigger="click" trigger="click"
placement="top" placement="top"
class="extra-button-popover" :offset="{ y: 5 }"
:bound-to="{ x: 'container' }"
remove-padding
> >
<div <div
slot="content" slot="content"
@@ -11,55 +14,122 @@
<div class="dropdown-menu"> <div class="dropdown-menu">
<button <button
v-if="canMute && !status.thread_muted" v-if="canMute && !status.thread_muted"
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="muteConversation" @click.prevent="muteConversation"
> >
<i class="icon-eye-off" /><span>{{ $t("status.mute_conversation") }}</span> <FAIcon
fixed-width
icon="eye-slash"
/><span>{{ $t("status.mute_conversation") }}</span>
</button> </button>
<button <button
v-if="canMute && status.thread_muted" v-if="canMute && status.thread_muted"
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="unmuteConversation" @click.prevent="unmuteConversation"
> >
<i class="icon-eye-off" /><span>{{ $t("status.unmute_conversation") }}</span> <FAIcon
fixed-width
icon="eye-slash"
/><span>{{ $t("status.unmute_conversation") }}</span>
</button> </button>
<button <button
v-if="!status.pinned && canPin" v-if="!status.pinned && canPin"
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="pinStatus" @click.prevent="pinStatus"
@click="close" @click="close"
> >
<i class="icon-pin" /><span>{{ $t("status.pin") }}</span> <FAIcon
fixed-width
icon="thumbtack"
/><span>{{ $t("status.pin") }}</span>
</button> </button>
<button <button
v-if="status.pinned && canPin" v-if="status.pinned && canPin"
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="unpinStatus" @click.prevent="unpinStatus"
@click="close" @click="close"
> >
<i class="icon-pin" /><span>{{ $t("status.unpin") }}</span> <FAIcon
fixed-width
icon="thumbtack"
/><span>{{ $t("status.unpin") }}</span>
</button>
<button
v-if="!status.bookmarked"
class="button-default dropdown-item dropdown-item-icon"
@click.prevent="bookmarkStatus"
@click="close"
>
<FAIcon
fixed-width
:icon="['far', 'bookmark']"
/><span>{{ $t("status.bookmark") }}</span>
</button>
<button
v-if="status.bookmarked"
class="button-default dropdown-item dropdown-item-icon"
@click.prevent="unbookmarkStatus"
@click="close"
>
<FAIcon
fixed-width
icon="bookmark"
/><span>{{ $t("status.unbookmark") }}</span>
</button> </button>
<button <button
v-if="canDelete" v-if="canDelete"
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="deleteStatus" @click.prevent="deleteStatus"
@click="close" @click="close"
> >
<i class="icon-cancel" /><span>{{ $t("status.delete") }}</span> <FAIcon
fixed-width
icon="times"
/><span>{{ $t("status.delete") }}</span>
</button> </button>
<button <button
class="dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@click.prevent="copyLink" @click.prevent="copyLink"
@click="close" @click="close"
> >
<i class="icon-share" /><span>{{ $t("status.copy_link") }}</span> <FAIcon
fixed-width
icon="share-alt"
/><span>{{ $t("status.copy_link") }}</span>
</button>
<a
v-if="!status.is_local"
class="button-default dropdown-item dropdown-item-icon"
title="Source"
:href="status.external_url"
target="_blank"
>
<FAIcon
fixed-width
icon="external-link-alt"
/><span>{{ $t("status.external_source") }}</span>
</a>
<button
class="button-default dropdown-item dropdown-item-icon"
@click.prevent="reportStatus"
@click="close"
>
<FAIcon
fixed-width
:icon="['far', 'flag']"
/><span>{{ $t("user_card.report") }}</span>
</button> </button>
</div> </div>
</div> </div>
<i <span
slot="trigger" slot="trigger"
class="icon-ellipsis button-icon" class="popover-trigger"
>
<FAIcon
class="fa-scale-110 fa-old-padding"
icon="ellipsis-h"
/> />
</span>
</Popover> </Popover>
</template> </template>
@@ -68,13 +138,21 @@
<style lang="scss"> <style lang="scss">
@import '../../_variables.scss'; @import '../../_variables.scss';
.icon-ellipsis { .ExtraButtons {
cursor: pointer; /* override of popover internal stuff */
.popover-trigger-button {
width: auto;
}
&:hover, .popover-trigger {
.extra-button-popover.open & { position: static;
padding: 10px;
margin: -10px;
&:hover .svg-inline--fa {
color: $fallback--text; color: $fallback--text;
color: var(--text, $fallback--text); color: var(--text, $fallback--text);
} }
} }
}
</style> </style>
@@ -1,4 +1,14 @@
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faStar } from '@fortawesome/free-solid-svg-icons'
import {
faStar as faStarRegular
} from '@fortawesome/free-regular-svg-icons'
library.add(
faStar,
faStarRegular
)
const FavoriteButton = { const FavoriteButton = {
props: ['status', 'loggedIn'], props: ['status', 'loggedIn'],
@@ -21,13 +31,6 @@ const FavoriteButton = {
} }
}, },
computed: { computed: {
classes () {
return {
'icon-star-empty': !this.status.favorited,
'icon-star': this.status.favorited,
'animate-spin': this.animated
}
},
...mapGetters(['mergedConfig']) ...mapGetters(['mergedConfig'])
} }
} }
@@ -1,20 +1,31 @@
<template> <template>
<div v-if="loggedIn"> <div class="FavoriteButton">
<i <button
:class="classes" v-if="loggedIn"
class="button-icon favorite-button fav-active" class="button-unstyled interactive"
:class="status.favorited && '-favorited'"
:title="$t('tool_tip.favorite')" :title="$t('tool_tip.favorite')"
@click.prevent="favorite()" @click.prevent="favorite()"
>
<FAIcon
class="fa-scale-110 fa-old-padding"
:icon="[status.favorited ? 'fas' : 'far', 'star']"
:spin="animated"
/> />
<span v-if="!mergedConfig.hidePostStats && status.fave_num > 0">{{ status.fave_num }}</span> </button>
</div> <span v-else>
<div v-else> <FAIcon
<i class="fa-scale-110 fa-old-padding"
:class="classes"
class="button-icon favorite-button"
:title="$t('tool_tip.favorite')" :title="$t('tool_tip.favorite')"
:icon="['far', 'star']"
/> />
<span v-if="!mergedConfig.hidePostStats && status.fave_num > 0">{{ status.fave_num }}</span> </span>
<span
v-if="!mergedConfig.hidePostStats && status.fave_num > 0"
class="action-counter"
>
{{ status.fave_num }}
</span>
</div> </div>
</template> </template>
@@ -23,18 +34,29 @@
<style lang="scss"> <style lang="scss">
@import '../../_variables.scss'; @import '../../_variables.scss';
.fav-active { .FavoriteButton {
cursor: pointer; display: flex;
> :first-child {
padding: 10px;
margin: -10px -8px -10px -10px;
}
.action-counter {
pointer-events: none;
user-select: none;
}
.interactive {
.svg-inline--fa {
animation-duration: 0.6s; animation-duration: 0.6s;
}
&:hover { &:hover .svg-inline--fa,
&.-favorited .svg-inline--fa {
color: $fallback--cOrange; color: $fallback--cOrange;
color: var(--cOrange, $fallback--cOrange); color: var(--cOrange, $fallback--cOrange);
} }
} }
.favorite-button.icon-star {
color: $fallback--cOrange;
color: var(--cOrange, $fallback--cOrange);
} }
</style> </style>
@@ -1,11 +1,15 @@
import fileSizeFormatService from '../../services/file_size_format/file_size_format.js'
const FeaturesPanel = { const FeaturesPanel = {
computed: { computed: {
chat: function () { return this.$store.state.instance.chatAvailable }, chat: function () { return this.$store.state.instance.chatAvailable },
pleromaChatMessages: function () { return this.$store.state.instance.pleromaChatMessagesAvailable },
gopher: function () { return this.$store.state.instance.gopherAvailable }, gopher: function () { return this.$store.state.instance.gopherAvailable },
whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled }, whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled },
mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable }, mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable },
minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode }, minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode },
textlimit: function () { return this.$store.state.instance.textlimit } textlimit: function () { return this.$store.state.instance.textlimit },
uploadlimit: function () { return fileSizeFormatService.fileSizeFormat(this.$store.state.instance.uploadlimit) }
} }
} }
@@ -11,6 +11,9 @@
<li v-if="chat"> <li v-if="chat">
{{ $t('features_panel.chat') }} {{ $t('features_panel.chat') }}
</li> </li>
<li v-if="pleromaChatMessages">
{{ $t('features_panel.pleroma_chat_messages') }}
</li>
<li v-if="gopher"> <li v-if="gopher">
{{ $t('features_panel.gopher') }} {{ $t('features_panel.gopher') }}
</li> </li>
@@ -22,6 +25,7 @@
</li> </li>
<li>{{ $t('features_panel.scope_options') }}</li> <li>{{ $t('features_panel.scope_options') }}</li>
<li>{{ $t('features_panel.text_limit') }} = {{ textlimit }}</li> <li>{{ $t('features_panel.text_limit') }} = {{ textlimit }}</li>
<li>{{ $t('features_panel.upload_limit') }} = {{ uploadlimit.num }} {{ $t('upload.file_size_units.' + uploadlimit.unit) }}</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -1,6 +1,6 @@
<template> <template>
<button <button
class="btn btn-default follow-button" class="btn button-default follow-button"
:class="{ toggled: isPressed }" :class="{ toggled: isPressed }"
:disabled="inProgress" :disabled="inProgress"
:title="title" :title="title"
+2 -2
View File
@@ -2,7 +2,7 @@
<basic-user-card :user="user"> <basic-user-card :user="user">
<div class="follow-card-content-container"> <div class="follow-card-content-container">
<span <span
v-if="!noFollowsYou && relationship.followed_by" v-if="isMe || (!noFollowsYou && relationship.followed_by)"
class="faint" class="faint"
> >
{{ isMe ? $t('user_card.its_you') : $t('user_card.follows_you') }} {{ isMe ? $t('user_card.its_you') : $t('user_card.follows_you') }}
@@ -15,7 +15,7 @@
<RemoteFollow :user="user" /> <RemoteFollow :user="user" />
</div> </div>
</template> </template>
<template v-else> <template v-else-if="!isMe">
<FollowButton <FollowButton
:relationship="relationship" :relationship="relationship"
:label-following="$t('user_card.follow_unfollow')" :label-following="$t('user_card.follow_unfollow')"
@@ -2,13 +2,13 @@
<basic-user-card :user="user"> <basic-user-card :user="user">
<div class="follow-request-card-content-container"> <div class="follow-request-card-content-container">
<button <button
class="btn btn-default" class="btn button-default"
@click="approveUser" @click="approveUser"
> >
{{ $t('user_card.approve') }} {{ $t('user_card.approve') }}
</button> </button>
<button <button
class="btn btn-default" class="btn button-default"
@click="denyUser" @click="denyUser"
> >
{{ $t('user_card.deny') }} {{ $t('user_card.deny') }}
@@ -1,8 +1,10 @@
<template> <template>
<div class="settings panel panel-default"> <div class="settings panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<div class="title">
{{ $t('nav.friend_requests') }} {{ $t('nav.friend_requests') }}
</div> </div>
</div>
<div class="panel-body"> <div class="panel-body">
<FollowRequestCard <FollowRequestCard
v-for="request in requests" v-for="request in requests"
@@ -1,4 +1,12 @@
import { set } from 'vue' import { set } from 'vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faChevronDown
} from '@fortawesome/free-solid-svg-icons'
library.add(
faChevronDown
)
export default { export default {
props: [ props: [
+4 -1
View File
@@ -41,7 +41,10 @@
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }} {{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
</option> </option>
</select> </select>
<i class="icon-down-open" /> <FAIcon
class="select-down-icon"
icon="chevron-down"
/>
</label> </label>
<input <input
v-if="isCustom" v-if="isCustom"
+2 -3
View File
@@ -50,9 +50,7 @@
align-content: stretch; align-content: stretch;
} }
// FIXME: specificity problem with this and .attachments.attachment .gallery-row-inner .attachment {
// we shouldn't have the need for .image here
.attachment.image {
margin: 0 0.5em 0 0; margin: 0 0.5em 0 0;
flex-grow: 1; flex-grow: 1;
height: 100%; height: 100%;
@@ -78,6 +76,7 @@
video, video,
canvas { canvas {
object-fit: contain; object-fit: contain;
height: 100%;
} }
} }
@@ -0,0 +1,23 @@
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
faTimes
)
const GlobalNoticeList = {
computed: {
notices () {
return this.$store.state.interface.globalNotices
}
},
methods: {
closeNotice (notice) {
this.$store.dispatch('removeGlobalNotice', notice)
}
}
}
export default GlobalNoticeList
@@ -0,0 +1,89 @@
<template>
<div class="global-notice-list">
<div
v-for="(notice, index) in notices"
:key="index"
class="alert global-notice"
:class="{ ['global-' + notice.level]: true }"
>
<div class="notice-message">
{{ $t(notice.messageKey, notice.messageArgs) }}
</div>
<button
class="button-unstyled close-notice"
@click="closeNotice(notice)"
>
<FAIcon
class="fa-scale-110 fa-old-padding"
icon="times"
/>
</button>
</div>
</div>
</template>
<script src="./global_notice_list.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.global-notice-list {
position: fixed;
top: 50px;
width: 100%;
pointer-events: none;
z-index: 1001;
display: flex;
flex-direction: column;
align-items: center;
.global-notice {
pointer-events: auto;
text-align: center;
width: 40em;
max-width: calc(100% - 3em);
display: flex;
padding-left: 1.5em;
line-height: 2em;
.notice-message {
flex: 1 1 100%;
}
i {
flex: 0 0;
width: 1.5em;
cursor: pointer;
}
}
.global-error {
background-color: var(--alertPopupError, $fallback--cRed);
color: var(--alertPopupErrorText, $fallback--text);
.svg-inline--fa {
color: var(--alertPopupErrorText, $fallback--text);
}
}
.global-warning {
background-color: var(--alertPopupWarning, $fallback--cOrange);
color: var(--alertPopupWarningText, $fallback--text);
.svg-inline--fa {
color: var(--alertPopupWarningText, $fallback--text);
}
}
.global-info {
background-color: var(--alertPopupNeutral, $fallback--fg);
color: var(--alertPopupNeutralText, $fallback--text);
.svg-inline--fa {
color: var(--alertPopupNeutralText, $fallback--text);
}
}
.close-notice {
padding-right: 0.2em;
.svg-inline--fa:hover {
opacity: 0.6;
}
}
}
</style>
+9 -12
View File
@@ -1,5 +1,13 @@
import Cropper from 'cropperjs' import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.css' import 'cropperjs/dist/cropper.css'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faCircleNotch
} from '@fortawesome/free-solid-svg-icons'
library.add(
faCircleNotch
)
const ImageCropper = { const ImageCropper = {
props: { props: {
@@ -43,8 +51,7 @@ const ImageCropper = {
cropper: undefined, cropper: undefined,
dataUrl: undefined, dataUrl: undefined,
filename: undefined, filename: undefined,
submitting: false, submitting: false
submitError: null
} }
}, },
computed: { computed: {
@@ -56,9 +63,6 @@ const ImageCropper = {
}, },
cancelText () { cancelText () {
return this.cancelButtonLabel || this.$t('image_cropper.cancel') return this.cancelButtonLabel || this.$t('image_cropper.cancel')
},
submitErrorMsg () {
return this.submitError && this.submitError instanceof Error ? this.submitError.toString() : this.submitError
} }
}, },
methods: { methods: {
@@ -72,12 +76,8 @@ const ImageCropper = {
}, },
submit (cropping = true) { submit (cropping = true) {
this.submitting = true this.submitting = true
this.avatarUploadError = null
this.submitHandler(cropping && this.cropper, this.file) this.submitHandler(cropping && this.cropper, this.file)
.then(() => this.destroy()) .then(() => this.destroy())
.catch((err) => {
this.submitError = err
})
.finally(() => { .finally(() => {
this.submitting = false this.submitting = false
}) })
@@ -103,9 +103,6 @@ const ImageCropper = {
reader.readAsDataURL(this.file) reader.readAsDataURL(this.file)
this.$emit('changed', this.file, reader) this.$emit('changed', this.file, reader)
} }
},
clearError () {
this.submitError = null
} }
}, },
mounted () { mounted () {
+6 -15
View File
@@ -11,39 +11,30 @@
</div> </div>
<div class="image-cropper-buttons-wrapper"> <div class="image-cropper-buttons-wrapper">
<button <button
class="btn" class="button-default btn"
type="button" type="button"
:disabled="submitting" :disabled="submitting"
@click="submit()" @click="submit()"
v-text="saveText" v-text="saveText"
/> />
<button <button
class="btn" class="button-default btn"
type="button" type="button"
:disabled="submitting" :disabled="submitting"
@click="destroy" @click="destroy"
v-text="cancelText" v-text="cancelText"
/> />
<button <button
class="btn" class="button-default btn"
type="button" type="button"
:disabled="submitting" :disabled="submitting"
@click="submit(false)" @click="submit(false)"
v-text="saveWithoutCroppingText" v-text="saveWithoutCroppingText"
/> />
<i <FAIcon
v-if="submitting" v-if="submitting"
class="icon-spin4 animate-spin" spin
/> icon="circle-notch"
</div>
<div
v-if="submitError"
class="alert error"
>
{{ submitErrorMsg }}
<i
class="button-icon icon-cancel"
@click="clearError"
/> />
</div> </div>
</div> </div>
+11
View File
@@ -1,3 +1,14 @@
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faCircleNotch,
faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
faCircleNotch,
faTimes
)
const Importer = { const Importer = {
props: { props: {
submitHandler: { submitHandler: {
+9 -7
View File
@@ -7,27 +7,29 @@
@change="change" @change="change"
> >
</form> </form>
<i <FAIcon
v-if="submitting" v-if="submitting"
class="icon-spin4 animate-spin importer-uploading" class="importer-uploading"
spin
icon="circle-notch"
/> />
<button <button
v-else v-else
class="btn btn-default" class="btn button-default"
@click="submit" @click="submit"
> >
{{ submitButtonLabel }} {{ submitButtonLabel }}
</button> </button>
<div v-if="success"> <div v-if="success">
<i <FAIcon
class="icon-cross" icon="times"
@click="dismiss" @click="dismiss"
/> />
<p>{{ successMessage }}</p> <p>{{ successMessage }}</p>
</div> </div>
<div v-else-if="error"> <div v-else-if="error">
<i <FAIcon
class="icon-cross" icon="times"
@click="dismiss" @click="dismiss"
/> />
<p>{{ errorMessage }}</p> <p>{{ errorMessage }}</p>
@@ -12,38 +12,45 @@
v-model="language" v-model="language"
> >
<option <option
v-for="(langCode, i) in languageCodes" v-for="lang in languages"
:key="langCode" :key="lang.code"
:value="langCode" :value="lang.code"
> >
{{ languageNames[i] }} {{ lang.name }}
</option> </option>
</select> </select>
<i class="icon-down-open" /> <FAIcon
class="select-down-icon"
icon="chevron-down"
/>
</label> </label>
</div> </div>
</template> </template>
<script> <script>
import languagesObject from '../../i18n/messages' import languagesObject from '../../i18n/messages'
import localeService from '../../services/locale/locale.service.js'
import ISO6391 from 'iso-639-1' import ISO6391 from 'iso-639-1'
import _ from 'lodash' import _ from 'lodash'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faChevronDown
} from '@fortawesome/free-solid-svg-icons'
library.add(
faChevronDown
)
export default { export default {
computed: { computed: {
languageCodes () { languages () {
return Object.keys(languagesObject) return _.map(languagesObject.languages, (code) => ({ code: code, name: this.getLanguageName(code) })).sort((a, b) => a.name.localeCompare(b.name))
},
languageNames () {
return _.map(this.languageCodes, this.getLanguageName)
}, },
language: { language: {
get: function () { return this.$store.getters.mergedConfig.interfaceLanguage }, get: function () { return this.$store.getters.mergedConfig.interfaceLanguage },
set: function (val) { set: function (val) {
this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val }) this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
this.$i18n.locale = val
} }
} }
}, },
@@ -51,11 +58,13 @@ export default {
methods: { methods: {
getLanguageName (code) { getLanguageName (code) {
const specialLanguageNames = { const specialLanguageNames = {
'ja': 'Japanese (日本語)', 'ja_easy': 'やさしいにほんご',
'ja_easy': 'Japanese (やさしいにほんご)', 'zh': '简体中文',
'zh': 'Chinese (简体中文)' 'zh_Hant': '繁體中文'
} }
return specialLanguageNames[code] || ISO6391.getName(code) const languageName = specialLanguageNames[code] || ISO6391.getNativeName(code)
const browserLocale = localeService.internalToBrowserLocale(code)
return languageName.charAt(0).toLocaleUpperCase(browserLocale) + languageName.slice(1)
} }
} }
} }
+13 -2
View File
@@ -1,3 +1,5 @@
import { mapGetters } from 'vuex'
const LinkPreview = { const LinkPreview = {
name: 'LinkPreview', name: 'LinkPreview',
props: [ props: [
@@ -15,11 +17,20 @@ const LinkPreview = {
// Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid
// as it makes sure to hide the image if somehow NSFW tagged preview can // as it makes sure to hide the image if somehow NSFW tagged preview can
// exist. // exist.
return this.card.image && !this.nsfw && this.size !== 'hide' return this.card.image && !this.censored && this.size !== 'hide'
},
censored () {
return this.nsfw && this.hideNsfwConfig
}, },
useDescription () { useDescription () {
return this.card.description && /\S/.test(this.card.description) return this.card.description && /\S/.test(this.card.description)
} },
hideNsfwConfig () {
return this.mergedConfig.hideNsfw
},
...mapGetters([
'mergedConfig'
])
}, },
created () { created () {
if (this.useImage) { if (this.useImage) {
+11 -6
View File
@@ -9,12 +9,17 @@
<div <div
v-if="useImage && imageLoaded" v-if="useImage && imageLoaded"
class="card-image" class="card-image"
:class="{ 'small-image': size === 'small' }"
> >
<img :src="card.image"> <img :src="card.image">
</div> </div>
<div class="card-content"> <div class="card-content">
<span class="card-host faint">{{ card.provider_name }}</span> <span class="card-host faint">
<span
v-if="censored"
class="nsfw-alert alert warning"
>{{ $t('status.nsfw') }}</span>
{{ card.provider_name }}
</span>
<h4 class="card-title">{{ card.title }}</h4> <h4 class="card-title">{{ card.title }}</h4>
<p <p
v-if="useDescription" v-if="useDescription"
@@ -50,10 +55,6 @@
} }
} }
.small-image {
width: 80px;
}
.card-content { .card-content {
max-height: 100%; max-height: 100%;
margin: 0.5em; margin: 0.5em;
@@ -76,6 +77,10 @@
max-height: calc(1.2em * 3 - 1px); max-height: calc(1.2em * 3 - 1px);
} }
.nsfw-alert {
margin: 2em 0;
}
color: $fallback--text; color: $fallback--text;
color: var(--text, $fallback--text); color: var(--text, $fallback--text);
border-style: solid; border-style: solid;
+8
View File
@@ -1,5 +1,13 @@
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex' import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
import oauthApi from '../../services/new_api/oauth.js' import oauthApi from '../../services/new_api/oauth.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faTimes
} from '@fortawesome/free-solid-svg-icons'
library.add(
faTimes
)
const LoginForm = { const LoginForm = {
data: () => ({ data: () => ({
+4 -3
View File
@@ -61,7 +61,7 @@
<button <button
:disabled="loggingIn" :disabled="loggingIn"
type="submit" type="submit"
class="btn btn-default" class="btn button-default"
> >
{{ $t('login.login') }} {{ $t('login.login') }}
</button> </button>
@@ -76,8 +76,9 @@
> >
<div class="alert error"> <div class="alert error">
{{ error }} {{ error }}
<i <FAIcon
class="button-icon icon-cancel" class="fa-scale-110 fa-old-padding"
icon="times"
@click="clearError" @click="clearError"
/> />
</div> </div>
+12
View File
@@ -3,6 +3,16 @@ import VideoAttachment from '../video_attachment/video_attachment.vue'
import Modal from '../modal/modal.vue' import Modal from '../modal/modal.vue'
import fileTypeService from '../../services/file_type/file_type.service.js' import fileTypeService from '../../services/file_type/file_type.service.js'
import GestureService from '../../services/gesture_service/gesture_service' import GestureService from '../../services/gesture_service/gesture_service'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
faChevronLeft,
faChevronRight
} from '@fortawesome/free-solid-svg-icons'
library.add(
faChevronLeft,
faChevronRight
)
const MediaModal = { const MediaModal = {
components: { components: {
@@ -84,10 +94,12 @@ const MediaModal = {
} }
}, },
mounted () { mounted () {
window.addEventListener('popstate', this.hide)
document.addEventListener('keyup', this.handleKeyupEvent) document.addEventListener('keyup', this.handleKeyupEvent)
document.addEventListener('keydown', this.handleKeydownEvent) document.addEventListener('keydown', this.handleKeydownEvent)
}, },
destroyed () { destroyed () {
window.removeEventListener('popstate', this.hide)
document.removeEventListener('keyup', this.handleKeyupEvent) document.removeEventListener('keyup', this.handleKeyupEvent)
document.removeEventListener('keydown', this.handleKeydownEvent) document.removeEventListener('keydown', this.handleKeydownEvent)
} }
+28 -2
View File
@@ -8,6 +8,8 @@
v-if="type === 'image'" v-if="type === 'image'"
class="modal-image" class="modal-image"
:src="currentMedia.url" :src="currentMedia.url"
:alt="currentMedia.description"
:title="currentMedia.description"
@touchstart.stop="mediaTouchStart" @touchstart.stop="mediaTouchStart"
@touchmove.stop="mediaTouchMove" @touchmove.stop="mediaTouchMove"
@click="hide" @click="hide"
@@ -18,13 +20,24 @@
:attachment="currentMedia" :attachment="currentMedia"
:controls="true" :controls="true"
/> />
<audio
v-if="type === 'audio'"
class="modal-image"
:src="currentMedia.url"
:alt="currentMedia.description"
:title="currentMedia.description"
controls
/>
<button <button
v-if="canNavigate" v-if="canNavigate"
:title="$t('media_modal.previous')" :title="$t('media_modal.previous')"
class="modal-view-button-arrow modal-view-button-arrow--prev" class="modal-view-button-arrow modal-view-button-arrow--prev"
@click.stop.prevent="goPrev" @click.stop.prevent="goPrev"
> >
<i class="icon-left-open arrow-icon" /> <FAIcon
class="arrow-icon"
icon="chevron-left"
/>
</button> </button>
<button <button
v-if="canNavigate" v-if="canNavigate"
@@ -32,7 +45,10 @@
class="modal-view-button-arrow modal-view-button-arrow--next" class="modal-view-button-arrow modal-view-button-arrow--next"
@click.stop.prevent="goNext" @click.stop.prevent="goNext"
> >
<i class="icon-right-open arrow-icon" /> <FAIcon
class="arrow-icon"
icon="chevron-right"
/>
</button> </button>
</Modal> </Modal>
</template> </template>
@@ -57,11 +73,21 @@
} }
} }
@keyframes media-fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.modal-image { .modal-image {
max-width: 90%; max-width: 90%;
max-height: 90%; max-height: 90%;
box-shadow: 0px 5px 15px 0 rgba(0, 0, 0, 0.5); box-shadow: 0px 5px 15px 0 rgba(0, 0, 0, 0.5);
image-orientation: from-image; // NOTE: only FF supports this image-orientation: from-image; // NOTE: only FF supports this
animation: 0.1s cubic-bezier(0.7, 0, 1, 0.6) media-fadein;
} }
.modal-view-button-arrow { .modal-view-button-arrow {

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