Compare commits

..

1889 Commits

Author SHA1 Message Date
Shpuld Shpludson a0f780c455 Merge branch 'rc/2.0.3' into 'master'
Update MASTER with 2.0.3 for real

See merge request pleroma/pleroma-fe!1099
2020-05-02 14:17:27 +00:00
Shpuld Shpludson 2618c1b702 Update CHANGELOG.md 2020-05-02 16:21:46 +03:00
Shpuld Shpuldson b095d2e17e don't dismiss a rejected follow request on server 2020-05-02 16:21:46 +03:00
Shpuld Shpuldson 20b53d58b7 mark single notifs as seen properly on server 2020-05-02 16:21:46 +03:00
Shpuld Shpuldson 36dcfa8cc1 follow request bugfixes, wrong text, notifs not being marked as read, approving from follow request view 2020-05-02 16:21:46 +03:00
eugenijm ab3c0e8512 Add support for follow request notifications 2020-05-02 16:21:46 +03:00
Shpuld Shpludson 4d1a674634 Update CHANGELOG.md 2020-05-02 16:21:46 +03:00
Shpuld Shpludson 372eb723db Update CHANGELOG.md 2020-05-02 16:21:46 +03:00
xenofem fe4282f44b Prioritize custom emoji a lot and boost exact matches to the top 2020-05-02 16:21:46 +03:00
xenofem aef03d53b2 Allow emoji suggestions based on a match anywhere in the emoji name, but improve sorting 2020-05-02 16:21:46 +03:00
xenofem eae0bce320 Refactor status showing/hiding code for better handling of edge cases and easier comprehension 2020-05-02 16:21:46 +03:00
Karol Kosek c4d1c2131c Fix user names with the RTL char in notifications 2020-05-02 16:21:46 +03:00
Egor Kislitsyn 0ba34eeca5 Fix pagination 2020-05-02 16:21:46 +03:00
Shpuld Shpludson 8e049297ff Merge branch 'develop' into 'master'
Update master for 2.0.2

See merge request pleroma/pleroma-fe!1088
2020-04-08 13:12:42 +00:00
Shpuld Shpludson 32ab69fe0e Merge branch 'chore/2.0.1-changelog' into 'develop'
CHANGELOG.md: Add entries for upcoming 2.0.2 release

See merge request pleroma/pleroma-fe!1087
2020-04-08 13:03:15 +00:00
rinpatch b4e8b4554a CHANGELOG.md: Add entries for upcoming 2.0.2 release 2020-04-08 00:04:53 +03:00
Shpuld Shpludson 01ba4a54bc Merge branch 'develop' into 'develop'
Update polish translation

See merge request pleroma/pleroma-fe!1077
2020-04-06 10:07:33 +00:00
Shpuld Shpludson d5457c323a Merge branch 'fix/boosts-favs-private-instance' into 'develop'
Send credentials for favourited_by and reblogged_by API endpoints

Closes #795

See merge request pleroma/pleroma-fe!1086
2020-04-01 14:00:22 +00:00
Mark Felder 40005240eb Send credentials for favourited_by and reblogged_by API endpoints
This ensures the data is fetchable on private instances
2020-03-31 14:46:38 -05:00
Shpuld Shpludson 6e14fb292c Merge branch 'caskd-develop-patch-76396' into 'develop'
Prevent overflow for long usernames/domains

See merge request pleroma/pleroma-fe!1083
2020-03-14 20:03:11 +00:00
Alex b9820b84a1 Prevent overflow for long usernames/domains 2020-03-14 19:41:38 +00:00
HJ ed0b240e29 Merge branch 'fix/captcha-input' into 'develop'
Fix captcha input and disable ALL the helpers

Closes #778

See merge request pleroma/pleroma-fe!1071
2020-03-11 16:40:31 +00:00
Shpuld Shpludson 3845529412 Merge branch 'develop' into 'master'
update master with develop changes

See merge request pleroma/pleroma-fe!1082
2020-03-07 15:03:13 +00:00
HJ 2c3db2b6a2 Merge branch 'fix/themes-2.1-opacity-again' into 'develop'
fix several issues related to opacity

Closes #787 and #789

See merge request pleroma/pleroma-fe!1081
2020-03-07 14:33:19 +00:00
Henry Jameson a485386a3b fix tests 2020-03-06 21:48:40 +02:00
Henry Jameson 550080bd82 fix last issue 2020-03-06 21:39:17 +02:00
Henry Jameson 7aa5bf0896 prioritize disabled opacity over transparent keyword 2020-03-06 21:20:42 +02:00
Henry Jameson 9f2c1b4008 fix several issues related to opacity 2020-03-06 21:17:24 +02:00
Shpuld Shpludson 83d8343777 Merge branch 'develop' into 'master'
Update master with 2.0.0

See merge request pleroma/pleroma-fe!1080
2020-03-04 15:42:37 +00:00
Shpuld Shpuldson 147364b80c mention status preview fix in changelog 2020-03-04 17:30:59 +02:00
Shpuld Shpludson f58f294ee8 Merge branch 'fix/themes-2.1-transparency-pink' into 'develop'
fix trasparency problems in some cases (purple headers)

See merge request pleroma/pleroma-fe!1079
2020-03-04 06:20:28 +00:00
Henry Jameson 0702934f4f fix trasparency problems in some cases (purple headers) 2020-03-04 00:23:14 +02:00
HJ dbcd8294e8 Merge branch 'fix/remove-spinner-on-failed-status-previews' into 'develop'
Fix: failed status previews spinning forever

See merge request pleroma/pleroma-fe!1078
2020-03-02 10:49:24 +00:00
Shpuld Shpuldson ab4005add5 add status unavailable message when status can't be loaded in status preview 2020-03-02 08:35:57 +02:00
Jędrzej Tomaszewski e4ded88796 Update polish translation 2020-03-01 17:32:22 +01:00
Shpuld Shpludson 1b9805b550 Merge branch 'develop' into 'master'
Update master with 2.0.0

See merge request pleroma/pleroma-fe!1074
2020-02-28 20:27:02 +00:00
Shpuld Shpludson 57e72b48c1 Update CHANGELOG.md 2020-02-28 20:16:53 +00:00
Shpuld Shpludson a2070fd781 Update CHANGELOG.md 2020-02-28 19:57:22 +00:00
Shpuld Shpludson 575b542db2 Merge branch 'feat/update-pleroma-themes' into 'develop'
update pleroma-dark and pleroma-light

See merge request pleroma/pleroma-fe!1070
2020-02-28 17:53:41 +00:00
Shpuld Shpludson ee582855d2 Apply suggestion to src/modules/instance.js 2020-02-28 17:20:40 +00:00
Shpuld Shpludson 111c1ced67 Merge branch 'fix/popover-performance' into 'develop'
Fix/popover performance

See merge request pleroma/pleroma-fe!1066
2020-02-28 16:39:47 +00:00
Shpuld Shpludson 31225f5d14 Fix/popover performance 2020-02-28 16:39:47 +00:00
Mark Felder 23e0ce59e6 Fix captcha input and disable ALL the helpers 2020-02-22 09:42:22 -06:00
Shpuld Shpuldson 5b7acca0ba make theme loading work with source-only presets 2020-02-22 10:57:08 +02:00
Shpuld Shpuldson 1fb91b1795 remove bloat from themes 2020-02-22 10:34:54 +02:00
Shpuld Shpuldson b5c6b77ca8 update using variables 2020-02-22 10:03:16 +02:00
Shpuld Shpludson 8c454b9456 Apply suggestion to static/themes/pleroma-dark.json 2020-02-21 14:09:31 +00:00
Shpuld Shpludson c9935362de Apply suggestion to static/themes/pleroma-dark.json 2020-02-21 14:09:29 +00:00
Shpuld Shpludson 19cc739598 Apply suggestion to static/themes/pleroma-dark.json 2020-02-21 14:09:25 +00:00
Shpuld Shpludson e342dbcb10 Apply suggestion to static/themes/pleroma-dark.json 2020-02-21 14:09:21 +00:00
Shpuld Shpuldson 64a6ba219a make panel header highlight less harsh 2020-02-20 21:14:42 +02:00
Shpuld Shpuldson 8bb5d775b4 update pleroma-dark and pleroma-light 2020-02-20 20:47:24 +02:00
Henry Jameson d19c64314f stop using customTheme in user card, instead use color slots. fix for opacity
inheritance polluting inheritors
2020-02-20 18:13:40 +02:00
Shpuld Shpludson 0abc3f9b85 Merge branch 'moderation-menu-fix' into 'develop'
Fix user deactivation, deletion, and role assignment in the moderation menu

See merge request pleroma/pleroma-fe!1063
2020-02-19 16:30:53 +00:00
HJ 3ddf7ebe2c Merge branch 'themes-accent' into 'develop'
Themes v3 Part 1 "2.1" codenamed "One step for themes, a giant burder for code reviewers"

Closes #750 and #774

See merge request pleroma/pleroma-fe!1037
2020-02-18 21:20:43 +00:00
Henry Jameson 32902e01f8 fix changelog. kenomo didn't happen. 2020-02-18 00:30:10 +02:00
Henry Jameson 171f4c7ddb update headers in switcher to better separate the subsections 2020-02-18 00:01:48 +02:00
Henry Jameson 1e95a0795a paper theme, updated todo, lol 2020-02-17 23:59:52 +02:00
Henry Jameson 3b3a31b461 improve the display of disabled buttons 2020-02-17 23:43:56 +02:00
Henry Jameson 5c6046ea0a attempt to fix some bugs with shadows control 2020-02-17 23:43:35 +02:00
Henry Jameson 76323d6d9a fix #774 2020-02-17 22:38:24 +02:00
Henry Jameson e36647e95e revert emoji reaction style 2020-02-17 22:28:14 +02:00
eugenijm 695d6b6c50 Fix user activation/deactivation, deletion, and role assignment in the moderation menu 2020-02-17 16:29:39 +03:00
Shpuld Shpludson 26e455bb4c Merge branch 'fix/no-mrf-transparency-crash' into 'develop'
after_store: Fix failing to parse nodeinfo when mrf transparency is disabled

Closes #772

See merge request pleroma/pleroma-fe!1064
2020-02-17 08:17:36 +00:00
HJ 12cd96bfa7 Merge branch 'fix-android-emoji-input' into 'develop'
Add onInput() function as listener for input events, remove unnecessary compositionupdate listener

Closes #775

See merge request pleroma/pleroma-fe!1065
2020-02-16 23:54:57 +00:00
xenofem c1e38a4423 EmojiInput tests should be checking the input value on the last input event, not the first 2020-02-16 16:35:04 -05:00
xenofem 59dd7f1320 Add onInput() function as listener for input events, remove unnecessary compositionupdate listener 2020-02-16 14:58:43 -05:00
Henry Jameson c43325acd7 fix pressed button in top bar 2020-02-13 21:39:14 +02:00
rinpatch 0dcc3bf2fe after_store: Fix failing to parse nodeinfo when mrf transparency is
disabled

Closes #772
2020-02-13 22:35:46 +03:00
Shpuld Shpludson 21f6120e9d Merge branch 'refactor/i18n-messages-for-mrf-policy-disclosure' into 'develop'
Refactor i18n messages for MRF policy disclosure

See merge request pleroma/pleroma-fe!1062
2020-02-13 09:43:56 +00:00
Hakaba Hitoyo 4aeba026e6 Refactor i18n messages for MRF policy disclosure 2020-02-13 09:43:56 +00:00
Shpuld Shpludson f50068ef35 Merge branch 'improve-default-tos' into 'develop'
Improve default ToS

See merge request pleroma/pleroma-fe!1057
2020-02-13 09:41:31 +00:00
Hakaba Hitoyo 823a303f8a Improve default ToS 2020-02-13 09:41:31 +00:00
Henry Jameson ba3c278002 dismiss warning when selecting other themes, fix collapsed attachments link color 2020-02-12 01:26:01 +02:00
Henry Jameson 0fd78e99f5 properly clear theme 2020-02-12 01:19:48 +02:00
Henry Jameson 73dd7209dd fixed transparent + semi-transparent inheritance case 2020-02-12 01:12:36 +02:00
Henry Jameson 2274976c09 post-merge fix 2020-02-12 01:10:00 +02:00
HJ 84ebae8ed3 Merge branch 'develop' into 'themes-accent'
# Conflicts:
#   src/components/emoji_reactions/emoji_reactions.vue
2020-02-11 23:09:15 +00:00
Henry Jameson 60446c56a5 fix v2 breezy themes having messed up pressed buttons. updated v2.1 breezy
themes to have derived colors instead of fixed ones.
2020-02-12 00:46:48 +02:00
lain 96dc297bab Merge branch 'feat/emoji-reaction-fixes-improvements' into 'develop'
Emoji Reactions - fixes and improvements

See merge request pleroma/pleroma-fe!1051
2020-02-11 12:24:51 +00:00
Shpuld Shpludson f6b482be51 Emoji Reactions - fixes and improvements 2020-02-11 12:24:51 +00:00
Henry Jameson 29133fb008 don't use cache for theme data 2020-02-11 10:42:15 +02:00
Henry Jameson 786a695eb6 Merge remote-tracking branch 'upstream/develop' into themes-accent
* upstream/develop:
  Fix one click nsfw unhide on videos
  Escape HTML from display name and subject fields
2020-02-11 10:03:34 +02:00
Henry Jameson 6f3ac707f7 fix and update changelog 2020-02-11 09:59:26 +02:00
Henry Jameson 43bddc79e0 fix/remove contrast ratios 2020-02-11 01:13:59 +02:00
Henry Jameson e6f148b8a3 removed base16-related code 2020-02-11 00:59:07 +02:00
Henry Jameson b4278ee517 fix warning stylings 2020-02-11 00:52:25 +02:00
Henry Jameson 38c34b8b51 fixed eslint, made mod work properly depending on context including in shadows 2020-02-11 00:34:30 +02:00
Shpuld Shpludson 17b6d8ddb8 Merge branch 'move-type-notification' into 'develop'
Add setting for allow following move

Closes #732

See merge request pleroma/pleroma-fe!1054
2020-02-10 14:51:35 +00:00
Shpuld Shpludson 6be6241767 Merge branch 'feature-collapsed-media-indicator' into 'develop'
Indicate whether collapsed statuses contain gallery media or link preview cards

Closes #767

See merge request pleroma/pleroma-fe!1056
2020-02-10 14:50:42 +00:00
Shpuld Shpludson 788ff531d6 Merge branch 'feature/mrf-keyword-policy-disclosure' into 'develop'
MRF Keyword Policy Disclosure

See merge request pleroma/pleroma-fe!1055
2020-02-10 08:04:58 +00:00
Hakaba Hitoyo dafced3a86 MRF Keyword Policy Disclosure 2020-02-10 08:04:58 +00:00
xenofem e36c39be19 Include non-gallery attachments and distinguish between images and videos 2020-02-08 16:01:01 -05:00
xenofem 36e19128bf Indicate whether collapsed statuses contain gallery media or link preview cards 2020-02-08 13:15:09 -05:00
Henry Jameson 611da13a4b Better Disabled buttons support. Mammal theme fixes. Implemented proper
context-aware `mod` argument - now checks lightness of "variant" color. needs
retesting tho
2020-02-07 01:25:26 +02:00
feld 8fcb9c42aa Merge branch 'fix/escape-html' into 'develop'
Escape HTML from display name and subject fields

Closes #724

See merge request pleroma/pleroma-fe!1052
2020-02-06 16:12:11 +00:00
kPherox ce68ef0138 Add option text 2020-02-04 04:54:36 +09:00
kPherox a06f3a7fbc Add with_move param for fetching notification 2020-02-04 04:54:36 +09:00
kPherox 9b7497a659 Change to hide User migrates tab when allow following move 2020-02-04 04:54:36 +09:00
kPherox 9bbf10b55d Add setting for allow_following_move 2020-02-04 04:54:28 +09:00
HJ e73e235b4d Merge branch 'fix/one-click-nsfw-videos' into 'develop'
Fix one click nsfw unhide on videos

See merge request pleroma/pleroma-fe!1053
2020-01-31 00:24:54 +00:00
Shpuld Shpludson 4a266a4d05 Fix one click nsfw unhide on videos 2020-01-31 00:24:54 +00:00
rinpatch 746416207b Escape HTML from display name and subject fields
Closes #724
2020-01-30 19:58:23 +03:00
Henry Jameson e46bb94226 updated preview to account for underlay 2020-01-28 23:45:14 +02:00
Henry Jameson 8462853269 update button toggled state, apply it to emoji reactions 2020-01-28 22:40:15 +02:00
Henry Jameson f0c4bb1193 Merge remote-tracking branch 'upstream/develop' into themes-accent
* upstream/develop: (33 commits)
  add emoji reactions to changelog
  fix emoji reaction classes broken in develop
  review changes
  Fix password and email update
  remove unnecessary anonymous function
  Apply suggestion to src/services/api/api.service.js
  remove logs/commented code
  remove favs count from react button
  remove mock data
  change emoji reactions to use new format
  Added polyfills for EventTarget (needed for Safari) and CustomEvent (needed for IE)
  Fix missing TWKN when logged in, but server is set to private mode.
  Fix follower request fetching
  Add domain mutes to changelog
  Implement domain mutes v2
  change changelog to reflect actual release history of frontend
  Fix #750 , fix error messages and captcha resetting
  Optimize Notifications Rendering
  update CHANGELOG
  Use last seen notif instead of first unseen notif for sinceId
  ...
2020-01-28 20:44:13 +02:00
Shpuld Shpuldson c54111797a add emoji reactions to changelog 2020-01-28 17:54:40 +02:00
Shpuld Shpuldson 29806c9629 fix emoji reaction classes broken in develop 2020-01-28 17:53:47 +02:00
lain 73253b87bf Merge branch 'feat/emoji-reactions' into 'develop'
Emoji reactions

See merge request pleroma/pleroma-fe!1049
2020-01-28 15:24:56 +00:00
Shpuld Shpuldson 6afff4f8c2 review changes 2020-01-28 17:09:25 +02:00
HJ 4a11ee9768 Merge branch 'fix-password-and-email-update' into 'develop'
Fix email and password forms in user settings

See merge request pleroma/pleroma-fe!1050
2020-01-28 11:13:17 +00:00
eugenijm 566f013ac4 Fix password and email update 2020-01-28 06:12:32 +03:00
Henry Jameson b63e679a31 removed one color TODO 2020-01-28 02:03:21 +02:00
Henry Jameson 53a15eec7d add theme to list 2020-01-28 01:31:37 +02:00
Henry Jameson 526b43eba6 Kenomo (see: #624) theme. Ability to define link color for post contents. Fixes 2020-01-28 01:29:20 +02:00
Henry Jameson 18ca2a035b fix rgba function, whoops 2020-01-28 00:26:10 +02:00
Shpuld Shpuldson 4e04079739 Merge branch 'feat/emoji-reactions' of git.pleroma.social:pleroma/pleroma-fe into feat/emoji-reactions 2020-01-27 18:44:25 +02:00
Shpuld Shpuldson e6291e4ee1 remove unnecessary anonymous function 2020-01-27 18:43:26 +02:00
lain cb205036f9 Apply suggestion to src/services/api/api.service.js 2020-01-27 14:18:15 +00:00
Shpuld Shpuldson e4e3a28838 remove logs/commented code 2020-01-27 15:49:05 +02:00
Henry Jameson 5313833d80 lint 2020-01-27 04:24:00 +02:00
Henry Jameson 7c074b8741 fix rgba css generation, add some tests to automatically verify that themes are
generated properly
2020-01-27 04:20:13 +02:00
Shpuld Shpuldson 0de627baae remove favs count from react button 2020-01-26 16:18:57 +02:00
Shpuld Shpuldson c4beac5f89 Merge branch 'develop' into feat/emoji-reactions 2020-01-26 15:59:59 +02:00
Shpuld Shpuldson 7cfe1b05e8 remove mock data 2020-01-26 15:57:40 +02:00
Shpuld Shpuldson a018ea622c change emoji reactions to use new format 2020-01-26 15:45:12 +02:00
HJ b0b0fc403a Merge branch 'event-target-fix' into 'develop'
Polyfills for EventTarget and CustomEvent

Closes #756

See merge request pleroma/pleroma-fe!1048
2020-01-24 12:42:54 +00:00
Henry Jameson d7e7f47b66 fix transparent color not affecting downstream slots 2020-01-24 00:56:47 +02:00
Henry Jameson 75fa07626d fix icons in menus 2020-01-24 00:39:21 +02:00
Henry Jameson b96993e4dd improved selectedMenu again 2020-01-24 00:36:32 +02:00
Henry Jameson 53576df72a popover/selected menu improvements 2020-01-24 00:02:16 +02:00
eugenijm 2c61eb8e7f Added polyfills for EventTarget (needed for Safari) and CustomEvent (needed for IE) 2020-01-24 00:55:13 +03:00
Henry Jameson f7ea12c905 separate actual theme data from theme framework 2020-01-23 23:37:58 +02:00
Henry Jameson c1f2457112 revert fgText -> text after some consideration. case was fixed already in other way 2020-01-23 22:48:32 +02:00
Henry Jameson f85a3e3f6d style the dropdown menus better 2020-01-23 22:42:59 +02:00
Henry Jameson c752f56d0b v l1 compatibility 2020-01-23 22:26:49 +02:00
Henry Jameson a69723badf fix snapshot mismatch message for file 2020-01-23 22:04:05 +02:00
HJ deb2ddb398 Merge branch 'fix/federated-timeline-when-private-mode' into 'develop'
Fix missing TWKN when logged in, but server is set to private mode.

Closes #759

See merge request pleroma/pleroma-fe!1047
2020-01-23 18:10:55 +00:00
Mark Felder 9d8dbd8340 Fix missing TWKN when logged in, but server is set to private mode. 2020-01-23 12:00:50 -06:00
Henry Jameson 64fc07f080 removed unused constant, using getOpacitySlot now 2020-01-23 00:36:38 +02:00
Henry Jameson 7354b6f706 fixed get(Layer|Opacity)Slot not working properly which broke Mojave theme 2020-01-23 00:35:56 +02:00
Henry Jameson 8de7eabd8f v2 compatibility fixes 2020-01-22 23:26:24 +02:00
Henry Jameson c7f42b7799 made it actually work, the forceSnapshot 2020-01-22 02:53:40 +02:00
Henry Jameson d98e31af45 snapshot/source mismatch case 2020-01-22 02:44:39 +02:00
Henry Jameson c1e3632f42 fix shadows not being valid from the get-go 2020-01-22 02:15:47 +02:00
Henry Jameson 644ce497a0 lightBg -> highlight because it causes issues with v2 2020-01-22 01:28:46 +02:00
Henry Jameson 803edcb53a dismiss warning when loading theme 2020-01-22 01:28:17 +02:00
Henry Jameson 1191207aa5 more help strings 2020-01-22 00:53:51 +02:00
Henry Jameson cf1149d8c5 updated changelog, slightly 2020-01-22 00:41:21 +02:00
Henry Jameson 9336140486 massively improved initial theme loading code, added checks and warnings when
loading theme files (import/localStorage/defaults)
2020-01-22 00:37:19 +02:00
Shpuld Shpludson ad8eb88323 Merge branch 'fix-follow-requests' into 'develop'
Fix follower request fetching

Closes pleroma#1523 and #757

See merge request pleroma/pleroma-fe!1046
2020-01-21 16:31:41 +00:00
lain 8080981fcd Fix follower request fetching 2020-01-21 16:51:49 +01:00
Henry Jameson 93dfb4d352 fix shadow picker preview, change hint 2020-01-20 02:00:13 +02:00
Henry Jameson a7b6c79136 eslint 2020-01-20 01:45:48 +02:00
Henry Jameson 2b36a62c56 fix tests, integrate depenentless sorting into toposort for easier testing and
better guarantees
2020-01-20 01:44:11 +02:00
Henry Jameson 6e1c538e41 multiple fixes to make style switcher not die. Made shadows work, incuding compatibility 2020-01-20 01:31:54 +02:00
Henry Jameson 6a3714fcc6 Checked contrast rating errors 2020-01-20 00:37:45 +02:00
Henry Jameson e4033c85e2 removed console logs 2020-01-20 00:34:49 +02:00
Henry Jameson 7d7ccf7298 fix some contrast ratios not displaying 2020-01-19 22:44:35 +02:00
Henry Jameson 62343f6099 documentation 2020-01-19 20:59:54 +02:00
Henry Jameson f77d675434 optimized theme loading so that it wouldn't wait until ALL themes are loaded to
select one by default
2020-01-17 00:27:46 +02:00
Henry Jameson 24a7a9bfd8 lint 2020-01-16 23:30:13 +02:00
Henry Jameson 1f5ada08c1 themes update 2020-01-16 23:29:19 +02:00
Henry Jameson c351e5124c fix selectedPost/selectedMenu 2020-01-16 23:28:42 +02:00
Henry Jameson 552d13a060 better fallback for transparent colors 2020-01-16 23:09:46 +02:00
Henry Jameson 8536f3cc32 small fix 2020-01-16 21:59:06 +02:00
Henry Jameson e070ec4b66 more opacity handling 2020-01-16 21:34:33 +02:00
Henry Jameson f16ec75c70 opacity handling 2020-01-16 20:53:05 +02:00
Shpuld Shpuldson f052ac4a1e Add domain mutes to changelog 2020-01-15 22:38:31 +02:00
Shpuld Shpludson 6bd6ec66bc Merge branch 'tae/pleroma-fe-663' into 'develop'
Implement domain mutes v2

See merge request pleroma/pleroma-fe!1045
2020-01-15 20:22:54 +00:00
Shpuld Shpludson 7a013ac393 Implement domain mutes v2 2020-01-15 20:22:54 +00:00
Shpuld Shpludson e3de2964cc Merge branch '736' into 'develop'
Fix "Follow button is out of sync in the about page"

Closes #736

See merge request pleroma/pleroma-fe!1035
2020-01-15 18:40:45 +00:00
Shpuld Shpludson 3ab128e739 Merge branch 'develop' into 'master'
`master` refresh with `develop`

See merge request pleroma/pleroma-fe!1028
2020-01-15 16:35:13 +00:00
Shpuld Shpuldson 7397636914 change changelog to reflect actual release history of frontend 2020-01-14 16:01:30 +02:00
Shpuld Shpludson dac263e224 Merge branch 'fix/registration-backend-interactor-fix' into 'develop'
Fix #750 , fix error messages and captcha resetting

Closes #750

See merge request pleroma/pleroma-fe!1042
2020-01-14 13:45:00 +00:00
Shpuld Shpludson 662afe973a Fix #750 , fix error messages and captcha resetting 2020-01-14 13:45:00 +00:00
Shpuld Shpludson ac90d4c532 Merge branch 'feat/optimize-amount-of-notifs-to-render' into 'develop'
Optimize Notifications Rendering

See merge request pleroma/pleroma-fe!1041
2020-01-14 13:28:57 +00:00
Shpuld Shpludson 86380f0429 Optimize Notifications Rendering 2020-01-14 13:28:57 +00:00
Shpuld Shpuldson dd740043c6 Merge branch 'develop' of git.pleroma.social:pleroma/pleroma-fe into develop 2020-01-14 13:39:17 +02:00
Shpuld Shpuldson 9b8cdb6525 update CHANGELOG 2020-01-14 13:39:01 +02:00
Shpuld Shpludson b275494a86 Merge branch 'fix/fetch-seen-notifs-properly' into 'develop'
Fix #526: Oldest notifications left unseen when using "Read!" in another tab

Closes #526

See merge request pleroma/pleroma-fe!1040
2020-01-14 09:26:30 +00:00
Shpuld Shpuldson 910b82e231 Use last seen notif instead of first unseen notif for sinceId 2020-01-14 11:13:59 +02:00
Shpuld Shpuldson b10b92a876 clean up code, fix prediction bug 2020-01-14 10:06:14 +02:00
Shpuld Shpuldson b32888194c fix merge conflicts 2020-01-13 23:47:32 +02:00
Shpuld Shpuldson 33abbed5a1 usable-but-buggy: picker, adding/removing reaction on click, search, styles 2020-01-13 23:34:39 +02:00
Henry Jameson c3cd66335f i18n & fixes 2020-01-13 22:26:31 +02:00
Henry Jameson 9f7af191e8 tabs & toggled (ex pressed) buttons 2020-01-13 22:19:19 +02:00
Henry Jameson 4b8e0f0afa buttonPressed & buttonDisabled slots 2020-01-13 21:30:55 +02:00
Henry Jameson 8a7f3fc16a selectedPost and selectedMenu support 2020-01-13 20:40:16 +02:00
Henry Jameson 29a0b4a593 fix shadow and opacity 2020-01-13 02:08:39 +02:00
Henry Jameson 9af0042452 updated breezy theme 2020-01-13 02:02:40 +02:00
Henry Jameson 9943e1cc43 removed references to v3compat 2020-01-13 02:02:31 +02:00
Henry Jameson 8d2f2866f6 computed colors support 2020-01-13 01:56:29 +02:00
Henry Jameson 5881c13adc computed color display support in color_input 2020-01-13 01:55:10 +02:00
Henry Jameson fa2fcc8827 better fallbacks in UI 2020-01-13 01:54:56 +02:00
Henry Jameson 8f63bbb64f poll slot renamed, lightBg customization implemented 2020-01-13 00:33:04 +02:00
Henry Jameson 40ba3e2252 added more slots to UI 2020-01-12 23:41:11 +02:00
Henry Jameson 21d9c87b34 fix tests 2020-01-12 23:05:32 +02:00
Henry Jameson 3492d7f81e eslint 2020-01-12 17:59:41 +02:00
Henry Jameson 39dd08e694 replace hsl's l with relative luminance for better lightness detection 2020-01-12 17:58:26 +02:00
Henry Jameson 88f83fc9fa overhaul how style-switcher makes state, removed tons of copy-paste 2020-01-12 17:46:07 +02:00
Henry Jameson d52d181227 more fixes 2020-01-12 15:04:05 +02:00
Henry Jameson 4418baf62a fix 2020-01-12 04:16:04 +02:00
Henry Jameson d342f32a94 fix 2020-01-12 04:05:26 +02:00
Henry Jameson 1aea1f217e remove debug 2020-01-12 04:01:31 +02:00
Henry Jameson a9a1fc37f5 fixes, cleanup 2020-01-12 04:00:41 +02:00
Henry Jameson f31ed7e5a8 remove snapshot data from breezy 2020-01-12 03:53:08 +02:00
Henry Jameson 622c9d388e Refactoring, forgotten files 2020-01-12 03:44:06 +02:00
Henry Jameson 38f2b969e4 simplified definition for text color by accounting for layers automatically,
fixed badge notification text color by adding 'bw' option for textColor
2020-01-11 23:07:41 +02:00
HJ 7257189ea7 Merge branch 'pleroma-amoled-theme' into 'develop'
Add default pleroma AMOLED dark theme

See merge request pleroma/pleroma-fe!1039
2020-01-07 23:39:14 +00:00
Sierra ae2ae00d41 Add AMOLED dark theme 2020-01-07 21:13:51 +00:00
Henry Jameson cce64077b5 Refactored style_setter to be more declarative instead of walls of copypasted code 2020-01-06 22:55:14 +02:00
HJ ad97e03b59 Merge branch 'fix-move-type-notification' into 'develop'
Fix for move type notification

See merge request pleroma/pleroma-fe!1026
2020-01-03 10:16:42 +00:00
HJ 215662afde Merge branch 'develop' into 'fix-move-type-notification'
# Conflicts:
#   static/fontello.json
2020-01-03 09:05:48 +00:00
Henry Jameson a2f676d317 Improved ColorInput to showcase transparent color, improved global input styles
a bit
2020-01-02 23:48:52 +02:00
Henry Jameson c7e9f21da0 color input and opacity input now use Checkbox component. Cleanup. 2020-01-02 22:44:54 +02:00
Henry Jameson adbab6ad2a added optional checkbox for opacity, similar to color input 2020-01-02 21:36:01 +02:00
Henry Jameson 4bb1c98e0f Replaced v3compat with source to reduce code complexity. Made more slots
customizable. `theme` now contains a snapshot of theme generated for better
compatiblity and future-proofing
2020-01-02 20:36:10 +02:00
HJ 1a82a00a2b Merge branch 'mfa_fix' into 'develop'
mfa fix

See merge request pleroma/pleroma-fe!1036
2019-12-30 14:45:49 +00:00
Wyatt Benno 816c077c4f mfa fix 2019-12-30 19:27:44 +09:00
Henry Jameson 332d31dc02 support for "transparent" color keyword 2019-12-30 00:45:48 +02:00
Henry Jameson 6e11924c27 underlay customization, updated contrast calculations to account for alpha blending 2019-12-28 18:49:35 +02:00
Henry Jameson 1a78461443 fixed import-export 2019-12-28 17:02:34 +02:00
Henry Jameson e5a34870f0 Accent works 2019-12-28 15:55:42 +02:00
HJ b8f4b18ae5 Merge branch 'streaming' into 'develop'
Streaming and Backend Interactor service overhaul, removed the need for copypasting

See merge request pleroma/pleroma-fe!1012
2019-12-26 16:49:42 +00:00
Henry Jameson bd07e5de1c unify showimmideately 2019-12-26 14:35:46 +02:00
Henry Jameson 43197c4243 Some error handling 2019-12-26 14:12:35 +02:00
Henry Jameson b619477573 Merge remote-tracking branch 'upstream/develop' into streaming
* upstream/develop: (51 commits)
  toggle_activation api is also deprecated
  use vuex action
  refactor toggleActivationStatus
  replace setActivationStatus api with new one
  use flex for stickers
  i18n/update-ja_easy
  Use a centralized fallback for missing values and use instance.federating instead of instance.federation.enabled
  Add fallback in case BE does not report federating status in nodeinfo
  The value we are looking for is federationPolicy.enabled, not federationPolicy.federating
  Logic should be to hide TWKN if not federating OR if instance is not public
  Finally trust eslint
  More lint
  More lint
  Lint
  mfa: removed unused code
  increase icon width a little bit in the nav panel
  add icons to nav panel
  Revert "Merge branch 'revert-96cab6d8' into 'develop'"
  Support "native" captcha
  Revert "Merge branch 'oauth-extra-scopes' into 'develop'"
  ...
2019-12-26 12:47:51 +02:00
HJ f7029a27eb Merge branch '716' into 'develop'
Fix "Deactivation of remote accounts from frontend does not work"

Closes #716

See merge request pleroma/pleroma-fe!1006
2019-12-18 00:51:41 +00:00
taehoon 4e4c4af422 toggle_activation api is also deprecated 2019-12-15 14:32:04 -05:00
taehoon 36376ce57c use vuex action 2019-12-15 14:32:04 -05:00
taehoon 45e7f93c49 refactor toggleActivationStatus 2019-12-15 14:32:04 -05:00
taehoon 506822bed0 replace setActivationStatus api with new one 2019-12-15 14:32:04 -05:00
taehoon 54f692622a wire up staff accounts with correct store data 2019-12-15 14:30:09 -05:00
HJ b739edb509 Merge branch 'fix-sticker-height' into 'develop'
fix sticker picker height in emojo picker

See merge request pleroma/pleroma-fe!1022
2019-12-15 17:59:27 +00:00
Absturztaube 32d7a49b9d use flex for stickers 2019-12-15 17:58:37 +01:00
HJ c1a0e23947 Merge branch 'revert-c2c48ec2' into 'develop'
Reinstate `push` and `admin` scopes

See merge request pleroma/pleroma-fe!1034
2019-12-14 14:12:41 +00:00
feld 3691093572 Merge branch 'i18b/update-ja_easy' into 'develop'
i18n/update-ja_easy

See merge request pleroma/pleroma-fe!1002
2019-12-13 17:05:14 +00:00
Hakaba Hitoyo 1cba6c56f0 i18n/update-ja_easy 2019-12-13 17:05:13 +00:00
feld 749a399944 Merge branch 'issue_124' into 'develop'
Change 403 messaging

See merge request pleroma/pleroma-fe!1020
2019-12-13 17:02:09 +00:00
feld 0b49e798e0 Merge branch 'feature/lockdown-timelines-private-mode' into 'develop'
interaction with BE private mode

See merge request pleroma/pleroma-fe!989
2019-12-13 16:58:29 +00:00
HJ 766a674a48 Merge branch 'upgrade-babel' into 'develop'
Upgrade babel to v7

Closes #733

See merge request pleroma/pleroma-fe!1029
2019-12-13 10:21:29 +00:00
HJ 9789123b1c Merge branch 'mfa/login_form' into 'develop'
mfa: fix login and recovery form

See merge request pleroma/pleroma-fe!1031
2019-12-13 10:18:50 +00:00
Mark Felder d899d06973 Use a centralized fallback for missing values and use instance.federating instead of
instance.federation.enabled
2019-12-12 15:29:50 -06:00
Mark Felder 8d14036a23 Add fallback in case BE does not report federating status in nodeinfo 2019-12-12 15:17:23 -06:00
Mark Felder 0743fbb28b The value we are looking for is federationPolicy.enabled, not federationPolicy.federating
Also the || true fallback does not work and always becomes true
2019-12-12 13:56:07 -06:00
Mark Felder 2514dc183f Logic should be to hide TWKN if not federating OR if instance is not public
Private instances should not show any timelines
2019-12-12 13:51:50 -06:00
Mark Felder 7ddd5af081 Finally trust eslint 2019-12-12 13:46:07 -06:00
Mark Felder afe5b3a82d More lint 2019-12-12 13:41:52 -06:00
Mark Felder 211d25cd5a More lint 2019-12-12 13:39:18 -06:00
Mark Felder 3eeb3dc572 Lint 2019-12-12 13:37:32 -06:00
Mark Felder 821a2bcc68 Merge branch 'develop' into feature/lockdown-timelines-private-mode 2019-12-12 13:32:52 -06:00
feld 051b9703df Merge branch 'nav-icons' into 'develop'
Add icons to nav panel

See merge request pleroma/pleroma-fe!1016
2019-12-12 19:15:14 +00:00
Maksim Pechnikov addacf36d1 mfa: removed unused code 2019-12-12 21:19:13 +03:00
Henry Jameson 585702b1ce fix desktop notifications not working with streaming 2019-12-12 18:53:36 +02:00
taehoon a412b53801 increase icon width a little bit in the nav panel 2019-12-12 10:42:27 -05:00
taehoon 7fa294f11c add icons to nav panel 2019-12-12 10:42:27 -05:00
Ivan Tashkinov 341416b0e0 Revert "Merge branch 'revert-96cab6d8' into 'develop'"
This reverts merge request !1032
2019-12-12 14:43:48 +00:00
HJ c7376b8325 Merge branch 'support-native-captcha' into 'develop'
Support "native" captcha

See merge request pleroma/pleroma-fe!1033
2019-12-12 12:24:35 +00:00
HJ a621382a3f Merge branch 'load-button-fix' into 'develop'
Fix css runtime loading issue

Closes #734

See merge request pleroma/pleroma-fe!1030
2019-12-12 12:23:01 +00:00
Egor Kislitsyn ed3144eb11 Support "native" captcha 2019-12-12 18:19:46 +07:00
lain c2c48ec25c Merge branch 'revert-96cab6d8' into 'develop'
Revert "Merge branch 'oauth-extra-scopes' into 'develop'"

See merge request pleroma/pleroma-fe!1032
2019-12-12 09:42:41 +00:00
lain b399235848 Revert "Merge branch 'oauth-extra-scopes' into 'develop'"
This reverts merge request !1024
2019-12-12 09:38:24 +00:00
seven b973ee5915 must use h in higher babel-plugin-transform-vue-jsx 2019-12-12 12:13:31 +05:00
Maksim Pechnikov f70fe28f64 mfa: fix login and recovery form 2019-12-12 08:42:21 +03:00
seven 386719b0d0 fix css runtime loading issue 2019-12-12 08:33:40 +05:00
seven d7bc1aff1d fix babelrc plugin config 2019-12-12 06:35:48 +05:00
Henry Jameson 63a5f50e7c fix deletes causing errors 2019-12-11 18:20:43 +02:00
HJ 3cc6f80628 Merge branch 'hideSitename' into 'develop'
Hide instance url/link/text in header using hideSitename instance option

See merge request pleroma/pleroma-fe!1018
2019-12-11 15:59:46 +00:00
taehoon fee3226705 add documentation for new instance option 2019-12-11 10:14:31 -05:00
taehoon d0c78989aa hide instance url/link/text in header using hideSitename option 2019-12-11 10:14:30 -05:00
rinpatch abb6747f43 Merge branch 'fix/mfa_routes' into 'develop'
fixed typo

See merge request pleroma/pleroma-fe!1027
2019-12-11 13:14:40 +00:00
Maksim Pechnikov d6dc2bad1f fixed typo 2019-12-11 15:59:29 +03:00
rinpatch 96cab6d811 Merge branch 'oauth-extra-scopes' into 'develop'
OAuth 'push' and 'admin' scopes support

See merge request pleroma/pleroma-fe!1024
2019-12-11 09:57:32 +00:00
kPherox c3e7806acb remove unused fallback 2019-12-11 18:48:18 +09:00
kPherox b4acbf5311 Add user migrates filter to interactions 2019-12-11 18:30:26 +09:00
kPherox e8333fff8d change the expression of move 2019-12-11 18:30:23 +09:00
seven cb92865dac upgrade babel-register 2019-12-11 14:22:11 +05:00
seven e6d5b9c0bb update babelrc 2019-12-11 14:21:06 +05:00
seven 424e78891a upgrade babel-plugin-transform-runtime 2019-12-11 14:19:56 +05:00
seven 773fa454be upgrade babel-plugin-lodash 2019-12-11 14:02:51 +05:00
seven c141c7a753 babel-plugin-add-module-exports is not necessary for babel v7 2019-12-11 14:01:53 +05:00
seven d79dfb9495 upgrade babel-plugin-transform-vue-jsx 2019-12-11 14:00:36 +05:00
seven a5cce10a7d update babelrc presets config 2019-12-11 13:56:53 +05:00
seven 4f9aba1a7c upgrade babel preset 2019-12-11 13:56:08 +05:00
seven 1af536d68f upgrade Babel core to v7 2019-12-11 13:52:03 +05:00
Henry Jameson 6acd889589 Option to enable streaming 2019-12-10 21:30:27 +02:00
kPherox 31aa177eea Fix target account link 2019-12-11 04:02:25 +09:00
kPherox 6af870cd90 Add view for moves notifications 2019-12-11 00:00:45 +09:00
kPherox 2bc63720a5 fix parse for move type notifications 2019-12-11 00:00:36 +09:00
Absturztaube 7e3a4fa8ec fix invisible tab-switcher in emoji picker 2019-12-09 22:16:51 +01:00
Absturztaube f6d8f245e6 Revert "fix sticker picker height in emojo picker"
This reverts commit 914c783984.
2019-12-09 22:15:38 +01:00
Wyatt Benno 8ee8033955 Set error data 2019-12-09 10:31:57 +09:00
Wyatt Benno 1a043d4350 remove console 2019-12-09 09:11:31 +09:00
Wyatt Benno e86af0c965 Change naming, make more general 2019-12-09 09:02:34 +09:00
Henry Jameson 505fb26061 better wrapper for websocket 2019-12-08 19:18:38 +02:00
Henry Jameson 1b1620a755 Merge remote-tracking branch 'upstream/develop' into streaming
* upstream/develop:
  Remove whitespace hack on empty post content
  Change output directory of fontello
  add html-webpack-plugin to karma config
  use another fork of fontello-webpack-plugin
  add animate-spin class
  remove needless code
  use another approach for versioning font files
  versioning the font resources through webpack
  fix "can't find property of undefined" errors in mrf transparency panel
  move mention button right next to mute button
  restore muted users collapsing logic on other user’s profiles
2019-12-08 16:07:30 +02:00
Henry Jameson ff95d865d2 Updated streaming and improved error-handling, some more refactoring to api 2019-12-08 16:05:41 +02:00
HJ e60d9f2d5a Merge branch 'fix/remove-status-hack' into 'develop'
Remove whitespace hack on empty post content

See merge request pleroma/pleroma-fe!1023
2019-12-08 13:00:21 +00:00
Ivan Tashkinov a06705d939 Added OAuth 'push' and 'admin' scopes. 2019-12-08 13:52:26 +03:00
rinpatch 3b11860d34 Remove whitespace hack on empty post content
It's no longer necessary since the backend handles posts with empty
content fine and also fixes an odd whitespace when attachment links are
disabled.
2019-12-08 02:05:50 +03:00
Absturztaube 914c783984 fix sticker picker height in emojo picker 2019-12-07 10:29:53 +01:00
Wyatt Benno 01855f315c Wording updates 2019-12-06 09:38:55 +09:00
HJ 4e24ce2185 Merge branch 'fix-font-load-for-pleroma-be' into 'develop'
Change output directory of fontello

Closes pleroma-support#14

See merge request pleroma/pleroma-fe!1021
2019-12-05 13:53:04 +00:00
kPherox 9aac873d6b Change output directory of fontello 2019-12-05 22:48:41 +09:00
Wyatt Benno 13fc2612ae Change 403 messaging 2019-12-05 11:48:37 +09:00
HJ 7b1d5a4f5c Merge branch '701' into 'develop'
Versioning the font resources using webpack

Closes #701

See merge request pleroma/pleroma-fe!1017
2019-12-03 20:15:06 +00:00
taehoon d37caeeded add html-webpack-plugin to karma config 2019-12-03 14:40:51 -05:00
taehoon 36589f32d1 use another fork of fontello-webpack-plugin 2019-12-03 13:26:00 -05:00
taehoon 9d44015ab4 add animate-spin class 2019-12-03 11:16:38 -05:00
taehoon 57f46e68e4 remove needless code 2019-12-03 10:34:17 -05:00
taehoon afd4524c39 use another approach for versioning font files 2019-12-03 10:32:46 -05:00
taehoon 0082ed837e versioning the font resources through webpack 2019-12-02 10:24:43 -05:00
Shpuld Shpludson 5096bff16c Merge branch 'fix/mrf-js-errors' into 'develop'
fix "can't find property of undefined" errors in mrf transparency panel

See merge request pleroma/pleroma-fe!1008
2019-12-02 12:20:25 +00:00
Shpuld Shpludson fa38a41e42 fix "can't find property of undefined" errors in mrf transparency panel 2019-12-02 12:20:24 +00:00
Shpuld Shpludson d3adffbefe Merge branch '719' into 'develop'
Fix "Muted users not being collapsed on other user's profiles"

Closes #719

See merge request pleroma/pleroma-fe!1013
2019-12-02 12:17:43 +00:00
Shpuld Shpludson 0c6737f336 Merge branch '712' into 'develop'
Move mention button right next to mute button

Closes #712

See merge request pleroma/pleroma-fe!1015
2019-12-02 12:08:12 +00:00
taehoon 7ebf3602d5 move mention button right next to mute button 2019-11-26 19:57:27 -05:00
taehoon 40e774e05a restore muted users collapsing logic on other user’s profiles 2019-11-25 12:25:01 -05:00
Henry Jameson 172ebaf4e6 improved initial notifications fetching 2019-11-24 22:01:12 +02:00
Henry Jameson 319bb4ac28 initial streaming work 2019-11-24 18:50:28 +02:00
Henry Jameson ddb6fb9217 Backend Interactor service overhaul, removed the need for copypasting 2019-11-24 13:57:46 +02:00
HJ 41d2fa2fd6 Merge branch 'i18n/improve-easy-pedantic-japanese-switching-system' into 'develop'
[i18n] Improve easy/pedantic Japanese switching

See merge request pleroma/pleroma-fe!1003
2019-11-19 17:02:45 +00:00
Hakaba Hitoyo 55da4462a4 [i18n] Improve easy/pedantic Japanese switching 2019-11-19 17:02:45 +00:00
HJ 0eda60eeb4 Merge branch 'greentext-strikes-back' into 'develop'
⑨ Added greentext support ⑨

Closes #9

See merge request pleroma/pleroma-fe!994
2019-11-19 14:22:17 +00:00
Shpuld Shpludson aa1b812484 Merge branch 'iss-149/profile-fields-normalize' into 'develop'
Normalize profile fields

See merge request pleroma/pleroma-fe!995
2019-11-19 14:15:41 +00:00
kPherox a55486f8d7 Normalize profile fields 2019-11-19 14:15:41 +00:00
Shpuld Shpludson 8b37996805 Merge branch 'fix-fetch-follow-request-for-mobile' into 'develop'
Fix follow request for mobile

See merge request pleroma/pleroma-fe!1005
2019-11-19 14:07:15 +00:00
kPherox 0995658757 backend interactor service: implement startFetchingFollowRequest
backend interactor service: remove unused fetchFollowRequests
2019-11-19 14:07:15 +00:00
Shpuld Shpludson 377b8988b6 Merge branch 'badge-checkbox' into 'develop'
Show badge visibility user setting checkbox only if needed

See merge request pleroma/pleroma-fe!999
2019-11-16 17:36:01 +00:00
taehoon 44cd5ef814 show badge visibility user setting checkbox only if needed 2019-11-16 12:12:21 -05:00
Shpuld Shpludson 10bb22b5cf Merge branch 'feature/japanese-translation' into 'develop'
Use kana+kanji as default for Japanese translation

See merge request pleroma/pleroma-fe!1001
2019-11-16 16:28:12 +00:00
AkiraFukushima 67c95c9d06 Use kana+kanji as default for Japanese translation 2019-11-17 01:11:19 +09:00
rinpatch 748e9c5203 Merge branch 'chore/remove-outdated-changelog' into 'develop'
Remove outdated changelog file

See merge request pleroma/pleroma-fe!1000
2019-11-15 19:58:09 +00:00
rinpatch a9022d0c32 Remove outdated changelog file
This hasn't been updated in 2 years and we have CHANGELOG.md now.
2019-11-15 22:56:16 +03:00
rinpatch 9a81a61759 Merge branch 'patch-1' into 'develop'
Fix translation (https://blob.cat/notice/9oyYO1RzcNbJXxKxeq)

See merge request pleroma/pleroma-fe!998
2019-11-15 16:59:20 +00:00
Shpuld Shpuldson de945ba3e9 wip commit, add basic popover for emoji reaction select 2019-11-15 16:29:25 +02:00
Shpuld Shpuldson d007502629 add fetching for emoji reactions, draft design 2019-11-15 08:39:21 +02:00
Mew Mew 3ecfbc8ea2 Fix translation (https://blob.cat/notice/9oyYO1RzcNbJXxKxeq) 2019-11-15 05:09:01 +00:00
Henry Jameson 28efd7d862 use yarn, try to restart pipeline 2019-11-14 23:46:19 +02:00
Henry Jameson bd2a682b83 tests + updates 2019-11-14 22:40:20 +02:00
rinpatch 0300502a96 Merge branch '695' into 'develop'
Close image modal by clicking image

Closes #695

See merge request pleroma/pleroma-fe!996
2019-11-14 19:24:08 +00:00
taehoon 90fc6b0774 close image modal by clicking image 2019-11-14 14:07:05 -05:00
Henry Jameson 51ea295704 eslint 2019-11-14 00:52:38 +02:00
Henry Jameson bce750c571 making dtluna proud or disgusted 2019-11-14 00:49:31 +02:00
Henry Jameson 897131572f Made it optional 2019-11-14 00:47:20 +02:00
Henry Jameson 692ee0e95a Fix regex, tag detector condition 2019-11-14 00:41:14 +02:00
Henry Jameson 50dc9df8a4 adds greentext, also small fixes 2019-11-14 00:18:14 +02:00
kaniini 1f42283b8d Merge branch 'friend-follower-count-display' into 'develop'
Show "Hidden" instead of zero when followers/following counts are hidden

See merge request pleroma/pleroma-fe!993
2019-11-13 21:22:35 +00:00
taehoon 58839ecef8 change N/A to Hidden 2019-11-12 13:31:30 -05:00
taehoon 85685d6478 add a translation 2019-11-12 11:42:07 -05:00
taehoon 949f47063b show N/A when count is hidden 2019-11-12 11:41:55 -05:00
Ariadne Conill 43d4d17b41 side drawer: same treatment 2019-11-11 14:37:14 -06:00
Ariadne Conill cb5f73148a app: search API is not available in private mode so disable it 2019-11-11 14:28:10 -06:00
Ariadne Conill 1f9674350c nav panel: disable TWKN if federation disabled, disable Public and TWKN if privateMode is enabled 2019-11-11 14:28:07 -06:00
Ariadne Conill 21f1637e43 nav panel: refactor to use vuex mapState 2019-11-11 14:14:44 -06:00
Ariadne Conill 99fd096ddd boot: track whether private mode is enabled or not 2019-11-11 14:06:31 -06:00
Ariadne Conill 621ac0bdc7 docs: document FE interaction with the BE private setting 2019-11-11 14:06:31 -06:00
kaniini 3dae1cf396 Merge branch 'ocd-triggered' into 'develop'
achieve the perfect speeeeen in media-upload

See merge request pleroma/pleroma-fe!991
2019-11-11 19:51:05 +00:00
Henry Jameson 9e774fffbf achieve the perfect speeeeen in media-upload 2019-11-11 21:45:40 +02:00
Shpuld Shpludson 7502ee9734 Merge branch '704' into 'develop'
Fix "hideISP setting checkbox is broken"

Closes #704

See merge request pleroma/pleroma-fe!990
2019-11-10 20:00:16 +00:00
taehoon 3c3f2c654e add hideISP to defaultState of config module 2019-11-10 14:42:01 -05:00
kaniini c873a18c64 Merge branch 'feature/about-page' into 'develop'
Feature/about page

Closes #699

See merge request pleroma/pleroma-fe!985
2019-11-09 17:38:45 +00:00
Ariadne Conill a2a94c4b7b add changelog entry 2019-11-09 11:33:47 -06:00
Ariadne Conill c24f95b498 mrf transparency panel: refactor to use vuex mapState 2019-11-09 11:32:18 -06:00
Ariadne Conill 6d6b5f3dbb mrf transparency panel: remove unneeded components{} 2019-11-09 11:16:19 -06:00
Ariadne Conill a4ae956a62 boot: cleanup resolveStaffAccounts 2019-11-09 00:34:05 -06:00
Ariadne Conill 6dfe3cc911 lint 2019-11-09 00:23:22 -06:00
Ariadne Conill 90f764224d about: add MRF transparency panel 2019-11-09 00:09:32 -06:00
Ariadne Conill 20ccd93a17 about: add staff panel 2019-11-08 23:21:07 -06:00
Ariadne Conill 5db77c839b about page: fix hiding of instance-specific panel, flow ToS and ISP better 2019-11-08 21:57:09 -06:00
Ariadne Conill 6cede475be nav panel: add link to about page 2019-11-08 21:53:53 -06:00
HJ 044c9ad056 Merge branch 'feature/redirect-external-user-to-id' into 'develop'
[Feature] Redirect remote user to internal ID

See merge request pleroma/pleroma-fe!921
2019-11-08 22:27:25 +00:00
Hakaba Hitoyo e4820012a3 redirect /remote-users/:username@:hostname -> /users/:id, /remote-users/:hostname/:username -> /users/:id 2019-11-08 22:27:25 +00:00
HJ 2b68134ab0 Merge branch 'emoji-optimizations' into 'develop'
Emoji fixes, optimizations and improvements

Closes #690, #686, #682, #674, and #678

See merge request pleroma/pleroma-fe!969
2019-11-08 22:01:42 +00:00
Henry Jameson a3501d58d8 clear filter on reopen, fix error message in console 2019-11-08 23:57:20 +02:00
Henry Jameson 23137dfd4b reset position when reopening emoji picker 2019-11-08 21:44:36 +02:00
Henry Jameson a69946923b eslint fix 2019-11-08 21:35:58 +02:00
Henry Jameson a43f1614ca fix not being able to see unicode emojis when there few of them when searching
on emoji-a-ton instances
2019-11-08 21:28:51 +02:00
Henry Jameson 9338c81f4a replace sanity button with loading on scroll 2019-11-08 21:25:13 +02:00
kaniini 5679dcdd18 Merge branch 'eslint-fix' into 'develop'
Fix eslint warnings

See merge request pleroma/pleroma-fe!984
2019-11-08 18:46:44 +00:00
Henry Jameson a38d16273d fix search not working, use computer property instead of state 2019-11-08 20:12:01 +02:00
Henry Jameson 0dcb696e26 Merge remote-tracking branch 'upstream/develop' into emoji-optimizations
* upstream/develop: (95 commits)
  Lightbox/modal multi image improvements - #381
  '/api/pleroma/profile/mfa' -> '/api/pleroma/accounts/mfa'
  Add ability to change user's email
  translations-de-batch-1
  eu-translate update
  profile-banner rounding css, fixes #690
  fix indentation
  remove needless ref
  show preview popover when hover numbered replies
  refactor conditions
  do not make too many nested div
  add fetchStatus action
  refactor status loading logic
  split status preview popover into a separate component
  uninstall mobile-detect library
  listen both events
  minor css fix
  restrict distance at top side only
  set different trigger event in desktop and mobile by default
  fix eslint warnings
  ...
2019-11-08 19:48:31 +02:00
taehoon c1478b0887 fix eslint warnings 2019-11-08 11:14:01 -05:00
Shpuld Shpludson 632773ba91 Merge branch 'issue_381' into 'develop'
Lightbox/modal multi image improvements - #381

See merge request pleroma/pleroma-fe!982
2019-11-08 06:16:26 +00:00
Wyatt Benno f66026bf20 Lightbox/modal multi image improvements - #381 2019-11-08 06:16:26 +00:00
kaniini df18ef30d0 Merge branch 'issue/209-2' into 'develop'
'/api/pleroma/profile/mfa' -> '/api/pleroma/accounts/mfa'

See merge request pleroma/pleroma-fe!838
2019-11-08 02:42:32 +00:00
Maksim ded022a1d2 '/api/pleroma/profile/mfa' -> '/api/pleroma/accounts/mfa' 2019-11-08 02:42:32 +00:00
kaniini e0a1b14eab Merge branch 'feature/change-email' into 'develop'
Add ability to change user's email

Closes pleroma#1297

See merge request pleroma/pleroma-fe!983
2019-11-08 02:21:19 +00:00
Sergey Suprunenko e3381cdef1 Add ability to change user's email 2019-11-08 02:21:19 +00:00
kaniini 326b2416a0 Merge branch 'develop' into 'develop'
Make mammal theme look more like gargsite

See merge request pleroma/pleroma-fe!802
2019-11-08 01:33:50 +00:00
kaniini b32a43fae5 Merge branch 'translations-de' into 'develop'
translations-de-batch-1

See merge request pleroma/pleroma-fe!978
2019-11-08 01:29:02 +00:00
Matrix-Sasuke 18acc7af29 translations-de-batch-1 2019-11-08 01:29:01 +00:00
kaniini 092adf9831 Merge branch 'es-translate' into 'develop'
[i18n] Spanish update

Closes #383

See merge request pleroma/pleroma-fe!981
2019-11-08 01:12:09 +00:00
Tarteka 28524ab4a6 eu-translate update 2019-10-30 22:31:55 +01:00
Tarteka fe4845a7c1 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into develop 2019-10-30 22:17:19 +01:00
Tarteka a178346f1e Merge branch 'master' of https://git.pleroma.social/pleroma/pleroma-fe into develop 2019-10-30 22:16:12 +01:00
HJ 74f5f168d6 Merge branch 'develop' into 'develop'
profile-banner rounding css, fixes #690

Closes #690

See merge request pleroma/pleroma-fe!979
2019-10-30 06:00:32 +00:00
DYM 1d2ddaf2d0 profile-banner rounding css, fixes #690 2019-10-30 03:15:57 +00:00
HJ 21989c673e Merge branch 'settings-refactor' into 'develop'
Settings refactor

See merge request pleroma/pleroma-fe!960
2019-10-29 07:41:29 +00:00
Henry Jameson b66564a30d Merge remote-tracking branch 'upstream/develop' into settings-refactor
* upstream/develop: (89 commits)
  remove needless ref
  show preview popover when hover numbered replies
  refactor conditions
  do not make too many nested div
  add fetchStatus action
  refactor status loading logic
  split status preview popover into a separate component
  uninstall mobile-detect library
  listen both events
  minor css fix
  restrict distance at top side only
  set different trigger event in desktop and mobile by default
  fix eslint warnings
  fix popper go behind the top bar
  migrate Popper to v-popover
  fix popper go behind the top bar
  fix eslint warnings
  reset font-size to normal text size using rem
  use top placement by default
  hide status preview popper when hover popper content
  ...
2019-10-29 09:36:16 +02:00
Henry Jameson c79b2501d2 fix indentation 2019-10-29 09:35:42 +02:00
Shpuld Shpludson 42f428d90e Merge branch 'eu-translate' into 'develop'
[i18n] basque update and fix

See merge request pleroma/pleroma-fe!966
2019-10-29 07:04:51 +00:00
Shpuld Shpludson c79da5c456 Merge branch '599' into 'develop'
Fix "Posts get cut off when there is not enough space to display them at the bottom"

Closes #599

See merge request pleroma/pleroma-fe!863
2019-10-29 06:37:23 +00:00
Shpuld Shpludson 3a3db35985 Merge branch 'patch-3' into 'develop'
Little fix to some strings on es.json

See merge request pleroma/pleroma-fe!967
2019-10-29 06:06:58 +00:00
Henry Jameson 6ade3be5b4 fix loadEmojiInsane button submitting the form 2019-10-27 19:20:38 +02:00
taehoon 237d95b0f7 remove needless ref 2019-10-24 23:50:50 -04:00
taehoon fbd1922567 show preview popover when hover numbered replies 2019-10-24 22:55:02 -04:00
taehoon c5e391b606 refactor conditions 2019-10-24 22:41:15 -04:00
taehoon 644343ccda do not make too many nested div 2019-10-24 22:27:23 -04:00
taehoon f969e9ab3d add fetchStatus action 2019-10-24 22:21:33 -04:00
taehoon e00cf288f5 refactor status loading logic 2019-10-24 22:14:53 -04:00
taehoon 62b2648a3e split status preview popover into a separate component 2019-10-24 16:53:36 -04:00
taehoon 54a26be90c uninstall mobile-detect library 2019-10-24 16:13:00 -04:00
taehoon 95e211ccb7 listen both events 2019-10-24 16:11:28 -04:00
taehoon 052a00dadb minor css fix 2019-10-24 15:15:33 -04:00
taehoon 17295429e5 restrict distance at top side only 2019-10-24 15:15:33 -04:00
taehoon c009f17651 set different trigger event in desktop and mobile by default 2019-10-24 15:15:33 -04:00
taehoon c9ba37ba2c fix eslint warnings 2019-10-24 15:15:33 -04:00
taehoon 39e92e76b9 fix popper go behind the top bar 2019-10-24 15:15:33 -04:00
taehoon 85c897403a migrate Popper to v-popover 2019-10-24 15:15:33 -04:00
taehoon 2f7f6967fd fix popper go behind the top bar 2019-10-24 15:15:33 -04:00
taehoon e834b9d88b fix eslint warnings 2019-10-24 15:15:33 -04:00
taehoon 1504b272d2 reset font-size to normal text size using rem 2019-10-24 15:15:33 -04:00
taehoon 0f65280e20 use top placement by default 2019-10-24 15:15:33 -04:00
taehoon 72fe385ec4 hide status preview popper when hover popper content 2019-10-24 15:15:33 -04:00
taehoon 498d7bcb5e use better name 2019-10-24 15:15:33 -04:00
taehoon 5d6fcb3bb3 css cleanup 2019-10-24 15:15:33 -04:00
taehoon a26ec64b3b fix minor css issues in status preview 2019-10-24 15:15:33 -04:00
taehoon 565d53812b reposition popper after fetching status 2019-10-24 15:15:33 -04:00
taehoon 5faafdb428 use popper for status preview 2019-10-24 15:15:32 -04:00
HJ f5c37231e1 Merge branch 'improve-gallery-sizing-logic' into 'develop'
Improve gallery sizing logic

See merge request pleroma/pleroma-fe!975
2019-10-23 16:17:56 +00:00
Henry Jameson da3094eab7 fix scrolling to attachments bottom 2019-10-22 23:53:23 +03:00
taehoon d76b83efc8 set flex-shrink and flex-basis explicitly 2019-10-22 14:47:21 -04:00
taehoon b9c281c553 set flex amount correctly 2019-10-22 07:17:02 -04:00
taehoon ad04522206 update flex-grow calculation logic 2019-10-22 07:17:02 -04:00
taehoon 0396c6f29d keep image natural ratio in gallery row 2019-10-22 07:17:02 -04:00
taehoon 6c4d23714a populate gallery row height without getting width 2019-10-22 07:17:01 -04:00
HJ cd95618520 Merge branch 'modal-scroll-lock' into 'develop'
Lock body scroll when modal is open globally

See merge request pleroma/pleroma-fe!974
2019-10-22 05:53:23 +00:00
taehoon eb695fd61d refactor using Set 2019-10-21 20:57:36 -04:00
taehoon d3a6c030f8 clean up 2019-10-21 20:53:34 -04:00
taehoon 6084a5b6fe update event name 2019-10-21 20:52:31 -04:00
taehoon c23a87d8ff update condition 2019-10-21 15:56:16 -04:00
taehoon 2cadeeb724 move modal animation keyframes definition 2019-10-21 15:37:14 -04:00
taehoon c217483640 migrate viewClass prop to class attribute 2019-10-21 15:36:03 -04:00
taehoon b3699a7c7c fix eslint errors 2019-10-18 12:39:54 -04:00
taehoon 5eeded5675 fix message input not auto-focusing bug 2019-10-18 12:24:03 -04:00
taehoon 95ad5ccaf1 revert changes to render modal into portal 2019-10-18 12:22:12 -04:00
taehoon d69b8794b0 use higher css specificity 2019-10-18 12:13:11 -04:00
taehoon a302ec1f08 fix eslint warnings 2019-10-18 11:57:54 -04:00
taehoon 215232cc30 remove needless ref definition 2019-10-18 11:54:42 -04:00
taehoon a41ffea146 render modals into the “modal” portal 2019-10-18 11:53:38 -04:00
taehoon d502baaffc remove needless console.log 2019-10-18 07:28:59 -04:00
taehoon 9709075476 remove needless importing 2019-10-18 07:28:29 -04:00
taehoon 2231025c41 fix eslint warning 2019-10-18 07:08:34 -04:00
taehoon 0df0876cf1 move modal css into the correct place 2019-10-18 07:07:16 -04:00
taehoon 348d6664eb refactor all kind of modals using the modal component 2019-10-18 07:05:01 -04:00
taehoon 07ec18fe11 add reusable modal component 2019-10-18 07:04:24 -04:00
taehoon 093d785fbf handle multiple body scroll lockers 2019-10-17 16:03:41 -04:00
taehoon 8db1fa506c lock body scroll when user reporting modal is open 2019-10-17 16:00:19 -04:00
taehoon 776f0ef774 lock body scroll when post status modal is open 2019-10-17 15:43:59 -04:00
HJ 051e6ea5ca Merge branch 'issue/684' into 'develop'
[#684] updated FollowCard component

See merge request pleroma/pleroma-fe!972
2019-10-17 19:03:07 +00:00
Maksim Pechnikov b3f590ceb3 clear code 2019-10-17 20:29:18 +03:00
HJ 835bbd8b5f Merge branch 'fix/accessibility-reply-highlight' into 'develop'
Fix reply arrow highlighting in some accessibility tools

See merge request pleroma/pleroma-fe!973
2019-10-17 14:34:11 +00:00
eal 1287836eee Fix reply arrow highlighting in some accessibility tools
The cursor style needs to be "pointer" even before hovering, since
keyboard-driven browsing never hovers over the elements.
2019-10-17 16:44:22 +03:00
Maksim Pechnikov 60828f119c updated FollowCard component 2019-10-17 16:19:52 +03:00
HJ d2079ecef4 Merge branch 'feature/require-password-reset' into 'develop'
Require password reset

See merge request pleroma/pleroma-fe!958
2019-10-16 10:00:26 +00:00
Maxim Filippov 37be781312 Require password reset 2019-10-16 10:00:26 +00:00
HJ c4497f645f Update CHANGELOG.md 2019-10-15 15:48:34 +00:00
HJ d2feba1487 Merge branch 'feature/following_reblogs' into 'develop'
[#664]  implementes to hide/show reblogs from a specific user.

See merge request pleroma/pleroma-fe!956
2019-10-15 06:26:12 +00:00
Henry Jameson 6266148745 Reserve space for emoji picker button in emoji input 2019-10-14 19:56:46 +03:00
Maksim Pechnikov d53e7e3125 fix orders of a buttons 2019-10-11 16:54:25 +03:00
Maksim Pechnikov b8d8d02384 revert lint autofix 2019-10-11 16:41:59 +03:00
Maksim Pechnikov b497882e0e fix position account actions 2019-10-11 14:25:59 +03:00
HJ 8b2d873057 Merge branch 'es-translate' into 'develop'
[i18n] spanish new strings translations

See merge request pleroma/pleroma-fe!968
2019-10-10 17:02:34 +00:00
Henry Jameson 1400d723f2 fix picker not filling on opening, removed console log 2019-10-10 19:58:00 +03:00
Henry Jameson c000879f2f moved emoji fetching from user to instance since it's its state anyway 2019-10-09 22:50:00 +03:00
Henry Jameson b02de56fcb always preload first batch of emoji to avoid unnecessary UI jumps 2019-10-09 22:33:15 +03:00
Henry Jameson a54c8b994e another missed thing 2019-10-09 21:32:32 +03:00
Maksim Pechnikov 69fb015e9f removed unused code 2019-10-09 16:20:51 +03:00
Maksim Pechnikov e3f6001b3e update css 2019-10-09 15:36:26 +03:00
Maksim Pechnikov a65b328239 remove unused code 2019-10-09 08:30:48 +03:00
Maksim Pechnikov f6c0e06884 Merge branch 'develop' into feature/following_reblogs 2019-10-09 08:15:37 +03:00
Henry Jameson 792eaf5625 fix! i noticed it!! 2019-10-08 23:57:58 +03:00
HJ 7d3330b7b6 Merge branch 'issue/679' into 'develop'
[#679] fix follow request on search page

See merge request pleroma/pleroma-fe!970
2019-10-08 19:06:57 +00:00
Henry Jameson fa4e69ec8c eslint 2019-10-08 21:38:27 +03:00
Henry Jameson 81d86a39fe fixed emoji picker showing up beyond viewport 2019-10-08 21:38:27 +03:00
Henry Jameson bed109ae46 start loading emoji when picker is open 2019-10-08 21:38:27 +03:00
Henry Jameson 37b8490c01 remove the "textbox grows the 'wrong' way" behavior, replace it with more
conditions to scroll to bottom
2019-10-08 21:38:27 +03:00
Henry Jameson 6511a744a2 arbitrary limit with option to overcome it 2019-10-08 21:38:27 +03:00
Henry Jameson 29e6e62e7c emoji picker gradual render 2019-10-08 21:38:27 +03:00
Henry Jameson 91ca1db778 moved emoji stuff away from after-store and into users module since we only need
emoji after login
2019-10-08 21:38:27 +03:00
Maksim Pechnikov 7fede8572d change icon 2019-10-08 17:32:58 +03:00
Maksim Pechnikov 78e8a49f40 fix follow request on search page 2019-10-08 17:07:01 +03:00
Maksim Pechnikov 541a71c3a5 Merge branch 'develop' into feature/following_reblogs 2019-10-08 16:49:03 +03:00
Maksim Pechnikov a26d550137 updated user_card 2019-10-08 16:46:54 +03:00
Maksim Pechnikov 9c305c5f93 Revert "added acccount_actions component"
This reverts commit 188b6f56ed.
2019-10-08 10:21:40 +03:00
tarteka 16c03995cb [i18n] spanish new strings translations
update to translate the latest text strings
2019-10-07 21:21:16 +02:00
Henry Jameson d0800d0bd8 removed unused thing 2019-10-07 20:44:03 +03:00
Henry Jameson e7532464e3 Replaced most trivial checkboxes with Checkbox component 2019-10-07 20:43:23 +03:00
Echedey López Romero 97f9628bea Little fix to "login"/"description" and "register" strings to es.json referenced as verbs. 2019-10-07 12:34:38 +00:00
tarteka 67436ed144 update and fix 2019-10-07 10:22:17 +02:00
Henry Jameson 8ee50f9f16 replace checkboxes in user-settings with Checkbox component 2019-10-07 00:05:21 +03:00
Henry Jameson 0be86304d2 Fix tests, more replacing with mergedConfig 2019-10-06 23:28:30 +03:00
HJ 122323f35c Merge branch 'docs/add-links' into 'develop'
Minor documentation improvements

See merge request pleroma/pleroma-fe!965
2019-10-04 14:30:29 +00:00
rinpatch c07bf59da7 Move the epigraph after the heading so MkDocs can pick up the heading 2019-10-04 17:24:36 +03:00
rinpatch 2060dd8377 Add links to directions in the beginning of CONFIGURATION.md 2019-10-04 17:12:14 +03:00
rinpatch e82405ae35 Merge branch 'docs-sync' into 'develop'
CI: trigger doc rebuild on commits to develop

See merge request pleroma/pleroma-fe!964
2019-10-03 16:09:54 +00:00
rinpatch 4b8c9a03f2 CI: trigger doc rebuild on commits to develop 2019-10-03 18:48:16 +03:00
HJ 84dbc86624 Merge branch 'admin-link' into 'develop'
Add Admin panel link to navigation for admins

See merge request pleroma/pleroma-fe!954
2019-10-02 20:12:44 +00:00
taehoon 33759e4153 update admin url 2019-10-02 13:28:16 -04:00
taehoon 7e5a3fa09f update copy 2019-10-01 07:36:42 -04:00
taehoon 503f086487 add trailing slash to admin url 2019-10-01 07:36:42 -04:00
taehoon d9b01643e2 open in a new tab 2019-10-01 07:36:42 -04:00
taehoon 093fcee902 add admin link to the side drawer 2019-10-01 07:36:41 -04:00
taehoon 4f75ad9905 add admin link to nav 2019-10-01 07:36:41 -04:00
taehoon 57fedd63ca add gauge icon 2019-10-01 07:36:41 -04:00
kaniini f3fdc92f15 Merge branch 'fix-regex-normalizer' into 'develop'
fix regex shortcode problem

Closes #675

See merge request pleroma/pleroma-fe!963
2019-10-01 06:29:31 +00:00
Henry Jameson a2923570c3 fix regex shortcode problem 2019-09-30 23:45:03 +03:00
Maksim Pechnikov 188b6f56ed added acccount_actions component 2019-09-30 20:36:14 +03:00
Shpuld Shpludson bcfdd68e70 Merge branch 'i18n/update-ja_pedantic' into 'develop'
i18n/Update Pedantic Japanese Messages

See merge request pleroma/pleroma-fe!962
2019-09-30 05:09:05 +00:00
Hakaba Hitoyo 194979783e i18n/Update Pedantic Japanese Messages 2019-09-30 05:09:05 +00:00
Shpuld Shpludson b90137631f Merge branch 'i18n/update-ja' into 'develop'
i18n/Update Japanese Messages

See merge request pleroma/pleroma-fe!961
2019-09-30 05:07:57 +00:00
Hakaba Hitoyo 087a5b612d i18n/Update Japanese Messages 2019-09-30 05:07:57 +00:00
Shpuld Shpludson 767b965780 Merge branch '672' into 'develop'
Make post status modal state persistent unless reply user is changed

Closes #672

See merge request pleroma/pleroma-fe!959
2019-09-30 05:05:12 +00:00
Henry Jameson 20fc259350 fixed default values for multi-choice configurations, should also fix warnings 2019-09-30 00:04:43 +03:00
Henry Jameson 39b71e5dd6 Removed all whole mess of manual watch/data declaration, now fully automatic 2019-09-29 23:47:26 +03:00
Henry Jameson 979e170bd6 created mergedConfig getter to avoid obnoxious checks for undefined everywhere 2019-09-29 22:33:15 +03:00
taehoon 50d9ed0007 reset post status form only when reply user is changed 2019-09-28 16:35:39 -04:00
kaniini aadd36f3ec Merge branch 'refactor-who-to-follow' into 'develop'
Small refactoring in who to follow page

See merge request pleroma/pleroma-fe!932
2019-09-26 22:32:40 +00:00
Hakaba Hitoyo bc17839e52 Small refactoring in who to follow page 2019-09-26 22:32:39 +00:00
kaniini 9ef0e65b25 Merge branch 'feature/add-discoverable-preference' into 'develop'
Feature/Add _Allow user discovery services_ preference

See merge request pleroma/pleroma-fe!947
2019-09-26 22:31:28 +00:00
Hakaba Hitoyo 194dd88118 Feature/Add _Allow user discovery services_ preference 2019-09-26 22:31:28 +00:00
kaniini 4369ce6f1b Merge branch 'hide-followers-follows-count' into 'develop'
Added a setting to hide follow/follower count from the user profile

See merge request pleroma/pleroma-fe!951
2019-09-26 22:20:01 +00:00
Maksim Pechnikov 19cb98b85f Merge branch 'develop' into feature/following_reblogs 2019-09-26 21:14:31 +03:00
Maksim Pechnikov c02433b7e6 revert font 2019-09-26 16:35:00 +03:00
HJ 501208d350 Merge branch 'emoji-selector-update' into 'develop'
Emoji selector update

Closes #101

See merge request pleroma/pleroma-fe!895
2019-09-26 05:27:59 +00:00
Henry Jameson 836cb817d1 fix tests 2019-09-25 20:54:07 +03:00
Henry Jameson a3305799c7 Merge remote-tracking branch 'upstream/develop' into emoji-selector-update
* upstream/develop: (42 commits)
  Fix formatting in oc.json
  avoid using global class
  fix logo moving bug when lightbox is open
  Reserve scrollbar gap when body scroll is locked
  setting display: initial makes trouble, instead, toggle display: none using classname
  lock body scroll
  add body-scroll-lock directive
  install body-scroll-lock
  wire up props with PostStatusModal
  rename component
  recover autofocusing behavior
  refactor MobilePostStatusModal using new PostStatusModal
  add new module and modal to post new status
  remove needless condition
  add mention button
  wire up user state with global store
  collapse fav/repeat notifications from muted users
  do not collapse thread muted posts in conversation
  detect thread-muted posts
  do not change word based muting logic
  ...
2019-09-25 20:26:49 +03:00
Henry Jameson 2f26e8acc5 eslint 2019-09-25 20:23:55 +03:00
Henry Jameson e6d2cf77af fix emoji inputs in user-settings, styles update 2019-09-25 20:11:06 +03:00
Henry Jameson 0b300e1708 bump z-index so that picker/suggest doesn't get overlapped by mobile button 2019-09-25 20:01:06 +03:00
Henry Jameson e805303d3a Scroll emoji picker into view if it's obstructed 2019-09-25 19:58:15 +03:00
Henry Jameson e3ceae0989 very important fix 2019-09-25 19:32:30 +03:00
Henry Jameson 0d6a9f5a62 comment, cleanup and improve autoresize/autoscroll 2019-09-25 19:30:55 +03:00
Shpuld Shpuldson e55645aec1 Fix formatting in oc.json 2019-09-25 10:25:44 +03:00
Shpuld Shpludson 170372b2bc Merge branch '616' into 'develop'
Lock body scroll when lightbox is open

Closes #616

See merge request pleroma/pleroma-fe!886
2019-09-25 07:16:23 +00:00
Shpuld Shpludson 49ea63ddf3 Merge branch 'develop' into 'develop'
[i18n] Update for the Occitan language file

See merge request pleroma/pleroma-fe!901
2019-09-25 07:12:34 +00:00
Shpuld Shpludson 7a1081aa66 Merge branch 'es-translate' into 'develop'
[i18n] Update es translate

See merge request pleroma/pleroma-fe!944
2019-09-25 07:10:11 +00:00
Shpuld Shpludson 4c55e0d1be Merge branch 'eu-translate' into 'develop'
[i18n] update eu translate

See merge request pleroma/pleroma-fe!943
2019-09-25 07:09:57 +00:00
Shpuld Shpludson ccba92a27c Merge branch '639-2' into 'develop'
Add "Mention user" button to user card

Closes #639

See merge request pleroma/pleroma-fe!955
2019-09-25 06:41:26 +00:00
Shpuld Shpludson 61bb02ef06 Merge branch '657' into 'develop'
Collapse fav/repeat notifications from muted users

Closes #657

See merge request pleroma/pleroma-fe!945
2019-09-25 06:24:41 +00:00
Henry Jameson 0f55359b49 fix 2019-09-25 08:43:02 +03:00
Henry Jameson 4f563e6efb account for parent padding, too 2019-09-25 08:36:30 +03:00
Henry Jameson daa0e284c3 forgotten file 2019-09-25 00:21:55 +03:00
Henry Jameson ca92e29401 WIP: fixed autoscroll, restructured Post Status Form's resize method "a bit" 2019-09-25 00:17:04 +03:00
Henry Jameson 2154152d08 fix some bugs 2019-09-24 00:06:53 +03:00
Henry Jameson 6f0257cd7d autoscroll post form on typing + some minor improvements 2019-09-23 22:12:25 +03:00
Henry Jameson 7b4cb38734 split spam mode into two separate options (one in settings page) 2019-09-23 20:36:49 +03:00
eugenijm aafb29c589 Added a setting to hide follow/follower count from the user profile 2019-09-23 16:19:21 +03:00
Maksim Pechnikov f0b9f5d29c use repeats intead boosts 2019-09-22 14:45:42 +03:00
Maksim Pechnikov 8ad145598d fontello/ added eye icon 2019-09-21 16:25:45 +03:00
Maksim Pechnikov 8721fb57fc added support hide\show reblogs from a specific user 2019-09-21 16:24:47 +03:00
taehoon 7fe6ba2401 avoid using global class 2019-09-20 11:35:47 -04:00
taehoon 37ae0fd92c fix logo moving bug when lightbox is open 2019-09-20 11:35:47 -04:00
taehoon 92be5a6877 Reserve scrollbar gap when body scroll is locked 2019-09-20 11:35:47 -04:00
taehoon ae70439447 setting display: initial makes trouble, instead, toggle display: none using classname 2019-09-20 11:35:47 -04:00
taehoon ad504768fe lock body scroll 2019-09-20 11:35:47 -04:00
taehoon 8b321f6f1f add body-scroll-lock directive 2019-09-20 11:35:47 -04:00
taehoon 60c3501d35 install body-scroll-lock 2019-09-20 11:35:47 -04:00
taehoon c8a18f387c wire up props with PostStatusModal 2019-09-20 11:29:31 -04:00
taehoon d6a941a128 rename component 2019-09-20 11:29:29 -04:00
taehoon 0c8038d4f6 recover autofocusing behavior 2019-09-20 11:29:27 -04:00
taehoon a9f33272a8 refactor MobilePostStatusModal using new PostStatusModal 2019-09-20 11:29:26 -04:00
taehoon f4bbf1d4e2 add new module and modal to post new status 2019-09-20 11:29:24 -04:00
taehoon 90981dcce6 remove needless condition 2019-09-20 11:29:23 -04:00
taehoon 5ff899b455 add mention button 2019-09-20 11:29:21 -04:00
taehoon f8139e369c wire up user state with global store 2019-09-20 11:25:00 -04:00
taehoon 8618857aa3 collapse fav/repeat notifications from muted users 2019-09-20 11:25:00 -04:00
Shpuld Shpludson dcef84363f Merge branch 'muting-fixes' into 'develop'
Properly detect thread-muted posts and set `with_muted` when fetching notifications

See merge request pleroma/pleroma-fe!941
2019-09-20 15:23:13 +00:00
rinpatch 1306fac38f Merge branch 'develop' into 'muting-fixes'
# Conflicts:
#   src/components/status/status.js
2019-09-16 11:38:37 +00:00
Shpuld Shpludson 9b163d2816 Merge branch '656' into 'develop'
Do not collapse thread muted posts when it's expanded/on the thread page and do not collapse muted user's posts on muted user's profile page

Closes #656

See merge request pleroma/pleroma-fe!953
2019-09-16 07:27:06 +00:00
HJ 3cd23ae2d4 Apply suggestion to src/components/emoji_input/emoji_input.js 2019-09-16 07:23:56 +00:00
Henry Jameson c933f5edfc changelog 2019-09-15 17:22:14 +03:00
HJ c78c7e7734 Update docs/USER_GUIDE.md 2019-09-15 13:43:42 +00:00
Henry Jameson f961ce0f98 docs update 2019-09-15 16:41:14 +03:00
Henry Jameson db961af3c8 unit test for emoji input, for now covering only insertion mechanism 2019-09-15 16:01:57 +03:00
Henry Jameson 312e2aa14f fix bottom-left icons being too damn wide 2019-09-15 12:51:39 +03:00
Henry Jameson a1ed1b9b53 improved post form's icons at bottom display 2019-09-15 12:30:07 +03:00
Henry Jameson e366adbb6c updated logic for padding with spaces, improved spam mode 2019-09-15 12:30:02 +03:00
Henry Jameson d2fe797821 update status/user card to use same gradient mask fading effect instead of
background hack
2019-09-15 02:14:40 +03:00
Henry Jameson f0cb6fe03f Fixed scrollability not being obvious, added fade effect 2019-09-15 01:16:54 +03:00
taehoon baebf08d20 do not collapse thread muted posts in conversation 2019-09-13 22:59:45 -04:00
taehoon 6a3f283256 detect thread-muted posts 2019-09-13 22:59:24 -04:00
taehoon 2f79a7b4a0 do not change word based muting logic 2019-09-13 16:55:17 -04:00
taehoon b10558f721 do not collapse muted user's posts on muted user's media timeline 2019-09-13 16:17:51 -04:00
taehoon 09deb69bc7 do not collapse muted user's posts on muted user's profile page 2019-09-13 15:38:04 -04:00
Shpuld Shpludson 09db4ceb1a Merge branch 'fix/italics-not-selectable' into 'develop'
fix italics not being selectable

See merge request pleroma/pleroma-fe!952
2019-09-13 17:21:15 +00:00
Shpuld Shpuldson 794481d76c fix italics not being selectable 2019-09-13 20:16:05 +03:00
Henry Jameson 3505e53756 review/naming + bugfix for stickers 2019-09-12 20:36:43 +03:00
Henry Jameson 9bd0ed7912 updated logic for hiding picker and also added ability to hide suggestions with
esc key
2019-09-12 20:25:11 +03:00
Henry Jameson 0d8b68632b Remove emoji zoom 2019-09-12 20:25:11 +03:00
Shpuld Shpludson 4a469d7fe3 Merge branch 'fix/follow-request-detection' into 'develop'
Utilize `user.requested` to display follow request status on user card

Closes #635

See merge request pleroma/pleroma-fe!942
2019-09-12 07:02:11 +00:00
Shpuld Shpludson 2bb053dd71 Merge branch 'develop' into 'develop'
Develop

See merge request pleroma/pleroma-fe!950
2019-09-12 06:58:19 +00:00
davidyin a8cddecd41 fix some translation about blocks 2019-09-11 22:37:19 -07:00
davidyin d0fc509ad1 Complete the Chinese language file based on the version 0.9.999 2019-09-10 19:50:06 -07:00
HJ 4f0195b05c Apply suggestion to src/components/emoji_picker/emoji_picker.vue 2019-09-10 18:39:45 +00:00
tarteka 6217ef4718 fix some translates 2019-09-10 10:09:07 +02:00
Shpuld Shpludson 753d15ed37 Merge branch '651' into 'develop'
Fix "Needless context api requests when click timeago in conversation page"

Closes #651

See merge request pleroma/pleroma-fe!934
2019-09-09 19:47:58 +00:00
HJ 9651293956 Apply suggestion to src/components/emoji_picker/emoji_picker.js 2019-09-09 19:42:33 +00:00
Shpuld Shpludson a4a4c46fe7 Merge branch '648-2' into 'develop'
Fix wrong body css while toggling visibility

Closes #648

See merge request pleroma/pleroma-fe!930
2019-09-09 19:22:11 +00:00
Henry Jameson 9146bee7aa better hitbox for status emoji 2019-09-08 21:18:52 +03:00
Henry Jameson 7360a4d9ef fix aspect 2019-09-08 17:11:45 +03:00
HJ 2237da0151 Apply suggestion to src/components/emoji_input/emoji_input.js 2019-09-08 14:08:39 +00:00
Henry Jameson 4f88bb4ea1 scale emoji on hover 2019-09-08 17:01:28 +03:00
Henry Jameson 83f45167b6 added emoji zoom for picker 2019-09-08 16:56:54 +03:00
Henry Jameson 94afc5ee19 fixed scroll when switching back to emoji 2019-09-08 15:57:49 +03:00
Henry Jameson 14df84d89b fixed some bugs, added spam mode, minor collateral fixes 2019-09-08 15:51:17 +03:00
Henry Jameson db086fe1fd Merge remote-tracking branch 'upstream/develop' into emoji-selector-update
* upstream/develop: (116 commits)
  Password reset page
  add a comment
  force img updating immediately
  Fixed "sequimiento" to "seguimiento".
  Replace `/api/externalprofile/show.json` with a MastoAPI equialent
  Use mastodon api in follow requests
  "Optional" in lowercase.
  Update es.json
  fix pin/unpin status logic
  rename a mutation
  update
  fix user avatar fallback logic
  remove dead code
  Corrected "Media Proxy" translation.
  Update es.json
  make bio textarea resizable vertically only
  remove dead code
  Make image orientation consistent on FF, fix videos w/ modal
  remove dead code
  fix crazy watch logic in conversation
  ...
2019-09-08 13:44:29 +03:00
tarteka 5026d3719a fix some translates 2019-09-07 09:07:34 +02:00
tarteka 17a97ee6f5 fix some translates 2019-09-07 09:00:25 +02:00
taehoon ea5b36a597 refactor toggling body visibility using class 2019-09-06 11:17:29 -04:00
taehoon 9727009147 update prop name 2019-09-06 11:17:05 -04:00
taehoon 482cd52f77 stop fetching whole conversation when change highlighted status 2019-09-06 11:17:04 -04:00
taehoon c1f3b0dc75 refactoring 2019-09-06 11:17:04 -04:00
taehoon 214ab22c4c update prop binding 2019-09-06 11:17:04 -04:00
taehoon d7c68d408f accept status id instead of status obj as statusoid prop 2019-09-06 11:17:04 -04:00
tarteka 1167bafb19 Update es translate 2019-09-06 14:58:20 +02:00
tarteka f48d12b4bc update eu translate 2019-09-06 14:24:37 +02:00
Shpuld Shpludson e75ac9ddbc Merge branch 'mastoapi-externalprofile' into 'develop'
Replace `/api/externalprofile/show.json` with a MastoAPI equialent

See merge request pleroma/pleroma-fe!938
2019-09-06 04:13:21 +00:00
Shpuld Shpludson 702dc6963c Merge branch 'password-reset' into 'develop'
Password reset page

Closes #213

See merge request pleroma/pleroma-fe!884
2019-09-05 11:23:28 +00:00
Eugenij 8ee5abb1a5 Password reset page 2019-09-05 11:23:28 +00:00
rinpatch 424d4ab57e Utilize user.requested to display follow request status on user card
Closes #635
2019-09-05 11:17:53 +03:00
rinpatch b33667a743 Avoid iterating over statuses to set thread_muted if the backend does
not support the extension
2019-09-04 22:17:29 +03:00
rinpatch 1a5a7bbebf Set thread_muted for all statuses with the same conversation id on
status mute/unmute
2019-09-04 21:11:13 +03:00
HJ c89703a359 Merge branch '655' into 'develop'
Fix "User avatar not updating immediately when switching user profile"

Closes #655

See merge request pleroma/pleroma-fe!940
2019-09-04 16:55:07 +00:00
taehoon d194431642 add a comment 2019-09-04 11:24:24 -04:00
taehoon cdbb8ca8b9 force img updating immediately 2019-09-04 11:24:24 -04:00
rinpatch 66a34b7ecf Properly detect thread-muted posts and set with_muted when fetching
notifications
2019-09-04 12:20:33 +03:00
HJ a1aada2454 Merge branch 'patch-2' into 'develop'
Fixed "sequimiento" to "seguimiento". Spanish translation.

See merge request pleroma/pleroma-fe!939
2019-09-03 21:16:11 +00:00
Echedey López Romero d1244e4896 Fixed "sequimiento" to "seguimiento". 2019-09-03 17:51:50 +00:00
rinpatch 457290e81e Replace /api/externalprofile/show.json with a MastoAPI equialent
`/api/v1/accounts/:id` supports remote nicknames since pleroma!1622
2019-09-03 19:59:28 +03:00
HJ 49159e6db3 Merge branch 'mastoapi-follow-reqs' into 'develop'
Use mastodon api in follow requests

See merge request pleroma/pleroma-fe!937
2019-09-03 10:58:17 +00:00
rinpatch 8e3d6f5c28 Use mastodon api in follow requests 2019-09-03 13:50:26 +03:00
Shpuld Shpludson 6238fe3633 Merge branch '652' into 'develop'
Fix "TypeError: Cannot set property 'pinned' of undefined"

Closes #652

See merge request pleroma/pleroma-fe!936
2019-09-03 04:48:24 +00:00
Shpuld Shpludson c43a5ab992 Merge branch 'patch-1' into 'develop'
Some corrections to the spanish translation

See merge request pleroma/pleroma-fe!929
2019-09-03 04:11:16 +00:00
Shpuld Shpludson fbfedf0084 Merge branch 'fix/attachment-css' into 'develop'
Make image orientation consistent on FF, fix videos w/ modal

See merge request pleroma/pleroma-fe!926
2019-09-03 04:09:56 +00:00
Echedey López Romero 66e9f17c58 "Optional" in lowercase. 2019-09-02 11:41:30 +00:00
Echedey López Romero 4f82ea0fea Update es.json 2019-09-01 21:57:07 +00:00
taehoon daf7d4e661 fix pin/unpin status logic 2019-09-01 13:07:43 -04:00
taehoon 13b80b5c7c rename a mutation 2019-09-01 13:07:43 -04:00
HJ 9825a857f3 Merge branch 'docs' into 'develop'
Documentation

See merge request pleroma/pleroma-fe!718
2019-08-31 19:44:44 +00:00
Henry Jameson 9e3891de61 Merge remote-tracking branch 'upstream/docs' into docs
* upstream/docs:
  Apply suggestion to docs/HACKING.md
  Apply suggestion to docs/CONFIGURATION.md
2019-08-31 22:39:56 +03:00
Henry Jameson 2dfba76772 update 2019-08-31 22:39:26 +03:00
Henry Jameson 18ec13d796 Merge remote-tracking branch 'upstream/develop' into docs
* upstream/develop: (193 commits)
  fix user avatar fallback logic
  remove dead code
  make bio textarea resizable vertically only
  remove dead code
  remove dead code
  fix crazy watch logic in conversation
  show three dot button only if needed
  hide mute conversation button to guests
  update keyBy
  generate idObj at timeline level
  fix pin showing logic in conversation
  Show a message when JS is disabled
  Initialize chat only if user is logged in and it wasn't initialized before
  i18n/Update Japanese
  i18n/Update pedantic Japanese
  sync profile tab state with location query
  refactor TabSwitcher
  use better name of controlled prop
  fix potential bug to render active tab in controlled way
  remove unused param
  ...
2019-08-31 22:38:02 +03:00
Shpuld Shpludson 018a650166 Merge branch 'remove-dead-code' into 'develop'
Remove dead code

See merge request pleroma/pleroma-fe!927
2019-08-29 17:16:57 +00:00
Shpuld Shpludson 814ba88f1c Merge branch 'fix-user-avatar-fallback' into 'develop'
Fix broken user avatar fallback logic

See merge request pleroma/pleroma-fe!933
2019-08-29 17:10:18 +00:00
taehoon 9476fbba5a fix user avatar fallback logic 2019-08-28 14:02:04 -04:00
taehoon c01d2543d5 remove dead code 2019-08-28 13:06:57 -04:00
Echedey López Romero a15810afc8 Corrected "Media Proxy" translation. 2019-08-27 19:07:07 +00:00
Echedey López Romero 50bf9e633b Update es.json 2019-08-26 21:37:39 +00:00
HJ 8c465719cc Merge branch '650' into 'develop'
Make bio textarea resizable vertically only

Closes #650

See merge request pleroma/pleroma-fe!928
2019-08-26 21:18:11 +00:00
taehoon e1c2c5cfed make bio textarea resizable vertically only 2019-08-26 16:00:19 -04:00
HJ 8e33934e50 Merge branch 'remove-dead-code' into 'develop'
Remove dead code

See merge request pleroma/pleroma-fe!925
2019-08-26 18:34:56 +00:00
taehoon a0712270aa remove dead code 2019-08-26 14:29:40 -04:00
Shpuld Shpuldson 15c4088a68 Make image orientation consistent on FF, fix videos w/ modal 2019-08-26 14:08:30 +03:00
taehoon 7b5cdab7cd remove dead code 2019-08-25 16:58:13 -04:00
Shpuld Shpludson 0e21c3cdd9 Merge branch '646' into 'develop'
Fix "Making hundreds of needless api requests in profile page"

Closes #646

See merge request pleroma/pleroma-fe!923
2019-08-25 20:03:06 +00:00
taehoon 9b8bf655e1 fix crazy watch logic in conversation 2019-08-23 13:49:39 -04:00
Shpuld Shpludson d7647be812 Merge branch '645' into 'develop'
Show "Mute Conversation" menu item and three dot button to users and only if needed

Closes #645

See merge request pleroma/pleroma-fe!922
2019-08-21 04:56:38 +00:00
taehoon 65579796ed show three dot button only if needed 2019-08-20 17:00:28 -04:00
taehoon 92a0c475f7 hide mute conversation button to guests 2019-08-20 16:55:42 -04:00
Shpuld Shpludson 6504d8ca0f Merge branch '640' into 'develop'
Fix "Mixed pin markers from multiple users"

Closes #640

See merge request pleroma/pleroma-fe!919
2019-08-18 08:24:56 +00:00
taehoon 4bedbfea3c update keyBy 2019-08-17 22:10:01 -04:00
taehoon 1146119d6a generate idObj at timeline level 2019-08-17 14:33:32 -04:00
taehoon 4b444708f2 fix pin showing logic in conversation 2019-08-17 14:33:32 -04:00
Shpuld Shpludson 61f61947ad Merge branch 'feature/noscript-message' into 'develop'
Show a message when JS is disabled

Closes pleroma#827

See merge request pleroma/pleroma-fe!822
2019-08-17 08:26:00 +00:00
Sergey Suprunenko 6795769b93 Show a message when JS is disabled 2019-08-17 08:26:00 +00:00
Shpuld Shpludson 7f35489e3e Merge branch 'fix/chat-issues' into 'develop'
Initialize chat only if user is logged in and it wasn't initialized before

Closes pleroma#1067, pleroma#856, pleroma#1080, and #394

See merge request pleroma/pleroma-fe!894
2019-08-17 08:18:42 +00:00
Sergey Suprunenko d74f6ed6ea Initialize chat only if user is logged in and it wasn't initialized before 2019-08-17 08:18:42 +00:00
Shpuld Shpludson 58713e342d Merge branch 'eu-translate' into 'develop'
add Basque translate

See merge request pleroma/pleroma-fe!900
2019-08-17 08:16:45 +00:00
Shpuld Shpludson 84c3403143 Merge branch 'es-translate' into 'develop'
[i18n] Spanish corrections

See merge request pleroma/pleroma-fe!904
2019-08-17 08:15:06 +00:00
Shpuld Shpludson aef97bc9bc Merge branch 'update-nb' into 'develop'
Update norwegian bokmål translation

See merge request pleroma/pleroma-fe!906
2019-08-17 08:14:47 +00:00
Shpuld Shpludson 71eccabbe0 Merge branch 'i18n/update-japanese' into 'develop'
i18n/Update Japanese

See merge request pleroma/pleroma-fe!911
2019-08-17 08:14:18 +00:00
Hakaba Hitoyo 091fb5573c i18n/Update Japanese 2019-08-17 08:14:17 +00:00
Shpuld Shpludson 271cf18f3c Merge branch 'i18n/update-pedantic-japanese' into 'develop'
i18n/Update pedantic Japanese

See merge request pleroma/pleroma-fe!912
2019-08-17 08:14:00 +00:00
Hakaba Hitoyo fc68c3907d i18n/Update pedantic Japanese 2019-08-17 08:14:00 +00:00
Shpuld Shpludson e8fad7a460 Merge branch 'telugu-translation' into 'develop'
i18n: Translated to Telugu (44.3%)

See merge request pleroma/pleroma-fe!913
2019-08-17 08:13:29 +00:00
Shpuld Shpludson e5fe4f420c Merge branch '564' into 'develop'
Restore scroll position for user profile when navigate back and forward

Closes #636 and #564

See merge request pleroma/pleroma-fe!914
2019-08-17 08:12:21 +00:00
taehoon 7dfcabb543 sync profile tab state with location query 2019-08-15 13:25:38 -04:00
taehoon e8c22fbfa3 refactor TabSwitcher 2019-08-15 13:25:38 -04:00
taehoon 6e51774ccb use better name of controlled prop 2019-08-15 13:25:38 -04:00
taehoon eafd53f994 fix potential bug to render active tab in controlled way 2019-08-15 13:25:38 -04:00
taehoon 9dd9ba0205 remove unused param 2019-08-15 13:25:38 -04:00
taehoon df3e80b7c3 use key prop instead of dataset to identify active tab 2019-08-15 13:25:38 -04:00
taehoon cd14566a34 remove useless index param of onSwitch 2019-08-15 13:25:38 -04:00
taehoon 539913673f reset error state when load new profile 2019-08-15 13:25:38 -04:00
taehoon 2e0603bdca clear timelines only if load user not viewed previously 2019-08-15 13:25:38 -04:00
HJ 9f6be4fe65 Merge branch 'fix/fix-link-to-external-users-in-who-to-follow-page' into 'develop'
Fix/Fix links to external users in Who to follow page

See merge request pleroma/pleroma-fe!918
2019-08-15 17:19:49 +00:00
Hakaba Hitoyo dd340bb9e3 Fix/Fix links to external users in Who to follow page 2019-08-15 17:19:49 +00:00
Shpuld Shpludson 877a71fa41 Merge branch '293' into 'develop'
Detect hashtag using rel instead of class

Closes #293

See merge request pleroma/pleroma-fe!908
2019-08-14 05:24:19 +00:00
Shpuld Shpludson 0ea1f6f582 Merge branch 'fix-chrome-logo' into 'develop'
Fix logo being all kinds of fucked on chrome by recovering autoprefixer

See merge request pleroma/pleroma-fe!917
2019-08-14 05:23:44 +00:00
Henry Jameson aeae25b74e revives autoprefixer which went AWOL during Webpack v1 -> v4 migration 2019-08-14 01:18:07 +03:00
taehoon 9229f28edb rel also accepts list, update rel detection logic 2019-08-13 13:11:37 -04:00
taehoon 5aa2c44487 use hashtag class detection as fallback 2019-08-12 15:22:39 -04:00
taehoon 5e99bad417 detect hashtag using rel instead of class 2019-08-12 14:48:11 -04:00
Shpuld Shpludson 58b9b6c0a2 Merge branch '638' into 'develop'
Fix inconsistent space bug between panels

Closes #638

See merge request pleroma/pleroma-fe!916
2019-08-12 18:42:58 +00:00
taehoon 0bce615fe8 hide ISP if the panel content is empty 2019-08-12 14:29:11 -04:00
HJ 07086ec9ae Merge branch '637' into 'develop'
Fix user card overflow bug

Closes #637

See merge request pleroma/pleroma-fe!915
2019-08-12 18:04:52 +00:00
taehoon a71d14704f fix user card overflow bug 2019-08-12 13:59:39 -04:00
Henry Jameson 5851f97eb0 fixed a lot of bugs with emoji picker, improved relevant components 2019-08-12 20:03:48 +03:00
Henry Jameson 579b5c9e77 initial attempts at making emoji-picker somewhat extensible 2019-08-12 14:20:08 +03:00
Henry Jameson 036882d27c rename for consistency 2019-08-12 13:51:05 +03:00
shpuld f1bdbeabf0 fix js error on mute 2019-08-10 15:53:46 +03:00
Joseph Nuthalpati 5e0b4e06ec i18n: Translated to Telugu (44.3%)
Verified that the translation strings work by running Pleroma-FE locally.

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2019-08-10 16:50:59 +05:30
HJ 7e2d48a26e Merge branch 'fix/incorrect-follow-request-status' into 'develop'
Fix sent follow request detection

See merge request pleroma/pleroma-fe!910
2019-08-09 12:57:05 +00:00
rinpatch 114b5f6eff Apply suggestion to src/services/follow_manipulate/follow_manipulate.js 2019-08-09 12:26:58 +00:00
rinpatch 5f3ac6625f Apply suggestion to src/services/follow_manipulate/follow_manipulate.js 2019-08-09 12:25:58 +00:00
rinpatch e83b321ff2 Apply suggestion to src/services/follow_manipulate/follow_manipulate.js 2019-08-09 12:01:57 +00:00
rinpatch 766bcc2a72 Fix sent follow request detection
This fixes `requestFollow` using the relationship instead of user object,
resulting in `sent` always being false for locked users, and also removes
assumptions about follow request being sent, instead relying on
`requested` from user relationship.
2019-08-09 15:01:13 +03:00
HJ 59f2931361 Merge branch 'fix/text-dont-media-viewer' into 'develop'
fix english settings label regarding how to view videos

See merge request pleroma/pleroma-fe!909
2019-08-09 08:31:02 +00:00
matrixsasuke 3e7f0ecf9b fix english settings label regarding how to view videos 2019-08-09 08:03:21 +02:00
shpuld d4c366a123 fix extra buttons merge bug 2019-08-08 21:24:40 +03:00
Shpuld Shpludson a45f258a2c Merge branch '632' into 'develop'
Fix gif image zoom bug on hover

Closes #632

See merge request pleroma/pleroma-fe!905
2019-08-08 10:12:46 +00:00
Shpuld Shpludson acb788d575 Merge branch '631' into 'develop'
Hide image block in rich media preview in case of broken image

Closes #631

See merge request pleroma/pleroma-fe!902
2019-08-08 10:10:58 +00:00
Shpuld Shpludson 74cf601094 Merge branch '627' into 'develop'
Fix "Post status modal disappearing on mobile landscape mode"

Closes #627

See merge request pleroma/pleroma-fe!899
2019-08-08 10:10:23 +00:00
Shpuld Shpludson 92380652fe Merge branch 'feat/conversation-muting' into 'develop'
Add Conversation/Thread Muting

See merge request pleroma/pleroma-fe!876
2019-08-08 10:09:07 +00:00
morguldir b9fd3bebc5 Update norwegian bokmål translation 2019-08-08 00:47:48 +02:00
taehoon 4d54c67daa make size of gif image and preview equal 2019-08-06 22:41:27 -04:00
taehoon 32b4d4d223 css improvements 2019-08-06 20:53:10 -04:00
taehoon a13c945143 do not unmount post status modal in desktop 2019-08-06 20:53:09 -04:00
taehoon bb9cee84a3 hide rich media preview image in case of broken image 2019-08-06 20:52:42 -04:00
HJ 17dc7357d5 Merge branch 'issue-617' into 'develop'
Handle JSONified errors while registering

Closes #617

See merge request pleroma/pleroma-fe!888
2019-08-06 18:03:32 +00:00
Lee Starnes 4fc27414d2 Handle JSONified errors while registering
Closes #617
2019-08-06 18:03:31 +00:00
tarteka c0e8d1a809 Corrections and semantics changes for Spanish translation 2019-08-05 15:23:39 +02:00
Exilat 39106dc545 Update oc.json 2019-08-03 14:04:49 +00:00
Exilat 920bd05081 Update for Interactions, new search, sticker picker, update copy. 2019-08-03 13:55:05 +00:00
tarteka 5f6456703c add Basque translate 2019-08-01 18:21:32 +02:00
HJ 5d70ada203 Apply suggestion to docs/HACKING.md 2019-08-01 15:51:15 +00:00
Shpuld Shpludson 0e6489d840 Merge branch 'patch-2' into 'develop'
Update es.json (add sticker)

See merge request pleroma/pleroma-fe!893
2019-07-31 17:46:40 +00:00
Shpuld Shpludson f031e96334 Merge branch '618' into 'develop'
Ability to enlarge profile picture in profile page

Closes #618

See merge request pleroma/pleroma-fe!890
2019-07-31 17:46:24 +00:00
Shpuld Shpludson f4b9efff77 Merge branch 'focus-on-search-input' into 'develop'
Focus on the search input when the search icon is clicked

See merge request pleroma/pleroma-fe!896
2019-07-31 17:39:35 +00:00
Eugenij 254648991d Focus on the search input when the search icon is clicked 2019-07-31 17:39:35 +00:00
Shpuld Shpludson 3f4cb1d58e Merge branch '626' into 'develop'
Prevent scrolling top when click search input

Closes #626

See merge request pleroma/pleroma-fe!898
2019-07-31 17:39:26 +00:00
taehoon af75791f1b prevent scrolling top when click search input 2019-07-31 12:20:05 -04:00
taehoon be7a508d89 add zoom-in indication to avatar 2019-07-28 21:05:13 -04:00
taehoon 1e613ae9b3 add zoom-in icon 2019-07-28 21:05:13 -04:00
taehoon b2bd128f05 allow zooming avatar in profile panel header 2019-07-28 21:05:13 -04:00
taehoon 5881d92eb7 use $route instead of $router.currentRoute 2019-07-28 21:05:13 -04:00
taehoon 7c2982064e enlarge avatar in profile page 2019-07-28 21:05:13 -04:00
Henry Jameson fd66afe1e5 linting 2019-07-29 00:10:43 +03:00
HJ 8aa3e7d52e Merge branch '549' into 'develop'
Prevent showing pinned statuses twice

Closes #549

See merge request pleroma/pleroma-fe!812
2019-07-28 21:05:22 +00:00
taehoon 18a41e785e update unit test 2019-07-28 16:55:34 -04:00
Henry Jameson 03c2f29b0a cleanup and appropriation for new emoji-input component API, styles updates 2019-07-28 16:07:01 +03:00
Henry Jameson 4c78fdb393 rename emoji-selector to emoji-picker 2019-07-28 14:41:22 +03:00
Henry Jameson 259e8c52ee post-merge fix 2019-07-28 13:33:05 +03:00
Henry Jameson b3aff9bbae Merge remote-tracking branch 'upstream/develop' into emoji-selector-update
* upstream/develop: (469 commits)
  Feature/add sticker picker
  guard more secure routes
  guard secure routes by redirecting to root
  closest can returns itself as well
  find inside status-content div only
  try to use the closest a tag as target
  Update es.json
  Also apply keyword filter to subjects
  Remove files I accidentally pushed in
  fix issues caused by merges in usersearch on @
  Add user search at
  fix eslint warnings
  remove vue-popperjs
  fix moderation menu partially hidden by usercard boundary
  migrate popper css
  rewrite ModerationTools using v-tooltip
  make popover position for status action dropdow relative to parent node
  rewrite ExtraButtons using v-tooltip
  install v-tooltip
  i18n/Update pedantic Japanese translation
  ...
2019-07-28 13:30:29 +03:00
Shpuld Shpludson d3f6b581d1 Merge branch 'develop' into 'feat/conversation-muting'
# Conflicts:
#   src/components/extra_buttons/extra_buttons.js
#   src/components/extra_buttons/extra_buttons.vue
2019-07-26 12:44:32 +00:00
taehoon d785ed5a05 rewrite unit tests 2019-07-25 23:34:56 -04:00
taehoon a443a5203e add more unit tests for elimination logic 2019-07-25 14:17:48 -04:00
taehoon 65ef039316 add unit test for elimination logic 2019-07-25 08:03:41 -04:00
taehoon 53c9517a4a use array.includes instead of array.indexOf 2019-07-24 22:42:06 -04:00
taehoon 0f8ace4836 update status eliminating logic 2019-07-24 21:02:37 -04:00
taehoon 876c6de806 fix typos 2019-07-24 21:02:37 -04:00
taehoon dca384f123 update prop syntax 2019-07-24 21:02:37 -04:00
taehoon d7dc070667 put two loops in one parent 2019-07-24 21:02:37 -04:00
taehoon ae829e8df1 move pinned statuses showing logic in timeline 2019-07-24 21:02:37 -04:00
taehoon 4826d72549 update prop name 2019-07-24 21:02:37 -04:00
taehoon 7f9feacd26 prevent showing pinned statuses twice 2019-07-24 21:02:37 -04:00
tarteka 6380f7df16 Update es.json (add sticker) 2019-07-24 22:06:45 +00:00
HJ 4827e4d972 Merge branch 'feature/add-sticker-picker' into 'develop'
Feature/add sticker picker

See merge request pleroma/pleroma-fe!885
2019-07-24 19:35:52 +00:00
absturztaube fa6210872f Feature/add sticker picker
Squash to avoid storing commits with stickers in it to avoid possible copyright problems and excess storage space. --hj
2019-07-24 19:35:52 +00:00
Shpuld Shpludson 28f777cb8a Merge branch '587' into 'develop'
Protect secure routes which require auth

Closes #587

See merge request pleroma/pleroma-fe!892
2019-07-24 16:17:06 +00:00
taehoon 8375d7a3aa guard more secure routes 2019-07-24 11:08:05 -04:00
taehoon ad29e20324 guard secure routes by redirecting to root 2019-07-24 11:08:05 -04:00
Shpuld Shpludson 1f8f2e26e3 Merge branch 'patch-2' into 'develop'
Update es.json

See merge request pleroma/pleroma-fe!889
2019-07-24 13:32:57 +00:00
Shpuld Shpludson c2cef3055d Merge branch '592' into 'develop'
Allow to click hyperlink inside markdown/html content

Closes #592

See merge request pleroma/pleroma-fe!891
2019-07-24 13:23:04 +00:00
taehoon 1cefaa8446 closest can returns itself as well 2019-07-23 20:59:37 -04:00
taehoon 17ad5bbdf9 find inside status-content div only 2019-07-23 15:44:41 -04:00
taehoon 09efcb48a4 try to use the closest a tag as target 2019-07-23 15:43:03 -04:00
tarteka 51fc0a5c52 Update es.json 2019-07-23 15:16:03 +00:00
kaniini e448950023 Merge branch 'fix/keyword-filter' into 'develop'
Also apply keyword filter to subjects

See merge request pleroma/pleroma-fe!887
2019-07-22 20:06:57 +00:00
Toromino fb9f254f8d Also apply keyword filter to subjects 2019-07-20 19:06:54 +02:00
shpuld 9c2c00992d Remove files I accidentally pushed in 2019-07-18 17:25:06 +03:00
shpuld 619608ea7a fix issues caused by merges in usersearch on @ 2019-07-18 17:22:51 +03:00
Shpuld Shpludson 029dc7405e Merge branch 'add-user-search-at' into 'develop'
Add user search at

See merge request pleroma/pleroma-fe!852
2019-07-18 03:40:02 +00:00
Wyatt Benno 5909baba7c Add user search at 2019-07-18 03:40:02 +00:00
HJ cc2e35f499 Merge branch '609' into 'develop'
Fix popper issues using another popper library

Closes #612 and #609

See merge request pleroma/pleroma-fe!881
2019-07-16 20:49:49 +00:00
taehoon 051b3b5141 fix eslint warnings 2019-07-15 21:22:41 -04:00
taehoon d35a16b4bd remove vue-popperjs 2019-07-15 21:22:41 -04:00
taehoon e3ac71968b fix moderation menu partially hidden by usercard boundary 2019-07-15 21:22:41 -04:00
taehoon c4789a348f migrate popper css 2019-07-15 21:22:41 -04:00
taehoon 4f74392641 rewrite ModerationTools using v-tooltip 2019-07-15 21:22:41 -04:00
taehoon b9c547828e make popover position for status action dropdow relative to parent node 2019-07-15 21:22:41 -04:00
taehoon 005815c825 rewrite ExtraButtons using v-tooltip 2019-07-15 21:22:40 -04:00
taehoon 1727c815f8 install v-tooltip 2019-07-15 21:22:40 -04:00
HJ f734a72116 Merge branch 'fix/respect-hide-post-stats' into 'develop'
Hide favs/rts properly when hide post stats is enabled

See merge request pleroma/pleroma-fe!877
2019-07-15 21:47:45 +00:00
Shpuld Shpludson e86f6edb7c Merge branch 'patch-2' into 'develop'
Update es.json

See merge request pleroma/pleroma-fe!794
2019-07-15 19:21:37 +00:00
Shpuld Shpludson bfc6f7b3ec Merge branch 'revert-0a7c60c3' into 'develop'
Revert "Merge branch 'csp-header' into 'develop'"

See merge request pleroma/pleroma-fe!880
2019-07-15 19:21:01 +00:00
Shpuld Shpludson c649e202b3 Merge branch 'i18n/update-pedantic-japanese-traslation' into 'develop'
i18n/Update pedantic Japanese translation

See merge request pleroma/pleroma-fe!882
2019-07-15 19:18:40 +00:00
Hakaba Hitoyo 54b45ec4a3 i18n/Update pedantic Japanese translation 2019-07-15 19:18:40 +00:00
Shpuld Shpludson 34ca0d369f Merge branch 'i18n/update-japanese-trasnlation' into 'develop'
i18n/Update easy Japanese trasnlation

See merge request pleroma/pleroma-fe!878
2019-07-15 19:18:20 +00:00
Hakaba Hitoyo f665ac83e7 i18n/Update easy Japanese trasnlation 2019-07-15 19:18:20 +00:00
Shpuld Shpludson 3370dd80dc Merge branch 'develop' into 'feat/conversation-muting'
# Conflicts:
#   src/services/api/api.service.js
2019-07-15 19:09:01 +00:00
Shpuld Shpludson e9b452575b Merge branch 'new-search' into 'develop'
New search

See merge request pleroma/pleroma-fe!832
2019-07-15 16:42:27 +00:00
Eugenij 69a4bcb238 New search 2019-07-15 16:42:27 +00:00
HJ 0c06410584 Merge branch '482-subscribe-user' into 'develop'
Implement ability to subscribe to a user

Closes #482

See merge request pleroma/pleroma-fe!771
2019-07-15 06:50:31 +00:00
taehoon ff90d864cc fix wrong eslint comments 2019-07-12 15:11:54 -04:00
taehoon 78594f61d4 add a todo comment 2019-07-12 15:10:30 -04:00
taehoon 57c5d269b8 add bell-ringing icon 2019-07-11 12:52:05 -04:00
taehoon b2dbf01a72 eslint —fix 2019-07-10 21:01:08 -04:00
taehoon 9712e324e5 hide subscribe button unless following 2019-07-10 21:01:08 -04:00
taehoon 81d1d30586 revert font change 2019-07-10 21:01:08 -04:00
taehoon 1237d0d2b8 use normal bell for unsubscribed state 2019-07-10 21:01:08 -04:00
taehoon 4f26299bd5 update copy 2019-07-10 21:01:08 -04:00
taehoon 0f4cccd115 improve ui 2019-07-10 21:01:08 -04:00
taehoon 38ba5fe028 change subscribe button to icon button 2019-07-10 21:01:08 -04:00
taehoon e503243be3 add bell-off font icon 2019-07-10 21:01:08 -04:00
taehoon 2ab00387fe clean up + add btn-group css class 2019-07-10 21:01:07 -04:00
taehoon e1d6e56e1b clean up layout 2019-07-10 21:01:07 -04:00
taehoon 0fc154d9d4 clean up UserCard css 2019-07-10 21:01:07 -04:00
taehoon dbe2decc59 clean up UserCard template 2019-07-10 21:01:07 -04:00
taehoon 3b9ab0e343 no need to covert to boolean 2019-07-10 21:01:07 -04:00
taehoon 670cbfdd1c change subscribing to subscribed 2019-07-10 21:01:07 -04:00
taehoon 0c52d69a52 update copy 2019-07-10 21:01:07 -04:00
taehoon ace3b399ff support i18n 2019-07-10 21:01:07 -04:00
taehoon deee07d6fb show subscribe button only if user is logged in 2019-07-10 21:01:07 -04:00
taehoon 646d197bf1 mutate updated relationship to the store 2019-07-10 21:01:07 -04:00
taehoon e9e6daa76e show text in progress only when slot is given 2019-07-10 21:01:07 -04:00
taehoon f4a16e6541 add subscribing to user entity normalizer 2019-07-10 21:01:07 -04:00
taehoon 4cf402ff21 migrate SubscribeButton to the existing common component 2019-07-10 21:01:07 -04:00
jared d5e8315e83 #482 - add subscribe button 2019-07-10 21:01:07 -04:00
jared f2c95f9d0b #482 - add new endpoints to subscribe to the user 2019-07-10 21:01:07 -04:00
feld 114a36c9be Revert "Merge branch 'csp-header' into 'develop'"
This reverts merge request !856
2019-07-10 22:30:32 +00:00
HJ 0a7c60c303 Merge branch 'csp-header' into 'develop'
Add Content-Security-Policy header

See merge request pleroma/pleroma-fe!856
2019-07-10 18:44:27 +00:00
taehoon 34d95454b3 add csp header to dev server 2019-07-10 13:49:53 -04:00
Shpuld Shpludson cf2dc5b683 Merge branch '582' into 'develop'
Refactor user search api, better api error response handling

See merge request pleroma/pleroma-fe!844
2019-07-10 16:58:49 +00:00
Tae Hoon 532b76eb64 Refactor user search api, better api error response handling 2019-07-10 16:58:49 +00:00
shpuld 59ade4084e Hide favs/rts properly when hide post stats is enabled 2019-07-09 16:50:23 +03:00
HJ 2f87540612 Merge branch '588' into 'develop'
Sync the counters in Favs and Repeats view and near the buttons

Closes #588

See merge request pleroma/pleroma-fe!854
2019-07-09 13:46:06 +00:00
taehoon 0131effb01 add comments 2019-07-07 22:49:18 -04:00
taehoon ab4d7d9616 refetch favs and repeats separately 2019-07-07 22:49:18 -04:00
taehoon e9b6e0e2b7 refetch favs and repeats when stats are changed 2019-07-07 22:49:18 -04:00
taehoon 17498ef906 update favs and repeats stats using favoritedByUsers and rebloggedByUsers data 2019-07-07 22:49:18 -04:00
HJ 6b4fe1c2d9 Merge branch 'fix/console-errors-with-reply-filter' into 'develop'
Fix console errors in status.js

See merge request pleroma/pleroma-fe!875
2019-07-07 23:27:46 +00:00
shpuld 7ed9d17ce7 Add thread muting to context menu of status 2019-07-07 23:02:09 +03:00
shpuld e5879e3d4d check for user before checking users props 2019-07-07 22:23:04 +03:00
Shpuld Shpludson 54b0f90133 Merge branch 'eslint-fix' into 'develop'
Fix shitton warning eslint gives

See merge request pleroma/pleroma-fe!871
2019-07-07 19:12:33 +00:00
Shpuld Shpludson 171673113f Merge branch 'revoke-token' into 'develop'
Revoke oAuth token on logout

Closes pleroma#952

See merge request pleroma/pleroma-fe!864
2019-07-07 18:29:36 +00:00
Shpuld Shpludson c8794b2b84 Merge branch '580' into 'develop'
Fix backend version string parsing

Closes #580

See merge request pleroma/pleroma-fe!868
2019-07-07 10:30:45 +00:00
Shpuld Shpludson e7ff9b5227 Merge branch '600-2' into 'develop'
Preserve formatting of status content

Closes #600

See merge request pleroma/pleroma-fe!872
2019-07-07 10:21:55 +00:00
Shpuld Shpludson 19b5aea081 Merge branch 'preserve-follows-followers-visibility-settings' into 'develop'
Set hide_follows and hide_followers settings when parsing Mastodon format

See merge request pleroma/pleroma-fe!873
2019-07-07 10:20:55 +00:00
Eugenij 14ec12b4f6 Set hide_follows and hide_followers settings when parsing Mastodon format 2019-07-07 10:20:55 +00:00
Shpuld Shpludson e80ed386be Merge branch 'fix-hmr' into 'develop'
fix hot reload always reloading the page

See merge request pleroma/pleroma-fe!874
2019-07-07 10:20:36 +00:00
Henry Jameson 020c6d1bcf all the manual fixes 2019-07-07 00:54:17 +03:00
Henry Jameson 1ec4caa0bb fix merge conflict 2019-07-06 23:52:10 +03:00
HJ 8f53796420 Merge branch 'develop' into 'eslint-fix'
# Conflicts:
#   src/components/post_status_form/post_status_form.vue
2019-07-06 20:43:38 +00:00
Henry Jameson 4991e34c49 fix hot reload always reloading the page 2019-07-06 23:42:03 +03:00
Egor Kislitsyn 9fc9925488 Use target from the settings 2019-07-06 18:14:19 +07:00
taehoon bba4b57dd8 preserve formatting of content 2019-07-05 21:57:48 -04:00
taehoon c712754150 add unit tests 2019-07-05 13:38:52 -04:00
taehoon 66842efd81 update regex for commit hash 2019-07-05 11:11:31 -04:00
Shpuld Shpludson 60b413d02c Merge branch '602' into 'develop'
Fix mixed profiles bug on user profile page

Closes #586

See merge request pleroma/pleroma-fe!865
2019-07-05 13:28:15 +00:00
Shpuld Shpludson 7ec02445cc Merge branch 'develop' into 'develop'
[i18n] Update of the Occitan translation

See merge request pleroma/pleroma-fe!866
2019-07-05 13:22:49 +00:00
Shpuld Shpludson 4f0ba97be9 Merge branch '603' into 'develop'
Hide text format when only plaintext is available

Closes #603

See merge request pleroma/pleroma-fe!867
2019-07-05 13:22:04 +00:00
Henry Jameson 8d6750d9c2 eslint --fix --ext .js,.vue src 2019-07-05 10:17:44 +03:00
Henry Jameson 2c2b84d31d npm eslint --fix . 2019-07-05 10:02:14 +03:00
HJ 6bea363b9d Merge branch 'fix-android-emoji-autocompletion' into 'develop'
Fix android emoji autocompletion

Closes #606

See merge request pleroma/pleroma-fe!869
2019-07-04 18:55:13 +00:00
Henry Jameson f86f4b514f Support compositionupdate event to properly show autocomplete popup for IMEs and
android
2019-07-03 23:08:51 +03:00
taehoon 6c6aa8446d place scope selector on the left consistently 2019-07-03 12:19:25 -04:00
taehoon 0c102deeed hide text format when only plaintext is available 2019-07-02 16:36:14 -04:00
taehoon d8e210df4d update test for clearTimeline action 2019-07-02 15:07:18 -04:00
taehoon b70c2bfef7 make sure that user timelines are empty when opening profile page 2019-07-02 14:43:01 -04:00
taehoon 0e9b8be88c clear userId property of timeline by default in clearTimeline action 2019-07-02 14:32:46 -04:00
Egor Kislitsyn 52319acf58 Revoke oAuth token 2019-07-02 15:33:40 +07:00
Exilat fe500c44ed Update oc.json 2019-06-30 14:24:34 +00:00
HJ 225090bb79 Apply suggestion to docs/CONFIGURATION.md 2019-06-28 12:29:44 +00:00
Henry Jameson b3e9a5a718 fix link? 2019-06-27 21:27:51 +03:00
Henry Jameson e1c2cf47ce PROFILE 2019-06-27 21:26:52 +03:00
HJ 6afee3013f fix email highlight 2019-06-26 21:19:35 +00:00
Henry Jameson 277553094b formatting fix 2019-06-27 00:16:42 +03:00
Henry Jameson c79c8f26c8 deletion update 2019-06-27 00:15:27 +03:00
Henry Jameson 185a4d8ab2 DOCUMENTATION 2019-06-27 00:10:51 +03:00
Henry Jameson 27b898f5c9 More configuration 2019-06-26 23:44:05 +03:00
Henry Jameson 926285685b HACKERMAN 2 2019-06-26 23:16:06 +03:00
HJ 69d3b8b20e Merge branch 'docs-settings' into 'docs'
Documentations: Add docs for settings.

See merge request pleroma/pleroma-fe!851
2019-06-26 12:24:30 +00:00
HJ 3354aea356 Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:51:38 +00:00
HJ 0fc04893af Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:48:25 +00:00
HJ 624277c406 Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:47:48 +00:00
HJ afb8ef1983 Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:47:31 +00:00
HJ c95a3f0a1a Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:47:30 +00:00
HJ c6a29b48eb Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:47:26 +00:00
HJ 0892c13c2c Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:46:19 +00:00
HJ 0b4c6127c5 Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:46:16 +00:00
HJ b02a92e9f6 Apply suggestion to docs/USER_GUIDE.md 2019-06-26 11:46:13 +00:00
HJ 221db9f210 Merge branch 'fix-emoji-input' into 'develop'
fix all known problems with clicks on autocomplete emojis

See merge request pleroma/pleroma-fe!857
2019-06-25 21:38:45 +00:00
Henry Jameson 82464b3a7e review 2019-06-26 00:34:09 +03:00
Henry Jameson 9dbafa4c78 lint fix 2019-06-25 21:39:33 +03:00
Henry Jameson 01bda605a7 fix all known problems with clicks on autocomplete emojis 2019-06-25 21:31:43 +03:00
Shpuld Shpludson a6bcd56c9f Merge branch 'fix/gallery-margin-fix' into 'develop'
fix specificity that made attachments misalign

See merge request pleroma/pleroma-fe!855
2019-06-25 16:30:21 +00:00
Shpuld Shpludson b059deb551 fix specificity that made attachments misalign 2019-06-25 16:30:21 +00:00
HJ 8d33832fe1 Merge branch 'clearer-user-profile-tabs' into 'develop'
Clearer user profile tabs when status is empty

See merge request pleroma/pleroma-fe!847
2019-06-25 06:32:08 +00:00
Wyatt Benno f2d84ef233 Keep statuses always enabled 2019-06-25 10:27:41 +09:00
HJ bb8e2b1933 Merge branch 'timeline-skip-fix' into 'develop'
timeline-skip-fix

See merge request pleroma/pleroma-fe!850
2019-06-24 22:08:09 +00:00
lain 7dfd50c7c8 Apply suggestion to docs/USER_GUIDE.md 2019-06-24 22:07:03 +00:00
lain bd8e1c9e23 Apply suggestion to docs/USER_GUIDE.md 2019-06-24 22:06:19 +00:00
lain 9bc7b19500 Apply suggestion to docs/USER_GUIDE.md 2019-06-24 22:06:02 +00:00
Henry Jameson 3fb165b0c8 H A C K E R M A N 2019-06-25 00:51:13 +03:00
HJ 05aec11906 Merge branch '591' into 'develop'
Add resolve param to user search api request

Closes #591

See merge request pleroma/pleroma-fe!853
2019-06-24 17:31:54 +00:00
taehoon 1c03bd0ebc add resolve param to user search api request 2019-06-24 07:49:22 -04:00
Wyatt Benno 7a5d06a6cf change isPinned to noIdUpdate 2019-06-24 12:01:13 +09:00
Shpuld Shpludson 79d39356c4 Merge branch 'fix/not-all-polls-showing-up' into 'develop'
Fix: problems with polls state

See merge request pleroma/pleroma-fe!849
2019-06-22 14:01:36 +00:00
Shpuld Shpludson 947f69a953 Fix: problems with polls state 2019-06-22 14:01:36 +00:00
Shpuld Shpludson c2b48c32a2 Merge branch 'fix/move-character-counter' into 'develop'
Move character counter into the input box

See merge request pleroma/pleroma-fe!848
2019-06-22 13:41:02 +00:00
Shpuld Shpludson 30a340955e Move character counter into the input box 2019-06-22 13:41:02 +00:00
HJ 5a8f3dddfd Merge branch 'fix-token-auth-login' into 'develop'
Fix broken token authentication

See merge request pleroma/pleroma-fe!846
2019-06-22 07:47:30 +00:00
lain 0ba0f8f1f1 Documentations: Add docs for settings. 2019-06-21 12:47:54 +02:00
Wyatt Benno a1c50c3fc1 fix for #553 2019-06-21 10:31:00 +09:00
Wyatt Benno 308c4c9789 Make scss change for tab switcher only 2019-06-21 08:35:02 +09:00
taehoon bd377148ad delete state.token instead of setting false 2019-06-20 11:48:31 -04:00
taehoon 8a32731e4d use clientSecret in login flow 2019-06-20 11:48:30 -04:00
taehoon c23228f196 fix error breaking logout flow 2019-06-20 11:48:30 -04:00
taehoon 268e9ce504 make sure to clear old token when logout 2019-06-20 11:48:29 -04:00
Shpuld Shpludson 03a27c6d48 Merge branch 'fix/polls-to-module' into 'develop'
Move poll state handling to its own module

See merge request pleroma/pleroma-fe!845
2019-06-20 13:02:04 +00:00
Shpuld Shpludson e5e9bb27f3 Move poll state handling to its own module 2019-06-20 13:02:04 +00:00
Shpuld Shpludson eca533aab6 Merge branch 'fix/messed-up-long-polls' into 'develop'
Fix/messed up long polls

See merge request pleroma/pleroma-fe!843
2019-06-20 13:00:10 +00:00
Shpuld Shpludson 44a03922e6 Fix/messed up long polls 2019-06-20 13:00:10 +00:00
Wyatt Benno 066efd5b3c A small sass fix for #577 2019-06-20 16:15:49 +09:00
HJ 752ee9d70c Merge branch '584' into 'develop'
Fix "Status submission box overlap and alignment issues"

Closes #584

See merge request pleroma/pleroma-fe!835
2019-06-19 12:27:12 +00:00
taehoon 90fda1f245 reset margin property of form controls 2019-06-19 07:55:54 -04:00
HJ c4fcdc7125 Merge branch 'mr-origin-740' into 'develop'
Update french translation

See merge request pleroma/pleroma-fe!829
2019-06-18 20:39:59 +00:00
Shpuld Shpludson 0cfa28a7de Merge branch 'feature/polls-attempt-2' into 'develop'
Feature/polls attempt 2

See merge request pleroma/pleroma-fe!826
2019-06-18 20:28:31 +00:00
lain 0eed2ccca8 Feature/polls attempt 2 2019-06-18 20:28:31 +00:00
Dashie 57dbfc269c Update translation with review comments 2019-06-18 22:14:02 +02:00
Dashie 64d7dd60cc Update file with current en.json 2019-06-18 21:22:22 +02:00
Satak 3fcc4ba288 Update fr.json
added missing ,
2019-06-18 21:22:21 +02:00
Satak ceffe72f6f Update fr.json
stoped at line 134, more to do below
2019-06-18 21:22:15 +02:00
HJ 69eff65130 Merge branch 'refactor-emoji-input' into 'develop'
EmojiInput refactoring

Closes #565

See merge request pleroma/pleroma-fe!824
2019-06-18 19:17:37 +00:00
Henry Jameson 46e0122067 review 2019-06-18 22:13:03 +03:00
Henry Jameson 0032802f0a review 2019-06-18 21:30:35 +03:00
HJ e5020d6936 Update emoji-input.js 2019-06-18 17:49:43 +00:00
Shpuld Shpludson c0c012ccf9 Merge branch 'fix-user-search' into 'develop'
fix user search

See merge request pleroma/pleroma-fe!839
2019-06-18 16:32:11 +00:00
HJ 3cd4201ce4 Merge branch '573' into 'develop'
Apply font smoothing in webkit and firefox

Closes #573

See merge request pleroma/pleroma-fe!841
2019-06-18 16:31:33 +00:00
HJ 195057040c Merge branch 'fix/minor-fixes-console-warnings-stretching' into 'develop'
Misc fixes: Fix uploads stretching on chrome, fix warnings in console

See merge request pleroma/pleroma-fe!842
2019-06-18 16:31:20 +00:00
Shpuld Shpludson 76efbcbe92 Misc fixes: Fix uploads stretching on chrome, fix warnings in console 2019-06-18 16:31:20 +00:00
taehoon 2b5ac611c9 apply font smoothing in webkit and firefox 2019-06-17 23:34:20 -04:00
Henry Jameson de03eda9f3 fix user search 2019-06-17 23:39:30 +03:00
HJ ac46de3972 Merge branch 'mastoapi-login-and-config-fixes' into 'develop'
Mastoapi login and config fixes

See merge request pleroma/pleroma-fe!833
2019-06-17 20:17:58 +00:00
HJ 22a3351208 Apply suggestion to src/services/backend_interactor_service/backend_interactor_service.js 2019-06-17 20:12:11 +00:00
Henry Jameson 5f4a8dcc05 properly position the caret after replacement 2019-06-17 21:24:10 +03:00
HJ 3ec9ef8975 Apply suggestion to docs/CONFIGURATION.md 2019-06-17 16:08:32 +00:00
HJ 886b097a67 Apply suggestion to docs/CONFIGURATION.md 2019-06-17 16:06:01 +00:00
HJ 201ea169fe Apply suggestion to docs/USER_GUIDE.md 2019-06-17 11:40:31 +00:00
HJ 8543bab582 Apply suggestion to docs/USER_GUIDE.md 2019-06-17 11:39:23 +00:00
HJ 934ca66d87 Apply suggestion to docs/USER_GUIDE.md 2019-06-17 11:38:54 +00:00
HJ 65520d7a01 Apply suggestion to docs/USER_GUIDE.md 2019-06-17 11:38:22 +00:00
HJ ee9bacee7a Apply suggestion to docs/USER_GUIDE.md 2019-06-17 11:37:03 +00:00
HJ 8caf13bbce Apply suggestion to src/services/api/api.service.js 2019-06-17 08:20:02 +00:00
lain 8d2e63a8e4 Merge branch 'fix-mfa' into 'develop'
fix MFA crashing on user-settings page

See merge request pleroma/pleroma-fe!834
2019-06-17 07:33:39 +00:00
Henry Jameson 5a70eda5e8 fix 2019-06-16 21:54:27 +03:00
Henry Jameson bda36c64c0 User guide + updates 2019-06-16 21:53:00 +03:00
Henry Jameson 06c84a9cf3 fix MFA crashing on user-settings page 2019-06-16 20:36:21 +03:00
Henry Jameson b00da17788 Merge remote-tracking branch 'upstream/develop' into docs
* upstream/develop: (374 commits)
  fix typo
  rename mutations according to actual property names
  fix
  fix
  fix logged out post-update
  fix user banner
  fix
  AMERICA
  comments
  No longer sending extra data, renamed some properties
  Revert "add TOTP/Recovery Form for mobile version"
  Apply suggestion to src/services/entity_normalizer/entity_normalizer.service.js
  i18n/Update Japanese translation
  render modal at the root level using portal
  install portal vue
  Small improve of the who to follow panel layout
  Fix/Small fix in the who to follow page
  remove console spam
  i18n
  wire up user.description with masto api data
  ...
2019-06-16 20:24:03 +03:00
Henry Jameson b72aa97098 fixup! Removed formattingOptionsEnabled in favor of relying on BE-provided list of accepted formatting options 2019-06-16 20:23:07 +03:00
Henry Jameson 6744396f82 getting and setting user background via MastoAPI 2019-06-16 20:17:59 +03:00
Henry Jameson e3638af031 Removed formattingOptionsEnabled in favor of relying on BE-provided list of
accepted formatting options
2019-06-16 20:16:52 +03:00
HJ 1db3c785d8 Merge branch 'masto-register-app-secret' into 'develop'
Proper clientId/secret/token caching, MastoAPI registration

Closes #554

See merge request pleroma/pleroma-fe!806
2019-06-16 11:18:21 +00:00
HJ 1fc460a7a5 Merge branch 'hotfix-token-auth' into 'develop'
Fix broken token authentication

See merge request pleroma/pleroma-fe!831
2019-06-13 19:05:05 +00:00
taehoon de2504ad6c fix typo 2019-06-13 15:00:13 -04:00
Henry Jameson acbeea59ff rename mutations according to actual property names 2019-06-13 10:11:17 +03:00
Henry Jameson f9c3aabea4 Merge remote-tracking branch 'upstream/develop' into masto-register-app-secret
* upstream/develop:
  fix user banner
2019-06-13 10:05:53 +03:00
Henry Jameson 0988065f50 fix 2019-06-13 10:05:22 +03:00
Henry Jameson dba8d8910c fix 2019-06-13 10:00:06 +03:00
Henry Jameson d551b39859 fix logged out post-update 2019-06-13 09:48:43 +03:00
HJ 2e77a3ffef Merge branch 'hotfix-user-background' into 'develop'
fix user banner

See merge request pleroma/pleroma-fe!828
2019-06-12 22:53:24 +00:00
Henry Jameson d1fd3e3a1c fix user banner 2019-06-13 01:48:41 +03:00
Henry Jameson edb24da016 fix 2019-06-13 01:02:08 +03:00
Henry Jameson c8a57ad32e Merge remote-tracking branch 'upstream/develop' into masto-register-app-secret
* upstream/develop:
  Revert "add TOTP/Recovery Form for mobile version"
2019-06-13 00:51:14 +03:00
Henry Jameson 1e94aecbc9 AMERICA 2019-06-13 00:47:06 +03:00
Henry Jameson 6cd4546873 comments 2019-06-13 00:44:25 +03:00
Henry Jameson af75c6d1ea No longer sending extra data, renamed some properties 2019-06-13 00:39:51 +03:00
Henry Jameson 77511a5338 Merge remote-tracking branch 'upstream/develop' into masto-register-app-secret
* upstream/develop:
  Apply suggestion to src/services/entity_normalizer/entity_normalizer.service.js
  i18n/Update Japanese translation
  render modal at the root level using portal
  install portal vue
  Small improve of the who to follow panel layout
  Fix/Small fix in the who to follow page
  remove console spam
  i18n
  wire up user.description with masto api data
  i18n/Add Japanese with kanji (2)
  move drowdown menu to popper
  notification controls: redesign entirely
  entity normalizer: collapse data.pleroma if blocks
  wire up notification settings
  do not miss statusnet_profile_url of mentions
  Translation to Hebrew of everything other than theme_helpers and style.
  Translate up to settings.
  mastoapi login works
2019-06-13 00:07:28 +03:00
HJ e53f11c30f Merge branch 'feature/2fa' into 'develop'
adds 2FA/two_factor_authentication support

See merge request pleroma/pleroma-fe!556
2019-06-12 20:16:55 +00:00
Maksim 77eceedbf7 Revert "add TOTP/Recovery Form for mobile version"
This reverts commit a3811f944819430c278b6da6b08dc322a9b9ff65.
2019-06-12 20:16:55 +00:00
HJ 9df99c5205 Merge branch 'masto-login-fixes' into 'develop'
MastoAPI login

See merge request pleroma/pleroma-fe!805
2019-06-12 19:42:25 +00:00
HJ a7b0b07e6f Apply suggestion to src/services/entity_normalizer/entity_normalizer.service.js 2019-06-12 11:44:14 +00:00
Henry Jameson a05fd042df fix small annoyance 2019-06-12 10:56:08 +03:00
Henry Jameson 0535d2c14c fixed some bugs i found, also cleaned up some stuff + documentation 2019-06-11 21:18:09 +03:00
HJ 855080b896 Merge branch 'update-japanese-translation' into 'develop'
i18n/Update Japanese translation

See merge request pleroma/pleroma-fe!815
2019-06-11 12:10:47 +00:00
Hakaba Hitoyo 322c9fbfb6 i18n/Update Japanese translation 2019-06-11 12:10:47 +00:00
Henry Jameson 41eeaf35d9 self-review 2019-06-10 18:57:53 +03:00
Henry Jameson e536a56250 Linting 2019-06-09 22:40:38 +03:00
Henry Jameson 4d12cd617a fix textarea not resizing properly 2019-06-09 21:23:56 +03:00
Henry Jameson 8a02647de4 more bugfixes related to keybinds and nonworking stuff 2019-06-09 21:17:24 +03:00
Henry Jameson 20923d590c Some comments, added sorting for emojis 2019-06-09 20:41:12 +03:00
Henry Jameson 76b9a66e98 fixed several bugs 2019-06-09 20:40:46 +03:00
kaniini 33554e8d1d Merge branch '547' into 'develop'
Fix "Delete account modal partially hidden" issue

Closes #547

See merge request pleroma/pleroma-fe!803
2019-06-08 17:40:15 +00:00
Henry Jameson a3cc8cc5d8 sorting 2019-06-08 17:15:48 +03:00
Henry Jameson 0a778160cc styles 2019-06-08 17:15:42 +03:00
Henry Jameson 8872b4802e standartized autocomplete panel suggesions format, fixed some bugs 2019-06-08 16:23:58 +03:00
Henry Jameson ca3140fd3e Merge remote-tracking branch 'upstream/develop' into refactor-emoji-input
* upstream/develop:
  Small improve of the who to follow panel layout
  Fix/Small fix in the who to follow page
2019-06-08 14:31:49 +03:00
Henry Jameson 96f31716f9 slot-based emoji input/autocomplete component 2019-06-07 00:17:49 +03:00
taehoon 9c8af14908 render modal at the root level using portal 2019-06-06 13:37:27 -04:00
taehoon 5740123ee6 install portal vue 2019-06-06 13:37:26 -04:00
HJ 0ecf23881d Merge branch 'small-improve-of-who-to-follow-panel-layout' into 'develop'
Small improve of the who to follow panel layout

See merge request pleroma/pleroma-fe!821
2019-06-05 17:43:35 +00:00
Hakaba Hitoyo 5b274364ce Small improve of the who to follow panel layout 2019-06-05 17:43:35 +00:00
HJ e9e7b36c69 Merge branch 'fix/avatars-in-who-to-follow-page-are-missing' into 'develop'
Fix/Small fix in the who to follow page

See merge request pleroma/pleroma-fe!820
2019-06-04 08:04:47 +00:00
Hakaba Hitoyo 809d872b2d Fix/Small fix in the who to follow page 2019-06-04 08:04:47 +00:00
Shpuld Shpludson 7ce9b7be07 Merge branch 'fix/remove-notifications-console-spam' into 'develop'
fix: Remove some console spam

See merge request pleroma/pleroma-fe!818
2019-06-01 09:15:53 +00:00
shpuld 4526939dae remove console spam 2019-06-01 12:10:00 +03:00
kaniini b4796ccbf6 Merge branch 'feature/notification-controls' into 'develop'
wire up notification settings

See merge request pleroma/pleroma-fe!809
2019-06-01 05:16:15 +00:00
feld 9c0ec9b794 Merge branch 'fix/interactions-i18n' into 'develop'
Interactions i18n

See merge request pleroma/pleroma-fe!817
2019-05-31 15:19:10 +00:00
Mark Felder f67f14495b i18n 2019-05-31 10:13:06 -05:00
Shpuld Shpludson 50618b81c8 Merge branch '543' into 'develop'
Fix "stale user settings shown after save"

Closes #543

See merge request pleroma/pleroma-fe!813
2019-05-29 17:08:27 +00:00
Shpuld Shpludson 6045708a5d Merge branch 'fix-dropdown' into 'develop'
move drowdown menu to popper

Closes #559

See merge request pleroma/pleroma-fe!814
2019-05-29 16:55:28 +00:00
taehoon 0532995847 wire up user.description with masto api data 2019-05-29 12:32:14 -04:00
HJ 152617e20d Merge branch 'i18n/add-pedantic-japanese-2' into 'develop'
i18n/Add Japanese with kanji (2)

Closes #522

See merge request pleroma/pleroma-fe!816
2019-05-29 05:31:03 +00:00
Hakaba Hitoyo 443794b000 i18n/Add Japanese with kanji (2) 2019-05-29 05:31:03 +00:00
Henry Jameson 6c7eeb93fe move drowdown menu to popper 2019-05-27 00:13:08 +03:00
William Pitcock 855566f887 notification controls: redesign entirely 2019-05-25 23:44:36 +00:00
William Pitcock ac97cd3e46 entity normalizer: collapse data.pleroma if blocks 2019-05-25 22:59:04 +00:00
William Pitcock 28ca504576 wire up notification settings 2019-05-25 07:34:59 +00:00
HJ ab34a75bcf Merge branch '556' into 'develop'
Fix User links/mentions opening in new tab issue

Closes #556

See merge request pleroma/pleroma-fe!808
2019-05-23 05:34:15 +00:00
taehoon 2af35b8404 do not miss statusnet_profile_url of mentions 2019-05-22 23:47:20 -04:00
HJ 45961331b6 Merge branch 'update-hebrew-transalation' into 'develop'
Update he.json

See merge request pleroma/pleroma-fe!807
2019-05-22 18:50:32 +00:00
j1t 4249a2fd6f Translation to Hebrew of everything other than theme_helpers and style. 2019-05-22 21:33:05 +03:00
Henry Jameson e7a2a7267d Proper clientId/secret/token caching, MastoAPI registration 2019-05-22 19:13:41 +03:00
j1t 3b3e4ffc54 Translate up to settings. 2019-05-22 01:46:08 +03:00
Henry Jameson fc12b63fcc mastoapi login works 2019-05-21 23:35:40 +03:00
HJ 233506f6c1 Merge branch 'fix-pipelines' into 'develop'
Fix pipelines and clean up console output

See merge request pleroma/pleroma-fe!804
2019-05-21 18:27:43 +00:00
Henry Jameson 52475dbf23 Fix pipelines and clean up console output 2019-05-21 21:22:00 +03:00
HJ 0fc7cbfa24 Merge branch 'fetags' into 'develop'
add tags to data and to status component

See merge request pleroma/pleroma-fe!801
2019-05-20 21:02:29 +00:00
HJ b78ad8998d Merge branch 'masto-remains' into 'develop'
Interactions 2.0, removing last bits of qvitter api. Only login/register and change background remains after that

See merge request pleroma/pleroma-fe!792
2019-05-20 20:54:05 +00:00
Moonman 0f824ff311 switch from method to computed property 2019-05-20 15:23:36 -04:00
HJ b436e0dd12 Merge branch 'webpack-4-dart-sass' into 'develop'
Massive update for dependencies

See merge request pleroma/pleroma-fe!734
2019-05-20 18:09:14 +00:00
Shpuld Shpludson 5b8f5eddbf Merge branch 'feature/remove-hypenation' into 'develop'
Remove auto-hyphenation

See merge request pleroma/pleroma-fe!800
2019-05-20 16:43:15 +00:00
marcin mikołajczak 08aa9e2903 Remove fonts section, make buttons change color on hover/press 2019-05-20 14:46:25 +00:00
= fd1d318540 Make mammal theme look more like gargsite
Signed-off-by: = <=>
2019-05-20 15:29:02 +02:00
Moonman f6600a35a5 formatting 2019-05-20 00:15:58 -04:00
Moonman fc9acf8fb6 add tags to data and to status component 2019-05-20 00:03:50 -04:00
Senko-san 229c65959e Remove auto-hyphenation
Auto-hyphenation has terrible heuristics on all browsers, disable it.

Source: https://justmarkup.com/articles/2019-01-28-a-look-at-css-hyphenation-in-2019/
2019-05-20 00:43:35 +01:00
HJ 4ea0db5cb1 Merge branch '540' into 'develop'
Fix wrong mouse pointer hot zone in the post status box

Closes #540

See merge request pleroma/pleroma-fe!795
2019-05-19 19:39:19 +00:00
taehoon 205a9821e6 make staff label visible 2019-05-19 14:28:29 -04:00
taehoon e01ffc67c6 move visibility-tray css in local scope 2019-05-19 14:28:29 -04:00
taehoon 34ffcb028a refactor css 2019-05-19 14:28:29 -04:00
taehoon 9adbc2c17f make only screen name as link 2019-05-19 14:28:29 -04:00
taehoon 9e6a91e755 refactor css for visibility tray 2019-05-19 14:28:29 -04:00
Henry Jameson 15b3651a30 moved setting styles into common to avoid bug with shared styles 2019-05-19 20:42:44 +03:00
HJ facf076d47 Merge branch '542' into 'develop'
Hide three dot menu button if has no items

Closes #542

See merge request pleroma/pleroma-fe!797
2019-05-19 14:38:57 +00:00
taehoon 07d0143bda hide three dot menu button if has no items 2019-05-19 09:16:47 -04:00
Shpuld Shpludson 5bf208f2d1 Merge branch 'fix/mobile-zoom' into 'develop'
Eliminate automatic zooming on mobile

See merge request pleroma/pleroma-fe!799
2019-05-18 16:56:20 +00:00
Mark Felder 0a6858eab8 Eliminate automatic zooming on mobile 2019-05-18 11:00:50 -05:00
kaniini e14a15845c Merge branch 'bugfix/emoji-tooltip' into 'develop'
entity normalizer: add tooltip text to emojis

Closes #544

See merge request pleroma/pleroma-fe!798
2019-05-17 20:15:12 +00:00
William Pitcock 00ad97fcfa entity normalizer: add tooltip text to emojis 2019-05-17 20:10:50 +00:00
HJ 23c4c0c758 Merge branch '541' into 'develop'
Update Admin API urls in accordance with new docs

Closes #541

See merge request pleroma/pleroma-fe!796
2019-05-16 18:30:12 +00:00
taehoon 2457dd9b91 rename for consistency's sake 2019-05-16 14:02:37 -04:00
taehoon b6731bd9af update admin api urls in accordance with new docs 2019-05-16 13:21:14 -04:00
HJ 2be3d5fd5f Merge branch 'fix/line-up-text-format-picker' into 'develop'
Line up rich text format picker with the status form

See merge request pleroma/pleroma-fe!785
2019-05-15 19:53:33 +00:00
Shpuld Shpludson 81278651d9 Line up rich text format picker with the status form 2019-05-15 19:53:33 +00:00
HJ fedcc71676 Merge branch '468-pin-status' into 'develop'
Add ability to pin posts

Closes #468

See merge request pleroma/pleroma-fe!770
2019-05-15 18:26:09 +00:00
Henry Jameson aa24ac7ea6 fix lint 2019-05-15 20:49:46 +03:00
Henry Jameson 7976d118ca Cleanup, little documentation, localization 2019-05-15 20:44:35 +03:00
taehoon 2ce0186327 update api service functions 2019-05-15 12:04:26 -04:00
taehoon daba688f46 remove needless importing 2019-05-15 12:04:26 -04:00
taehoon f68653d0dd show pinned state only in the user timeline 2019-05-15 12:04:26 -04:00
taehoon 110c9d3b26 improve performance by caching pinned status ids into user object 2019-05-15 12:04:26 -04:00
taehoon 87de130ee5 apply status normalizer 2019-05-15 12:04:26 -04:00
taehoon 98358d30bb update font 2019-05-15 12:04:26 -04:00
taehoon 2af088969a improve error handling logic 2019-05-15 12:04:26 -04:00
taehoon 12f8269f01 make sure to have rights property of user object 2019-05-15 12:04:26 -04:00
taehoon 1747cd8771 use text color instead 2019-05-15 12:04:26 -04:00
taehoon 19e79895bb revert unnecessary changes 2019-05-15 12:04:26 -04:00
taehoon beaf512573 add translation 2019-05-15 12:04:26 -04:00
taehoon d76bd0044f fix typo 2019-05-15 12:04:26 -04:00
taehoon 32be0e15d1 use pinned property from status directly 2019-05-15 12:04:26 -04:00
taehoon f8186bfc74 show immediately pinned statuses 2019-05-15 12:04:26 -04:00
taehoon a601337a20 clean up 2019-05-15 12:04:26 -04:00
taehoon 93e9bc019e clean up fetchPinnedStatuses api service 2019-05-15 12:04:26 -04:00
taehoon 8308315038 revert removeStatus changes 2019-05-15 12:04:26 -04:00
taehoon 1229622fed refactor error handling of pinStatus 2019-05-15 12:04:25 -04:00
taehoon ce1d19136d refactor pin/unpin status logic 2019-05-15 12:04:25 -04:00
taehoon e8abe1273b filter pinned statuses based on pinned entity instead of a separate user entity 2019-05-15 12:04:25 -04:00
taehoon cd0a7afa06 remove pinned timeline, instead, use simple entity of user object 2019-05-15 12:04:25 -04:00
taehoon 9e22d6212a revert pinned timeline polling logic 2019-05-15 12:04:25 -04:00
dave 8095ce8f62 #468 - hide status menu after action button is clicked 2019-05-15 12:04:25 -04:00
dave 075ddc34f1 #468 - shwo pin button for valid statuses (public & unlisted) 2019-05-15 12:04:25 -04:00
dave 9fc997500e #468 - add extra buttons for status actions 2019-05-15 12:04:25 -04:00
dave 80ef855a63 #468 - add ellipsis font icon 2019-05-15 12:04:25 -04:00
dave 006bf1ce63 #468 - fix plus button size issue, use scss variable properly 2019-05-15 12:04:25 -04:00
dave e6268c492e #468 - clean up 2019-05-15 12:04:25 -04:00
dave 5ab0e71500 #468 - show pin status API error 2019-05-15 12:04:24 -04:00
dave df207593e9 #468 - update pinned status after actions(remove, add) 2019-05-15 12:04:24 -04:00
dave f1ff48ffd6 #468 - remove unpinned status from timeline 2019-05-15 12:04:24 -04:00
dave 2c89d49a3d #468 - show pinned timeline and add pinned label to the status 2019-05-15 12:04:24 -04:00
dave e28b19645a #468 - show pin for own statuses only 2019-05-15 12:04:24 -04:00
dave 1aa0e8d7e0 #468 - pin/unpin status 2019-05-15 12:04:24 -04:00
dave b491e6acbe #468 - add pin icon 2019-05-15 12:04:24 -04:00
dave affbe8700e #468 - integrate endpoints 2019-05-15 12:04:24 -04:00
HJ 9eac355851 Merge branch '539' into 'develop'
Show post reply button and count when logged out as well

Closes #539

See merge request pleroma/pleroma-fe!793
2019-05-15 15:55:17 +00:00
tarteka bacbfc1154 Update es.json 2019-05-15 09:16:49 +00:00
taehoon 5e0235fa63 make reply icon not hoverable if disabled 2019-05-14 22:45:57 -04:00
taehoon 731ad0a48b show reply button and count when logged out as well 2019-05-14 22:44:56 -04:00
Henry Jameson 543604fd2d removed unused masto api, added initial version of interactions timeline 2019-05-14 22:48:44 +03:00
Henry Jameson 04fa2aefb3 get rid of reply-left, we decided it should go long time ago 2019-05-14 19:49:03 +03:00
Henry Jameson addeb85220 fix prod build 2019-05-13 21:54:25 +03:00
Henry Jameson 750dca4a10 Merge remote-tracking branch 'upstream/develop' into webpack-4-dart-sass
* upstream/develop: (116 commits)
  Fix small mistake in Polish translation
  link interaction avatars to the user profile
  Use more clear explanation in the scope notice, make sure the hide button doesn't overlap with text in notice.
  use backendInteractor
  refactor api service functions using new helper
  clean up
  update favorite number earlier
  update status interaction upon retweet action response
  sync up favoritedBy with favorite/unfavorite action
  do not regenerate status object
  reduce needless calculation
  Move scope visibility notice to the status form, make it dismissible
  Revert "eliminate expandable prop in favor of inConversation"
  status attention doesn’t have relationship entities
  make it short
  fix wrong inlineExpanded
  expanded is always false, eliminate it
  eliminate expandable prop in favor of inConversation
  fix conversationId comparision bug using integer format
  Display additional scope description above the status form for mobile users.
  ...
2019-05-13 20:38:54 +03:00
HJ 2322610b62 Merge branch 'patch-3' into 'develop'
Fix small mistake in Polish translation

See merge request pleroma/pleroma-fe!790
2019-05-10 07:49:35 +00:00
Marcin Mikołajczak caf9e627a7 Fix small mistake in Polish translation 2019-05-10 06:52:01 +00:00
HJ cd67b1f496 Merge branch '527' into 'develop'
Fix "Liking/reprööting posts while post is highlighted in conversation fails to update the liked/reprööted status"

Closes #527

See merge request pleroma/pleroma-fe!787
2019-05-09 17:17:26 +00:00
HJ 177e53cf6a Merge branch 'mobile-scope' into 'develop'
Display additional scope description above the status form for mobile users.

Closes #505

See merge request pleroma/pleroma-fe!767
2019-05-09 17:13:50 +00:00
HJ d5d7658418 Merge branch '530' into 'develop'
Link interaction avatars to the user profile

Closes #530

See merge request pleroma/pleroma-fe!788
2019-05-08 19:40:08 +00:00
taehoon 31e14cd45d link interaction avatars to the user profile 2019-05-08 12:04:33 -04:00
eugenijm a89010843d Use more clear explanation in the scope notice, make sure the hide button doesn't overlap with text in notice. 2019-05-08 16:50:39 +03:00
taehoon 7d60ab322e use backendInteractor 2019-05-07 23:36:35 -04:00
taehoon 26131266a9 refactor api service functions using new helper 2019-05-07 23:27:22 -04:00
taehoon a54cf47ba5 clean up 2019-05-07 23:21:19 -04:00
taehoon 28c2a700e1 update favorite number earlier 2019-05-07 23:19:46 -04:00
taehoon ff3a7e8b5b update status interaction upon retweet action response 2019-05-07 23:17:52 -04:00
taehoon f75e40e462 sync up favoritedBy with favorite/unfavorite action 2019-05-07 16:43:54 -04:00
taehoon 78a4ab98af do not regenerate status object 2019-05-07 16:20:24 -04:00
taehoon 9a9d66dca1 reduce needless calculation 2019-05-07 15:54:49 -04:00
HJ 157d4e601e Merge branch 'fix/floating-button' into 'develop'
Mobile Post button fix

Closes #506

See merge request pleroma/pleroma-fe!769
2019-05-07 18:40:49 +00:00
Shpuld Shpludson 496ccd0bb3 Merge branch 'patch-2' into 'develop'
Update es.json

See merge request pleroma/pleroma-fe!784
2019-05-07 17:35:28 +00:00
Shpuld Shpludson 58ef6258d6 Merge branch '515' into 'develop'
Fix broken filtering for replies in the timeline

Closes #515

See merge request pleroma/pleroma-fe!786
2019-05-07 17:33:56 +00:00
eugenijm 4af343374a Move scope visibility notice to the status form, make it dismissible 2019-05-07 19:13:45 +03:00
taehoon 917e82e8ee Revert "eliminate expandable prop in favor of inConversation"
This reverts commit 1455e1f9d5.
2019-05-06 21:36:55 -04:00
taehoon 134b1894d6 status attention doesn’t have relationship entities 2019-05-06 16:41:12 -04:00
taehoon 44a18eb838 make it short 2019-05-06 16:17:29 -04:00
taehoon 1a3799bfac fix wrong inlineExpanded 2019-05-06 16:16:43 -04:00
taehoon 3adfbc0357 expanded is always false, eliminate it 2019-05-06 15:30:36 -04:00
taehoon 1455e1f9d5 eliminate expandable prop in favor of inConversation 2019-05-06 15:29:24 -04:00
Shpuld Shpludson 081f9a926a Merge branch '519' into 'develop'
Fix conversationId comparison bug using integer format

Closes #519

See merge request pleroma/pleroma-fe!781
2019-05-06 17:33:15 +00:00
taehoon a27a2f78ac fix conversationId comparision bug using integer format 2019-05-06 13:24:11 -04:00
Shpuld Shpludson 01552d0b45 Merge branch '520' into 'develop'
Fix Tweet input box wiped bug when window's width shrunk

Closes #520

See merge request pleroma/pleroma-fe!783
2019-05-06 17:13:47 +00:00
eugenijm befaa477a3 Display additional scope description above the status form for mobile users. 2019-05-06 18:10:58 +03:00
tarteka bfd25a5c3f Update es.json 2019-05-06 08:38:24 +00:00
taehoon 489927bdc9 toggle showing new status form instead of toggle mouting 2019-05-05 23:00:45 -04:00
Shpuld Shpludson 4819009d21 Merge branch '523' into 'develop'
Make sure media modal to be on top of reporting modal

Closes #523

See merge request pleroma/pleroma-fe!782
2019-05-05 18:32:50 +00:00
taehoon bc41a7b305 make sure media modal to be above reporting modal 2019-05-05 13:48:25 -04:00
HJ 8e1c5841e9 Merge branch '441-reporting' into 'develop'
Reporting

Closes #441

See merge request pleroma/pleroma-fe!695
2019-05-04 13:59:27 +00:00
taehoon 9787d99672 update api services 2019-05-03 11:40:06 -04:00
taehoon 220a7e89d5 use native scrollbar 2019-05-03 11:40:06 -04:00
taehoon abad528dd4 refactor using List component 2019-05-03 11:40:06 -04:00
taehoon 8561bf6612 remove transition css 2019-05-03 11:40:06 -04:00
taehoon 19a0476985 update api endpoint url 2019-05-03 11:40:06 -04:00
taehoon ddc7c870f4 rewrite checkbox component 2019-05-03 11:40:06 -04:00
taehoon 58a420f2b3 fix panel title overflow issue in mobile 2019-05-03 11:40:06 -04:00
taehoon 0bb8247822 fix double scrollbar display bug in mobile 2019-05-03 11:40:06 -04:00
taehoon e97f8a4728 prevent parent scroll 2019-05-03 11:40:06 -04:00
taehoon 6b1e305a18 use custom scrollbar 2019-05-03 11:40:06 -04:00
taehoon 01cc7e4480 modal style improvements 2019-05-03 11:40:06 -04:00
taehoon 2e6eab51b8 Update promisedRequest helper to support json payload 2019-05-03 11:40:06 -04:00
taehoon f364068e10 Improve mobile layout 2019-05-03 11:40:06 -04:00
taehoon 91502a25a4 Add a css class to the checkbox indicator 2019-05-03 11:40:06 -04:00
taehoon cf72ebb407 update copy 2019-05-03 11:40:05 -04:00
taehoon 5d0bae5569 update generic error message 2019-05-03 11:40:05 -04:00
taehoon d115d98a1b add translations 2019-05-03 11:40:05 -04:00
taehoon 471085f0f3 add error message 2019-05-03 11:40:05 -04:00
taehoon dfc56dfee2 reset modal state if api request is completed 2019-05-03 11:40:05 -04:00
taehoon 1b07c6ae4f add processing state and close modal after api request is completed 2019-05-03 11:40:05 -04:00
taehoon 1878e56c16 reset modal state when userId is changed 2019-05-03 11:40:05 -04:00
taehoon 02d169b92c add promisedRequest helper 2019-05-03 11:40:05 -04:00
taehoon cea6ea42f0 add api service function 2019-05-03 11:40:05 -04:00
taehoon 2cda9010df add user reporting modal 2019-05-03 11:40:05 -04:00
Shpuld Shpludson 0438031da4 Merge branch 'develop' into 'develop'
[i18n]Update oc.json

See merge request pleroma/pleroma-fe!777
2019-05-03 14:57:04 +00:00
Shpuld Shpludson 513613a4b2 Merge branch 'patch-2' into 'develop'
Update es.json

See merge request pleroma/pleroma-fe!779
2019-05-03 14:56:45 +00:00
Shpuld Shpludson b47820905c Merge branch '516-autoload' into 'develop'
Autoload older notifications when scrolled to the bottom

Closes #516

See merge request pleroma/pleroma-fe!780
2019-05-03 14:47:54 +00:00
taehoon 6ae3c1cfcf autoload older notifications when scrolled to the bottom 2019-05-03 07:52:22 -04:00
tarteka 09253420a2 Update es.json 2019-05-03 00:22:14 +00:00
Shpuld Shpludson b4122c1003 Merge branch '502-notification' into 'develop'
Fix notifications div scrolling issue on mobile

Closes #502

See merge request pleroma/pleroma-fe!778
2019-05-02 16:19:56 +00:00
taehoon f8ae631d8c fix notifications div scrolling issue on mobile 2019-05-02 08:21:02 -04:00
HJ 2d07f26dd7 Merge branch 'feat/title-alt-for-avatars' into 'develop'
#513 Title/alt for avatars

See merge request pleroma/pleroma-fe!776
2019-05-01 20:30:40 +00:00
Exilat b98bab52a9 Update oc.json 2019-05-01 16:40:40 +00:00
shpuld c44c048356 add title and alt for avatars, fix console errors in avatarlist 2019-05-01 17:33:56 +03:00
HJ a954f56e34 Merge branch 'brendenbice1222/pleroma-fe-issues/pleroma-fe-202-show-boosted-users' into 'develop'
Show favoriting and repeating users in hilighted status

See merge request pleroma/pleroma-fe!768
2019-04-30 17:39:33 +00:00
Shpuld Shpludson b1bd5bd08e Merge branch 'develop' into 'brendenbice1222/pleroma-fe-issues/pleroma-fe-202-show-boosted-users'
# Conflicts:
#   src/services/api/api.service.js
2019-04-30 15:11:30 +00:00
HJ 0f7f685c5e Merge branch '437-user-profile-settings' into 'develop'
Transition to MastoAPI: user profile settings

Closes #437

See merge request pleroma/pleroma-fe!682
2019-04-30 06:05:52 +00:00
eugenijm b18fea8508 Debounce floating post button autohide 2019-04-29 22:53:30 +03:00
shpuld da08388d6a filter outside of component 2019-04-29 22:36:39 +03:00
eugenijm ae1496cfb4 Make floating post button configurable 2019-04-29 21:32:29 +03:00
HJ d94fdd0617 Merge branch '220-import-export-blocks-mutes' into 'develop'
Allow import/export of blocks

See merge request pleroma/pleroma-fe!717
2019-04-29 18:15:58 +00:00
HJ 6d1d09bcc0 Merge branch '509' into 'develop'
Show ellipsis for long user name and screen name

Closes #509

See merge request pleroma/pleroma-fe!775
2019-04-29 18:11:07 +00:00
taehoon 5b16e36828 remove & 2019-04-29 13:57:44 -04:00
taehoon a793835566 add a comment 2019-04-29 13:53:21 -04:00
taehoon b1f8221a0a show ellipsis for long user name and screen name 2019-04-29 13:27:10 -04:00
Henry Jameson 1387589ac9 fixed build speed 2019-04-28 22:03:03 +03:00
Henry Jameson 3e68514981 fix tests 2019-04-28 20:46:01 +03:00
Henry Jameson 75bc508fae attempt 2 2019-04-28 20:30:26 +03:00
taehoon 3665c86d70 use default_scope parameter 2019-04-27 21:51:17 -04:00
taehoon 904a64de89 use json content type 2019-04-27 14:20:32 -04:00
taehoon 2c4af6693a clean up 2019-04-27 14:04:30 -04:00
taehoon ab19669bf1 refactoring 2019-04-27 08:31:06 -04:00
taehoon 95bc2d727b add “export blocks” feature 2019-04-27 08:31:06 -04:00
taehoon 13abe64f87 fix wrong function binding 2019-04-27 08:31:06 -04:00
taehoon 08eaf9bd33 make reusable Exporter component 2019-04-27 08:31:06 -04:00
taehoon 0ab2f9dfa5 add “block import” feature 2019-04-27 08:31:06 -04:00
taehoon 6ea4154084 change api function name 2019-04-27 08:31:06 -04:00
taehoon 6d0e98a1c2 make Importer component reusable 2019-04-27 08:31:06 -04:00
taehoon 18bb209ace add uploading icon css 2019-04-27 08:31:06 -04:00
taehoon 903bce40c3 move formData generating logic to api.service 2019-04-27 08:31:06 -04:00
taehoon 562120ae48 split out follow’s importer as a separate component 2019-04-27 08:31:06 -04:00
taehoon ac0b45fa14 Update avatar uploading 2019-04-27 08:30:08 -04:00
taehoon e14720419f Switch to mastoapi for updating user profile 2019-04-27 08:30:08 -04:00
taehoon 909d11825d Switch to mastoapi for updating banner 2019-04-27 08:30:08 -04:00
taehoon 808e1ac11c Switch to mastoapi for updating avatar
# Conflicts:
#	src/services/api/api.service.js
2019-04-27 08:30:08 -04:00
Henry Jameson e0247e21f6 Merge remote-tracking branch 'upstream/develop' into webpack-4-dart-sass
* upstream/develop: (126 commits)
  entity normalizer: hook up in_reply_to_account_acct
  add BBCode strings
  fix follow button not updating bug in follow-card
  refer searched user objects from the global user rep
  set max-width of textarea in settings page
  Remove space in the timeline setting copy
  user_card.vue: Fix .emoji to apply to img
  Update oc.json
  Update oc.json
  Update oc.json
  Update oc.json
  replace pencil with wrench icon
  rebuild fontello with wrench icon added
  fetch all friends using pagination
  stop fetching user relationship when user is unauthorized
  Revert "recover border between basic-user-card using list component"
  remove extra spacing
  code readability
  fix typos
  clean up
  ...
2019-04-27 12:26:17 +03:00
HJ 9e2fa50b74 Merge branch 'bugfix/in-reply-to-account-acct' into 'develop'
entity normalizer: hook up in_reply_to_account_acct

See merge request pleroma/pleroma-fe!773
2019-04-27 07:19:16 +00:00
William Pitcock f4420cbf9f entity normalizer: hook up in_reply_to_account_acct 2019-04-27 04:52:11 +00:00
kaniini 8575f65852 Merge branch 'strings/bbcode' into 'develop'
add BBCode strings

See merge request pleroma/pleroma-fe!772
2019-04-26 22:52:27 +00:00
William Pitcock 55823b8d67 add BBCode strings 2019-04-26 22:48:21 +00:00
HJ e351f8630c Merge branch '492' into 'develop'
Fix Follow/Mute/Block not functional issue in the user search page

Closes #492

See merge request pleroma/pleroma-fe!754
2019-04-25 12:32:29 +00:00
Henry Jameson 2b5cf61a8f firefox 2019-04-24 21:53:51 +03:00
shpuld 8af8f719e4 fix i18n 2019-04-22 21:37:27 +03:00
shpuld 3e23b34168 fix overflow behavior 2019-04-22 21:07:29 +03:00
taehoon 445b54c553 fix follow button not updating bug in follow-card 2019-04-22 11:17:01 -04:00
taehoon f2f3fa81d8 refer searched user objects from the global user rep 2019-04-22 11:17:01 -04:00
shpuld d417945427 Merge branch 'develop' into brendenbice1222/pleroma-fe-issues/pleroma-fe-202-show-boosted-users 2019-04-22 17:24:35 +03:00
Shpuld Shpludson c8f967d5c0 Merge branch '500' into 'develop'
Set max-width of textarea in settings page

Closes #500

See merge request pleroma/pleroma-fe!761
2019-04-22 14:00:09 +00:00
Shpuld Shpludson 4b173b5182 Merge branch '487' into 'develop'
Fix broken Follow Export

Closes #487

See merge request pleroma/pleroma-fe!762
2019-04-22 13:59:12 +00:00
Shpuld Shpludson ffecbc2e79 Merge branch 'develop' into 'develop'
[i18n] Update for Occitan language

See merge request pleroma/pleroma-fe!765
2019-04-22 13:20:13 +00:00
Shpuld Shpludson 98742979c8 Merge branch '501' into 'develop'
Remove space in the timeline setting copy

Closes #501

See merge request pleroma/pleroma-fe!763
2019-04-22 13:15:07 +00:00
Shpuld Shpludson 9183c9e845 Merge branch 'change-pencil-to-wrentch' into 'develop'
Change pencil icon to wrentch

See merge request pleroma/pleroma-fe!764
2019-04-22 13:11:14 +00:00
Shpuld Shpludson b7c16ad68e Merge branch 'bugfix/user-card-emojis-2' into 'develop'
user_card.vue: Fix .emoji to apply to img

See merge request pleroma/pleroma-fe!766
2019-04-22 13:06:15 +00:00
taehoon f7baa6e190 set max-width of textarea in settings page 2019-04-21 14:06:32 -04:00
taehoon aefd4551a3 Remove space in the timeline setting copy 2019-04-21 14:06:10 -04:00
Haelwenn (lanodan) Monnier 14d506154e user_card.vue: Fix .emoji to apply to img 2019-04-20 21:12:56 +02:00
Exilat ed9aa8df76 Update oc.json 2019-04-20 14:44:43 +00:00
Exilat 213891ac71 Update oc.json 2019-04-20 14:38:04 +00:00
Exilat 69468c7c41 Update oc.json 2019-04-20 14:35:14 +00:00
Exilat 44f18caf4d Update oc.json 2019-04-20 14:29:04 +00:00
Brenden Bice 6aee2ed63f replace pencil with wrench icon
# Conflicts:
#	src/components/user_card/user_card.vue
2019-04-19 13:24:35 -04:00
Brenden Bice d6be4fd921 rebuild fontello with wrench icon added
# Conflicts:
#	static/font/css/fontello-codes.css
#	static/font/css/fontello-embedded.css
#	static/font/css/fontello-ie7-codes.css
#	static/font/css/fontello-ie7.css
#	static/font/css/fontello.css
#	static/font/demo.html
#	static/font/font/fontello.eot
#	static/font/font/fontello.svg
#	static/font/font/fontello.ttf
#	static/font/font/fontello.woff
#	static/font/font/fontello.woff2
2019-04-19 13:20:02 -04:00
taehoon 3565b18712 fetch all friends using pagination 2019-04-19 00:27:06 -04:00
HJ 61d04b8823 Merge branch '497' into 'develop'
Stop fetching user relationship when user is unauthorized

Closes #497

See merge request pleroma/pleroma-fe!759
2019-04-18 06:16:36 +00:00
taehoon 992c8e1f77 stop fetching user relationship when user is unauthorized 2019-04-17 22:47:56 -04:00
Shpuld Shpludson ed0f10e9ee Merge branch '227-bulk-delete' into 'develop'
Add "bulk mute/unmute/block/unblock" feature

See merge request pleroma/pleroma-fe!733
2019-04-17 15:43:05 +00:00
taehoon de945e5f88 Revert "recover border between basic-user-card using list component"
This reverts commit 1d56d486f1f679e793e710969ad54cce5fdb1ebc.

# Conflicts:
#	src/components/follow_requests/follow_requests.vue
#	src/components/user_search/user_search.vue
#	src/components/who_to_follow/who_to_follow.vue
2019-04-17 11:32:49 -04:00
taehoon bd88a481c6 remove extra spacing 2019-04-17 11:32:49 -04:00
taehoon e67fecff0a code readability 2019-04-17 11:32:49 -04:00
taehoon bb38a43117 fix typos 2019-04-17 11:32:49 -04:00
taehoon a89236f67c clean up 2019-04-17 11:32:49 -04:00
taehoon 10ecc2c816 make sure to use filtered selected keys 2019-04-17 11:32:49 -04:00
taehoon ecff6acf2d support indeterminate checkbox state 2019-04-17 11:32:49 -04:00
taehoon 3f5e798de7 render span tag only if it has content 2019-04-17 11:32:49 -04:00
taehoon 988849116d update model and props properties 2019-04-17 11:32:49 -04:00
taehoon 8088043a0c import scss variables 2019-04-17 11:32:49 -04:00
taehoon 1144025f30 update checkbox importing path 2019-04-17 11:32:49 -04:00
taehoon 468aec0de1 rewrite checkbox component as non-functional 2019-04-17 11:32:49 -04:00
taehoon ac9ddfb1e2 support i18n 2019-04-17 11:32:49 -04:00
taehoon 7f6bd538f3 ui improvements 2019-04-17 11:32:49 -04:00
taehoon c81bde0c1d clean up 2019-04-17 11:32:49 -04:00
taehoon d3cad54aa3 add bulk mute/unmute buttons and wire up to vuex 2019-04-17 11:32:49 -04:00
taehoon 13c8f10f4b wire up bulk action buttons to vuex 2019-04-17 11:32:49 -04:00
taehoon 7e74a13fcf add a comment 2019-04-17 11:32:49 -04:00
taehoon 1afef1037e show list header only if there are items 2019-04-17 11:32:49 -04:00
taehoon ac62e47c70 pass down empty slot 2019-04-17 11:32:49 -04:00
taehoon 67919f95a6 make border of list header thicker 2019-04-17 11:32:49 -04:00
taehoon 8fa639f252 add bulk action buttons 2019-04-17 11:32:49 -04:00
taehoon 403c7bbe6c add reusable progress-button cmoponent 2019-04-17 11:32:49 -04:00
taehoon fe7766bc61 replace scope attributes by slot-scope 2019-04-17 11:32:49 -04:00
taehoon d4e43e0e26 add border-bottom to the header 2019-04-17 11:32:49 -04:00
taehoon 7a8ffcd79b support header slot 2019-04-17 11:32:49 -04:00
taehoon cf2c411db3 add header to selectable-list component 2019-04-17 11:32:49 -04:00
taehoon 83faa96f1b remove border-bottom of the last list item 2019-04-17 11:32:49 -04:00
taehoon ca26776b4e recover border between basic-user-card using list component 2019-04-17 11:32:49 -04:00
taehoon f066ccd28b show empty slot only if it has content 2019-04-17 11:32:49 -04:00
taehoon b8ec13c8fd let not selectable-list know about getKey prop 2019-04-17 11:32:49 -04:00
taehoon 32035217b8 clean up 2019-04-17 11:32:49 -04:00
taehoon 792ae1697e refactor selectable-list using list component 2019-04-17 11:32:49 -04:00
taehoon d806038ad3 add border-bottom style to the list component as well 2019-04-17 11:32:49 -04:00
taehoon 80d83b46d9 move border-bottom style to the list 2019-04-17 11:32:49 -04:00
taehoon 3a318dc373 add some styling to the selectable-list component 2019-04-17 11:32:48 -04:00
taehoon f6e9f28745 use key properly 2019-04-17 11:32:48 -04:00
taehoon e0b2463750 save selected items to the state 2019-04-17 11:32:48 -04:00
taehoon d9b3f5be47 use SelectableList for blocks/mutes list 2019-04-17 11:32:48 -04:00
taehoon 23b9d1eaa3 rename selectable_row to selectable_list 2019-04-17 11:32:48 -04:00
taehoon 39efe9c522 remove unused yarn package 2019-04-17 11:32:48 -04:00
taehoon 0bf451bb36 remove withList hoc 2019-04-17 11:32:48 -04:00
taehoon 738a3dc02d refactor using List component 2019-04-17 11:32:48 -04:00
taehoon 1cec2b6969 use reusable List vue component instead of withList hoc
Using slot is the preferred way in vue
2019-04-17 11:32:48 -04:00
taehoon 4b292564d8 add SelectableRow component 2019-04-17 11:32:48 -04:00
taehoon a509990937 add checkbox component 2019-04-17 11:32:48 -04:00
shpuld 75a650aa6d update styles and remove unnecessary stuff 2019-04-17 18:28:44 +03:00
Shpuld Shpludson e9f4244b26 Merge branch '494' into 'develop'
Fix UserProfile showing wrong user card in the header

Closes #498 and #494

See merge request pleroma/pleroma-fe!757
2019-04-17 15:27:19 +00:00
taehoon 2e86a4eb4f fix mess in UserProfile component 2019-04-15 16:49:33 -04:00
Shpuld Shpludson 55410c91fa Merge branch '489' into 'develop'
Fix Blocked status inconsistency between Blocks setting tab and Following profile tab

Closes #489

See merge request pleroma/pleroma-fe!751
2019-04-15 19:58:15 +00:00
Shpuld Shpludson efa93d0829 Merge branch '227-quick-add' into 'develop'
Support user searching to mute/block directly in the mutes/blocks tab

See merge request pleroma/pleroma-fe!727
2019-04-15 18:21:52 +00:00
taehoon 329dc833b3 clean up 2019-04-14 23:44:50 -04:00
taehoon d874ca905c support i18n 2019-04-14 23:44:50 -04:00
taehoon 948baba9d3 add muted user to the mutes list in real time 2019-04-14 23:44:50 -04:00
taehoon d58e08cf52 add search to the mutes tab as well 2019-04-14 23:44:50 -04:00
taehoon 0bdb0e5a81 rename Autosuggest component 2019-04-14 23:44:49 -04:00
taehoon 1cf9780e05 make more generic 2019-04-14 23:44:49 -04:00
taehoon fc5f4fba8c make more generic 2019-04-14 23:44:49 -04:00
taehoon 8410add394 make UserAutoSuggest component more generic 2019-04-14 23:44:49 -04:00
taehoon 5c2c222252 add blocked user to the blocked list on real time 2019-04-14 23:44:49 -04:00
taehoon 9184435887 remove blocked one from the results on real time 2019-04-14 23:44:49 -04:00
taehoon 33467880ed improve ui 2019-04-14 23:44:49 -04:00
taehoon 60b07eeaa4 filter out blocked user or me from the results 2019-04-14 23:44:49 -04:00
taehoon 69f9ea987c make blocking functional in the search results 2019-04-14 23:44:49 -04:00
taehoon fd4289e45a improve ui 2019-04-14 23:44:49 -04:00
taehoon 787737c80d hide results on outside click 2019-04-14 23:44:49 -04:00
taehoon 6d3187b449 remove needless dependency 2019-04-14 23:44:49 -04:00
taehoon b2eb43e3c8 rename css classes 2019-04-14 23:44:49 -04:00
taehoon 94e67ff118 rewrite USerAutoSuggest without any dependency 2019-04-14 23:44:49 -04:00
taehoon da5844205c add user autosuggest component 2019-04-14 23:44:49 -04:00
taehoon d05bd31092 setup vue-autosuggest 2019-04-14 23:44:49 -04:00
taehoon e7010d73ac store friends/followers in the global user repository 2019-04-14 23:41:38 -04:00
Shpuld Shpludson 936eb23bdf Merge branch 'issues/pleroma-fe-496-following-follower-error' into 'develop'
Fix error message on no more data fetched

Closes #496

See merge request pleroma/pleroma-fe!756
2019-04-14 19:15:02 +00:00
Henry Jameson fd171da0dc attempt at making it work 2019-04-13 18:28:50 +03:00
Brenden Bice 41845389a9 display no message on empty data fetched from api 2019-04-12 23:12:22 -04:00
Brenden Bice 2ae0507575 remove error message on no more following 2019-04-12 23:09:05 -04:00
HJ fa33e3ec58 Merge branch 'fix-notif-user' into 'develop'
Fix wrong usercard notification

Closes #493

See merge request pleroma/pleroma-fe!755
2019-04-12 07:53:46 +00:00
Henry Jameson 7d01b3d8ba Fix wrong usercard notification 2019-04-12 10:49:22 +03:00
Brenden Bice 8ed4eb8a7f refactor showing favs and repeats logic 2019-04-11 23:26:13 -04:00
Brenden Bice f74a6b4b57 display favs & reblogged users on expanded post in timeline view 2019-04-11 23:26:13 -04:00
Brenden Bice efd20967df display avatars only on highlighted post 2019-04-11 23:26:13 -04:00
Brenden Bice 8cac0dec6f add fadein effect to panel 2019-04-11 23:26:13 -04:00
Brenden Bice 246fab328f remove commented code 2019-04-11 23:26:13 -04:00
Brenden Bice fcea3d62cb display avatars list on highlighted post 2019-04-11 23:26:13 -04:00
Brenden Bice b75d899c7a use transition wrapper component 2019-04-11 23:26:13 -04:00
Brenden Bice 1f4fcf56cd remove custom fadein logic 2019-04-11 23:26:13 -04:00
Brenden Bice e734370e33 use a tag for favs/repeated title 2019-04-11 23:26:13 -04:00
Brenden Bice 2d826abb41 use normal font weight instead of lighter 2019-04-11 23:26:13 -04:00
Brenden Bice 84b6ff9f99 use filter array function 2019-04-11 23:26:13 -04:00
Brenden Bice 7885955344 remove important in the property value 2019-04-11 23:26:13 -04:00
Brenden Bice c1001da860 remove important in css property 2019-04-11 23:26:13 -04:00
Brenden Bice c361b41641 use global fallback variable 2019-04-11 23:26:13 -04:00
Brenden Bice 7dea2d470e remove duplicates from avatars list 2019-04-11 23:26:13 -04:00
Brenden Bice 80ba4f27c8 add hover effect to label 2019-04-11 23:26:13 -04:00
Brenden Bice 94730c9ff7 update design of stats section 2019-04-11 23:26:13 -04:00
Brenden Bice f6847c163c adjust avatar size of avatar list 2019-04-11 23:26:13 -04:00
Brenden Bice db2733b265 set fall back value of border color 2019-04-11 23:26:13 -04:00
Brenden Bice 5be03eb161 handle 0 length of avatars 2019-04-11 23:26:12 -04:00
Brenden Bice a8de515155 use i18n for title text 2019-04-11 23:26:12 -04:00
Brenden Bice 45b69dc312 add avatar list section title 2019-04-11 23:26:12 -04:00
Brenden Bice 87a4cd450c adjust space between avatars 2019-04-11 23:26:12 -04:00
Brenden Bice df622e6ed6 layout avatars side by side 2019-04-11 23:26:12 -04:00
Brenden Bice 0f5ea9c164 apply theming to avatars list 2019-04-11 23:26:12 -04:00
Brenden Bice 8a2f55644c improve code quality 2019-04-11 23:26:12 -04:00
Brenden Bice 8c9bcdc6c1 rename favourite to favorite 2019-04-11 23:26:12 -04:00
Brenden Bice 6511166631 display favs & favorited user in one line 2019-04-11 23:26:12 -04:00
Brenden Bice df68ce4d83 set maximum avatars count to 15 2019-04-11 23:26:12 -04:00
Brenden Bice 0c3a922341 use promisedRequest for api call 2019-04-11 23:26:12 -04:00
Brenden Bice 4ab2ddb03c improve code quality 2019-04-11 23:26:12 -04:00
Brenden Bice d19bee0b66 fetch parent post boost users information 2019-04-11 23:26:12 -04:00
Brenden Bice 44d07ceb25 support mobile size screen 2019-04-11 23:26:12 -04:00
Brenden Bice 0d8eb1d00b set default avatar background 2019-04-11 23:26:12 -04:00
Brenden Bice 2db607f49c limit avatars list to display 10 2019-04-11 23:26:12 -04:00
Brenden Bice ff25966702 display users in stacked avatarlist 2019-04-11 23:26:12 -04:00
Brenden Bice 85457fc917 fetch reblogged users 2019-04-11 23:26:12 -04:00
Brenden Bice 2d339cd3b8 fetch favorited users 2019-04-11 23:26:12 -04:00
HJ fd3811d651 Merge branch '480-replies' into 'develop'
Display replies to statuses in real time

Closes #480

See merge request pleroma/pleroma-fe!737
2019-04-11 18:51:41 +00:00
taehoon ab7a418d80 maintain conversationsObject storage 2019-04-11 12:46:06 -04:00
taehoon fa16d66c52 remove unused importing 2019-04-11 07:56:26 -04:00
taehoon 724602bdc1 get statuses in a conversation from the global repository instead of local state 2019-04-11 07:56:26 -04:00
Henry Jameson 77db9c5c69 karma stuff, still broken tho 2019-04-10 22:36:37 +03:00
Henry Jameson 35fb4ac40e more rules 2019-04-10 22:09:39 +03:00
Henry Jameson b1eea5d830 all the failing rules 2019-04-10 22:04:12 +03:00
Henry Jameson 262760d258 revert unnecessary changes 2019-04-10 21:48:42 +03:00
HJ 8c2efc5a5c Merge branch 'restore-yarnlock' into 'develop'
restore yarnlock

See merge request pleroma/pleroma-fe!749
2019-04-10 18:13:17 +00:00
Henry Jameson ab58b735cd restore yarnlock 2019-04-10 21:09:26 +03:00
HJ 84505e01f5 Merge branch 'issue-436-mastoapi-notifications' into 'develop'
#436: integrate mastoAPI notifications

Closes #436

See merge request pleroma/pleroma-fe!678
2019-04-10 17:28:42 +00:00
dave 76cd01e99b #436 - remove yarn.lock 2019-04-10 13:22:54 -04:00
dave 40e9eebf91 #436 - merge develop 2019-04-10 12:54:33 -04:00
HJ d94a7b6318 Merge branch 'fix-local' into 'develop'
Fix wrong property read in pleroma object

See merge request pleroma/pleroma-fe!747
2019-04-10 12:06:35 +00:00
Henry Jameson 18cb97a2bd Fix wrong local 2019-04-10 15:02:14 +03:00
Shpuld Shpludson ed3aceff5c Merge branch 'mastoapi/update-extension-support' into 'develop'
Update entity normalizer to include more pleroma-specific fields

See merge request pleroma/pleroma-fe!745
2019-04-10 03:14:58 +00:00
Shpuld Shpludson 25601c6873 Merge branch 'fix-emoji-picker' into 'develop'
support new custom emoji format

Closes #484

See merge request pleroma/pleroma-fe!746
2019-04-10 03:14:51 +00:00
Henry Jameson a25aabfa10 support new custom emoji format 2019-04-09 22:54:14 +03:00
dave d498a26af5 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-04-09 15:42:05 -04:00
Henry Jameson dfd89b0bbc revert, it's still missing 2019-04-09 22:28:36 +03:00
Henry Jameson d95fc02810 add support for pleroma-specific fields 2019-04-09 22:26:57 +03:00
Shpuld Shpludson d7cf841dfe Merge branch '486-expand-button' into 'develop'
#486 - remove expand button on conversation page

Closes #486

See merge request pleroma/pleroma-fe!742
2019-04-09 18:52:18 +00:00
jared 5df049ca31 #486 - remove expand button on conversation page 2019-04-09 14:10:51 -04:00
Shpuld Shpludson b3ace226fb Merge branch 'fix/prevent-repeated-fetching' into 'develop'
#485 Prevent repeated fetching

Closes #485

See merge request pleroma/pleroma-fe!738
2019-04-09 18:05:46 +00:00
jasper 011f04c196 fix small bug 2019-04-09 09:19:48 -07:00
jasper b7d7c21617 Add await to login befor redirect to friends timeline 2019-04-09 08:57:41 -07:00
jasper 1570e779b1 Prevent repeated fetching 2019-04-09 08:38:13 -07:00
Shpuld Shpludson 1e9ddcb0da Merge branch 'fix/notification-bugs' into 'develop'
#474 Fix notification bugs

Closes #474

See merge request pleroma/pleroma-fe!728
2019-04-09 15:24:33 +00:00
dave d3218807b4 #436 - merge develop 2019-04-08 21:04:59 -04:00
Shpuld Shpludson 546ced43d9 Merge branch 'moderation-menu' into 'develop'
Moderation menu #310

See merge request pleroma/pleroma-fe!595
2019-04-08 19:01:40 +00:00
dave b0da32fea2 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-04-08 14:29:12 -04:00
jared 7f6f025792 #101 - remove unused code 2019-04-08 13:32:39 -04:00
Shpuld Shpludson 2f725c570b Merge branch 'debug_message' into 'develop'
remove debug message

See merge request pleroma/pleroma-fe!735
2019-04-08 16:49:52 +00:00
Maksim 7259e02a10 remove debug message 2019-04-08 16:49:51 +00:00
jared 885f4c9924 #101 - bind outside click, add emoji to post status form 2019-04-08 12:02:50 -04:00
jared 2ab915b486 #101 - click outside of emoji implementation 2019-04-08 11:50:12 -04:00
jared 820a6543c7 #101 - update caret pos after emoji's inserted 2019-04-08 11:10:26 -04:00
Henry Jameson 6471bec0d9 update node 2019-04-07 20:54:55 +03:00
Henry Jameson 5d2177a048 fix obvious bug 2019-04-07 20:36:55 +03:00
Henry Jameson 9108737d55 Webpack 4, ESLint with Vue, Node-sass, updated dependencies overall. New linting. 2019-04-07 20:33:11 +03:00
jared b4e53576f2 #101 - bind scroll event, highlight relevent section by tabs 2019-04-05 14:51:25 -04:00
jared 093f0b23f7 #101 - merge develop 2019-04-05 14:08:13 -04:00
Shpuld Shpludson 8c7f765dff Merge branch 'issue-469-safe-dm-from-BE' into 'develop'
Issue 469 safe dm from be

Closes #469

See merge request pleroma/pleroma-fe!726
2019-04-04 19:38:03 +00:00
jasper 1c04cd2036 Add space 2019-04-04 09:06:53 -07:00
jasper a1275be4c0 Separate timeline and notification 2019-04-04 09:03:56 -07:00
jasper 7c2b65e9a3 Remove useless codes 2019-04-03 09:08:23 -07:00
jasper ea27483f27 Fix notification bugs 2019-04-03 09:04:46 -07:00
dave fe756fe30d #436 - revert stripe html for notification 2019-04-03 11:17:23 -04:00
dave 6ed26ce65d #436 - notification html to text content 2019-04-03 10:58:39 -04:00
dave 6fa014505c #436 - revert notification silience config 2019-04-03 10:53:11 -04:00
jared 3b78c9c755 #101 - update hard-coded server url 2019-04-02 13:38:07 -04:00
dave 70071b870f #469 - update text copy 2019-04-02 12:46:22 -04:00
dave 67258571c5 #469 - update behavior of safe_dm 2019-04-02 11:19:45 -04:00
jared 79efe0646c merge develop 2019-04-02 10:53:33 -04:00
dave 9d5ed04147 #469 - clean up 2019-04-02 10:28:38 -04:00
dave c9a9b3122d #469 - DM warning text should vary based on BE setting 2019-04-02 10:26:14 -04:00
dave 8b3f037f87 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-04-02 10:07:36 -04:00
eugenijm 6b6878bde0 Added moderation menu 2019-04-01 23:30:06 +03:00
Shpuld Shpludson ac28e8c2f9 Merge branch 'feature/mobile-improvements-3' into 'develop'
Mobile notifications in nav bar, separate mobile navbar to its own component

See merge request pleroma/pleroma-fe!703
2019-04-01 19:57:31 +00:00
Shpuld Shpludson a595febcb8 Merge branch 'develop' into 'develop'
[i18n] Update oc.json for !611 and !691

See merge request pleroma/pleroma-fe!712
2019-04-01 19:49:16 +00:00
shpuld 89c9448532 fix conflict 2019-04-01 22:47:37 +03:00
Shpuld Shpludson ae3b92ce85 Merge branch 'fix/sending-requests-when-loading' into 'develop'
#463 Add Promise.all to send requests when loading

Closes #463

See merge request pleroma/pleroma-fe!723
2019-04-01 19:45:08 +00:00
Shpuld Shpludson 3b38e1b8a7 Merge branch 'patch-2' into 'develop'
Update Polish translation

See merge request pleroma/pleroma-fe!719
2019-04-01 19:44:11 +00:00
shpuld 46de457f50 Merge branch 'develop' into feature/mobile-improvements-3 2019-04-01 22:42:06 +03:00
shpuld 2879495b8a remove window width copypasta 2019-04-01 22:41:34 +03:00
Shpuld Shpludson df366a586d Merge branch '471-timeline-since-id' into 'develop'
#471 - fix timeline fetch with since_id

Closes #471

See merge request pleroma/pleroma-fe!722
2019-04-01 19:33:45 +00:00
HJ 3c2931529e Merge branch 'minimal-scopes-mode' into 'develop'
Initial work on deprecating scopeModesEnabled in favor of minimalScopeMode

See merge request pleroma/pleroma-fe!633
2019-04-01 19:32:37 +00:00
jasper 90939f198b Fix login handling 2019-04-01 12:32:13 -07:00
HJ c17de4b638 Merge branch '470-toggle-subject-content' into 'develop'
Resolve "Handling subjects/spoiler_text/cw not working properly"

Closes #470

See merge request pleroma/pleroma-fe!721
2019-04-01 18:45:24 +00:00
jasper 8fc10dc177 Add Promise.all to send requests when loading 2019-04-01 10:46:30 -07:00
jared d856c2745c #471 - fix timeline fetch with since_id 2019-04-01 13:25:48 -04:00
jared dee9ab7bda #470 - update button text capitalization 2019-04-01 13:04:40 -04:00
jared 487a194f6d #470 - handle cases without subject 2019-04-01 13:01:28 -04:00
jared 6847e70a49 #470 - update i18n 2019-04-01 12:58:23 -04:00
jared 748b1ed167 #470 - fix subject and content toggle issue 2019-04-01 12:54:34 -04:00
dave 6482201dc9 #436 - sync notification & timeline users 2019-04-01 12:22:49 -04:00
dave 0af2f8e4fd #436 - merge develop & resolve conflict 2019-04-01 12:13:11 -04:00
Shpuld Shpludson 6c24ae9b0b Merge branch 'fix/user-card-buttons' into 'develop'
#467 Fix/Muted and Blocked not "pressed" on User Card

Closes #467

See merge request pleroma/pleroma-fe!720
2019-04-01 15:38:14 +00:00
jasper 80277e5571 Remove useless comma 2019-04-01 07:27:12 -07:00
jasper 4a2f676f2e Fix user card in notification 2019-04-01 07:26:13 -07:00
dave 21ea5adc8b #436 - apply patch and clean up 2019-03-31 21:59:18 -04:00
dave b909796683 #436 - update notification 2019-03-31 15:15:16 -04:00
dave 06fd3a9c5f #436 - apply patch 2019-03-31 14:50:34 -04:00
dave ecacc933e7 #436 - keep original naming 2019-03-31 13:47:23 -04:00
dave 0db66e2905 #436 - keep original naming 2019-03-31 13:41:22 -04:00
dave 8efcfc69e8 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-03-31 11:03:43 -04:00
Marcin Mikołajczak 6828c7d74c Update Polish translation 2019-03-31 13:50:51 +00:00
Henry Jameson 6c7cf7d9b5 some initial documentation about configuration 2019-03-31 15:32:11 +03:00
Henry Jameson 0792732822 final touches 2019-03-30 12:42:42 +02:00
Henry Jameson 4dc64438e9 aaaaggghh 2019-03-30 12:41:42 +02:00
Henry Jameson 995daf70b7 fix lint 2019-03-30 12:34:13 +02:00
Henry Jameson 9f4a9bff46 Merge remote-tracking branch 'upstream/develop' into minimal-scopes-mode
* upstream/develop: (173 commits)
  Fix: Change condition
  fix typo
  update store according to retweeted status
  #433 - update sort by for conversation
  display replies_count right after reply icon
  expose replies_count from mastodon api
  Apparently, MastoAPI gives status in ancestors if you try opening a repeat...
  make side drawer use gesture service and fix its animations
  review/remove error hiding
  errata
  review
  #433 - sort conversation for retweets and clean up
  Revert "Merge branch 'revert-987b5162' into 'develop'"
  Revert "Merge branch 'mastoapi/friends-tl' into 'develop'"
  Add await to login action'
  Remove console log
  Fix warnings in user profile routing
  Add tests for gesture service, fix bug with perpendicular directions
  #255 - clean up autocomplete form
  #255 - clean up user settings page with self-closing html tags
  ...
2019-03-30 12:31:50 +02:00
Henry Jameson e89a622005 fix formatting 2019-03-30 12:29:28 +02:00
Henry Jameson beaf4fcf8a fix formatting 2019-03-30 12:26:53 +02:00
Henry Jameson bf927122df Review 2019-03-30 12:25:23 +02:00
jared 2ee8d21366 #101 - update emoji with fontello icon 2019-03-29 16:34:59 -04:00
jared 3172b4e7c1 #101 - insert emoji from emoji selector 2019-03-29 15:56:50 -04:00
jared f9071dac25 #101 - show emojis in groups, clean up 2019-03-29 12:48:52 -04:00
jared 2c4e80aab3 #101 - add emoji selector basic mockup 2019-03-29 11:49:32 -04:00
Shpuld Shpludson 0117f6af9f Merge branch 'issues/#465' into 'develop'
update store according to retweeted status

Closes #465

See merge request pleroma/pleroma-fe!713
2019-03-29 15:33:16 +00:00
Shpuld Shpludson e329a362e0 Merge branch 'fix/warnings-in-user-profile' into 'develop'
#461 Fix warnings about user-profile

Closes #461

See merge request pleroma/pleroma-fe!708
2019-03-29 15:32:40 +00:00
dave 783cc00dd0 merge develop & resolve conflict 2019-03-29 10:11:28 -04:00
jasper e6f9b1517b Fix: Change condition 2019-03-28 18:43:03 -07:00
Shpuld Shpludson 25370083b6 Merge branch '255-emoji-input' into 'develop'
#255 - add emoji input component

Closes #255

See merge request pleroma/pleroma-fe!706
2019-03-28 21:09:48 +00:00
shpuld c06bcf3303 add gesture to close notifications drawer 2019-03-28 22:54:45 +02:00
shpuld 31010779f6 Merge branch 'develop' into feature/mobile-improvements-3 2019-03-28 22:25:40 +02:00
Shpuld Shpludson c829b1a5f4 Merge branch 'feat/gesture-service' into 'develop'
Add a gesture service for easier touch gestures

See merge request pleroma/pleroma-fe!714
2019-03-28 20:20:16 +00:00
shpuld 1e2c304f76 fix typo 2019-03-28 22:11:05 +02:00
Shpuld Shpludson ee9aa40001 Merge branch 'issues/#466' into 'develop'
show replies count right after reply icon

Closes #466

See merge request pleroma/pleroma-fe!716
2019-03-28 20:09:59 +00:00
Shpuld Shpludson 7e8c2acc98 Merge branch 'issue-433-status-reply-form' into 'develop'
Issue 433 status reply form

Closes #433

See merge request pleroma/pleroma-fe!674
2019-03-28 20:08:40 +00:00
Brenden Bice 8e4ddcb843 update store according to retweeted status 2019-03-28 13:20:09 -04:00
dave a39fc49e84 #433 - update sort by for conversation 2019-03-28 10:02:33 -04:00
dave e24145e233 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-433-status-reply-form 2019-03-28 09:54:55 -04:00
Brenden Bice 6b5a84e2b3 display replies_count right after reply icon 2019-03-28 03:47:00 -04:00
Brenden Bice 95639fbd63 expose replies_count from mastodon api 2019-03-28 03:46:41 -04:00
HJ e2e3a65c44 Merge branch 'fix/convos-masto' into 'develop'
Apparently, MastoAPI gives status in ancestors if you try opening a repeat...

Closes #460

See merge request pleroma/pleroma-fe!715
2019-03-27 20:55:24 +00:00
Henry Jameson 31a71ee3ee Apparently, MastoAPI gives status in ancestors if you try opening a repeat... 2019-03-27 22:50:19 +02:00
HJ 86696167b7 Merge branch 'issue-457-mastodon-tag-timeline' into 'develop'
#457 - update tag timeline endpoint to MastoAPI

Closes #457

See merge request pleroma/pleroma-fe!707
2019-03-27 20:44:58 +00:00
shpuld 0eff4bd0ac make side drawer use gesture service and fix its animations 2019-03-27 22:44:25 +02:00
dave 30084a1204 merge develop and resolve conflict 2019-03-27 16:41:05 -04:00
HJ aed0943678 Merge branch 'mastoapi/actions' into 'develop'
transition to MastoAPI: Basic user/statuses manipulation

See merge request pleroma/pleroma-fe!669
2019-03-27 20:28:55 +00:00
Henry Jameson 66ab131bd4 Merge remote-tracking branch 'upstream/develop' into mastoapi/actions
* upstream/develop:
  errata
  review
  Revert "Merge branch 'revert-987b5162' into 'develop'"
  Revert "Merge branch 'mastoapi/friends-tl' into 'develop'"
  Add await to login action'
  correctly paginate on MastoAPI
  #442 - update placeholder linebreak
  #442 - clean up Bio placeholder text
  wip support for follower/following, a bit broken and with regression
  switch direct messages to mastoapi
  switch public and TWKN to MastoAPI
  undo this change since BE returns empty object for relationship, add in a separate MR
  updates normalizer for proper user handling and adds support for friends tl via mastoapi
2019-03-27 22:24:38 +02:00
HJ 4d66b9cf45 Merge branch 'mastoapi/followers' into 'develop'
MastoAPI support for followers/friends(following)

See merge request pleroma/pleroma-fe!667
2019-03-27 20:18:44 +00:00
Henry Jameson c2c7e12aad review/remove error hiding 2019-03-27 22:18:43 +02:00
Henry Jameson a5e71d1dd1 Merge remote-tracking branch 'upstream/develop' into mastoapi/followers
* upstream/develop:
  Revert "Merge branch 'revert-987b5162' into 'develop'"
  Revert "Merge branch 'mastoapi/friends-tl' into 'develop'"
  Add await to login action'
  switch direct messages to mastoapi
  switch public and TWKN to MastoAPI
2019-03-27 22:14:26 +02:00
Henry Jameson ff18e339cf Merge remote-tracking branch 'upstream/develop' into mastoapi/followers
* upstream/develop:
  #442 - update placeholder linebreak
  #442 - clean up Bio placeholder text
  undo this change since BE returns empty object for relationship, add in a separate MR
  updates normalizer for proper user handling and adds support for friends tl via mastoapi
2019-03-27 22:12:51 +02:00
Henry Jameson 0a031aae20 errata 2019-03-27 22:04:59 +02:00
Henry Jameson fb2aca06de review 2019-03-27 22:02:46 +02:00
dave 43e97e590c #433 - sort conversation for retweets and clean up 2019-03-27 16:00:54 -04:00
HJ f6e779a084 Merge branch 'masto-api/direct' into 'develop'
switch direct messages to mastoapi

See merge request pleroma/pleroma-fe!649
2019-03-27 19:53:56 +00:00
HJ ea50f55148 Merge branch 'develop' into 'masto-api/direct'
# Conflicts:
#   src/services/api/api.service.js
2019-03-27 19:48:41 +00:00
HJ 3870adf51f Merge branch 'mastoapi/friends-tl' into 'develop'
Mastoapi/friends tl

See merge request pleroma/pleroma-fe!711
2019-03-27 19:40:51 +00:00
Exilat e1e0b8b254 Update oc.json for !611 and !691 2019-03-27 18:46:40 +00:00
dave 0e2931e7de Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-433-status-reply-form 2019-03-27 13:50:51 -04:00
Shpuld Shpludson 85e9e52090 Merge branch 'fix/add-await-to-login-request' into 'develop'
!701 Add await to login action in after_store

See merge request pleroma/pleroma-fe!709
2019-03-27 16:22:31 +00:00
jared 37b33fc615 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into 255-emoji-input 2019-03-27 11:13:06 -04:00
dave 578b412177 #457 - merge develop and resolve conflict 2019-03-27 11:09:30 -04:00
Henry Jameson b3a6bec17b Revert "Merge branch 'revert-987b5162' into 'develop'"
This reverts commit 96753e6a5f, reversing
changes made to 987b5162a7.
2019-03-27 11:17:04 +02:00
HJ e750b2f197 Merge branch 'mastoapi/public-tl' into 'develop'
switch public and TWKN to MastoAPI

See merge request pleroma/pleroma-fe!650
2019-03-27 08:54:57 +00:00
HJ 96753e6a5f Merge branch 'revert-987b5162' into 'develop'
Revert "Merge branch 'mastoapi/friends-tl' into 'develop'"

See merge request pleroma/pleroma-fe!710
2019-03-27 08:51:35 +00:00
HJ 95459ff0bc Revert "Merge branch 'mastoapi/friends-tl' into 'develop'"
This reverts merge request !647
2019-03-27 08:47:54 +00:00
jasper 2d05aef24b Add await to login action' 2019-03-26 14:26:26 -07:00
jasper 26955af60b Remove console log 2019-03-26 13:36:33 -07:00
jasper ab99d5ef95 Fix warnings in user profile routing 2019-03-26 13:35:08 -07:00
shpuld c50e64f8ee Add tests for gesture service, fix bug with perpendicular directions 2019-03-26 22:11:45 +02:00
jared 8fe9101f0b #255 - clean up autocomplete form 2019-03-26 14:53:27 -04:00
jared 6dc2cedab0 #255 - clean up user settings page with self-closing html tags 2019-03-26 13:42:27 -04:00
jared 2927454233 #255 - support textarea and update user settings page 2019-03-26 13:40:37 -04:00
Shpuld Shpludson 987b5162a7 Merge branch 'mastoapi/friends-tl' into 'develop'
Switch friends TL to MastoAPI

See merge request pleroma/pleroma-fe!647
2019-03-26 17:24:37 +00:00
dave 982be05873 #457 - update tag timeline endpoint to MastoAPI 2019-03-26 11:40:34 -04:00
dave 5fd589d5e7 merge develop & resolve conflict 2019-03-26 10:52:46 -04:00
jared 441deb405d Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into 255-emoji-input 2019-03-26 09:38:45 -04:00
jared b97a033839 #255 - add emoji input component 2019-03-25 22:38:15 -04:00
HJ 2f1e690478 Merge branch 'issue-442-placeholder-fix' into 'develop'
#442 - clean up Bio placeholder text

Closes #442

See merge request pleroma/pleroma-fe!689
2019-03-25 22:29:17 +00:00
shpuld e23c19468a somewhat functioning gesture service 2019-03-25 22:44:58 +02:00
dave 467647d5d7 #433 - fix retweet abnormal behavior 2019-03-25 16:09:40 -04:00
HJ 04217fc660 Merge branch 'develop' into 'mastoapi/friends-tl'
# Conflicts:
#   src/services/api/api.service.js
2019-03-25 19:21:48 +00:00
Henry Jameson d766059dee correctly update relationship on follow/unfollow 2019-03-25 21:19:24 +02:00
Henry Jameson 82f077feb9 fixup! Merge remote-tracking branch 'upstream/develop' into mastoapi/actions 2019-03-25 21:12:54 +02:00
Henry Jameson 0ffd43954e Merge remote-tracking branch 'upstream/develop' into mastoapi/actions
* upstream/develop: (87 commits)
  review
  Update attachment normalizer
  Add fallback for attachments uploaded via the other platforms
  Get correct mimetype through entity_normalizer
  Set default parameter
  Switch to mastoapi for posting status and uploading media
  Revert changes
  prevent text pasting if image is pasted
  remove border radius of suggested emojis
  #450 - dispatch login after saved state is loaded
  #448 - fix timeline fetch error when status text is null
  #451 - add class to username span
  No need to fetch mutes on load anymore 🙌
  switch to mastoapi
  switch to mastoapi
  masto api sends muted property now
  No need to fetch user data using old api anymore 🎉
  Switch to mastoapi
  reactivity fixes
  less hackery, more direct usage of mastoapi
  ...
2019-03-25 21:12:15 +02:00
dave c5ec4829a7 #433 - consider page on focused 2019-03-25 15:10:45 -04:00
HJ 3025532ecf Merge branch 'develop' into 'mastoapi/public-tl'
# Conflicts:
#   src/services/api/api.service.js
2019-03-25 19:09:22 +00:00
Henry Jameson 72749834f3 Merge remote-tracking branch 'upstream/develop' into masto-api/direct
* upstream/develop: (40 commits)
  review
  Update attachment normalizer
  Add fallback for attachments uploaded via the other platforms
  Get correct mimetype through entity_normalizer
  Set default parameter
  Switch to mastoapi for posting status and uploading media
  Revert changes
  prevent text pasting if image is pasted
  remove border radius of suggested emojis
  #450 - dispatch login after saved state is loaded
  #448 - fix timeline fetch error when status text is null
  #451 - add class to username span
  No need to fetch mutes on load anymore 🙌
  switch to mastoapi
  switch to mastoapi
  masto api sends muted property now
  No need to fetch user data using old api anymore 🎉
  Switch to mastoapi
  reactivity fixes
  less hackery, more direct usage of mastoapi
  ...
2019-03-25 21:06:58 +02:00
Henry Jameson 968e6c7fe8 correctly paginate on MastoAPI 2019-03-25 21:04:52 +02:00
dave 73dfb00be2 #433 - remove needless nesting/bloating 2019-03-25 14:59:47 -04:00
dave 1a68a9db36 #433 - Fix conversation page highlight, fetch conversation on converation page 2019-03-25 14:55:58 -04:00
dave 6143b1ce0f Resolve merge conflict,
Fix few issues (conversation page highlight, fetch conversation, ...)
2019-03-25 14:47:54 -04:00
Henry Jameson 50960c7cfc Merge remote-tracking branch 'upstream/develop' into mastoapi/followers
* upstream/develop: (87 commits)
  review
  Update attachment normalizer
  Add fallback for attachments uploaded via the other platforms
  Get correct mimetype through entity_normalizer
  Set default parameter
  Switch to mastoapi for posting status and uploading media
  Revert changes
  prevent text pasting if image is pasted
  remove border radius of suggested emojis
  #450 - dispatch login after saved state is loaded
  #448 - fix timeline fetch error when status text is null
  #451 - add class to username span
  No need to fetch mutes on load anymore 🙌
  switch to mastoapi
  switch to mastoapi
  masto api sends muted property now
  No need to fetch user data using old api anymore 🎉
  Switch to mastoapi
  reactivity fixes
  less hackery, more direct usage of mastoapi
  ...
2019-03-25 20:32:12 +02:00
shpuld b13a751926 start creating gesture service 2019-03-25 20:27:44 +02:00
HJ 854d0e8051 Merge branch 'mastoapi/convos' into 'develop'
Fetching convos via MastoAPI

See merge request pleroma/pleroma-fe!662
2019-03-25 18:17:53 +00:00
Henry Jameson cb122e3a99 review 2019-03-25 20:11:06 +02:00
Henry Jameson 3b5fc88989 Merge remote-tracking branch 'upstream/develop' into mastoapi/convos
* upstream/develop: (34 commits)
  Update attachment normalizer
  Add fallback for attachments uploaded via the other platforms
  Get correct mimetype through entity_normalizer
  Set default parameter
  Switch to mastoapi for posting status and uploading media
  Revert changes
  prevent text pasting if image is pasted
  remove border radius of suggested emojis
  #450 - dispatch login after saved state is loaded
  #448 - fix timeline fetch error when status text is null
  #451 - add class to username span
  No need to fetch mutes on load anymore 🙌
  switch to mastoapi
  switch to mastoapi
  masto api sends muted property now
  No need to fetch user data using old api anymore 🎉
  Switch to mastoapi
  Add comment
  Reset statusnet_blocking of all fetched users first while refreshing block list
  Add hideMutedPosts setting and wire up to post-returning endpoints
  ...
2019-03-25 19:54:15 +02:00
Shpuld Shpludson b02085f2ef Merge branch 'issue-450-user-data-populate' into 'develop'
#450 - dispatch login after saved state is loaded

Closes #450

See merge request pleroma/pleroma-fe!701
2019-03-25 16:57:05 +00:00
Shpuld Shpludson 57b82e9236 Merge branch 'file-paste' into 'develop'
#455 - prevent text pasting if image is pasted

Closes #455

See merge request pleroma/pleroma-fe!705
2019-03-25 16:52:25 +00:00
Shpuld Shpludson 182eab051d Merge branch 'develop' into 'develop'
Remove border radius of suggested emojis

See merge request pleroma/pleroma-fe!704
2019-03-25 16:52:01 +00:00
HJ 153ad57007 Merge branch '435-mastoapi-composing-new-post' into 'develop'
Transition to MastoAPI: composing new status and media upload

Closes #435

See merge request pleroma/pleroma-fe!686
2019-03-25 16:42:20 +00:00
taehoon 932652e335 Update attachment normalizer 2019-03-25 12:19:33 -04:00
dave 6a9159b255 #433 - fix broken conversation page 2019-03-25 10:50:09 -04:00
dave 4cec0d589d Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-433-status-reply-form 2019-03-25 10:22:16 -04:00
taehoon 6fdbc182ca Add fallback for attachments uploaded via the other platforms 2019-03-24 21:16:57 -04:00
taehoon 909c315a44 Get correct mimetype through entity_normalizer 2019-03-24 21:16:57 -04:00
taehoon 966add1b29 Set default parameter 2019-03-24 21:16:57 -04:00
taehoon 9802344603 Switch to mastoapi for posting status and uploading media 2019-03-24 21:16:56 -04:00
HJ 01d0531699 Merge branch '227-manage-blocks-mutes' into 'develop'
Transition to MastoAPI: Mute & Block and Add Mutes management tab

See merge request pleroma/pleroma-fe!611
2019-03-24 17:15:21 +00:00
taehoon f03747e841 Revert changes 2019-03-24 13:04:47 -04:00
nik b241539d4d prevent text pasting if image is pasted 2019-03-23 22:45:24 -05:00
nik 05634d222d remove border radius of suggested emojis 2019-03-23 22:26:31 -05:00
shpuld fd12263cac merge develop in 2019-03-23 22:21:57 +02:00
shpuld 85584021fb make notifications close on navigation 2019-03-23 22:03:38 +02:00
Shpuld Shpludson f86a5dc804 Merge branch 'issue-448-status-text-null' into 'develop'
#448 - fix timeline fetch error when status text is null

Closes #448

See merge request pleroma/pleroma-fe!700
2019-03-23 14:17:47 +00:00
Shpuld Shpludson e9b58f1af7 Merge branch 'issue-452-unfollow-button' into 'develop'
#452 - unfollow button issue

Closes #452

See merge request pleroma/pleroma-fe!698
2019-03-23 07:45:42 +00:00
Shpuld Shpludson f3f006c8e3 Merge branch 'issue-451-long-user-name' into 'develop'
#451 - long username on follow/follower tabs

Closes #451

See merge request pleroma/pleroma-fe!697
2019-03-23 07:45:04 +00:00
dave 31d09931c8 #450 - dispatch login after saved state is loaded 2019-03-22 14:04:22 -04:00
dave d70928792d #448 - fix timeline fetch error when status text is null 2019-03-22 13:15:11 -04:00
dave ed4540530b #451 - add class to username span 2019-03-22 10:42:21 -04:00
lambda 277790e462 Merge branch '438-mastoapi-user-search' into 'develop'
Transition to MastoAPI: user search

Closes #438

See merge request pleroma/pleroma-fe!677
2019-03-22 11:16:25 +00:00
taehoon 9fa1bc63b0 No need to fetch mutes on load anymore 🙌 2019-03-21 21:58:02 -04:00
taehoon a64e744c1b switch to mastoapi 2019-03-21 21:53:24 -04:00
taehoon 8702d23a13 switch to mastoapi 2019-03-21 21:44:59 -04:00
taehoon 379e33f6a5 masto api sends muted property now 2019-03-21 21:31:16 -04:00
taehoon 883a84b313 No need to fetch user data using old api anymore 🎉 2019-03-21 21:30:30 -04:00
taehoon af85a3f244 Switch to mastoapi 2019-03-21 21:27:10 -04:00
Henry Jameson e617ed285e reactivity fixes 2019-03-22 00:05:20 +02:00
Henry Jameson 67719e9a23 less hackery, more direct usage of mastoapi 2019-03-21 23:45:18 +02:00
Henry Jameson d6c62fa50f minor UI improvements - keep current behavior of showing originating post initially 2019-03-21 23:27:14 +02:00
Henry Jameson ee94a6732a why did i do that 2019-03-21 22:49:26 +02:00
Henry Jameson 307b4ba698 Merge remote-tracking branch 'upstream/develop' into mastoapi/convos
* upstream/develop: (47 commits)
  #449 - fix auth token fetch issue
  Make select tag use --inputText as text color
  #444 - remote follow clean up
  #444 - show `remote follow` button when logged out
  Add button to save without cropping
  post-merge fixes
  [i18n] Update oc.json
  after store: fix setting postFormats field
  fix user-card avatar falling into permament failed state
  fix flake id users not fetching correctly
  fix console error
  afterStoreSetup: Move log in and theme load to afterStoreSetup.
  afterStoreSetup: Handle 404 cases.
  afterStoreSetup: Emoji and nodeinfo refactor.
  afterStoreSetup: refactor TOS and panel fetching, handle 404s.
  afterStoreSetup: refactor.
  Load persistedStated with async/await.
  whoops
  レインせんぱいにサンキュー
  fix embedded relationship card parsing
  ...
2019-03-21 22:40:20 +02:00
taehoon a0bccbce94 Add comment 2019-03-21 16:39:41 -04:00
taehoon d7919109ec Reset statusnet_blocking of all fetched users first while refreshing block list 2019-03-21 16:39:41 -04:00
taehoon 9857002bf5 Add hideMutedPosts setting and wire up to post-returning endpoints 2019-03-21 16:33:02 -04:00
Henry Jameson fe13b1b75a Merge remote-tracking branch 'upstream/develop' into mastoapi/friends-tl
* upstream/develop: (47 commits)
  #449 - fix auth token fetch issue
  Make select tag use --inputText as text color
  #444 - remote follow clean up
  #444 - show `remote follow` button when logged out
  Add button to save without cropping
  post-merge fixes
  [i18n] Update oc.json
  after store: fix setting postFormats field
  fix user-card avatar falling into permament failed state
  fix flake id users not fetching correctly
  fix console error
  afterStoreSetup: Move log in and theme load to afterStoreSetup.
  afterStoreSetup: Handle 404 cases.
  afterStoreSetup: Emoji and nodeinfo refactor.
  afterStoreSetup: refactor TOS and panel fetching, handle 404s.
  afterStoreSetup: refactor.
  Load persistedStated with async/await.
  whoops
  レインせんぱいにサンキュー
  fix embedded relationship card parsing
  ...
2019-03-21 22:28:29 +02:00
taehoon 300259fd97 Add todo comment 2019-03-21 16:26:15 -04:00
taehoon 333afd2138 Minor code refactoring 2019-03-21 16:26:15 -04:00
taehoon d65422a6a5 Improve fetch error handling using a util 2019-03-21 16:26:13 -04:00
taehoon 9b690209d0 Reset old mutes state after fetching new mutes data 2019-03-21 16:21:28 -04:00
taehoon 302310a653 Remove old muting logic 2019-03-21 16:19:09 -04:00
taehoon a6ce191cbc Update MuteCard ui 2019-03-21 16:19:05 -04:00
taehoon 859ed4f34f Fetct full data of muted users after fetchMutes api call 2019-03-21 16:19:05 -04:00
taehoon f04cbc8875 Add mute/unmute mutations 2019-03-21 16:19:05 -04:00
taehoon 3255950b0e Add mute/unmute featrue and mutes management tab 2019-03-21 16:19:03 -04:00
Henry Jameson faef769b40 Merge remote-tracking branch 'upstream/develop' into masto-api/direct
* upstream/develop: (47 commits)
  #449 - fix auth token fetch issue
  Make select tag use --inputText as text color
  #444 - remote follow clean up
  #444 - show `remote follow` button when logged out
  Add button to save without cropping
  post-merge fixes
  [i18n] Update oc.json
  after store: fix setting postFormats field
  fix user-card avatar falling into permament failed state
  fix flake id users not fetching correctly
  fix console error
  afterStoreSetup: Move log in and theme load to afterStoreSetup.
  afterStoreSetup: Handle 404 cases.
  afterStoreSetup: Emoji and nodeinfo refactor.
  afterStoreSetup: refactor TOS and panel fetching, handle 404s.
  afterStoreSetup: refactor.
  Load persistedStated with async/await.
  whoops
  レインせんぱいにサンキュー
  fix embedded relationship card parsing
  ...
2019-03-21 22:11:02 +02:00
dave 23bae67146 #452 - update button class name 2019-03-21 15:03:54 -04:00
dave 8932c53706 #451 - update styling 2019-03-21 14:58:28 -04:00
dave dfcdf4f32c #452 - unfollow button issue 2019-03-21 13:19:10 -04:00
dave 1c6e5d3688 #451 - long username on follow/follower tabs 2019-03-21 13:06:37 -04:00
Shpuld Shpludson 66e60572bc Merge branch 'issue-449-auto-token-fetch' into 'develop'
#449 - fix auth token fetch issue

Closes #449

See merge request pleroma/pleroma-fe!696
2019-03-21 16:12:33 +00:00
dave db3b48d444 #449 - fix auth token fetch issue 2019-03-21 12:04:57 -04:00
Shpuld Shpludson c2b7aff325 Merge branch 'issue-444-remote-follow' into 'develop'
#444 - show `remote follow` button when logged out

Closes #444

See merge request pleroma/pleroma-fe!692
2019-03-21 15:46:05 +00:00
Shpuld Shpludson 9890e41440 Merge branch 'feature/bypass-avatar-cropper' into 'develop'
#443 Add button to save without cropping

Closes #443

See merge request pleroma/pleroma-fe!691
2019-03-21 15:44:26 +00:00
Shpuld Shpludson 9e17853b2c Merge branch 'patch-2' into 'develop'
[i18n] Update oc.json

See merge request pleroma/pleroma-fe!684
2019-03-21 15:38:19 +00:00
Shpuld Shpludson a284a267ce Merge branch 'develop' into 'develop'
Fixing typos and badly translated strings (Portuguese)

See merge request pleroma/pleroma-fe!676
2019-03-21 15:37:05 +00:00
Shpuld Shpludson 57cd6f8018 Merge branch 'feature/version-info' into 'develop'
Added new tab to display versions of BE/FE

Closes #397

See merge request pleroma/pleroma-fe!671
2019-03-21 15:25:59 +00:00
shpuld f389128e53 make mobile notifs drawer more like an actual drawer, make mobile nav buttons bigger to press, fix alert dot 2019-03-20 22:09:29 +02:00
HJ 0659d2fd3a Merge branch 'patch-1' into 'develop'
Make select tag use --inputText as text color

See merge request pleroma/pleroma-fe!693
2019-03-20 13:12:51 +00:00
Marcin Mikołajczak 4ace0866da Make select tag use --inputText as text color 2019-03-20 11:52:58 +00:00
dave 96c88b334c #444 - remote follow clean up 2019-03-19 14:41:50 -04:00
dave 07b8115a37 #444 - show remote follow button when logged out 2019-03-19 14:36:27 -04:00
jasper 3108722eda Add button to save without cropping 2019-03-18 18:19:42 -07:00
dave 13e727b5ee #436: sync notification with timeline 2019-03-18 14:42:09 -04:00
dave 060d3b0713 #436: implement is_seen logic 2019-03-18 12:30:34 -04:00
dave 55d7bd6d4e Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-03-18 10:37:26 -04:00
dave 5717d97182 #442 - update placeholder linebreak 2019-03-18 10:35:13 -04:00
dave 543cc0d285 #442 - clean up Bio placeholder text 2019-03-17 16:59:08 -04:00
HJ 96f9eab700 Merge branch 'mastoapi/emojis' into 'develop'
MastoAPI: emoji support

See merge request pleroma/pleroma-fe!659
2019-03-17 14:08:01 +00:00
dave 241503346f #436: clean up based on comment 2019-03-17 10:08:01 -04:00
Henry Jameson 4cdfd5fb86 post-merge fixes 2019-03-17 14:41:05 +02:00
Henry Jameson 30c0cafff1 Merge remote-tracking branch 'upstream/develop' into mastoapi/emojis
* upstream/develop: (34 commits)
  after store: fix setting postFormats field
  fix user-card avatar falling into permament failed state
  fix flake id users not fetching correctly
  fix console error
  afterStoreSetup: Move log in and theme load to afterStoreSetup.
  afterStoreSetup: Handle 404 cases.
  afterStoreSetup: Emoji and nodeinfo refactor.
  afterStoreSetup: refactor TOS and panel fetching, handle 404s.
  afterStoreSetup: refactor.
  Load persistedStated with async/await.
  whoops
  レインせんぱいにサンキュー
  fix embedded relationship card parsing
  actually use embedded relationship if it's present
  instead of filtering nulls, let's just not have them in the first place
  #434 - fix plain text issue
  Add floating post-status button on mobile
  Update user settings icon to pencil
  I18n: Update Czech translation
  user_card.vue: Copy over .status-content img styling
  ...
2019-03-17 13:32:56 +02:00
Exilat 7babbce522 [i18n] Update oc.json 2019-03-15 17:23:30 +00:00
dave e5786f32a7 #436: merge develop 2019-03-15 11:28:33 -04:00
taehoon 6e60873a3d Switch to mastoapi for user search 2019-03-15 11:03:11 -04:00
HJ 9364964b01 Merge branch 'mastoapi/user-stuff' into 'develop'
Transition to MastoAPI: user data

See merge request pleroma/pleroma-fe!655
2019-03-15 13:14:41 +00:00
lambda 92eb55c7bc Merge branch 'bugfix/nodeinfo-post-formats' into 'develop'
after store: fix setting postFormats field

See merge request pleroma/pleroma-fe!683
2019-03-15 13:03:35 +00:00
lambda c626f84336 Merge branch 'afterstore-refactor' into 'develop'
afterStoreSetup: Move log in and theme load to afterStoreSetup.

See merge request pleroma/pleroma-fe!680
2019-03-15 13:03:19 +00:00
dave 8ade93bb4d #436: update test 2019-03-14 22:36:11 -04:00
dave 935aae054f #436: add is_local for statuses 2019-03-14 22:07:42 -04:00
HJ ebc6a75d30 Merge branch 'issue-434-plain-text' into 'develop'
#434 - fix plain text issue

Closes #434

See merge request pleroma/pleroma-fe!675
2019-03-14 22:03:33 +00:00
William Pitcock f93d4a3754 after store: fix setting postFormats field 2019-03-14 21:35:45 +00:00
Henry Jameson 71c12fa3a5 fix user-card avatar falling into permament failed state 2019-03-14 23:07:28 +02:00
Henry Jameson 6420c93e98 fix flake id users not fetching correctly 2019-03-14 23:07:28 +02:00
shpuld 0a86d39ba9 remove notifications from sidebar, make notifications appear on login only 2019-03-14 20:40:56 +02:00
dave 97a3f9c0f5 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-436-mastoapi-notifications 2019-03-14 14:24:23 -04:00
Henry Jameson 885a3a77df fix console error 2019-03-14 18:50:51 +02:00
dave 52326e6551 #436: remove clear & dismiss UI updates 2019-03-14 11:57:24 -04:00
shpuld f19284357e make nav bar slide, move mobile post status to mobile nav 2019-03-14 17:46:04 +02:00
dave 06fda27511 #436: update unit testing 2019-03-14 08:06:40 -04:00
dave e5e1d4c643 #436: fix notification order, follow type link issue, duplicate key 2019-03-14 07:55:39 -04:00
Edijs 3c5c09c74f Merge branch 'develop' into feature/version-info 2019-03-13 15:24:09 -07:00
dave 93a2510ede #436: update is_local 2019-03-13 15:43:48 -04:00
dave 78951964fb #436: update entity_normalizer 2019-03-13 15:34:45 -04:00
dave 2f7d890ad2 #436: add dismiss button, disable is_seen part 2019-03-13 14:08:03 -04:00
lain 5318227c37 afterStoreSetup: Move log in and theme load to afterStoreSetup. 2019-03-13 13:29:34 +01:00
lambda 9fd44e4a52 Merge branch 'afterstore-refactor' into 'develop'
Afterstore refactor

See merge request pleroma/pleroma-fe!679
2019-03-13 12:08:28 +00:00
lain 48ac96cfc7 afterStoreSetup: Handle 404 cases. 2019-03-13 12:41:39 +01:00
lain 446785ddce afterStoreSetup: Emoji and nodeinfo refactor. 2019-03-13 12:26:40 +01:00
lain f535ccd925 afterStoreSetup: refactor TOS and panel fetching, handle 404s. 2019-03-13 12:10:57 +01:00
lain c030e62254 afterStoreSetup: refactor. 2019-03-13 11:57:30 +01:00
lain 1387dfb889 Load persistedStated with async/await. 2019-03-13 11:29:45 +01:00
shpuld 7ce8fe9214 merge develop, add mobile nav component 2019-03-12 23:50:54 +02:00
dave cd9a7dd488 #436: integrate mastoAPI notifications 2019-03-12 17:16:57 -04:00
Henry Jameson 644eba87fe whoops 2019-03-12 22:14:41 +02:00
Henry Jameson 27cbe3ca65 レインせんぱいにサンキュー 2019-03-12 22:10:22 +02:00
Henry Jameson ce8b5fcd11 fix embedded relationship card parsing 2019-03-12 21:49:03 +02:00
Henry Jameson b9877a4323 actually use embedded relationship if it's present 2019-03-11 23:45:24 +02:00
Rond 03f1b95252 fixing typos and badly translated strings 2019-03-11 18:26:40 -03:00
Henry Jameson a6a162177b instead of filtering nulls, let's just not have them in the first place 2019-03-11 23:08:09 +02:00
dave 130fb7ae1e #434 - fix plain text issue 2019-03-11 16:48:27 -04:00
Henry Jameson 4efcda1b41 Added some tests 2019-03-11 22:41:08 +02:00
dave 63d7c7bd80 #433: persistency of status form 2019-03-11 16:24:37 -04:00
Shpuld Shpludson 7c26435e66 Merge branch 'develop' into 'master'
Update master with bugfixes (and other changes)

See merge request pleroma/pleroma-fe!673
2019-03-11 18:53:34 +00:00
dave 19015a4ae7 Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma-fe into issue-433-status-reply-form 2019-03-11 13:41:55 -04:00
Shpuld Shpludson f397537642 Merge branch 'feature/mobile-improvements-2' into 'develop'
Add floating post-status button on mobile

See merge request pleroma/pleroma-fe!628
2019-03-11 16:51:37 +00:00
Shpuld Shpludson 4a27c6d8d3 Add floating post-status button on mobile 2019-03-11 16:51:37 +00:00
Shpuld Shpludson bb1a4e11f8 Merge branch '382-update-user-settings-icon' into 'develop'
Update user settings icon to pencil

Closes #382

See merge request pleroma/pleroma-fe!602
2019-03-11 16:48:16 +00:00
taehoon d8e938bb5e Update user settings icon to pencil 2019-03-11 11:52:49 -04:00
dave 4f455eefe5 #433: do not remove the reply dialog 2019-03-11 10:52:28 -04:00
lambda f52a33f711 Merge branch 'develop' into 'develop'
Only connect to chat upon authenticating

Closes #403

See merge request pleroma/pleroma-fe!666
2019-03-11 14:43:40 +00:00
lambda ed3bf6f027 Merge branch 'i18n-cs' into 'develop'
I18n: Update Czech translation

See merge request pleroma/pleroma-fe!651
2019-03-11 14:28:44 +00:00
Lorem Ipsum 3414fce53b I18n: Update Czech translation 2019-03-11 14:28:44 +00:00
HJ 89d684af4e Merge branch 'emoji-limit-profile' into 'develop'
user_card.vue: Set img.emoji to 32×32px

See merge request pleroma/pleroma-fe!665
2019-03-11 09:45:16 +00:00
Haelwenn (lanodan) Monnier d0e78df220 user_card.vue: Copy over .status-content img styling 2019-03-11 05:14:49 +01:00
Edijs 9c60934786 Code refactoring 2019-03-10 18:13:01 -07:00
Edijs 8952761370 Version links to BE/FE 2019-03-10 18:06:51 -07:00
Henry Jameson 06d39b62a8 fixed tests, review fixes, now storing local users with downcase screen name for
better compatibility
2019-03-11 02:17:58 +02:00
Edijs 068c9724e4 Added new tab to display versions of BE/FE 2019-03-10 16:58:12 -07:00
Shpuld Shpludson 151e200983 Merge branch 'fix/timeline-gaps-when-loading-older-after-showing-new' into 'develop'
Fix gaps in timeline when loading older after pressing show new

See merge request pleroma/pleroma-fe!670
2019-03-10 21:11:26 +00:00
shpuld 70d7ed3607 Make minId reset with minVisibleId to prevent gaps when showing new 2019-03-10 22:40:48 +02:00
slice e618c6ffb0 Only connect to chat when authenticating in the first place
To avoid duplication of the connection, the chat socket is destroyed
upon logging out.
2019-03-10 11:25:36 -07:00
Henry Jameson 4a5aef8883 basic user and status actions implemented 2019-03-10 19:15:07 +02:00
Henry Jameson 0b1506a4c0 wip support for follower/following, a bit broken and with regression 2019-03-10 18:05:51 +02:00
Shpuld Shpludson 841648676c Merge branch 'issue-432-dot-key' into 'develop'
#432 - prevent post status form textarea keydown event propagation

Closes #432

See merge request pleroma/pleroma-fe!658
2019-03-10 15:29:44 +00:00
slice a67881b096 Check for websocket token before connecting to chat
Closes #403. Previously, a socket to the chat channel would be opened if
chat is enabled, regardless if the user is logged in or not. This patch
only allows a connection to be opened if a wsToken (websocket token) is
present, which prevents websocket errors from unauthenticated users.
2019-03-10 01:54:26 -08:00
Haelwenn (lanodan) Monnier 07a46f7736 user_card.vue: Set img.emoji to 32×32px
Related to https://git.pleroma.social/pleroma/pleroma/merge_requests/792
2019-03-10 01:56:51 +01:00
Henry Jameson 49b0f0a04a Fetching convos via MastoAPI. Had to change conversation component a bit for
better support, since MastoAPI doesn't have coversation ids
2019-03-09 18:33:49 +02:00
Henry Jameson 489f840d84 fix error 2019-03-09 11:54:11 +02:00
Henry Jameson f3a9200b7c some test fixes, disabled one test for now since logic now is even more async in general 2019-03-09 02:47:20 +02:00
Henry Jameson 47211fb32c emoji adder 2019-03-09 02:23:50 +02:00
Henry Jameson a02a74e9b9 attempt at fixing switching to user TL 2019-03-09 01:51:36 +02:00
Henry Jameson fe624f6114 fix reply-to marker, also whoops console log 2019-03-09 01:34:15 +02:00
Henry Jameson 690c1dcd7a revert some stuff, turns out it's actually breaking. Fixed some local user things 2019-03-09 01:19:56 +02:00
Henry Jameson 4f3a220487 Since BE doesn't support fetching user by screen name over MastoAPI we'll gonna
just fetching it over QvitterAPI real quick :DDDDDDDDD
2019-03-08 22:40:57 +02:00
dave 3468c0fd04 #432 - prevent post status form textarea keydown event propagation 2019-03-08 13:53:46 -05:00
Henry Jameson 853e0bc26f switch to mastoapi for user timeline 2019-03-08 00:50:58 +02:00
Henry Jameson ee49409049 Partially transitioned user data to MastoAPI. Added support for fetching
relationship data. Upgraded code to be more resilient to nulls caused by missing
data in either APIs
2019-03-08 00:35:30 +02:00
Henry Jameson 6e2946f352 switch direct messages to mastoapi 2019-03-07 20:21:07 +02:00
Henry Jameson 8522063b2c switch public and TWKN to MastoAPI 2019-03-07 20:16:35 +02:00
Henry Jameson c038d0c12a undo this change since BE returns empty object for relationship, add in a
separate MR
2019-03-07 20:04:29 +02:00
Henry Jameson 2e59ab738b updates normalizer for proper user handling and adds support for friends tl via mastoapi 2019-03-07 19:49:41 +02:00
Shpuld Shpludson 09736691ea Merge branch '420-redo-user-card-content' into 'develop'
Re-do UserCardContent Component CSS

Closes #420

See merge request pleroma/pleroma-fe!642
2019-03-07 16:38:45 +00:00
Shpuld Shpludson 82cd1252b5 Merge branch '415-timeline' into 'develop'
Fix timeline updating bug when scrolled down

Closes #415

See merge request pleroma/pleroma-fe!644
2019-03-07 16:34:43 +00:00
Shpuld Shpludson 09b0f6dd87 Merge branch 'issue-392-other-user-stale-data' into 'develop'
#392: stale data served to new user account

Closes #392

See merge request pleroma/pleroma-fe!625
2019-03-07 16:33:22 +00:00
Shpuld Shpludson e3b3ef156b Merge branch 'fix/remove-posts-immediately-by-blocking-someone' into 'develop'
#330 Remove posts immediately by blocking someone

See merge request pleroma/pleroma-fe!589
2019-03-07 16:07:01 +00:00
Shpuld Shpludson 2baff88e3f Merge branch 'fix/gallery-css' into 'develop'
Fix gallery style - move hide button to top right

Closes #335

See merge request pleroma/pleroma-fe!579
2019-03-07 16:03:32 +00:00
Shpuld Shpludson bf1fa52e5e Merge branch 'fix/post-content-type' into 'develop'
#327: Load post status content type from instance config

Closes #327

See merge request pleroma/pleroma-fe!641
2019-03-07 16:03:06 +00:00
Shpuld Shpludson 7e9c8c3d21 Merge branch 'develop' into 'master'
Update master

See merge request pleroma/pleroma-fe!646
2019-03-07 15:11:11 +00:00
Shpuld Shpludson c44f0a9bde Merge branch 'fix/fetch-activities-by-last-id' into 'develop'
#406 Fetch activities by last id

See merge request pleroma/pleroma-fe!621
2019-03-07 05:06:43 +00:00
Edijs 292cdfb24b Merge content types translations 2019-03-06 20:13:04 -08:00
Shpuld Shpludson 423e1b3b12 Merge branch 'i18n-cs' into 'develop'
I18n: Add Czech translation

See merge request pleroma/pleroma-fe!627
2019-03-06 20:23:46 +00:00
Shpuld Shpludson de46ede8fd Merge branch 'issue-346-auto-post' into 'develop'
#346: Hyperlink is not included

Closes #346

See merge request pleroma/pleroma-fe!626
2019-03-06 20:22:12 +00:00
taehoon aca3b37134 Use a cross browser safe solution to get scroll top 2019-03-06 12:10:29 -05:00
Shpuld Shpludson 830f3762ef Merge branch 'emoji-limit' into 'develop'
compatibility with upcoming changes

See merge request pleroma/pleroma-fe!643
2019-03-06 05:11:07 +00:00
taehoon 5f51fe897d Revert modifier class notation 2019-03-05 21:52:04 -05:00
taehoon 37acb51df4 Update classname 2019-03-05 21:48:07 -05:00
taehoon 7cb13df8ad Update tests 2019-03-05 14:13:22 -05:00
taehoon 7bceabb5bd Rename UserCardContent to UserCard 2019-03-05 14:01:49 -05:00
taehoon baf603a506 Update block class name of BasicUserCard component 2019-03-05 13:56:40 -05:00
taehoon 43c52cb950 Update modifier class notation 2019-03-05 13:25:31 -05:00
Henry Jameson 68b2d9ef56 compatibility with upcoming changes 2019-03-05 20:15:18 +02:00
taehoon e0a66b989d Re-do UserCardContent css 2019-03-05 10:46:03 -05:00
Shpuld Shpludson 216073eb58 Merge branch 'fix/gallery-and-attachment-spacing' into 'develop'
Unify spacing between gallery/link preview/attachment components

See merge request pleroma/pleroma-fe!638
2019-03-05 14:40:20 +00:00
Shpuld Shpludson 8cda230fba Merge branch '419-avatar-cropper-png' into 'develop'
Generate cropped avatar image in the original file type

Closes #419

See merge request pleroma/pleroma-fe!640
2019-03-05 14:40:08 +00:00
Edijs f91e4a5801 Load post status content type from instance config 2019-03-04 21:29:56 -08:00
taehoon ff9e55ae42 Generate cropped avatar image in the original file type 2019-03-04 21:22:32 -05:00
Shpuld Shpludson 3e4d465eba Merge branch 'patch-2' into 'develop'
Update of the Occitan file.

See merge request pleroma/pleroma-fe!635
2019-03-04 19:27:38 +00:00
Exilat 5a273d528f Update oc.json 2019-03-04 18:53:16 +00:00
Shpuld Shpludson 4ab3e29877 Merge branch 'develop' into 'develop'
Portuguese translation update

See merge request pleroma/pleroma-fe!637
2019-03-04 18:21:14 +00:00
shpuld bd0485ad2f unify spacing between gallery/link preview/attachment components 2019-03-04 18:56:47 +02:00
Shpuld Shpludson d6e9ad3b61 Merge branch 'develop' into 'develop'
Update and complete the Esperanto translation

See merge request pleroma/pleroma-fe!630
2019-03-04 16:11:17 +00:00
Shpuld Shpludson 893767b780 Merge branch 'issue-417-profile-tab' into 'develop'
Issue 417 profile tab

Closes #417

See merge request pleroma/pleroma-fe!634
2019-03-04 16:09:23 +00:00
aaabulafiaaa a2a3bda1f6 more pt strings 2019-03-04 08:36:35 -03:00
aaabulafiaaa 116a51e949 more pt strings 2019-03-03 19:42:02 -03:00
aaabulafiaaa ae1a9a8626 More strings 2019-03-03 19:03:11 -03:00
rondnelly assis 793abed7ed Translating more strings 2019-03-03 21:55:16 +00:00
Shpuld Shpludson 42d36fc98b Merge branch 'issue-418-notification-timeago' into 'develop'
Issue 418 notification timeago

Closes #418

See merge request pleroma/pleroma-fe!636
2019-03-03 20:16:51 +00:00
dave 0ea9e4ca14 #418: update timeago margin to align with icons 2019-03-03 14:15:53 -05:00
dave f392668b73 #418: update notification timeago format 2019-03-03 14:11:38 -05:00
Exilat 3e16b5a2e0 Update of the Occitan file.
Not at 100% but more complete then what it was.
2019-03-03 19:06:32 +00:00
dave 5a0bb29f02 #417: reset tab from the outside 2019-03-03 13:38:48 -05:00
dave 3d30ad1dda #417: refresh tab on user profile only 2019-03-03 12:53:01 -05:00
dave 10711f9045 #417: reset tab status when active user changes 2019-03-03 12:15:55 -05:00
Shpuld Shpludson 3ed1eb5723 Merge branch 'hotfix-replies' into 'develop'
fix broken statuses

See merge request pleroma/pleroma-fe!632
2019-03-03 14:58:05 +00:00
shpuld c1ee7c028b Fix bug in replies 2019-03-03 16:43:41 +02:00
shpuld c7e180080a more work with notifications drawer 2019-03-03 16:33:40 +02:00
Henry Jameson 6184c88ac7 Initial work on deprecating scopeModesEnabled in favor of minimalScopeMode 2019-03-03 15:45:17 +02:00
Henry Jameson 6841f516fc fix broken statuses 2019-03-02 20:39:04 +02:00
Shpuld Shpludson cef0306428 Merge branch '416-name-font-size' into 'develop'
Update font-size of username in UserCardContent component

Closes #416

See merge request pleroma/pleroma-fe!631
2019-03-02 18:05:29 +00:00
taehoon 94b0321c71 Update font-size of username in UserCardContent component 2019-03-02 12:58:17 -05:00
Aditoo17 93f5f94698 I18n: Add Czech translation 2019-03-02 18:25:49 +01:00
Tirifto a884bbb6a6 Update and complete the Esperanto translation 2019-03-02 17:50:59 +01:00
Shpuld Shpludson 11113dd7c4 Merge branch 'feature/improve-status-header-and-spacing' into 'develop'
Re-do status header a bit, add more consistent spacing to status

Closes #264

See merge request pleroma/pleroma-fe!617
2019-03-02 16:35:38 +00:00
Shpuld Shpludson c4f8426349 Re-do status header a bit, add more consistent spacing to status 2019-03-02 16:35:38 +00:00
Shpuld Shpludson 6f903016a4 Merge branch 'fix/fetching-error-by-tag' into 'develop'
#402 Fix fetching error by tag

See merge request pleroma/pleroma-fe!622
2019-03-02 15:48:54 +00:00
shpuld 1d3b1ac934 start working on one tap notifications 2019-03-02 16:57:32 +02:00
shpuld 068da3cf9f Fix JS error when no statuses returned 2019-03-02 14:57:41 +02:00
jasper 81e89fed3d Fetch activites by last id 2019-03-01 12:53:24 -08:00
jasper c26f32ed92 Fix fetching error by tag 2019-03-01 10:20:25 -08:00
Shpuld Shpludson 53e104dc32 Merge branch 'issue-388-request-count-broken' into 'develop'
#388: get follow request on a real-time basis

Closes #388

See merge request pleroma/pleroma-fe!619
2019-03-01 18:03:30 +00:00
dave f3f9fbe302 #392: clean up notification stopping section 2019-03-01 11:59:50 -05:00
dave bbab1b1dc6 #346: Hyperlink is not included 2019-02-28 21:03:35 -05:00
dave bbe1821be7 #392: update object.entries 2019-02-28 14:44:43 -05:00
dave f5adb62e2e #392: update defaultState into a function 2019-02-28 14:27:47 -05:00
dave ba2e05bc63 #392: stale data served to new user account 2019-02-28 14:03:44 -05:00
Shpuld Shpludson bbe4f3e3af Merge branch 'issue-410-greyout-checkbox' into 'develop'
#410: disable checkbox when parent is disabled

Closes #410

See merge request pleroma/pleroma-fe!624
2019-02-28 18:02:15 +00:00
Shpuld Shpludson 88c7c8b114 Merge branch '398-rewrite-follow-list' into 'develop'
Split UserCard into FollowCard/FollowRequestCard and Rewrite FollowList using HOCs

Closes #398

See merge request pleroma/pleroma-fe!616
2019-02-28 17:53:40 +00:00
dave cccf33d6dd #388: update naming properly 2019-02-28 12:53:37 -05:00
taehoon 36460fd384 Fix layout overflow issue 2019-02-28 12:48:14 -05:00
taehoon a8d11b22e7 Add a class to screen name 2019-02-28 12:41:20 -05:00
taehoon 24e1adf6df Add back accidently removed logic 2019-02-28 12:41:20 -05:00
taehoon 0e86681aba Merge all slots of BasicUserCard into one 2019-02-28 12:41:20 -05:00
taehoon 6e41b4b546 Revert "Minor mobile layout improvement for BasicUserCard"
This reverts commit 1cd964bffff3ae4d324d0ab99e5c218eae7cd0ca.
2019-02-28 12:41:20 -05:00
taehoon d5f8e2b1ee Minor mobile layout improvement for BasicUserCard 2019-02-28 12:41:20 -05:00
taehoon 651c97153b Use native filter function 2019-02-28 12:41:20 -05:00
taehoon a6f2af4ad9 Shorten a classname 2019-02-28 12:41:20 -05:00
taehoon c5519fa587 Improve mobile layout of user card 2019-02-28 12:41:20 -05:00
taehoon 1fecac9ba6 Update naming 2019-02-28 12:41:20 -05:00
taehoon 8dd42cfc65 Add back some css 2019-02-28 12:41:20 -05:00
taehoon 30f5bf1463 Remove legacy class names in BasicUserCard 2019-02-28 12:41:20 -05:00
taehoon 0d283c3f17 Remove UserCard 2019-02-28 12:41:20 -05:00
taehoon 96e7e8235d Migrate UserCard to FollowCard and FollowRequestCard 2019-02-28 12:41:20 -05:00
taehoon 390b2bcfee Add FollowRequestCard component 2019-02-28 12:41:20 -05:00
taehoon 4b0a11acef Improve action button size and position in BasicUserCard 2019-02-28 12:41:20 -05:00
taehoon 8923492e68 Remove needless div wrapper 2019-02-28 12:41:20 -05:00
taehoon 9ca805a991 Add new FollowCard component 2019-02-28 12:41:20 -05:00
taehoon 1337e42b2d Add third slot area to BasicUserCard 2019-02-28 12:41:20 -05:00
taehoon 784523b8ec Use big avatar in BasicUserCard 2019-02-28 12:41:20 -05:00
taehoon 3ab42efbc3 Remove unused component local registration 2019-02-28 12:41:20 -05:00
taehoon 3f9fd07f93 Remove non-existing prop binding 2019-02-28 12:41:20 -05:00
taehoon bb1fac4bc2 Remove needless component local registration 2019-02-28 12:41:20 -05:00
taehoon 080786c945 Rewrite FollowList using hocs 2019-02-28 12:41:20 -05:00
taehoon cb383df517 Fix bug to get wrapped component prop name list 2019-02-28 12:40:22 -05:00
taehoon 5c43374588 Clean up addFollowers action 2019-02-28 12:40:22 -05:00
taehoon 3a689ef8ee Allow HOCs to accept additional props 2019-02-28 12:40:22 -05:00
dave 1c57a1c9b4 #410: disable checkbox when parent is disabled 2019-02-28 12:28:45 -05:00
Shpuld Shpludson dc01f90dde Merge branch '386-display-invalid-user-profile' into 'develop'
Show error message when visit profile page of invalid user

Closes #386

See merge request pleroma/pleroma-fe!606
2019-02-28 17:19:14 +00:00
Shpuld Shpludson 24f3770fb5 Merge branch 'keyboard-binding' into 'develop'
Keyboard binding

Closes #369

See merge request pleroma/pleroma-fe!593
2019-02-28 17:11:31 +00:00
Shpuld Shpludson efc4fa1099 Merge branch 'feature/oauth-tokens-in-settings' into 'develop'
Add OAuth Tokens management to settings

See merge request pleroma/pleroma-fe!572
2019-02-28 17:03:11 +00:00
Edijs 882e024331 Revert code 2019-02-28 11:16:16 +08:00
jasper 4d026baf17 Fix fetching error by tag 2019-02-27 18:14:42 -08:00
jasper 9aec49bacb Fetch activites by last id 2019-02-27 17:45:08 -08:00
Maxim Filippov 267952b4e7 "Are you sure?" -> i18n 2019-02-28 04:05:54 +03:00
Maxim Filippov c71f411ad6 Show only "app_name" and "valid_until" (OAuth tokens table) 2019-02-28 04:05:54 +03:00
Maxim Filippov afbe524a2e use translations 2019-02-28 04:04:26 +03:00
Maxim Filippov b9082fb13f Remove outdated test 2019-02-28 04:04:26 +03:00
Maxim Filippov c10a15386a Code style 2019-02-28 04:04:26 +03:00
Maxim Filippov 2c7406d9a8 Add OAuth Tokens management to settings 2019-02-28 04:04:26 +03:00
dave 9f1214555e #388: remove empty line 2019-02-27 14:40:21 -05:00
dave 7c6446a9de #388: get follow request on a real-time basis 2019-02-27 14:38:10 -05:00
Shpuld Shpludson 058238c3c6 Merge branch 'feat/max-attachments-configurable' into 'develop'
Fix #399 Make max attachments configurable

Closes #399

See merge request pleroma/pleroma-fe!618
2019-02-27 14:38:58 +00:00
Shpuld Shpludson 95fb768b5a Fix #399 Make max attachments configurable 2019-02-27 14:38:58 +00:00
jasper 7698a6fb0d Remove posts by blocking or unfollowing 2019-02-26 23:21:04 -08:00
taehoon b78227456e Better error handling 2019-02-26 12:26:04 -05:00
taehoon e687b58091 Show error message when visit profile page of invalid user 2019-02-26 11:08:13 -05:00
jasper 4e79300232 Remove posts by blocking or unfollowing 2019-02-25 14:35:47 -08:00
HJ d5348c13ff Merge branch 'issue-380-noification-unread' into 'develop'
#380: fix false alarm for unread notifications

Closes #380

See merge request pleroma/pleroma-fe!614
2019-02-25 20:08:45 +00:00
HJ fef0981bc4 Merge branch 'issue-396-registration-bio-field' into 'develop'
#396: update registration form

Closes #396

See merge request pleroma/pleroma-fe!612
2019-02-25 19:58:17 +00:00
dave 7dbbd8e270 #380: simply and remove redundancy 2019-02-25 14:57:56 -05:00
dave 4e8b696797 #380: fix false alarm for unread notifications 2019-02-25 12:12:49 -05:00
Shpuld Shpludson dbf46942d0 Merge branch 'fix/active-user-search-text-field' into 'develop'
#387 Activate user search text field after click button.

See merge request pleroma/pleroma-fe!608
2019-02-25 16:09:18 +00:00
Shpuld Shpludson baa09002b5 Merge branch 'issue-390-load-other-user-media-data' into 'develop'
#390: fixed the problem loading other user's media data

Closes #390

See merge request pleroma/pleroma-fe!613
2019-02-25 16:08:53 +00:00
dave 662e6bda14 #390: fixed the problem loading other user's media data 2019-02-25 10:21:17 -05:00
jasper bbd3e6b10f Update search input name 2019-02-25 06:08:52 -08:00
dave 20c68d33eb #396: update en.json 2019-02-24 15:44:06 -05:00
dave 8275f2aa9a #396: update registration form 2019-02-24 14:30:29 -05:00
Shpuld Shpludson 1dd7120e16 Merge branch 'issue-389-search-loading-icon' into 'develop'
#389: add loading icon in search panel

Closes #389

See merge request pleroma/pleroma-fe!610
2019-02-24 16:24:53 +00:00
Edijs 66a105a519 Revert 2019-02-22 13:53:43 -07:00
dave 9bedf96b98 #389: add loading icon in search panel 2019-02-22 13:37:02 -05:00
Shpuld Shpludson 99051f4a55 Merge branch 'fix/fetch-error-when-login' into 'develop'
#370 fix/fetch-error-when-login

See merge request pleroma/pleroma-fe!596
2019-02-22 15:17:17 +00:00
Shpuld Shpludson e34e1ccdae Merge branch '227-manage-blocks-mutes' into 'develop'
Add Blocks / Mutes management tabs under user settings page

See merge request pleroma/pleroma-fe!578
2019-02-22 14:54:12 +00:00
taehoon 22851a3a96 Remove needless code 2019-02-21 20:15:51 -05:00
jasper 34d723215b Activate user search text field 2019-02-21 11:20:46 -08:00
HJ 3768a4623f Merge branch 'fix-mutes' into 'develop'
bad defaults

Closes #384

See merge request pleroma/pleroma-fe!605
2019-02-21 17:56:41 +00:00
Henry Jameson 4136d9cdd1 bad defaults 2019-02-21 19:52:58 +02:00
Shpuld Shpludson c3fa2c90e2 Merge branch 'issue-376-no-statuses' into 'develop'
#376: update status timeline when it's empty

Closes #376

See merge request pleroma/pleroma-fe!601
2019-02-21 17:24:39 +00:00
Shpuld Shpludson 254b0afab7 Merge branch 'issue-383-content-type' into 'develop'
#383: content type error

Closes #383

See merge request pleroma/pleroma-fe!603
2019-02-21 17:06:10 +00:00
dave 09822cc15b #383: content type error 2019-02-21 11:16:11 -05:00
taehoon eb22e7f462 Use Object.entries instead of Object.keys 2019-02-20 21:50:10 -05:00
taehoon 37eec09b9b Comment out the mutes tab 2019-02-20 13:30:31 -05:00
taehoon 5bd36c6476 Remove needless css 2019-02-20 13:30:31 -05:00
taehoon 46e1f30347 Fix indent 2019-02-20 13:30:31 -05:00
taehoon 85d43d17f5 Add missing translation strings 2019-02-20 13:30:31 -05:00
taehoon 32c112bc96 Remove pagination logic in fetchBlocks api 2019-02-20 13:30:31 -05:00
taehoon 395d212904 Add new strings to i18n 2019-02-20 13:30:31 -05:00
taehoon a5162bd636 Add note for empty state to the lists using slot 2019-02-20 13:30:31 -05:00
taehoon b4a5b5203f Minor css improvements of hocs 2019-02-20 13:30:31 -05:00
taehoon 8680046c4e Pass down slots into wrapped components 2019-02-20 13:30:31 -05:00
taehoon 6d4d705c51 Rename some options and add comments to HOCs 2019-02-20 13:30:31 -05:00
taehoon 339373b495 Improve chaining hocs using vue-compose 2019-02-20 13:30:30 -05:00
taehoon f81b82b471 Use hoc definitions to be factor of factory 2019-02-20 13:30:30 -05:00
taehoon 8f608e060c Just save blocks/mutes instead of adding 2019-02-20 13:30:30 -05:00
taehoon 1fd9a1c7c0 Set blockIds and muteIds to the currentUser state only 2019-02-20 13:30:30 -05:00
taehoon e91a94ff9c Add mutes tab 2019-02-20 13:30:30 -05:00
taehoon 09315b2780 Add a prop to force-refresh data to withSubscription hoc 2019-02-20 13:30:30 -05:00
taehoon 8c8a6edc78 Remove pagination support from block-list 2019-02-20 13:30:30 -05:00
taehoon 159e84532e Add withSubscription hoc 2019-02-20 13:30:30 -05:00
taehoon 8270274865 Update hocs to pass parent-scope bindings to the wrapped component 2019-02-20 13:30:30 -05:00
taehoon 52913d8f87 Complete functionality of BlockCard 2019-02-20 13:30:30 -05:00
taehoon 0220d3d304 Finally, added BlockCard 2019-02-20 13:30:30 -05:00
taehoon 5d6e1864a5 Update BasicUserCard template and add a slot for customization 2019-02-20 13:30:30 -05:00
taehoon 94e6de11b7 Add withList hoc and remove UserList component 2019-02-20 13:30:30 -05:00
taehoon a817cc7cb4 Wire up ui to real blocks api data 2019-02-20 13:30:30 -05:00
taehoon a56d2dfeb1 Add blocks tab with test data to user settings page 2019-02-20 13:30:30 -05:00
taehoon 4a737cbe45 Add reusable BasicUserCard and UserList components 2019-02-20 13:30:30 -05:00
taehoon 12df967cb6 Add withLoadMore hoc 2019-02-20 13:30:30 -05:00
dave e20a7be3aa #376: update status timeline when it's empty 2019-02-20 10:13:28 -05:00
Shpuld Shpludson cfdd885e04 Merge branch 'issue-371-user-setting-notification' into 'develop'
#371: show notification when user setting's saved

Closes #371

See merge request pleroma/pleroma-fe!598
2019-02-20 14:42:27 +00:00
Shpuld Shpludson a49f6dbf65 Merge branch 'fix/follow-list' into 'develop'
Watch user change in follow-list

Closes #360

See merge request pleroma/pleroma-fe!584
2019-02-20 14:32:45 +00:00
Shpuld Shpludson 22a0858ef4 Merge branch 'issue-377-local-user-no-link' into 'develop'
#377: no exteral profile link for local users

Closes #377

See merge request pleroma/pleroma-fe!599
2019-02-19 19:35:44 +00:00
dave 0caf59a911 #377: no exteral profile link for local users 2019-02-19 13:49:04 -05:00
Shpuld Shpludson 40159324b4 Merge branch 'issue-364-register-freeze' into 'develop'
#364: update ap_id error with username

Closes #364

See merge request pleroma/pleroma-fe!597
2019-02-19 18:00:39 +00:00
jasper 1e43a47c3c Update: Fix fetch error when login 2019-02-19 09:42:53 -08:00
dave 63cfe051c7 #371: show notification when user setting's saved 2019-02-19 12:38:49 -05:00
Shpuld Shpludson 53484ae4bf Merge branch 'issue-344-css-refactor' into 'develop'
#344 - replace float: with flexbox, clean up

See merge request pleroma/pleroma-fe!566
2019-02-19 16:49:44 +00:00
Shpuld Shpludson 0e1295edea Merge branch 'follow-requests-for-locked-accounts' into 'develop'
Follow Request notification count for restricted accounts

See merge request pleroma/pleroma-fe!561
2019-02-19 16:38:05 +00:00
shpuld 32df77c16a Merge branch 'tae-hoon/pleroma-fe-323-improve-image-lightbox' into develop 2019-02-19 18:34:09 +02:00
shpuld 4e0f934301 Clean up CSS a bit 2019-02-19 18:33:40 +02:00
Shpuld Shpludson 7b9a6f8d43 Merge branch '256-avatar-crop-popup' into 'develop'
Add avatar cropper

Closes #256

See merge request pleroma/pleroma-fe!547
2019-02-19 15:37:01 +00:00
Shpuld Shpludson 8f96de2ba5 Merge branch 'patch-pleroma-615' into 'develop'
#336: Deleted static/bg2.jpg, static/bgalt.jpg files

See merge request pleroma/pleroma-fe!555
2019-02-19 15:27:54 +00:00
dave 5251ccd708 #364: update ap_id error with username 2019-02-19 09:22:42 -05:00
Edijs d032ce2758 Validate if there are any new status to show 2019-02-18 18:32:20 -07:00
jasper b4709515f2 Fix error when login 2019-02-18 17:15:16 -08:00
jasper d4a2376e12 fix/fetch-error-when-login 2019-02-18 12:32:08 -08:00
jasper 24d7f9917b Remove posts by blocking or following 2019-02-18 11:39:35 -08:00
Edijs 0d2922afb3 Remove event listener when component destroy 2019-02-17 14:37:24 -07:00
Edijs 642b0be0b2 Bind a keyboard to show new status 2019-02-17 14:31:13 -07:00
taehoon 3094c50ff9 Fix lint errors 2019-02-15 13:34:33 -05:00
taehoon 2de756aa0c Better error handling 2019-02-15 13:34:33 -05:00
taehoon 2132d58075 Remove cropped image size restriction 2019-02-15 13:34:33 -05:00
taehoon b6d197ce1d Remove modal component 2019-02-15 13:34:33 -05:00
taehoon b24db12e1c Make embedded image cropper 2019-02-15 13:34:33 -05:00
taehoon 546ba9eba9 Revert eslintrc changes 2019-02-15 13:34:33 -05:00
taehoon b458b2ae5f Check if variable exists before using 2019-02-15 13:34:33 -05:00
taehoon ddfdaf3284 Remove event listeners when destory ImageCropper 2019-02-15 13:34:33 -05:00
taehoon 228e6681e3 Localization of ImageCropper component 2019-02-15 13:34:33 -05:00
taehoon 205e38ffa9 Remove event listener when modal is destroyed 2019-02-15 13:34:33 -05:00
taehoon 09949fc7ee Crop avatar image using minWidth/minHeight 2019-02-15 13:34:33 -05:00
taehoon a001ffecf0 Add back the existing translation string 2019-02-15 13:34:33 -05:00
taehoon 13725f040b Add avatar crop popup 2019-02-15 13:34:33 -05:00
jasper 6c8ccf2733 Remove posts immediately by blocking 2019-02-15 07:52:34 -08:00
eugenijm d831b81912 Added follow requests counter to nav bar to make it visible behorehand 2019-02-15 12:49:00 +03:00
Edijs 3398817c25 watch only user 2019-02-14 13:25:22 -07:00
Edijs 0ca145ac95 Watch user change in follow-list 2019-02-14 13:19:00 -07:00
Edijs 28660d6986 Issue #335 - place hide button on right hand 2019-02-14 10:21:10 -07:00
Edijs 50f0d21686 Use static height if gallery has single image 2019-02-14 09:52:23 -07:00
dave f2ce2e9176 #344 - replace float: with flexbox, clean up 2019-02-11 22:35:24 -05:00
taehoon a20974faac Use correct syntax for pseudoelement 2019-02-11 06:56:46 -05:00
taehoon 971e75aa64 Add translation strings 2019-02-10 13:26:08 -05:00
taehoon 750c308909 Support lightbox gallery navigation via arrow buttons and keyboard 2019-02-10 13:23:01 -05:00
Lidar ce81a5f72e Deleted static/bg2.jpg, static/bgalt.jpg files 2019-02-09 16:26:54 +00:00
429 changed files with 33177 additions and 12636 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
{
"presets": ["es2015", "stage-2", "env"],
"plugins": ["transform-runtime", "lodash", "transform-vue-jsx"],
"presets": ["@babel/preset-env"],
"plugins": ["@babel/plugin-transform-runtime", "lodash", "@vue/babel-plugin-transform-vue-jsx"],
"comments": false
}
+9 -5
View File
@@ -1,22 +1,26 @@
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
extends: 'standard',
extends: [
'standard',
'plugin:vue/recommended'
],
// required to lint *.vue files
plugins: [
'html'
'vue'
],
// add your custom rules here
'rules': {
rules: {
// allow paren-less arrow functions
'arrow-parens': 0,
// allow async-await
'generator-star-spacing': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'vue/require-prop-types': 0
}
}
+18 -2
View File
@@ -1,12 +1,13 @@
# 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:
# https://hub.docker.com/r/library/node/tags/
image: node:7
image: node:8
stages:
- lint
- build
- test
- deploy
lint:
stage: lint
@@ -16,9 +17,14 @@ lint:
test:
stage: test
variables:
APT_CACHE_DIR: apt-cache
script:
- mkdir -pv $APT_CACHE_DIR && apt-get -qq update
- apt install firefox-esr -y --no-install-recommends
- firefox --version
- yarn
- npm run unit
- yarn unit
build:
stage: build
@@ -28,3 +34,13 @@ build:
artifacts:
paths:
- dist/
docs-deploy:
stage: deploy
image: alpine:latest
only:
- develop@pleroma/pleroma-fe
before_script:
- apk add curl
script:
- curl -X POST -F"token=$DOCS_PIPELINE_TRIGGER" -F'ref=master' https://git.pleroma.social/api/v4/projects/673/trigger/pipeline
+13
View File
@@ -0,0 +1,13 @@
# v1.0
## Removed features/radically changed behavior
### formattingOptionsEnabled
as of !833 `formattingOptionsEnabled` is no longer available and instead FE check for available post formatting options and enables formatting control if there's more than one option.
### minimalScopesMode
As of !633, `scopeOptions` is no longer available and instead is changed for `minimalScopesMode` (default: `false`)
Reasoning is that scopeOptions option originally existed mostly as a backwards-compatibility with GNU Social which only had `public` scope available and using scope selector would''t work. Since at some point we dropped GNU Social support, this option was mostly a nuisance (being default `false`'), however some people think scopes are an annoyance to a certain degree and want as less of that feature as possible.
Solution - to only show minimal set among: *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 UI.
*This setting is admin-default, user-configurable. Admin can choose different default for their instance but user can override it.*
-35
View File
@@ -1,35 +0,0 @@
## 2017-02-20
- Overall CSS styling fixes
- Current theme is displayed in theme selector
- Theme selector is moved to the settings page
- Oembed attachments will now display correctly
- Styling changes to the user info cards
- Notification count in title
- Better Notification handling (persistance, mark as read)
- Post statuses with ctrl+enter
- Links in statuses open in a new tab
- Optimized mobile view
- Fix crash on persistance failure
- Compress persisted state
- Sync mutes with backend (SEE NOTE BELOW)
Pleroma will now try to get the current mutes from the backend. Sadly, a bug in
Qvitter will not allow getting the mutes from the endpoint, because it will
ignore HTTP Basic authentication. Mutes will still persist in Pleroma through
localstorage, but the mutes from Qvitter won't be picked up if the call fails.
The patch for Qvitter:
--- a/actions/apiqvittermutes.php
+++ b/actions/apiqvittermutes.php
@@ -74,7 +74,7 @@ class ApiQvitterMutesAction extends ApiPrivateAuthAction
{
parent::handle();
- $this->target = Profile::current();
+ $this->target = $this->scoped;
if(!$this->target instanceof Profile) {
$this->clientError(_('You have to be logged in to view your mutes.'), 403);
+72
View File
@@ -0,0 +1,72 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Changed
- Removed the use of with_move parameters when fetching notifications
## [2.0.3] - 2020-05-02
### Fixed
- Show more/less works correctly with auto-collapsed subjects and long posts
- RTL characters won't look messed up in notifications
### Changed
- Emoji autocomplete will match any part of the word and not just start, for example :drool will now helpfully suggest :blobcatdrool: and :blobcatdroolreach:
### Add
- Follow request notification support
## [2.0.2] - 2020-04-08
### Fixed
- Favorite/Repeat avatars not showing up on private instances/non-public posts
- Autocorrect getting triggered in the captcha field
- Overflow on long domains in follow/move notifications
### Changed
- Polish translation updated
## [2.0.0] - 2020-02-28
### Added
- Tons of color slots including ones for hover/pressed/toggled buttons
- Experimental `--variable[,mod]` syntax support for color slots in themes. the `mod` makes color brighter/darker depending on background color (makes darker color brighter/darker depending on background color)
- Paper theme by Shpuld
- Icons in nav panel
- Private mode support
- Support for 'Move' type notifications
- Pleroma AMOLED dark theme
- User level domain mutes, under User Settings -> Mutes
- Emoji reactions for statuses
- MRF keyword policy disclosure
### Changed
- Updated Pleroma default themes
- theme engine update to 3 (themes v2.1 introduction)
- massive internal changes in theme engine - slowly away from "generate things separately with spaghetti code" towards "feed all data into single 'generateTheme' function and declare slot inheritance and all in a separate file"
- Breezy theme updates to make it closer to actual Breeze in some aspects
- when using `--variable` in shadows it no longer uses the actual CSS3 variable, instead it generates color from other slots
- theme doesn't get saved to local storage when opening FE anonymously
- Captcha now resets on failed registrations
- Notifications column now cleans itself up to optimize performance when tab is left open for a long time
- 403 messaging
### Fixed
- Fixed loader-spinner not disappearing when a status preview fails to load
- anon viewers won't get theme data saved to local storage, so admin changing default theme will have an effect for users coming back to instance.
- Single notifications left unread when hitting read on another device/tab
- Registration fixed
- Deactivation of remote accounts from frontend
- Fixed NSFW unhiding not working with videos when using one-click unhiding/displaying
- Improved performance of anything that uses popovers (most notably statuses)
## [1.1.7 and earlier] - 2019-12-14
### Added
- Ability to hide/show repeats from user
- User profile button clutter organized into a menu
- Emoji picker
- Started changelog anew
- Ability to change user's email
- About page
- Added remote user redirect
### 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
### Fixed
- improved hotkey behavior on autocomplete popup
+1 -1
View File
@@ -41,7 +41,7 @@ FE Build process also leaves current commit hash in global variable `___pleromaf
# Configuration
Edit config.json for configuration. scopeOptionsEnabled gives you input fields for CWs and the scope settings.
Edit config.json for configuration.
## Options
+7 -2
View File
@@ -31,8 +31,13 @@ var hotMiddleware = require('webpack-hot-middleware')(compiler)
// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', function (compilation) {
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
hotMiddleware.publish({ action: 'reload' })
cb()
// FIXME: This supposed to reload whole page when index.html is changed,
// however now it reloads entire page on every breath, i suppose the order
// of plugins changed or something. It's a minor thing and douesn't hurt
// disabling it, constant reloads hurt much more
// hotMiddleware.publish({ action: 'reload' })
// cb()
})
})
+39 -37
View File
@@ -1,61 +1,63 @@
var path = require('path')
var config = require('../config')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var sass = require('sass')
var MiniCssExtractPlugin = require('mini-css-extract-plugin')
exports.assetsPath = function (_path) {
var assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
// generate loader string to be used with extract text plugin
function generateLoaders (loaders) {
var sourceLoader = loaders.map(function (loader) {
var extraParamChar
if (/\?/.test(loader)) {
loader = loader.replace(/\?/, '-loader?')
extraParamChar = '&'
} else {
loader = loader + '-loader'
extraParamChar = '?'
}
return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')
}).join('!')
function generateLoaders (loaders) {
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract('vue-style-loader', sourceLoader)
return [MiniCssExtractPlugin.loader].concat(loaders)
} else {
return ['vue-style-loader', sourceLoader].join('!')
return ['vue-style-loader'].concat(loaders)
}
}
// http://vuejs.github.io/vue-loader/configurations/extract-css.html
return {
css: generateLoaders(['css']),
postcss: generateLoaders(['css']),
less: generateLoaders(['css', 'less']),
sass: generateLoaders(['css', 'sass?indentedSyntax']),
scss: generateLoaders(['css', 'sass']),
stylus: generateLoaders(['css', 'stylus']),
styl: generateLoaders(['css', 'stylus'])
}
return [
{
test: /\.(post)?css$/,
use: generateLoaders(['css-loader', 'postcss-loader']),
},
{
test: /\.less$/,
use: generateLoaders(['css-loader', 'postcss-loader', 'less-loader']),
},
{
test: /\.sass$/,
use: generateLoaders([
'css-loader',
'postcss-loader',
{
loader: 'sass-loader',
options: {
indentedSyntax: true
}
}
])
},
{
test: /\.scss$/,
use: generateLoaders(['css-loader', 'postcss-loader', 'sass-loader'])
},
{
test: /\.styl(us)?$/,
use: generateLoaders(['css-loader', 'postcss-loader', 'stylus-loader']),
},
]
}
// Generate loaders for standalone style files (outside of .vue)
exports.styleLoaders = function (options) {
var output = []
var loaders = exports.cssLoaders(options)
for (var extension in loaders) {
var loader = loaders[extension]
output.push({
test: new RegExp('\\.' + extension + '$'),
loader: loader
})
}
return output
return exports.cssLoaders(options)
}
+49 -44
View File
@@ -3,6 +3,7 @@ var config = require('../config')
var utils = require('./utils')
var projectRoot = path.resolve(__dirname, '../')
var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin')
var FontelloPlugin = require("fontello-webpack-plugin")
var env = process.env.NODE_ENV
// check env & config/index.js to decide weither to enable CSS Sourcemaps for the
@@ -11,6 +12,8 @@ var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)
var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)
var useCssSourceMap = cssSourceMapDev || cssSourceMapProd
var now = Date.now()
module.exports = {
entry: {
app: './src/main.js'
@@ -20,83 +23,85 @@ module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
filename: '[name].js'
},
optimization: {
splitChunks: {
chunks: 'all'
}
},
resolve: {
extensions: ['', '.js', '.vue'],
fallback: [path.join(__dirname, '../node_modules')],
extensions: ['.js', '.vue'],
modules: [
path.join(__dirname, '../node_modules')
],
alias: {
'vue$': 'vue/dist/vue.runtime.common',
'static': path.resolve(__dirname, '../static'),
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets'),
'components': path.resolve(__dirname, '../src/components')
}
},
resolveLoader: {
fallback: [path.join(__dirname, '../node_modules')]
},
module: {
noParse: /node_modules\/localforage\/dist\/localforage.js/,
preLoaders: [
rules: [
{
test: /\.vue$/,
loader: 'eslint',
enforce: 'pre',
test: /\.(js|vue)$/,
include: projectRoot,
exclude: /node_modules/
exclude: /node_modules/,
use: {
loader: 'eslint-loader',
options: {
formatter: require('eslint-friendly-formatter'),
sourceMap: config.build.productionSourceMap,
extract: true
}
}
},
{
test: /\.js$/,
loader: 'eslint',
include: projectRoot,
exclude: /node_modules/
}
],
loaders: [
{
test: /\.vue$/,
loader: 'vue'
use: 'vue-loader'
},
{
test: /\.jsx?$/,
loader: 'babel',
include: projectRoot,
exclude: /node_modules\/(?!tributejs)/
},
{
test: /\.json$/,
loader: 'json'
exclude: /node_modules\/(?!tributejs)/,
use: 'babel-loader'
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url',
query: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
use: {
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url',
query: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
use: {
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
}
]
},
eslint: {
formatter: require('eslint-friendly-formatter')
},
vue: {
loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }),
postcss: [
require('autoprefixer')({
browsers: ['last 2 versions']
})
},
]
},
plugins: [
new ServiceWorkerWebpackPlugin({
entry: path.join(__dirname, '..', 'src/sw.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]'
}
})
]
}
+2 -3
View File
@@ -12,8 +12,9 @@ Object.keys(baseWebpackConfig.entry).forEach(function (name) {
module.exports = merge(baseWebpackConfig, {
module: {
loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
},
mode: 'development',
// eval-source-map is faster for development
devtool: '#eval-source-map',
plugins: [
@@ -23,9 +24,7 @@ module.exports = merge(baseWebpackConfig, {
'DEV_OVERRIDES': JSON.stringify(config.dev.settings)
}),
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
+16 -34
View File
@@ -4,7 +4,7 @@ var utils = require('./utils')
var webpack = require('webpack')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
var ExtractTextPlugin = require('extract-text-webpack-plugin')
var MiniCssExtractPlugin = require('mini-css-extract-plugin')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
@@ -13,23 +13,23 @@ var env = process.env.NODE_ENV === 'testing'
let commitHash = require('child_process')
.execSync('git rev-parse --short HEAD')
.toString();
console.log(commitHash)
var webpackConfig = merge(baseWebpackConfig, {
mode: 'production',
module: {
loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true })
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, extract: true })
},
devtool: config.build.productionSourceMap ? '#source-map' : false,
optimization: {
minimize: true,
splitChunks: {
chunks: 'all'
}
},
output: {
path: config.build.assetsRoot,
filename: utils.assetsPath('js/[name].[chunkhash].js'),
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
},
vue: {
loaders: utils.cssLoaders({
sourceMap: config.build.productionSourceMap,
extract: true
})
chunkFilename: utils.assetsPath('js/[name].[chunkhash].js')
},
plugins: [
// http://vuejs.github.io/vue-loader/workflow/production.html
@@ -38,14 +38,10 @@ var webpackConfig = merge(baseWebpackConfig, {
'COMMIT_HASH': JSON.stringify(commitHash),
'DEV_OVERRIDES': JSON.stringify(undefined)
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),
new webpack.optimize.OccurenceOrderPlugin(),
// extract css into its own file
new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')),
new MiniCssExtractPlugin({
filename: utils.assetsPath('css/[name].[contenthash].css')
}),
// generate dist index.html with correct asset hash for caching.
// you can customize output by editing /index.html
// see https://github.com/ampedandwired/html-webpack-plugin
@@ -67,25 +63,11 @@ var webpackConfig = merge(baseWebpackConfig, {
chunksSortMode: 'dependency'
}),
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module, count) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
chunks: ['vendor']
})
// new webpack.optimize.SplitChunksPlugin({
// name: ['app', 'vendor']
// }),
]
})
+5
View File
@@ -48,6 +48,11 @@ module.exports = {
changeOrigin: true,
cookieDomainRewrite: 'localhost',
ws: true
},
'/oauth/revoke': {
target,
changeOrigin: true,
cookieDomainRewrite: 'localhost'
}
},
// CSS Sourcemaps off by default because relative paths are "buggy"
+104
View File
@@ -0,0 +1,104 @@
# Pleroma-FE configuration and customization for instance administrators
* *For user configuration, see [Pleroma-FE user guide](USER_GUIDE.md)*
* *For local development server configuration, see [Hacking, tweaking, contributing](HACKING.md)*
## Where configuration is stored
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)
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) )
## Instance-defaults
Important note that some configurations are treated as "instance default" - it means user is able to change this configuration for themselves. Currently, defaults are only applied for new visitors and people who haven't changed the option in question. If you change some instance default option, there is a chance it won't affect some users.
There's currently no mechanism for user-settings synchronization across several browsers, *user* essentially means *visitor*, most user settings are stored in local storage/IndexedDB and not tied to an account in any way.
## Options
### `theme`
Default theme used for new users. De-facto instance-default, user can change theme.
### `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.
### `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`.
`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.
### `redirectRootNoLogin`, `redirectRootLogin`
These two settings should point to where FE should redirect visitor when they login/open up website root
### `chatDisabled`
hides the chat (TODO: even if it's enabled on backend)
### `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.
### `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`
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.
* `"masto"` - like Mastodon - copy it as is.
* `"noop"` - do not copy
Instance-default.
### `postContentType`
Default post formatting option (markdown/bbcode/plaintext/etc...)
### `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`
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
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
**TODO somewhat broken, see: chatDisabled** chat can be disabled by disabling it in backend
### 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)
### 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.
### 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.
+100
View File
@@ -0,0 +1,100 @@
# Hacking, tweaking, contributing
## What PleromaFE even is, how it works
PleromaFE is an SPA (Single-Page Application) backed by [Vue](https://vuejs.org/) framework. It means that it's just a nearly-empty HTML page with bunch of JavaScript that actually generates and controls DOM (i.e. html elements) in Runtime. Currently, there's no way around it - you have to have Javascript enabled in the browser to make it work, there is a theoretical possibility to generate some HTML server-side but it's not implemented yet.
You can serve static html page and everything from any HTTP(S) server but currently it will try to access /api/ path at same domain it's running on, meaning that as of right now you cannot put it on one domain and access the other without proxying requests.
Development server does exactly that - it serves static html page with javascript and all other assets, adds some code to automatically reload when changes to code are made and proxies requests to some other server.
## Setting up develop server
Setting up development server is fairly straight-forward.
1. On your system you must have **[Node.js](https://nodejs.org/) version 8** and newer installed. For older systems or systems that do not package node you can try [NodeSource](https://github.com/nodesource/distributions) repositories. *Windows support theoretically possible but isn't tested.*
2. For fetching dependencies and running basic tasks you will *[Yarn](https://yarnpkg.com/)* installed.
3. Clone the repository, `cd` into it and run `yarn` to fetch dependencies.
4. If you want to point development server at some instance you will need to copy `config/local.example.json` to `config/local.json` and change the `target` to point at instance you want, otherwise it will point to `localhost:4000` which is default address for locally-run Pleroma Backend
5. Run `yarn dev` - it will start the server.
6. Open `localhost:8080` in your browser, it might take a while initially until everything is built first time.
## Setting up production build
This could be a bit trickier, you basically need steps 1-4 from *develop build* instructions, and run `yarn build` which will compile and copy eveything needed for production into `dist` folder. As said before, this technically could be used anywhere with some details.
### 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.
### Running production build locally or on a separate server
This is **highly experimental** and only tried once, with no actual simple solution available yet
You will need an HTTP server that can proxy requests for `/api`, `/instance`, `/nodeinfo` and show index.html for every 404 page.
For nginx you'll probably need something like this:
```nginx
server {
listen 80 default_server;
index index.html index.htm index.nginx-debian.html;
root /var/www/html
location /api {
proxy_pass https://example.tld;
}
location /instance {
proxy_pass https://example.tld;
}
location /nodeinfo {
proxy_pass https://example.tld;
}
location / {
try_files $uri $uri/ /index.html;
}
}
```
(ed. note: this is close to what i used last time i had to do it, it may not work and need additions, i basically adjusted default nginx server in debian)
## Basic architecture
### 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.
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.
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.
PleromaFE also tries to persist this store, however only stable data is stored, such as user authentication and preferences, user highlights. Persistence is performed by saving and loading chunk of vuex store in browser's LocalStorage/IndexedDB.
TODO: Refactor API code and document it here
### Themes
PleromaFE uses custom theme "framework" which is pretty much just a style tag rendered by vue which only contains CSS3 variables. Every color used in UI should be derived from theme. Theme is stored in a JSON object containing color, opacity, shadow and font information, with most of it being optional.
The most basic theme can consist of 4 to 8 "basic colors", which is also what previous version of themes allowed, with all other colors being derived from those basic colors, i.e. "light background" will be "background" color lightened/darkened, "panel header" will be same as "foreground". The idea is that you can specify just basic color palette and everything else will be generated automatically, but if you really need to tweak some specific color - you can.
As said before - older version only allowed 4 to 8 colors, it also used arrays instead of objects, we still support that. The basic colors are: background, foreground, text, links, red, orange, blue, green. First 4 are mandatory, last 4 have default fallbacks since ever more ancient theme formats only had 4 colors.
Note that with older version themes used different internal naming when persisting state.
Themes are meant to be backwards and somewhat forwards compatible - new colors should properly inherit from some existing one, making it compatible with older versions. When loading newer version of theme all unrecognized colors will be ignored, which for most part should be fine, however adding new features (gradients, masks, whatever it might be) might be breaky.
Lastly, pleroma provides some contrast information and generates readable text color automatically, which is done by tracking background/text color pairs and their contrast - if contrast too low it will try to use background color with inverted lightness, if it's still unacceptable it will fall back to pure black/white.
### Still Image
Most images are wrapped in a component called StillImage, which does one simple thing - tries to detect if image is a GIF and if it is (and user has enabled relevant setting) it will show `<canvas>` with that image instead of actual image. It uses standard method to render an image into canvas which renders first frame of a GIF if it's animated (obviously because canvas by itself isn't animated and you'd need to animate it yourself in JS), it will show actual image on hover. Statuses also allow playing animated avatars when you hover over a post, not just image itself.
## Contributing
Feel free to contribute, most preferred way is by starting a Merge Request in GitLab. Please try to use descriptive names for your branches and merge requests, avoid naming them "fix-issue-777" "777" and so on.
+209
View File
@@ -0,0 +1,209 @@
# 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.
Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

+3 -4
View File
@@ -2,14 +2,13 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<title>Pleroma</title>
<!--server-generated-meta-->
<link rel="icon" type="image/png" href="/favicon.png">
<link rel="stylesheet" href="/static/font/css/fontello.css">
<link rel="stylesheet" href="/static/font/css/animation.css">
</head>
<body style="display: none">
<body class="hidden">
<noscript>To use Pleroma, please enable JavaScript.</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
+46 -39
View File
@@ -11,96 +11,103 @@
"unit:watch": "karma start test/unit/karma.conf.js --single-run=false",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"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"
},
"dependencies": {
"babel-plugin-add-module-exports": "^0.2.1",
"babel-plugin-lodash": "^3.2.11",
"@babel/runtime": "^7.7.6",
"@chenfengyuan/vue-qrcode": "^1.0.0",
"body-scroll-lock": "^2.6.4",
"chromatism": "^3.0.0",
"cropperjs": "^1.4.3",
"diff": "^3.0.1",
"escape-html": "^1.0.3",
"karma-mocha-reporter": "^2.2.1",
"localforage": "^1.5.0",
"node-sass": "^3.10.1",
"object-path": "^0.11.3",
"phoenix": "^1.3.0",
"portal-vue": "^2.1.4",
"sanitize-html": "^1.13.0",
"sass-loader": "^4.0.2",
"v-click-outside": "^2.1.1",
"vue": "^2.5.13",
"vue-chat-scroll": "^1.2.1",
"vue-i18n": "^7.3.2",
"vue-router": "^3.0.1",
"vue-template-compiler": "^2.3.4",
"vue-timeago": "^3.1.2",
"vuelidate": "^0.7.4",
"vuex": "^3.0.1",
"whatwg-fetch": "^2.0.3"
},
"devDependencies": {
"@babel/polyfill": "^7.0.0",
"@babel/core": "^7.7.5",
"@babel/plugin-transform-runtime": "^7.7.6",
"@babel/preset-env": "^7.7.6",
"@babel/register": "^7.7.4",
"@ungap/event-target": "^0.1.0",
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
"@vue/test-utils": "^1.0.0-beta.26",
"autoprefixer": "^6.4.0",
"babel-core": "^6.0.0",
"babel-eslint": "^7.0.0",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^6.0.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.0.0",
"babel-plugin-transform-vue-jsx": "3",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.0.0",
"babel-preset-stage-2": "^6.0.0",
"babel-register": "^6.0.0",
"babel-loader": "^8.0.6",
"babel-plugin-lodash": "^3.3.4",
"chai": "^3.5.0",
"chalk": "^1.1.3",
"chromedriver": "^2.21.2",
"connect-history-api-fallback": "^1.1.0",
"cross-spawn": "^4.0.2",
"css-loader": "^0.25.0",
"eslint": "^3.7.1",
"eslint-config-standard": "^6.1.0",
"css-loader": "^0.28.0",
"custom-event-polyfill": "^1.0.7",
"eslint": "^5.16.0",
"eslint-config-standard": "^12.0.0",
"eslint-friendly-formatter": "^2.0.5",
"eslint-loader": "^1.5.0",
"eslint-plugin-html": "^1.5.5",
"eslint-plugin-promise": "^2.0.1",
"eslint-plugin-standard": "^2.0.1",
"eslint-loader": "^2.1.0",
"eslint-plugin-import": "^2.13.0",
"eslint-plugin-node": "^7.0.0",
"eslint-plugin-promise": "^4.0.0",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^5.2.2",
"eventsource-polyfill": "^0.9.6",
"express": "^4.13.3",
"extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.9.0",
"file-loader": "^3.0.1",
"fontello-webpack-plugin": "https://github.com/w3geo/fontello-webpack-plugin.git#6149eac8f2672ab6da089e8802fbfcac98487186",
"function-bind": "^1.0.2",
"html-webpack-plugin": "^2.8.1",
"html-webpack-plugin": "^3.0.0",
"http-proxy-middleware": "^0.17.2",
"inject-loader": "^2.0.1",
"iso-639-1": "^2.0.3",
"isparta-loader": "^2.0.0",
"json-loader": "^0.5.4",
"karma": "^1.3.0",
"karma": "^3.0.0",
"karma-coverage": "^1.1.1",
"karma-firefox-launcher": "^1.1.0",
"karma-mocha": "^1.2.0",
"karma-phantomjs-launcher": "^1.0.0",
"karma-sinon-chai": "^1.2.0",
"karma-sinon-chai": "^2.0.2",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.26",
"karma-webpack": "^1.7.0",
"karma-webpack": "^4.0.0-rc.3",
"lodash": "^4.16.4",
"lolex": "^1.4.0",
"mini-css-extract-plugin": "^0.5.0",
"mocha": "^3.1.0",
"nightwatch": "^0.9.8",
"opn": "^4.0.2",
"ora": "^0.3.0",
"phantomjs-prebuilt": "^2.1.3",
"postcss-loader": "^3.0.0",
"raw-loader": "^0.5.1",
"sass": "^1.17.3",
"sass-loader": "git://github.com/webpack-contrib/sass-loader",
"selenium-server": "2.53.1",
"semver": "^5.3.0",
"serviceworker-webpack-plugin": "0.2.3",
"serviceworker-webpack-plugin": "^1.0.0",
"shelljs": "^0.7.4",
"sinon": "^1.17.3",
"sinon": "^2.1.0",
"sinon-chai": "^2.8.0",
"url-loader": "^0.5.7",
"vue-loader": "^11.1.0",
"vue-style-loader": "^2.0.0",
"webpack": "^1.13.2",
"webpack-dev-middleware": "^1.8.3",
"url-loader": "^1.1.2",
"vue-loader": "^14.0.0",
"vue-style-loader": "^4.0.0",
"webpack": "^4.0.0",
"webpack-dev-middleware": "^3.6.0",
"webpack-hot-middleware": "^2.12.2",
"webpack-merge": "^0.14.1"
},
+5
View File
@@ -0,0 +1,5 @@
module.exports = {
plugins: [
require('autoprefixer')
]
}
+35 -18
View File
@@ -1,14 +1,18 @@
import UserPanel from './components/user_panel/user_panel.vue'
import NavPanel from './components/nav_panel/nav_panel.vue'
import Notifications from './components/notifications/notifications.vue'
import UserFinder from './components/user_finder/user_finder.vue'
import SearchBar from './components/search_bar/search_bar.vue'
import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_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 ChatPanel from './components/chat_panel/chat_panel.vue'
import MediaModal from './components/media_modal/media_modal.vue'
import SideDrawer from './components/side_drawer/side_drawer.vue'
import { unseenNotificationsFromStore } from './services/notification_utils/notification_utils'
import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'
import MobileNav from './components/mobile_nav/mobile_nav.vue'
import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'
import PostStatusModal from './components/post_status_modal/post_status_modal.vue'
import { windowWidth } from './services/window_utils/window_utils'
export default {
name: 'app',
@@ -16,17 +20,21 @@ export default {
UserPanel,
NavPanel,
Notifications,
UserFinder,
SearchBar,
InstanceSpecificPanel,
FeaturesPanel,
WhoToFollowPanel,
ChatPanel,
MediaModal,
SideDrawer
SideDrawer,
MobilePostStatusButton,
MobileNav,
UserReportingModal,
PostStatusModal
},
data: () => ({
mobileActivePanel: 'timeline',
finderHidden: true,
searchBarHidden: true,
supportsMask: window.CSS && window.CSS.supports && (
window.CSS.supports('mask-size', 'contain') ||
window.CSS.supports('-webkit-mask-size', 'contain') ||
@@ -37,7 +45,11 @@ export default {
}),
created () {
// Load the locale from the storage
this.$i18n.locale = this.$store.state.config.interfaceLanguage
this.$i18n.locale = this.$store.getters.mergedConfig.interfaceLanguage
window.addEventListener('resize', this.updateMobileState)
},
destroyed () {
window.removeEventListener('resize', this.updateMobileState)
},
computed: {
currentUser () { return this.$store.state.users.currentUser },
@@ -60,7 +72,7 @@ export default {
logoBgStyle () {
return Object.assign({
'margin': `${this.$store.state.instance.logoMargin} 0`,
opacity: this.finderHidden ? 1 : 0
opacity: this.searchBarHidden ? 1 : 0
}, this.enableMask ? {} : {
'background-color': this.enableMask ? '' : 'transparent'
})
@@ -78,15 +90,16 @@ export default {
},
sitename () { return this.$store.state.instance.name },
chat () { return this.$store.state.chat.channel.state === 'joined' },
hideSitename () { return this.$store.state.instance.hideSitename },
suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },
showInstanceSpecificPanel () { return this.$store.state.instance.showInstanceSpecificPanel },
unseenNotifications () {
return unseenNotificationsFromStore(this.$store)
showInstanceSpecificPanel () {
return this.$store.state.instance.showInstanceSpecificPanel &&
!this.$store.getters.mergedConfig.hideISP &&
this.$store.state.instance.instanceSpecificPanelContent
},
unseenNotificationsCount () {
return this.unseenNotifications.length
},
showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel }
showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },
isMobileLayout () { return this.$store.state.interface.mobileLayout },
privateMode () { return this.$store.state.instance.private }
},
methods: {
scrollToTop () {
@@ -96,11 +109,15 @@ export default {
this.$router.replace('/main/public')
this.$store.dispatch('logout')
},
onFinderToggled (hidden) {
this.finderHidden = hidden
onSearchBarToggled (hidden) {
this.searchBarHidden = hidden
},
toggleMobileSidebar () {
this.$refs.sideDrawer.toggleDrawer()
updateMobileState () {
const mobileLayout = windowWidth() <= 800
const changed = mobileLayout !== this.isMobileLayout
if (changed) {
this.$store.dispatch('setMobileLayout', mobileLayout)
}
}
}
}
+335 -109
View File
@@ -10,13 +10,14 @@
position: fixed;
z-index: -1;
height: 100%;
width: 100%;
left: 0;
right: -20px;
background-size: cover;
background-repeat: no-repeat;
background-position: 0 50%;
}
i {
i[class^='icon-'] {
user-select: none;
}
@@ -30,23 +31,35 @@ h4 {
margin: auto;
min-height: 100vh;
max-width: 980px;
background-color: rgba(0,0,0,0.15);
align-content: flex-start;
}
.underlay {
background-color: rgba(0,0,0,0.15);
background-color: var(--underlay, rgba(0,0,0,0.15));
}
.text-center {
text-align: center;
}
html {
font-size: 14px;
}
body {
font-family: sans-serif;
font-family: var(--interfaceFont, sans-serif);
font-size: 14px;
margin: 0;
color: $fallback--text;
color: var(--text, $fallback--text);
max-width: 100vw;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
&.hidden {
display: none;
}
}
a {
@@ -65,7 +78,7 @@ button {
border-radius: $fallback--btnRadius;
border-radius: var(--btnRadius, $fallback--btnRadius);
cursor: pointer;
box-shadow: 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;
box-shadow: $fallback--buttonShadow;
box-shadow: var(--buttonShadow);
font-size: 14px;
font-family: sans-serif;
@@ -88,27 +101,59 @@ button {
&:active {
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);
color: $fallback--text;
color: var(--btnPressedText, $fallback--text);
background-color: $fallback--fg;
background-color: var(--btnPressed, $fallback--fg);
i {
color: $fallback--text;
color: var(--btnPressedText, $fallback--text);
}
}
&:disabled {
cursor: not-allowed;
opacity: 0.5;
color: $fallback--text;
color: var(--btnDisabledText, $fallback--text);
background-color: $fallback--fg;
background-color: var(--btnDisabled, $fallback--fg);
i {
color: $fallback--text;
color: var(--btnDisabledText, $fallback--text);
}
}
&.pressed {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg)
&.toggled {
color: $fallback--text;
color: var(--btnToggledText, $fallback--text);
background-color: $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: var(--buttonPressedShadow);
i {
color: $fallback--text;
color: var(--btnToggledText, $fallback--text);
}
}
&.danger {
// TODO: add better color variable
color: $fallback--text;
color: var(--alertErrorPanelText, $fallback--text);
background-color: $fallback--alertError;
background-color: var(--alertError, $fallback--alertError);
}
}
label.select {
padding: 0;
input, textarea, .select, .input {
}
&.unstyled {
border-radius: 0;
background: none;
box-shadow: none;
height: unset;
}
input, textarea, .select {
border: none;
border-radius: $fallback--inputRadius;
border-radius: var(--inputRadius, $fallback--inputRadius);
@@ -121,13 +166,18 @@ input, textarea, .select {
font-family: sans-serif;
font-family: var(--inputFont, sans-serif);
font-size: 14px;
padding: 8px .5em;
margin: 0;
box-sizing: border-box;
display: inline-block;
position: relative;
height: 28px;
line-height: 16px;
hyphens: none;
padding: 8px .5em;
&.select {
padding: 0;
}
&:disabled, &[disabled=disabled] {
cursor: not-allowed;
@@ -141,7 +191,7 @@ input, textarea, .select {
right: 5px;
height: 100%;
color: $fallback--text;
color: var(--text, $fallback--text);
color: var(--inputText, $fallback--text);
line-height: 28px;
z-index: 0;
pointer-events: none;
@@ -154,7 +204,7 @@ input, textarea, .select {
background: transparent;
border: none;
color: $fallback--text;
color: var(--text, $fallback--text);
color: var(--inputText, --text, $fallback--text);
margin: 0;
padding: 0 2em 0 .2em;
font-family: sans-serif;
@@ -174,15 +224,14 @@ input, textarea, .select {
flex: 1;
}
&[type=radio],
&[type=checkbox] {
&[type=radio] {
display: none;
&:checked + label::before {
color: $fallback--text;
color: var(--text, $fallback--text);
box-shadow: 0px 0px 2px black inset, 0px 0px 0px 4px $fallback--fg inset;
box-shadow: var(--inputShadow), 0px 0px 0px 4px var(--fg, $fallback--fg) inset;
background-color: var(--accent, $fallback--link);
}
&:disabled,
{
&:disabled {
&,
& + label,
& + label::before {
@@ -190,6 +239,44 @@ input, textarea, .select {
}
}
+ label::before {
flex-shrink: 0;
display: inline-block;
content: '';
transition: box-shadow 200ms;
width: 1.1em;
height: 1.1em;
border-radius: 100%; // Radio buttons should always be circle
box-shadow: 0px 0px 2px black inset;
box-shadow: var(--inputShadow);
margin-right: .5em;
background-color: $fallback--fg;
background-color: var(--input, $fallback--fg);
vertical-align: top;
text-align: center;
line-height: 1.1em;
font-size: 1.1em;
box-sizing: border-box;
color: transparent;
overflow: hidden;
box-sizing: border-box;
}
}
&[type=checkbox] {
display: none;
&:checked + label::before {
color: $fallback--text;
color: var(--inputText, $fallback--text);
}
&:disabled {
&,
& + label,
& + label::before {
opacity: .5;
}
}
+ label::before {
flex-shrink: 0;
display: inline-block;
content: '';
transition: color 200ms;
@@ -221,11 +308,45 @@ option {
background-color: var(--bg, $fallback--bg);
}
.hide-number-spinner {
-moz-appearance: textfield;
&[type=number]::-webkit-inner-spin-button,
&[type=number]::-webkit-outer-spin-button {
opacity: 0;
display: none;
}
}
i[class*=icon-] {
color: $fallback--icon;
color: var(--icon, $fallback--icon)
}
.btn-block {
display: block;
width: 100%;
}
.btn-group {
position: relative;
display: inline-flex;
vertical-align: middle;
button {
position: relative;
flex: 1 1 auto;
&:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
}
.container {
display: flex;
@@ -261,6 +382,34 @@ i[class*=icon-] {
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;
@@ -300,6 +449,7 @@ i[class*=icon-] {
}
.inner-nav {
position: relative;
margin: auto;
box-sizing: border-box;
padding-left: 10px;
@@ -372,6 +522,7 @@ main-router {
.panel-heading {
display: flex;
flex: none;
border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;
border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;
background-size: cover;
@@ -394,6 +545,10 @@ main-router {
color: $fallback--faint;
color: var(--panelFaint, $fallback--faint);
}
.faint-link {
color: $fallback--faint;
color: var(--faintLink, $fallback--faint);
}
.alert {
white-space: nowrap;
@@ -416,6 +571,30 @@ main-router {
align-self: stretch;
}
button {
&, i[class*=icon-] {
color: $fallback--text;
color: var(--btnPanelText, $fallback--text);
}
&:active {
background-color: $fallback--fg;
background-color: var(--btnPressedPanel, $fallback--fg);
color: $fallback--text;
color: var(--btnPressedPanelText, $fallback--text);
}
&:disabled {
color: $fallback--text;
color: var(--btnDisabledPanelText, $fallback--text);
}
&.toggled {
color: $fallback--text;
color: var(--btnToggledPanelText, $fallback--text);
}
}
a {
color: $fallback--link;
color: var(--panelLink, $fallback--link)
@@ -466,41 +645,6 @@ nav {
color: var(--faint, $fallback--faint);
box-shadow: 0px 0px 4px rgba(0,0,0,.6);
box-shadow: var(--topBarShadow);
.back-button {
display: block;
max-width: 99px;
transition-property: opacity, max-width;
transition-duration: 300ms;
transition-timing-function: ease-out;
i {
margin: 0 1em;
}
&.hidden {
opacity: 0;
max-width: 5px;
}
}
}
.menu-button {
display: none;
position: relative;
}
.alert-dot {
border-radius: 100%;
height: 8px;
width: 8px;
position: absolute;
left: calc(50% - 4px);
top: calc(50% - 4px);
margin-left: 6px;
margin-top: -6px;
background-color: $fallback--cRed;
background-color: var(--badgeNotification, $fallback--cRed);
}
.fade-enter-active, .fade-leave-active {
@@ -531,31 +675,11 @@ nav {
display: none;
}
.panel-switcher {
display: none;
width: 100%;
height: 46px;
button {
display: block;
flex: 1;
max-height: 32px;
margin: 0.5em;
padding: 0.5em;
}
}
@media all and (min-width: 800px) {
body {
overflow-y: scroll;
}
nav {
.back-button {
display: none;
}
}
.sidebar-bounds {
overflow: hidden;
max-height: 100vh;
@@ -623,12 +747,34 @@ nav {
color: var(--alertErrorPanelText, $fallback--text);
}
}
&.warning {
background-color: $fallback--alertWarning;
background-color: var(--alertWarning, $fallback--alertWarning);
color: $fallback--text;
color: var(--alertWarningText, $fallback--text);
.panel-heading & {
color: $fallback--text;
color: var(--alertWarningPanelText, $fallback--text);
}
}
}
.faint {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
}
.faint-link {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
&:hover {
text-decoration: underline;
}
}
@media all and (min-width: 800px) {
.logo {
opacity: 1 !important;
@@ -639,25 +785,6 @@ nav {
text-align: right;
}
.visibility-tray {
font-size: 1.2em;
padding: 3px;
cursor: pointer;
.selected {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
.text-format {
float: right;
}
div {
padding-top: 5px;
}
}
.visibility-notice {
padding: .5em;
border: 1px solid $fallback--faint;
@@ -666,6 +793,23 @@ nav {
border-radius: var(--inputRadius, $fallback--inputRadius);
}
.notice-dismissible {
padding-right: 4rem;
position: relative;
.dismiss {
position: absolute;
top: 0;
right: 0;
padding: .5em;
color: inherit;
}
}
.button-icon {
font-size: 1.2em;
}
@keyframes shakeError {
0% {
transform: translateX(0);
@@ -710,25 +854,79 @@ nav {
margin: 0.5em 0 0.5em 0;
}
.button-icon {
font-size: 1.2em;
}
.status .status-actions {
div {
max-width: 4em;
}
}
.menu-button {
display: block;
margin-right: 0.8em;
}
}
.setting-item {
border-bottom: 2px solid var(--fg, $fallback--fg);
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 {
display: flex;
.option-list {
margin: 0;
padding-left: .5em;
}
}
.setting-list,
.option-list{
list-style-type: none;
padding-left: 2em;
li {
margin-bottom: 0.5em;
}
.suboptions {
margin-top: 0.3em
}
}
.login-hint {
text-align: center;
@media all and (min-width: 801px) {
display: none;
}
@@ -743,3 +941,31 @@ nav {
.btn.btn-default {
min-height: 28px;
}
.animate-spin {
animation: spin 2s infinite linear;
display: inline-block;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(359deg);
}
}
.new-status-notification {
position:relative;
margin-top: -1px;
font-size: 1.1em;
border-width: 1px 0 0 0;
border-style: solid;
border-color: var(--border, $fallback--border);
padding: 10px;
z-index: 1;
background-color: $fallback--fg;
background-color: var(--panel, $fallback--fg);
}
+104 -31
View File
@@ -1,55 +1,128 @@
<template>
<div id="app" v-bind:style="bgAppStyle">
<div class="app-bg-wrapper" v-bind:style="bgStyle"></div>
<nav class='nav-bar container' @click="scrollToTop()" id="nav">
<div class='logo' :style='logoBgStyle'>
<div class='mask' :style='logoMaskStyle'></div>
<img :src='logo' :style='logoStyle'>
</div>
<div class='inner-nav'>
<div class='item'>
<a href="#" class="menu-button" @click.stop.prevent="toggleMobileSidebar()">
<i class="button-icon icon-menu"></i>
<div class="alert-dot" v-if="unseenNotificationsCount"></div>
</a>
<router-link class="site-name" :to="{ name: 'root' }" active-class="home">{{sitename}}</router-link>
<div
id="app"
:style="bgAppStyle"
>
<div
id="app_bg_wrapper"
class="app-bg-wrapper"
:style="bgStyle"
/>
<MobileNav v-if="isMobileLayout" />
<nav
v-else
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 right'>
<user-finder class="button-icon nav-icon mobile-hidden" @toggled="onFinderToggled"></user-finder>
<router-link class="mobile-hidden" :to="{ name: 'settings'}"><i class="button-icon icon-cog nav-icon" :title="$t('nav.preferences')"></i></router-link>
<a href="#" class="mobile-hidden" v-if="currentUser" @click.prevent="logout"><i class="button-icon icon-logout nav-icon" :title="$t('login.logout')"></i></a>
<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 v-if="" class="container" id="content">
<side-drawer ref="sideDrawer" :logout="logout"></side-drawer>
<div
id="content"
class="container underlay"
>
<div class="sidebar-flexer mobile-hidden">
<div class="sidebar-bounds">
<div class="sidebar-scroller">
<div class="sidebar">
<user-panel></user-panel>
<nav-panel></nav-panel>
<instance-specific-panel v-if="showInstanceSpecificPanel"></instance-specific-panel>
<features-panel v-if="!currentUser && showFeaturesPanel"></features-panel>
<who-to-follow-panel v-if="currentUser && suggestionsEnabled"></who-to-follow-panel>
<notifications v-if="currentUser"></notifications>
<user-panel />
<div v-if="!isMobileLayout">
<nav-panel />
<instance-specific-panel v-if="showInstanceSpecificPanel" />
<features-panel v-if="!currentUser && showFeaturesPanel" />
<who-to-follow-panel v-if="currentUser && suggestionsEnabled" />
<notifications v-if="currentUser" />
</div>
</div>
</div>
</div>
</div>
<div class="main">
<div v-if="!currentUser" class="login-hint panel panel-default">
<router-link :to="{ name: 'login' }" class="panel-body">
<div
v-if="!currentUser"
class="login-hint panel panel-default"
>
<router-link
:to="{ name: 'login' }"
class="panel-body"
>
{{ $t("login.hint") }}
</router-link>
</div>
<transition name="fade">
<router-view></router-view>
<router-view />
</transition>
</div>
<media-modal></media-modal>
<media-modal />
</div>
<chat-panel :floating="true" v-if="currentUser && chat" class="floating-chat mobile-hidden"></chat-panel>
<chat-panel
v-if="currentUser && chat"
:floating="true"
class="floating-chat mobile-hidden"
/>
<MobilePostStatusButton />
<UserReportingModal />
<PostStatusModal />
<portal-target name="modal" />
</div>
</template>
+3
View File
@@ -17,6 +17,7 @@ $fallback--cGreen: #0fa00f;
$fallback--cOrange: orange;
$fallback--alertError: rgba(211,16,20,.5);
$fallback--alertWarning: rgba(111,111,20,.5);
$fallback--panelRadius: 10px;
$fallback--checkboxRadius: 2px;
@@ -26,3 +27,5 @@ $fallback--tooltipRadius: 5px;
$fallback--avatarRadius: 4px;
$fallback--avatarAltRadius: 10px;
$fallback--attachmentRadius: 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;
+275 -127
View File
@@ -1,19 +1,25 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import App from '../App.vue'
import { windowWidth } from '../services/window_utils/window_utils'
import { getOrCreateApp, getClientToken } from '../services/new_api/oauth.js'
import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js'
import { CURRENT_VERSION } from '../services/theme_data/theme_data.service.js'
import { applyTheme } from '../services/style_setter/style_setter.js'
const afterStoreSetup = ({ store, i18n }) => {
window.fetch('/api/statusnet/config.json')
.then((res) => res.json())
.then((data) => {
const { name, closed: registrationClosed, textlimit, uploadlimit, server, vapidPublicKey } = data.site
const getStatusnetConfig = async ({ store }) => {
try {
const res = await window.fetch('/api/statusnet/config.json')
if (res.ok) {
const data = await res.json()
const { name, closed: registrationClosed, textlimit, uploadlimit, server, vapidPublicKey, safeDMMentionsEnabled } = data.site
store.dispatch('setInstanceOption', { name: 'name', value: name })
store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
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.
@@ -28,153 +34,295 @@ const afterStoreSetup = ({ store, i18n }) => {
store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })
}
var apiConfig = data.site.pleromafe
return data.site.pleromafe
} else {
throw (res)
}
} catch (error) {
console.error('Could not load statusnet config, potentially fatal')
console.error(error)
}
}
window.fetch('/static/config.json')
.then((res) => res.json())
.catch((err) => {
console.warn('Failed to load static/config.json, continuing without it.')
console.warn(err)
return {}
})
.then((staticConfig) => {
const overrides = window.___pleromafe_dev_overrides || {}
const env = window.___pleromafe_mode.NODE_ENV
const getStaticConfig = async () => {
try {
const res = await window.fetch('/static/config.json')
if (res.ok) {
return res.json()
} else {
throw (res)
}
} catch (error) {
console.warn('Failed to load static/config.json, continuing without it.')
console.warn(error)
return {}
}
}
// This takes static config and overrides properties that are present in apiConfig
let config = {}
if (overrides.staticConfigPreference && env === 'development') {
console.warn('OVERRIDING API CONFIG WITH STATIC CONFIG')
config = Object.assign({}, apiConfig, staticConfig)
} else {
config = Object.assign({}, staticConfig, apiConfig)
}
const setSettings = async ({ apiConfig, staticConfig, store }) => {
const overrides = window.___pleromafe_dev_overrides || {}
const env = window.___pleromafe_mode.NODE_ENV
const copyInstanceOption = (name) => {
store.dispatch('setInstanceOption', {name, value: config[name]})
}
// This takes static config and overrides properties that are present in apiConfig
let config = {}
if (overrides.staticConfigPreference && env === 'development') {
console.warn('OVERRIDING API CONFIG WITH STATIC CONFIG')
config = Object.assign({}, apiConfig, staticConfig)
} else {
config = Object.assign({}, staticConfig, apiConfig)
}
copyInstanceOption('nsfwCensorImage')
copyInstanceOption('background')
copyInstanceOption('hidePostStats')
copyInstanceOption('hideUserStats')
copyInstanceOption('hideFilteredStatuses')
copyInstanceOption('logo')
const copyInstanceOption = (name) => {
store.dispatch('setInstanceOption', { name, value: config[name] })
}
store.dispatch('setInstanceOption', {
name: 'logoMask',
value: typeof config.logoMask === 'undefined'
? true
: config.logoMask
})
copyInstanceOption('nsfwCensorImage')
copyInstanceOption('background')
copyInstanceOption('hidePostStats')
copyInstanceOption('hideUserStats')
copyInstanceOption('hideFilteredStatuses')
copyInstanceOption('logo')
store.dispatch('setInstanceOption', {
name: 'logoMargin',
value: typeof config.logoMargin === 'undefined'
? 0
: config.logoMargin
})
store.dispatch('setInstanceOption', {
name: 'logoMask',
value: typeof config.logoMask === 'undefined'
? true
: config.logoMask
})
copyInstanceOption('redirectRootNoLogin')
copyInstanceOption('redirectRootLogin')
copyInstanceOption('showInstanceSpecificPanel')
copyInstanceOption('scopeOptionsEnabled')
copyInstanceOption('formattingOptionsEnabled')
copyInstanceOption('collapseMessageWithSubject')
copyInstanceOption('loginMethod')
copyInstanceOption('scopeCopy')
copyInstanceOption('subjectLineBehavior')
copyInstanceOption('postContentType')
copyInstanceOption('alwaysShowSubjectInput')
copyInstanceOption('noAttachmentLinks')
copyInstanceOption('showFeaturesPanel')
store.dispatch('setInstanceOption', {
name: 'logoMargin',
value: typeof config.logoMargin === 'undefined'
? 0
: config.logoMargin
})
store.commit('authFlow/setInitialStrategy', config.loginMethod)
if ((config.chatDisabled)) {
store.dispatch('disableChat')
} else {
store.dispatch('initializeSocket')
}
copyInstanceOption('redirectRootNoLogin')
copyInstanceOption('redirectRootLogin')
copyInstanceOption('showInstanceSpecificPanel')
copyInstanceOption('minimalScopesMode')
copyInstanceOption('hideMutedPosts')
copyInstanceOption('collapseMessageWithSubject')
copyInstanceOption('scopeCopy')
copyInstanceOption('subjectLineBehavior')
copyInstanceOption('postContentType')
copyInstanceOption('alwaysShowSubjectInput')
copyInstanceOption('noAttachmentLinks')
copyInstanceOption('showFeaturesPanel')
copyInstanceOption('hideSitename')
return store.dispatch('setTheme', config['theme'])
})
.then(() => {
const router = new VueRouter({
mode: 'history',
routes: routes(store),
scrollBehavior: (to, _from, savedPosition) => {
if (to.matched.some(m => m.meta.dontScroll)) {
return false
}
return savedPosition || { x: 0, y: 0 }
}
})
return store.dispatch('setTheme', config['theme'])
}
/* eslint-disable no-new */
new Vue({
router,
store,
i18n,
el: '#app',
render: h => h(App)
})
})
})
window.fetch('/static/terms-of-service.html')
.then((res) => res.text())
.then((html) => {
const getTOS = async ({ store }) => {
try {
const res = await window.fetch('/static/terms-of-service.html')
if (res.ok) {
const html = await res.text()
store.dispatch('setInstanceOption', { name: 'tos', value: html })
})
} else {
throw (res)
}
} catch (e) {
console.warn("Can't load TOS")
console.warn(e)
}
}
window.fetch('/api/pleroma/emoji.json')
.then(
(res) => res.json()
.then(
(values) => {
const emoji = Object.keys(values).map((key) => {
return { shortcode: key, image_url: values[key] }
})
store.dispatch('setInstanceOption', { name: 'customEmoji', value: emoji })
store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: true })
},
(failure) => {
store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: false })
}
),
(error) => console.log(error)
)
window.fetch('/static/emoji.json')
.then((res) => res.json())
.then((values) => {
const emoji = Object.keys(values).map((key) => {
return { shortcode: key, image_url: false, 'utf': values[key] }
})
store.dispatch('setInstanceOption', { name: 'emoji', value: emoji })
})
window.fetch('/instance/panel.html')
.then((res) => res.text())
.then((html) => {
const getInstancePanel = async ({ store }) => {
try {
const res = await window.fetch('/instance/panel.html')
if (res.ok) {
const html = await res.text()
store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })
} else {
throw (res)
}
} catch (e) {
console.warn("Can't load instance panel")
console.warn(e)
}
}
const getStickers = async ({ store }) => {
try {
const res = await window.fetch('/static/stickers.json')
if (res.ok) {
const values = await res.json()
const stickers = (await Promise.all(
Object.entries(values).map(async ([name, path]) => {
const resPack = await window.fetch(path + 'pack.json')
var meta = {}
if (resPack.ok) {
meta = await resPack.json()
}
return {
pack: name,
path,
meta
}
})
)).sort((a, b) => {
return a.meta.title.localeCompare(b.meta.title)
})
store.dispatch('setInstanceOption', { name: 'stickers', value: stickers })
} else {
throw (res)
}
} catch (e) {
console.warn("Can't load stickers")
console.warn(e)
}
}
const getAppSecret = async ({ store }) => {
const { state, commit } = store
const { oauth, instance } = state
return getOrCreateApp({ ...oauth, instance: instance.server, commit })
.then((app) => getClientToken({ ...app, instance: instance.server }))
.then((token) => {
commit('setAppToken', token.access_token)
commit('setBackendInteractor', backendInteractorService(store.getters.getToken()))
})
}
window.fetch('/nodeinfo/2.0.json')
.then((res) => res.json())
.then((data) => {
const resolveStaffAccounts = ({ store, accounts }) => {
const nicknames = accounts.map(uri => uri.split('/').pop())
nicknames.map(nickname => store.dispatch('fetchUser', nickname))
store.dispatch('setInstanceOption', { name: 'staffAccounts', value: nicknames })
}
const getNodeInfo = async ({ store }) => {
try {
const res = await window.fetch('/nodeinfo/2.0.json')
if (res.ok) {
const data = await res.json()
const metadata = data.metadata
const features = metadata.features
store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') })
store.dispatch('setInstanceOption', { name: 'chatAvailable', value: features.includes('chat') })
store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })
store.dispatch('setInstanceOption', { name: 'pollsAvailable', value: features.includes('polls') })
store.dispatch('setInstanceOption', { name: 'pollLimits', value: metadata.pollLimits })
store.dispatch('setInstanceOption', { name: 'mailerEnabled', value: metadata.mailerEnabled })
store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames })
store.dispatch('setInstanceOption', { name: 'postFormats', value: metadata.postFormats })
const suggestions = metadata.suggestions
store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })
store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })
})
const software = data.software
store.dispatch('setInstanceOption', { name: 'backendVersion', value: software.version })
store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: software.name === 'pleroma' })
const priv = metadata.private
store.dispatch('setInstanceOption', { name: 'private', value: priv })
const frontendVersion = window.___pleromafe_commit_hash
store.dispatch('setInstanceOption', { name: 'frontendVersion', value: frontendVersion })
const federation = metadata.federation
store.dispatch('setInstanceOption', {
name: 'tagPolicyAvailable',
value: typeof federation.mrf_policies === 'undefined'
? false
: metadata.federation.mrf_policies.includes('TagPolicy')
})
store.dispatch('setInstanceOption', { name: 'federationPolicy', value: federation })
store.dispatch('setInstanceOption', {
name: 'federating',
value: typeof federation.enabled === 'undefined'
? true
: federation.enabled
})
const accounts = metadata.staffAccounts
resolveStaffAccounts({ store, accounts })
} else {
throw (res)
}
} catch (e) {
console.warn('Could not load nodeinfo')
console.warn(e)
}
}
const setConfig = async ({ store }) => {
// apiConfig, staticConfig
const configInfos = await Promise.all([getStatusnetConfig({ store }), getStaticConfig()])
const apiConfig = configInfos[0]
const staticConfig = configInfos[1]
await setSettings({ store, apiConfig, staticConfig }).then(getAppSecret({ store }))
}
const checkOAuthToken = async ({ store }) => {
return new Promise(async (resolve, reject) => {
if (store.getters.getUserToken()) {
try {
await store.dispatch('loginUser', store.getters.getUserToken())
} catch (e) {
console.error(e)
}
}
resolve()
})
}
const afterStoreSetup = async ({ store, i18n }) => {
const width = windowWidth()
store.dispatch('setMobileLayout', width <= 800)
await setConfig({ store })
const { customTheme, customThemeSource } = store.state.config
const { theme } = store.state.instance
const customThemePresent = customThemeSource || customTheme
if (customThemePresent) {
if (customThemeSource && customThemeSource.themeEngineVersion === CURRENT_VERSION) {
applyTheme(customThemeSource)
} else {
applyTheme(customTheme)
}
} else if (theme) {
// do nothing, it will load asynchronously
} else {
console.error('Failed to load any theme!')
}
// Now we can try getting the server settings and logging in
await Promise.all([
checkOAuthToken({ store }),
getTOS({ store }),
getInstancePanel({ store }),
getStickers({ store }),
getNodeInfo({ store })
])
const router = new VueRouter({
mode: 'history',
routes: routes(store),
scrollBehavior: (to, _from, savedPosition) => {
if (to.matched.some(m => m.meta.dontScroll)) {
return false
}
return savedPosition || { x: 0, y: 0 }
}
})
/* eslint-disable no-new */
return new Vue({
router,
store,
i18n,
el: '#app',
render: h => h(App)
})
}
export default afterStoreSetup
+35 -16
View File
@@ -3,52 +3,71 @@ import PublicAndExternalTimeline from 'components/public_and_external_timeline/p
import FriendsTimeline from 'components/friends_timeline/friends_timeline.vue'
import TagTimeline from 'components/tag_timeline/tag_timeline.vue'
import ConversationPage from 'components/conversation-page/conversation-page.vue'
import Mentions from 'components/mentions/mentions.vue'
import Interactions from 'components/interactions/interactions.vue'
import DMs from 'components/dm_timeline/dm_timeline.vue'
import UserProfile from 'components/user_profile/user_profile.vue'
import Search from 'components/search/search.vue'
import Settings from 'components/settings/settings.vue'
import Registration from 'components/registration/registration.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 OAuthCallback from 'components/oauth_callback/oauth_callback.vue'
import UserSearch from 'components/user_search/user_search.vue'
import Notifications from 'components/notifications/notifications.vue'
import UserPanel from 'components/user_panel/user_panel.vue'
import LoginForm from 'components/login_form/login_form.vue'
import AuthForm from 'components/auth_form/auth_form.js'
import ChatPanel from 'components/chat_panel/chat_panel.vue'
import WhoToFollow from 'components/who_to_follow/who_to_follow.vue'
import About from 'components/about/about.vue'
import RemoteUserResolver from 'components/remote_user_resolver/remote_user_resolver.vue'
export default (store) => {
const validateAuthenticatedRoute = (to, from, next) => {
if (store.state.users.currentUser) {
next()
} else {
next(store.state.instance.redirectRootNoLogin || '/main/all')
}
}
return [
{ name: 'root',
path: '/',
redirect: _to => {
return (store.state.users.currentUser
? store.state.instance.redirectRootLogin
: store.state.instance.redirectRootNoLogin) || '/main/all'
? store.state.instance.redirectRootLogin
: store.state.instance.redirectRootNoLogin) || '/main/all'
}
},
{ name: 'public-external-timeline', path: '/main/all', component: PublicAndExternalTimeline },
{ name: 'public-timeline', path: '/main/public', component: PublicTimeline },
{ name: 'friends', path: '/main/friends', component: FriendsTimeline },
{ name: 'friends', path: '/main/friends', component: FriendsTimeline, beforeEnter: validateAuthenticatedRoute },
{ name: 'tag-timeline', path: '/tag/:tag', component: TagTimeline },
{ name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
{ name: 'remote-user-profile-acct',
path: '/remote-users/(@?):username([^/@]+)@:hostname([^/@]+)',
component: RemoteUserResolver,
beforeEnter: validateAuthenticatedRoute
},
{ name: 'remote-user-profile',
path: '/remote-users/:hostname/:username',
component: RemoteUserResolver,
beforeEnter: validateAuthenticatedRoute
},
{ name: 'external-user-profile', path: '/users/:id', component: UserProfile },
{ name: 'mentions', path: '/users/:username/mentions', component: Mentions },
{ name: 'dms', path: '/users/:username/dms', component: DMs },
{ name: 'interactions', path: '/users/:username/interactions', component: Interactions, 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: 'password-reset', path: '/password-reset', component: PasswordReset, props: true },
{ name: 'registration-token', path: '/registration/:token', component: Registration },
{ name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
{ name: 'user-settings', path: '/user-settings', component: UserSettings },
{ name: 'notifications', path: '/:username/notifications', component: Notifications },
{ name: 'new-status', path: '/:username/new-status', component: UserPanel },
{ name: 'login', path: '/login', component: LoginForm },
{ 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: 'login', path: '/login', component: AuthForm },
{ name: 'chat', path: '/chat', component: ChatPanel, props: () => ({ floating: false }) },
{ name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },
{ name: 'user-search', path: '/user-search', component: UserSearch, props: (route) => ({ query: route.query.query }) },
{ name: 'who-to-follow', path: '/who-to-follow', component: WhoToFollow },
{ 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: 'about', path: '/about', component: About },
{ name: 'user-profile', path: '/(users/)?:name', component: UserProfile }
]
+11 -2
View File
@@ -1,15 +1,24 @@
import InstanceSpecificPanel from '../instance_specific_panel/instance_specific_panel.vue'
import FeaturesPanel from '../features_panel/features_panel.vue'
import TermsOfServicePanel from '../terms_of_service_panel/terms_of_service_panel.vue'
import StaffPanel from '../staff_panel/staff_panel.vue'
import MRFTransparencyPanel from '../mrf_transparency_panel/mrf_transparency_panel.vue'
const About = {
components: {
InstanceSpecificPanel,
FeaturesPanel,
TermsOfServicePanel
TermsOfServicePanel,
StaffPanel,
MRFTransparencyPanel
},
computed: {
showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel }
showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },
showInstanceSpecificPanel () {
return this.$store.state.instance.showInstanceSpecificPanel &&
!this.$store.getters.mergedConfig.hideISP &&
this.$store.state.instance.instanceSpecificPanelContent
}
}
}
+5 -3
View File
@@ -1,8 +1,10 @@
<template>
<div class="sidebar">
<instance-specific-panel></instance-specific-panel>
<features-panel v-if="showFeaturesPanel"></features-panel>
<terms-of-service-panel></terms-of-service-panel>
<instance-specific-panel v-if="showInstanceSpecificPanel" />
<staff-panel />
<terms-of-service-panel />
<MRFTransparencyPanel />
<features-panel v-if="showFeaturesPanel" />
</div>
</template>
@@ -0,0 +1,34 @@
import ProgressButton from '../progress_button/progress_button.vue'
import Popover from '../popover/popover.vue'
const AccountActions = {
props: [
'user'
],
data () {
return { }
},
components: {
ProgressButton,
Popover
},
methods: {
showRepeats () {
this.$store.dispatch('showReblogs', this.user.id)
},
hideRepeats () {
this.$store.dispatch('hideReblogs', this.user.id)
},
blockUser () {
this.$store.dispatch('blockUser', this.user.id)
},
unblockUser () {
this.$store.dispatch('unblockUser', this.user.id)
},
reportUser () {
this.$store.dispatch('openUserReportingModal', this.user.id)
}
}
}
export default AccountActions
@@ -0,0 +1,86 @@
<template>
<div class="account-actions">
<Popover
trigger="click"
placement="bottom"
>
<div
slot="content"
class="account-tools-popover"
>
<div class="dropdown-menu">
<template v-if="user.following">
<button
v-if="user.showing_reblogs"
class="btn btn-default dropdown-item"
@click="hideRepeats"
>
{{ $t('user_card.hide_repeats') }}
</button>
<button
v-if="!user.showing_reblogs"
class="btn btn-default dropdown-item"
@click="showRepeats"
>
{{ $t('user_card.show_repeats') }}
</button>
<div
role="separator"
class="dropdown-divider"
/>
</template>
<button
v-if="user.statusnet_blocking"
class="btn btn-default btn-block dropdown-item"
@click="unblockUser"
>
{{ $t('user_card.unblock') }}
</button>
<button
v-else
class="btn btn-default btn-block dropdown-item"
@click="blockUser"
>
{{ $t('user_card.block') }}
</button>
<button
class="btn btn-default btn-block dropdown-item"
@click="reportUser"
>
{{ $t('user_card.report') }}
</button>
</div>
</div>
<div
slot="trigger"
class="btn btn-default ellipsis-button"
>
<i class="icon-ellipsis trigger-button" />
</div>
</Popover>
</div>
</template>
<script src="./account_actions.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.account-actions {
margin: 0 .8em;
}
.account-actions button.dropdown-item {
margin-left: 0;
}
.account-actions .trigger-button {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
opacity: .8;
cursor: pointer;
&:hover {
color: $fallback--text;
color: var(--text, $fallback--text);
}
}
</style>
+18 -7
View File
@@ -2,6 +2,7 @@ import StillImage from '../still-image/still-image.vue'
import VideoAttachment from '../video_attachment/video_attachment.vue'
import nsfwImage from '../../assets/nsfw.png'
import fileTypeService from '../../services/file_type/file_type.service.js'
import { mapGetters } from 'vuex'
const Attachment = {
props: [
@@ -10,13 +11,14 @@ const Attachment = {
'statusId',
'size',
'allowPlay',
'setMedia'
'setMedia',
'naturalSizeLoad'
],
data () {
return {
nsfwImage: this.$store.state.instance.nsfwCensorImage || nsfwImage,
hideNsfwLocal: this.$store.state.config.hideNsfw,
preloadImage: this.$store.state.config.preloadImage,
hideNsfwLocal: this.$store.getters.mergedConfig.hideNsfw,
preloadImage: this.$store.getters.mergedConfig.preloadImage,
loading: false,
img: fileTypeService.fileType(this.attachment.mimetype) === 'image' && document.createElement('img'),
modalOpen: false,
@@ -48,16 +50,17 @@ const Attachment = {
},
fullwidth () {
return this.type === 'html' || this.type === 'audio'
}
},
...mapGetters(['mergedConfig'])
},
methods: {
linkClicked ({target}) {
linkClicked ({ target }) {
if (target.tagName === 'A') {
window.open(target.href, '_blank')
}
},
openModal (event) {
const modalTypes = this.$store.state.config.playVideosInModal
const modalTypes = this.mergedConfig.playVideosInModal
? ['image', 'video']
: ['image']
if (fileTypeService.fileMatchesSomeType(modalTypes, this.attachment) ||
@@ -70,7 +73,10 @@ const Attachment = {
}
},
toggleHidden (event) {
if (this.$store.state.config.useOneClickNsfw && !this.showHidden) {
if (
(this.mergedConfig.useOneClickNsfw && !this.showHidden) &&
(this.type !== 'video' || this.mergedConfig.playVideosInModal)
) {
this.openModal(event)
return
}
@@ -88,6 +94,11 @@ const Attachment = {
} else {
this.showHidden = !this.showHidden
}
},
onImageLoad (image) {
const width = image.naturalWidth
const height = image.naturalHeight
this.naturalSizeLoad && this.naturalSizeLoad({ width, height })
}
}
}
+85 -27
View File
@@ -1,54 +1,107 @@
<template>
<div v-if="usePlaceHolder" @click="openModal">
<a class="placeholder"
<div
v-if="usePlaceHolder"
@click="openModal"
>
<a
v-if="type !== 'html'"
target="_blank" :href="attachment.url"
class="placeholder"
target="_blank"
:href="attachment.url"
>
[{{nsfw ? "NSFW/" : ""}}{{type.toUpperCase()}}]
[{{ nsfw ? "NSFW/" : "" }}{{ type.toUpperCase() }}]
</a>
</div>
<div
v-else class="attachment"
:class="{[type]: true, loading, 'fullwidth': fullwidth, 'nsfw-placeholder': hidden}"
v-else
v-show="!isEmpty"
class="attachment"
:class="{[type]: true, loading, 'fullwidth': fullwidth, 'nsfw-placeholder': hidden}"
>
<a class="image-attachment" v-if="hidden" :href="attachment.url" @click.prevent="toggleHidden">
<img class="nsfw" :key="nsfwImage" :src="nsfwImage" :class="{'small': isSmall}"/>
<i v-if="type === 'video'" class="play-icon icon-play-circled"></i>
<a
v-if="hidden"
class="image-attachment"
:href="attachment.url"
@click.prevent="toggleHidden"
>
<img
:key="nsfwImage"
class="nsfw"
:src="nsfwImage"
:class="{'small': isSmall}"
>
<i
v-if="type === 'video'"
class="play-icon icon-play-circled"
/>
</a>
<div class="hider" v-if="nsfw && hideNsfwLocal && !hidden">
<a href="#" @click.prevent="toggleHidden">Hide</a>
<div
v-if="nsfw && hideNsfwLocal && !hidden"
class="hider"
>
<a
href="#"
@click.prevent="toggleHidden"
>Hide</a>
</div>
<a v-if="type === 'image' && (!hidden || preloadImage)"
@click="openModal"
<a
v-if="type === 'image' && (!hidden || preloadImage)"
class="image-attachment"
:class="{'hidden': hidden && preloadImage }"
:href="attachment.url" target="_blank"
:href="attachment.url"
target="_blank"
:title="attachment.description"
@click="openModal"
>
<StillImage :referrerpolicy="referrerpolicy" :mimetype="attachment.mimetype" :src="attachment.large_thumb_url || attachment.url"/>
<StillImage
:referrerpolicy="referrerpolicy"
:mimetype="attachment.mimetype"
:src="attachment.large_thumb_url || attachment.url"
:image-load-handler="onImageLoad"
/>
</a>
<a class="video-container"
@click="openModal"
<a
v-if="type === 'video' && !hidden"
class="video-container"
:class="{'small': isSmall}"
:href="allowPlay ? undefined : attachment.url"
@click="openModal"
>
<VideoAttachment class="video" :attachment="attachment" :controls="allowPlay" />
<i v-if="!allowPlay" class="play-icon icon-play-circled"></i>
<VideoAttachment
class="video"
:attachment="attachment"
:controls="allowPlay"
/>
<i
v-if="!allowPlay"
class="play-icon icon-play-circled"
/>
</a>
<audio v-if="type === 'audio'" :src="attachment.url" controls></audio>
<audio
v-if="type === 'audio'"
:src="attachment.url"
controls
/>
<div @click.prevent="linkClicked" v-if="type === 'html' && attachment.oembed" class="oembed">
<div v-if="attachment.thumb_url" class="image">
<img :src="attachment.thumb_url"/>
<div
v-if="type === 'html' && attachment.oembed"
class="oembed"
@click.prevent="linkClicked"
>
<div
v-if="attachment.thumb_url"
class="image"
>
<img :src="attachment.thumb_url">
</div>
<div class="text">
<h1><a :href="attachment.url">{{attachment.oembed.title}}</a></h1>
<div v-html="attachment.oembed.oembedHTML"></div>
<!-- eslint-disable vue/no-v-html -->
<h1><a :href="attachment.url">{{ attachment.oembed.title }}</a></h1>
<div v-html="attachment.oembed.oembedHTML" />
<!-- eslint-enable vue/no-v-html -->
</div>
</div>
</div>
@@ -68,6 +121,7 @@
max-height: 200px;
max-width: 100%;
display: flex;
align-items: center;
video {
max-width: 100%;
}
@@ -76,6 +130,8 @@
.placeholder {
margin-right: 8px;
margin-bottom: 4px;
color: $fallback--link;
color: var(--postLink, $fallback--link);
}
.nsfw-placeholder {
@@ -88,7 +144,7 @@
.attachment {
position: relative;
margin: 0.5em 0.5em 0em 0em;
margin-top: 0.5em;
align-self: flex-start;
line-height: 0;
@@ -137,6 +193,7 @@
.video {
width: 100%;
height: 100%;
}
.play-icon {
@@ -160,6 +217,7 @@
.hider {
position: absolute;
right: 0;
white-space: nowrap;
margin: 10px;
padding: 5px;
@@ -232,7 +290,7 @@
}
img {
image-orientation: from-image;
image-orientation: from-image; // NOTE: only FF supports this
}
}
}
+26
View File
@@ -0,0 +1,26 @@
import LoginForm from '../login_form/login_form.vue'
import MFARecoveryForm from '../mfa_form/recovery_form.vue'
import MFATOTPForm from '../mfa_form/totp_form.vue'
import { mapGetters } from 'vuex'
const AuthForm = {
name: 'AuthForm',
render (createElement) {
return createElement('component', { is: this.authForm })
},
computed: {
authForm () {
if (this.requiredTOTP) { return 'MFATOTPForm' }
if (this.requiredRecovery) { return 'MFARecoveryForm' }
return 'LoginForm'
},
...mapGetters('authFlow', ['requiredTOTP', 'requiredRecovery'])
},
components: {
MFARecoveryForm,
MFATOTPForm,
LoginForm
}
}
export default AuthForm
+52
View File
@@ -0,0 +1,52 @@
const debounceMilliseconds = 500
export default {
props: {
query: { // function to query results and return a promise
type: Function,
required: true
},
filter: { // function to filter results in real time
type: Function
},
placeholder: {
type: String,
default: 'Search...'
}
},
data () {
return {
term: '',
timeout: null,
results: [],
resultsVisible: false
}
},
computed: {
filtered () {
return this.filter ? this.filter(this.results) : this.results
}
},
watch: {
term (val) {
this.fetchResults(val)
}
},
methods: {
fetchResults (term) {
clearTimeout(this.timeout)
this.timeout = setTimeout(() => {
this.results = []
if (term) {
this.query(term).then((results) => { this.results = results })
}
}, debounceMilliseconds)
},
onInputClick () {
this.resultsVisible = true
},
onClickOutside () {
this.resultsVisible = false
}
}
}
@@ -0,0 +1,59 @@
<template>
<div
v-click-outside="onClickOutside"
class="autosuggest"
>
<input
v-model="term"
:placeholder="placeholder"
class="autosuggest-input"
@click="onInputClick"
>
<div
v-if="resultsVisible && filtered.length > 0"
class="autosuggest-results"
>
<slot
v-for="item in filtered"
:item="item"
/>
</div>
</div>
</template>
<script src="./autosuggest.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.autosuggest {
position: relative;
&-input {
display: block;
width: 100%;
}
&-results {
position: absolute;
left: 0;
top: 100%;
right: 0;
max-height: 400px;
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
border-style: solid;
border-width: 1px;
border-color: $fallback--border;
border-color: var(--border, $fallback--border);
border-radius: $fallback--inputRadius;
border-radius: var(--inputRadius, $fallback--inputRadius);
border-top-left-radius: 0;
border-top-right-radius: 0;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.6);
box-shadow: var(--panelShadow);
overflow-y: auto;
z-index: 1;
}
}
</style>
+21
View File
@@ -0,0 +1,21 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
const AvatarList = {
props: ['users'],
computed: {
slicedUsers () {
return this.users ? this.users.slice(0, 15) : []
}
},
components: {
UserAvatar
},
methods: {
userProfileLink (user) {
return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)
}
}
}
export default AvatarList
@@ -0,0 +1,46 @@
<template>
<div class="avatars">
<router-link
v-for="user in slicedUsers"
:key="user.id"
:to="userProfileLink(user)"
class="avatars-item"
>
<UserAvatar
:user="user"
class="avatar-small"
/>
</router-link>
</div>
</template>
<script src="./avatar_list.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
.avatars {
display: flex;
margin: 0;
padding: 0;
// For hiding overflowing elements
flex-wrap: wrap;
height: 24px;
.avatars-item {
margin: 0 0 5px 5px;
&:first-child {
padding-left: 5px;
}
.avatar-small {
border-radius: $fallback--avatarAltRadius;
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
height: 24px;
width: 24px;
}
}
}
</style>
@@ -0,0 +1,28 @@
import UserCard from '../user_card/user_card.vue'
import UserAvatar from '../user_avatar/user_avatar.vue'
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
const BasicUserCard = {
props: [
'user'
],
data () {
return {
userExpanded: false
}
},
components: {
UserCard,
UserAvatar
},
methods: {
toggleUserExpanded () {
this.userExpanded = !this.userExpanded
},
userProfileLink (user) {
return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)
}
}
}
export default BasicUserCard
@@ -0,0 +1,93 @@
<template>
<div class="basic-user-card">
<router-link :to="userProfileLink(user)">
<UserAvatar
class="avatar"
:user="user"
@click.prevent.native="toggleUserExpanded"
/>
</router-link>
<div
v-if="userExpanded"
class="basic-user-card-expanded-content"
>
<UserCard
:user="user"
:rounded="true"
:bordered="true"
/>
</div>
<div
v-else
class="basic-user-card-collapsed-content"
>
<div
:title="user.name"
class="basic-user-card-user-name"
>
<!-- eslint-disable vue/no-v-html -->
<span
v-if="user.name_html"
class="basic-user-card-user-name-value"
v-html="user.name_html"
/>
<!-- eslint-enable vue/no-v-html -->
<span
v-else
class="basic-user-card-user-name-value"
>{{ user.name }}</span>
</div>
<div>
<router-link
class="basic-user-card-screen-name"
:to="userProfileLink(user)"
>
@{{ user.screen_name }}
</router-link>
</div>
<slot />
</div>
</div>
</template>
<script src="./basic_user_card.js"></script>
<style lang="scss">
.basic-user-card {
display: flex;
flex: 1 0;
margin: 0;
padding: 0.6em 1em;
&-collapsed-content {
margin-left: 0.7em;
text-align: left;
flex: 1;
min-width: 0;
}
&-user-name {
img {
object-fit: contain;
height: 16px;
width: 16px;
vertical-align: middle;
}
}
&-user-name-value,
&-screen-name {
display: inline-block;
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
&-expanded-content {
flex: 1;
margin-left: 0.7em;
min-width: 0;
}
}
</style>
+37
View File
@@ -0,0 +1,37 @@
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
const BlockCard = {
props: ['userId'],
data () {
return {
progress: false
}
},
computed: {
user () {
return this.$store.getters.findUser(this.userId)
},
blocked () {
return this.user.statusnet_blocking
}
},
components: {
BasicUserCard
},
methods: {
unblockUser () {
this.progress = true
this.$store.dispatch('unblockUser', this.user.id).then(() => {
this.progress = false
})
},
blockUser () {
this.progress = true
this.$store.dispatch('blockUser', this.user.id).then(() => {
this.progress = false
})
}
}
}
export default BlockCard
+44
View File
@@ -0,0 +1,44 @@
<template>
<basic-user-card :user="user">
<div class="block-card-content-container">
<button
v-if="blocked"
class="btn btn-default"
:disabled="progress"
@click="unblockUser"
>
<template v-if="progress">
{{ $t('user_card.unblock_progress') }}
</template>
<template v-else>
{{ $t('user_card.unblock') }}
</template>
</button>
<button
v-else
class="btn btn-default"
:disabled="progress"
@click="blockUser"
>
<template v-if="progress">
{{ $t('user_card.block_progress') }}
</template>
<template v-else>
{{ $t('user_card.block') }}
</template>
</button>
</div>
</basic-user-card>
</template>
<script src="./block_card.js"></script>
<style lang="scss">
.block-card-content-container {
margin-top: 0.5em;
text-align: right;
button {
width: 10em;
}
}
</style>
+1 -1
View File
@@ -16,7 +16,7 @@ const chatPanel = {
},
methods: {
submit (message) {
this.$store.state.chat.channel.push('new_msg', {text: message}, 10000)
this.$store.state.chat.channel.push('new_msg', { text: message }, 10000)
this.currentMessage = ''
},
togglePanel () {
+51 -15
View File
@@ -1,41 +1,70 @@
<template>
<div class="chat-panel" v-if="!this.collapsed || !this.floating">
<div
v-if="!collapsed || !floating"
class="chat-panel"
>
<div class="panel panel-default">
<div class="panel-heading timeline-heading" :class="{ 'chat-heading': floating }" @click.stop.prevent="togglePanel">
<div
class="panel-heading timeline-heading"
:class="{ 'chat-heading': floating }"
@click.stop.prevent="togglePanel"
>
<div class="title">
{{$t('chat.title')}}
<i class="icon-cancel" style="float: right;" v-if="floating"></i>
<span>{{ $t('chat.title') }}</span>
<i
v-if="floating"
class="icon-cancel"
/>
</div>
</div>
<div class="chat-window" v-chat-scroll>
<div class="chat-message" v-for="message in messages" :key="message.id">
<div
v-chat-scroll
class="chat-window"
>
<div
v-for="message in messages"
:key="message.id"
class="chat-message"
>
<span class="chat-avatar">
<img :src="message.author.avatar" />
<img :src="message.author.avatar">
</span>
<div class="chat-content">
<router-link
class="chat-name"
:to="userProfileLink(message.author)">
{{message.author.username}}
:to="userProfileLink(message.author)"
>
{{ message.author.username }}
</router-link>
<br>
<span class="chat-text">
{{message.text}}
{{ message.text }}
</span>
</div>
</div>
</div>
<div class="chat-input">
<textarea @keyup.enter="submit(currentMessage)" v-model="currentMessage" class="chat-input-textarea" rows="1"></textarea>
<textarea
v-model="currentMessage"
class="chat-input-textarea"
rows="1"
@keyup.enter="submit(currentMessage)"
/>
</div>
</div>
</div>
<div v-else class="chat-panel">
<div
v-else
class="chat-panel"
>
<div class="panel panel-default">
<div class="panel-heading stub timeline-heading chat-heading" @click.stop.prevent="togglePanel">
<div
class="panel-heading stub timeline-heading chat-heading"
@click.stop.prevent="togglePanel"
>
<div class="title">
<i class="icon-comment-empty"></i>
{{$t('chat.title')}}
<i class="icon-comment-empty" />
{{ $t('chat.title') }}
</div>
</div>
</div>
@@ -98,4 +127,11 @@
resize: none;
}
}
.chat-panel {
.title {
display: flex;
justify-content: space-between;
}
}
</style>
+105
View File
@@ -0,0 +1,105 @@
<template>
<label
class="checkbox"
:class="{ disabled, indeterminate }"
>
<input
type="checkbox"
:disabled="disabled"
:checked="checked"
:indeterminate.prop="indeterminate"
@change="$emit('change', $event.target.checked)"
>
<i class="checkbox-indicator" />
<span
v-if="!!$slots.default"
class="label"
>
<slot />
</span>
</label>
</template>
<script>
export default {
model: {
prop: 'checked',
event: 'change'
},
props: [
'checked',
'indeterminate',
'disabled'
]
}
</script>
<style lang="scss">
@import '../../_variables.scss';
.checkbox {
position: relative;
display: inline-block;
min-height: 1.2em;
&-indicator {
position: relative;
padding-left: 1.2em;
}
&-indicator::before {
position: absolute;
right: 0;
top: 0;
display: block;
content: '✔';
transition: color 200ms;
width: 1.1em;
height: 1.1em;
border-radius: $fallback--checkboxRadius;
border-radius: var(--checkboxRadius, $fallback--checkboxRadius);
box-shadow: 0px 0px 2px black inset;
box-shadow: var(--inputShadow);
background-color: $fallback--fg;
background-color: var(--input, $fallback--fg);
vertical-align: top;
text-align: center;
line-height: 1.1em;
font-size: 1.1em;
color: transparent;
overflow: hidden;
box-sizing: border-box;
}
&.disabled {
.checkbox-indicator::before,
.label {
opacity: .5;
}
.label {
color: $fallback--faint;
color: var(--faint, $fallback--faint);
}
}
input[type=checkbox] {
display: none;
&:checked + .checkbox-indicator::before {
color: $fallback--text;
color: var(--inputText, $fallback--text);
}
&:indeterminate + .checkbox-indicator::before {
content: '';
color: $fallback--text;
color: var(--inputText, $fallback--text);
}
}
& > span {
margin-left: .5em;
}
}
</style>
@@ -0,0 +1,68 @@
@import '../../_variables.scss';
.color-input {
display: inline-flex;
&-field.input {
display: inline-flex;
flex: 0 0 0;
max-width: 9em;
align-items: stretch;
padding: .2em 8px;
input {
background: none;
color: $fallback--lightText;
color: var(--inputText, $fallback--lightText);
border: none;
padding: 0;
margin: 0;
&.textColor {
flex: 1 0 3em;
min-width: 3em;
padding: 0;
}
&.nativeColor {
flex: 0 0 2em;
min-width: 2em;
align-self: center;
height: 100%;
}
}
.computedIndicator,
.transparentIndicator {
flex: 0 0 2em;
min-width: 2em;
align-self: center;
height: 100%;
}
.transparentIndicator {
// forgot to install counter-strike source, ooops
background-color: #FF00FF;
position: relative;
&::before, &::after {
display: block;
content: '';
background-color: #000000;
position: absolute;
height: 50%;
width: 50%;
}
&::after {
top: 0;
left: 0;
}
&::before {
bottom: 0;
right: 0;
}
}
}
.label {
flex: 1 1 auto;
}
}
+97 -32
View File
@@ -1,43 +1,108 @@
<template>
<div class="color-control style-control" :class="{ disabled: !present || disabled }">
<label :for="name" class="label">
{{label}}
</label>
<input
v-if="typeof fallback !== 'undefined'"
class="opt exlcude-disabled"
:id="name + '-o'"
type="checkbox"
:checked="present"
@input="$emit('input', typeof value === 'undefined' ? fallback : undefined)">
<label v-if="typeof fallback !== 'undefined'" class="opt-l" :for="name + '-o'"></label>
<input
:id="name"
class="color-input"
type="color"
:value="value || fallback"
:disabled="!present || disabled"
@input="$emit('input', $event.target.value)"
<div
class="color-input style-control"
:class="{ disabled: !present || disabled }"
>
<label
:for="name"
class="label"
>
<input
:id="name + '-t'"
class="text-input"
type="text"
:value="value || fallback"
:disabled="!present || disabled"
@input="$emit('input', $event.target.value)"
>
</div>
{{ label }}
</label>
<Checkbox
v-if="typeof fallback !== 'undefined' && showOptionalTickbox"
:checked="present"
:disabled="disabled"
class="opt"
@change="$emit('input', typeof value === 'undefined' ? fallback : undefined)"
/>
<div class="input color-input-field">
<input
:id="name + '-t'"
class="textColor unstyled"
type="text"
:value="value || fallback"
:disabled="!present || disabled"
@input="$emit('input', $event.target.value)"
>
<input
v-if="validColor"
:id="name"
class="nativeColor unstyled"
type="color"
:value="value || fallback"
:disabled="!present || disabled"
@input="$emit('input', $event.target.value)"
>
<div
v-if="transparentColor"
class="transparentIndicator"
/>
<div
v-if="computedColor"
class="computedIndicator"
:style="{backgroundColor: fallback}"
/>
</div>
</div>
</template>
<style lang="scss" src="./color_input.scss"></style>
<script>
import Checkbox from '../checkbox/checkbox.vue'
import { hex2rgb } from '../../services/color_convert/color_convert.js'
export default {
props: [
'name', 'label', 'value', 'fallback', 'disabled'
],
components: {
Checkbox
},
props: {
// Name of color, used for identifying
name: {
required: true,
type: String
},
// Readable label
label: {
required: true,
type: String
},
// Color value, should be required but vue cannot tell the difference
// between "property missing" and "property set to undefined"
value: {
required: false,
type: String,
default: undefined
},
// Color fallback to use when value is not defeind
fallback: {
required: false,
type: String,
default: undefined
},
// Disable the control
disabled: {
required: false,
type: Boolean,
default: false
},
// Show "optional" tickbox, for when value might become mandatory
showOptionalTickbox: {
required: false,
type: Boolean,
default: true
}
},
computed: {
present () {
return typeof this.value !== 'undefined'
},
validColor () {
return hex2rgb(this.value || this.fallback)
},
transparentColor () {
return this.value === 'transparent'
},
computedColor () {
return this.value && this.value.startsWith('--')
}
}
}
@@ -1,35 +1,53 @@
<template>
<span v-if="contrast" class="contrast-ratio">
<span :title="hint" class="rating">
<span v-if="contrast.aaa">
<i class="icon-thumbs-up-alt"/>
<span
v-if="contrast"
class="contrast-ratio"
>
<span
:title="hint"
class="rating"
>
<span v-if="contrast.aaa">
<i class="icon-thumbs-up-alt" />
</span>
<span v-if="!contrast.aaa && contrast.aa">
<i class="icon-adjust" />
</span>
<span v-if="!contrast.aaa && !contrast.aa">
<i class="icon-attention" />
</span>
</span>
<span v-if="!contrast.aaa && contrast.aa">
<i class="icon-adjust"/>
</span>
<span v-if="!contrast.aaa && !contrast.aa">
<i class="icon-attention"/>
<span
v-if="contrast && large"
class="rating"
:title="hint_18pt"
>
<span v-if="contrast.laaa">
<i class="icon-thumbs-up-alt" />
</span>
<span v-if="!contrast.laaa && contrast.laa">
<i class="icon-adjust" />
</span>
<span v-if="!contrast.laaa && !contrast.laa">
<i class="icon-attention" />
</span>
</span>
</span>
<span class="rating" v-if="contrast && large" :title="hint_18pt">
<span v-if="contrast.laaa">
<i class="icon-thumbs-up-alt"/>
</span>
<span v-if="!contrast.laaa && contrast.laa">
<i class="icon-adjust"/>
</span>
<span v-if="!contrast.laaa && !contrast.laa">
<i class="icon-attention"/>
</span>
</span>
</span>
</template>
<script>
export default {
props: [
'large', 'contrast'
],
props: {
large: {
required: false
},
// TODO: Make theme switcher compute theme initially so that contrast
// component won't be called without contrast data
contrast: {
required: false,
type: Object
}
},
computed: {
hint () {
const levelVal = this.contrast.aaa ? 'aaa' : (this.contrast.aa ? 'aa' : 'bad')
@@ -1,17 +1,12 @@
import Conversation from '../conversation/conversation.vue'
import { find } from 'lodash'
const conversationPage = {
components: {
Conversation
},
computed: {
statusoid () {
const id = this.$route.params.id
const statuses = this.$store.state.statuses.allStatuses
const status = find(statuses, {id})
return status
statusId () {
return this.$route.params.id
}
}
}
@@ -1,5 +1,9 @@
<template>
<conversation :collapsable="false" :statusoid="statusoid"></conversation>
<conversation
:collapsable="false"
is-page="true"
:status-id="statusId"
/>
</template>
<script src="./conversation-page.js"></script>
+91 -32
View File
@@ -1,9 +1,11 @@
import { reduce, filter } from 'lodash'
import { reduce, filter, findIndex, clone, get } from 'lodash'
import Status from '../status/status.vue'
const sortById = (a, b) => {
const seqA = Number(a.id)
const seqB = Number(b.id)
const idA = a.type === 'retweet' ? a.retweeted_status.id : a.id
const idB = b.type === 'retweet' ? b.retweeted_status.id : b.id
const seqA = Number(idA)
const seqB = Number(idB)
const isSeqA = !Number.isNaN(seqA)
const isSeqB = !Number.isNaN(seqB)
if (isSeqA && isSeqB) {
@@ -13,49 +15,77 @@ const sortById = (a, b) => {
} else if (!isSeqA && isSeqB) {
return 1
} else {
return a.id < b.id ? -1 : 1
return idA < idB ? -1 : 1
}
}
const sortAndFilterConversation = (conversation) => {
conversation = filter(conversation, (status) => status.type !== 'retweet')
const sortAndFilterConversation = (conversation, statusoid) => {
if (statusoid.type === 'retweet') {
conversation = filter(
conversation,
(status) => (status.type === 'retweet' || status.id !== statusoid.retweeted_status.id)
)
} else {
conversation = filter(conversation, (status) => status.type !== 'retweet')
}
return conversation.filter(_ => _).sort(sortById)
}
const conversation = {
data () {
return {
highlight: null
highlight: null,
expanded: false
}
},
props: [
'statusoid',
'collapsable'
'statusId',
'collapsable',
'isPage',
'pinnedStatusIdsObject',
'inProfile',
'profileUserId'
],
created () {
if (this.isPage) {
this.fetchConversation()
}
},
computed: {
status () {
return this.statusoid
return this.$store.state.statuses.allStatusesObject[this.statusId]
},
statusId () {
if (this.statusoid.retweeted_status) {
return this.statusoid.retweeted_status.id
originalStatusId () {
if (this.status.retweeted_status) {
return this.status.retweeted_status.id
} else {
return this.statusoid.id
return this.statusId
}
},
conversationId () {
return this.getConversationId(this.statusId)
},
conversation () {
if (!this.status) {
return []
}
const conversationId = this.status.statusnet_conversation_id
const statuses = this.$store.state.statuses.allStatuses
const conversation = filter(statuses, { statusnet_conversation_id: conversationId })
return sortAndFilterConversation(conversation)
if (!this.isExpanded) {
return [this.status]
}
const conversation = clone(this.$store.state.statuses.conversationsObject[this.conversationId])
const statusIndex = findIndex(conversation, { id: this.originalStatusId })
if (statusIndex !== -1) {
conversation[statusIndex] = this.status
}
return sortAndFilterConversation(conversation, this.status)
},
replies () {
let i = 1
return reduce(this.conversation, (result, {id, in_reply_to_status_id}) => {
// eslint-disable-next-line camelcase
return reduce(this.conversation, (result, { id, in_reply_to_status_id }) => {
/* eslint-disable camelcase */
const irid = in_reply_to_status_id
/* eslint-enable camelcase */
@@ -69,39 +99,68 @@ const conversation = {
i++
return result
}, {})
},
isExpanded () {
return this.expanded || this.isPage
}
},
components: {
Status
},
created () {
this.fetchConversation()
},
watch: {
'$route': 'fetchConversation'
statusId (newVal, oldVal) {
const newConversationId = this.getConversationId(newVal)
const oldConversationId = this.getConversationId(oldVal)
if (newConversationId && oldConversationId && newConversationId === oldConversationId) {
this.setHighlight(this.originalStatusId)
} else {
this.fetchConversation()
}
},
expanded (value) {
if (value) {
this.fetchConversation()
}
}
},
methods: {
fetchConversation () {
if (this.status) {
const conversationId = this.status.statusnet_conversation_id
this.$store.state.api.backendInteractor.fetchConversation({id: conversationId})
.then((statuses) => this.$store.dispatch('addNewStatuses', { statuses }))
.then(() => this.setHighlight(this.statusId))
this.$store.state.api.backendInteractor.fetchConversation({ id: this.statusId })
.then(({ ancestors, descendants }) => {
this.$store.dispatch('addNewStatuses', { statuses: ancestors })
this.$store.dispatch('addNewStatuses', { statuses: descendants })
this.setHighlight(this.originalStatusId)
})
} else {
const id = this.$route.params.id
this.$store.state.api.backendInteractor.fetchStatus({id})
.then((status) => this.$store.dispatch('addNewStatuses', { statuses: [status] }))
.then(() => this.fetchConversation())
this.$store.state.api.backendInteractor.fetchStatus({ id: this.statusId })
.then((status) => {
this.$store.dispatch('addNewStatuses', { statuses: [status] })
this.fetchConversation()
})
}
},
getReplies (id) {
return this.replies[id] || []
},
focused (id) {
return id === this.statusId
return (this.isExpanded) && id === this.statusId
},
setHighlight (id) {
if (!id) return
this.highlight = id
this.$store.dispatch('fetchFavsAndRepeats', id)
this.$store.dispatch('fetchEmojiReactionsBy', id)
},
getHighlight () {
return this.isExpanded ? this.highlight : null
},
toggleExpanded () {
this.expanded = !this.expanded
},
getConversationId (statusId) {
const status = this.$store.state.statuses.allStatusesObject[statusId]
return get(status, 'retweeted_status.statusnet_conversation_id', get(status, 'statusnet_conversation_id'))
}
}
}
+45 -17
View File
@@ -1,26 +1,54 @@
<template>
<div class="timeline panel panel-default">
<div class="panel-heading conversation-heading">
<div
class="timeline panel-default"
:class="[isExpanded ? 'panel' : 'panel-disabled']"
>
<div
v-if="isExpanded"
class="panel-heading conversation-heading"
>
<span class="title"> {{ $t('timeline.conversation') }} </span>
<span v-if="collapsable">
<a href="#" @click.prevent="$emit('toggleExpanded')">{{ $t('timeline.collapse') }}</a>
<a
href="#"
@click.prevent="toggleExpanded"
>{{ $t('timeline.collapse') }}</a>
</span>
</div>
<div class="panel-body">
<div class="timeline">
<status
v-for="status in conversation"
@goto="setHighlight" :key="status.id"
:inlineExpanded="collapsable" :statusoid="status"
:expandable='false' :focused="focused(status.id)"
:inConversation='true'
:highlight="highlight"
:replies="getReplies(status.id)"
class="status-fadein">
</status>
</div>
</div>
<status
v-for="status in conversation"
:key="status.id"
:inline-expanded="collapsable && isExpanded"
:statusoid="status"
:expandable="!isExpanded"
:show-pinned="pinnedStatusIdsObject && pinnedStatusIdsObject[status.id]"
:focused="focused(status.id)"
:in-conversation="isExpanded"
:highlight="getHighlight()"
:replies="getReplies(status.id)"
:in-profile="inProfile"
:profile-user-id="profileUserId"
class="status-fadein panel-body"
@goto="setHighlight"
@toggleExpanded="toggleExpanded"
/>
</div>
</template>
<script src="./conversation.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.timeline {
.panel-disabled {
.status-el {
border-left: none;
border-bottom-width: 1px;
border-bottom-style: solid;
border-color: var(--border, $fallback--border);
border-radius: 0;
}
}
}
</style>
@@ -1,17 +0,0 @@
const DeleteButton = {
props: [ 'status' ],
methods: {
deleteStatus () {
const confirmed = window.confirm('Do you really want to delete this status?')
if (confirmed) {
this.$store.dispatch('deleteStatus', { id: this.status.id })
}
}
},
computed: {
currentUser () { return this.$store.state.users.currentUser },
canDelete () { return this.currentUser && this.currentUser.rights.delete_others_notice || this.status.user.id === this.currentUser.id }
}
}
export default DeleteButton
@@ -1,21 +0,0 @@
<template>
<div v-if="canDelete">
<a href="#" v-on:click.prevent="deleteStatus()">
<i class='button-icon icon-cancel delete-status'></i>
</a>
</div>
</template>
<script src="./delete_button.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
.icon-cancel,.delete-status {
cursor: pointer;
&:hover {
color: $fallback--cRed;
color: var(--cRed, $fallback--cRed);
}
}
</style>
@@ -0,0 +1,14 @@
const DialogModal = {
props: {
darkOverlay: {
default: true,
type: Boolean
},
onCancel: {
default: () => {},
type: Function
}
}
}
export default DialogModal
@@ -0,0 +1,100 @@
<template>
<span
:class="{ 'dark-overlay': darkOverlay }"
@click.self.stop="onCancel()"
>
<div
class="dialog-modal panel panel-default"
@click.stop=""
>
<div class="panel-heading dialog-modal-heading">
<div class="title">
<slot name="header" />
</div>
</div>
<div class="dialog-modal-content">
<slot name="default" />
</div>
<div class="dialog-modal-footer user-interactions panel-footer">
<slot name="footer" />
</div>
</div>
</span>
</template>
<script src="./dialog_modal.js"></script>
<style lang="scss">
@import '../../_variables.scss';
// TODO: unify with other modals.
.dark-overlay {
&::before {
bottom: 0;
content: " ";
display: block;
cursor: default;
left: 0;
position: fixed;
right: 0;
top: 0;
background: rgba(27,31,35,.5);
z-index: 99;
}
}
.dialog-modal.panel {
top: 0;
left: 50%;
max-height: 80vh;
max-width: 90vw;
margin: 15vh auto;
position: fixed;
transform: translateX(-50%);
z-index: 999;
cursor: default;
display: block;
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
.dialog-modal-heading {
padding: .5em .5em;
margin-right: auto;
margin-bottom: 0;
white-space: nowrap;
color: var(--panelText);
background-color: $fallback--fg;
background-color: var(--panel, $fallback--fg);
.title {
margin-bottom: 0;
text-align: center;
}
}
.dialog-modal-content {
margin: 0;
padding: 1rem 1rem;
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
white-space: normal;
}
.dialog-modal-footer {
margin: 0;
padding: .5em .5em;
background-color: $fallback--bg;
background-color: var(--bg, $fallback--bg);
border-top: 1px solid $fallback--border;
border-top: 1px solid var(--border, $fallback--border);
display: flex;
justify-content: flex-end;
button {
width: auto;
margin-left: .5rem;
}
}
}
</style>
+5 -1
View File
@@ -1,5 +1,9 @@
<template>
<Timeline :title="$t('nav.dms')" v-bind:timeline="timeline" v-bind:timeline-name="'dms'"/>
<Timeline
:title="$t('nav.dms')"
:timeline="timeline"
:timeline-name="'dms'"
/>
</template>
<script src="./dm_timeline.js"></script>
@@ -0,0 +1,15 @@
import ProgressButton from '../progress_button/progress_button.vue'
const DomainMuteCard = {
props: ['domain'],
components: {
ProgressButton
},
methods: {
unmuteDomain () {
return this.$store.dispatch('unmuteDomain', this.domain)
}
}
}
export default DomainMuteCard
@@ -0,0 +1,38 @@
<template>
<div class="domain-mute-card">
<div class="domain-mute-card-domain">
{{ domain }}
</div>
<ProgressButton
:click="unmuteDomain"
class="btn btn-default"
>
{{ $t('domain_mute_card.unmute') }}
<template slot="progress">
{{ $t('domain_mute_card.unmute_progress') }}
</template>
</ProgressButton>
</div>
</template>
<script src="./domain_mute_card.js"></script>
<style lang="scss">
.domain-mute-card {
flex: 1 0;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.6em 1em 0.6em 0;
&-domain {
margin-right: 1em;
overflow: hidden;
text-overflow: ellipsis;
}
button {
width: 10em;
}
}
</style>
+440
View File
@@ -0,0 +1,440 @@
import Completion from '../../services/completion/completion.js'
import EmojiPicker from '../emoji_picker/emoji_picker.vue'
import { take } from 'lodash'
import { findOffset } from '../../services/offset_finder/offset_finder.service.js'
/**
* EmojiInput - augmented inputs for emoji and autocomplete support in inputs
* without having to give up the comfort of <input/> and <textarea/> elements
*
* Intended usage is:
* <EmojiInput v-model="something">
* <input v-model="something"/>
* </EmojiInput>
*
* Works only with <input> and <textarea>. Intended to use with only one nested
* input. It will find first input or textarea and work with that, multiple
* nested children not tested. You HAVE TO duplicate v-model for both
* <emoji-input> and <input>/<textarea> otherwise it will not work.
*
* Be prepared for CSS troubles though because it still wraps component in a div
* while TRYING to make it look like nothing happened, but it could break stuff.
*/
const EmojiInput = {
props: {
suggest: {
/**
* suggest: function (input: String) => Suggestion[]
*
* Function that takes input string which takes string (textAtCaret)
* and returns an array of Suggestions
*
* Suggestion is an object containing following properties:
* displayText: string. Main display text, what actual suggestion
* represents (user's screen name/emoji shortcode)
* replacement: string. Text that should replace the textAtCaret
* detailText: string, optional. Subtitle text, providing additional info
* if present (user's nickname)
* imageUrl: string, optional. Image to display alongside with suggestion,
* currently if no image is provided, replacement will be used (for
* unicode emojis)
*
* TODO: make it asynchronous when adding proper server-provided user
* suggestions
*
* For commonly used suggestors (emoji, users, both) use suggestor.js
*/
required: true,
type: Function
},
value: {
/**
* Used for v-model
*/
required: true,
type: String
},
enableEmojiPicker: {
/**
* Enables emoji picker support, this implies that custom emoji are supported
*/
required: false,
type: Boolean,
default: false
},
hideEmojiButton: {
/**
* intended to use with external picker trigger, i.e. you have a button outside
* input that will open up the picker, see triggerShowPicker()
*/
required: false,
type: Boolean,
default: false
},
enableStickerPicker: {
/**
* Enables sticker picker support, only makes sense when enableEmojiPicker=true
*/
required: false,
type: Boolean,
default: false
}
},
data () {
return {
input: undefined,
highlighted: 0,
caret: 0,
focused: false,
blurTimeout: null,
showPicker: false,
temporarilyHideSuggestions: false,
keepOpen: false,
disableClickOutside: false
}
},
components: {
EmojiPicker
},
computed: {
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 () {
return this.focused &&
this.suggestions &&
this.suggestions.length > 0 &&
!this.showPicker &&
!this.temporarilyHideSuggestions
},
textAtCaret () {
return (this.wordAtCaret || {}).word || ''
},
wordAtCaret () {
if (this.value && this.caret) {
const word = Completion.wordAtPosition(this.value, this.caret - 1) || {}
return word
}
}
},
mounted () {
const slots = this.$slots.default
if (!slots || slots.length === 0) return
const input = slots.find(slot => ['input', 'textarea'].includes(slot.tag))
if (!input) return
this.input = input
this.resize()
input.elm.addEventListener('blur', this.onBlur)
input.elm.addEventListener('focus', this.onFocus)
input.elm.addEventListener('paste', this.onPaste)
input.elm.addEventListener('keyup', this.onKeyUp)
input.elm.addEventListener('keydown', this.onKeyDown)
input.elm.addEventListener('click', this.onClickInput)
input.elm.addEventListener('transitionend', this.onTransition)
input.elm.addEventListener('input', this.onInput)
},
unmounted () {
const { input } = this
if (input) {
input.elm.removeEventListener('blur', this.onBlur)
input.elm.removeEventListener('focus', this.onFocus)
input.elm.removeEventListener('paste', this.onPaste)
input.elm.removeEventListener('keyup', this.onKeyUp)
input.elm.removeEventListener('keydown', this.onKeyDown)
input.elm.removeEventListener('click', this.onClickInput)
input.elm.removeEventListener('transitionend', this.onTransition)
input.elm.removeEventListener('input', this.onInput)
}
},
methods: {
triggerShowPicker () {
this.showPicker = true
this.$refs.picker.startEmojiLoad()
this.$nextTick(() => {
this.scrollIntoView()
})
// This temporarily disables "click outside" handler
// since external trigger also means click originates
// from outside, thus preventing picker from opening
this.disableClickOutside = true
setTimeout(() => {
this.disableClickOutside = false
}, 0)
},
togglePicker () {
this.input.elm.focus()
this.showPicker = !this.showPicker
if (this.showPicker) {
this.scrollIntoView()
this.$refs.picker.startEmojiLoad()
}
},
replace (replacement) {
const newValue = Completion.replaceWord(this.value, this.wordAtCaret, replacement)
this.$emit('input', newValue)
this.caret = 0
},
insert ({ insertion, keepOpen }) {
const before = this.value.substring(0, this.caret) || ''
const after = this.value.substring(this.caret) || ''
/* Using a bit more smart approach to padding emojis with spaces:
* - put a space before cursor if there isn't one already, unless we
* are at the beginning of post or in spam mode
* - put a space after emoji if there isn't one already unless we are
* in spam mode
*
* The idea is that when you put a cursor somewhere in between sentence
* inserting just ' :emoji: ' will add more spaces to post which might
* break the flow/spacing, as well as the case where user ends sentence
* with a space before adding emoji.
*
* Spam mode is intended for creating multi-part emojis and overall spamming
* them, masto seem to be rendering :emoji::emoji: correctly now so why not
*/
const isSpaceRegex = /\s/
const spaceBefore = !isSpaceRegex.exec(before.slice(-1)) && before.length && this.padEmoji > 0 ? ' ' : ''
const spaceAfter = !isSpaceRegex.exec(after[0]) && this.padEmoji ? ' ' : ''
const newValue = [
before,
spaceBefore,
insertion,
spaceAfter,
after
].join('')
this.keepOpen = keepOpen
this.$emit('input', newValue)
const position = this.caret + (insertion + spaceAfter + spaceBefore).length
if (!keepOpen) {
this.input.elm.focus()
}
this.$nextTick(function () {
// Re-focus inputbox after clicking suggestion
// Set selection right after the replacement instead of the very end
this.input.elm.setSelectionRange(position, position)
this.caret = position
})
},
replaceText (e, suggestion) {
const len = this.suggestions.length || 0
if (this.textAtCaret.length === 1) { return }
if (len > 0 || suggestion) {
const chosenSuggestion = suggestion || this.suggestions[this.highlighted]
const replacement = chosenSuggestion.replacement
const newValue = Completion.replaceWord(this.value, this.wordAtCaret, replacement)
this.$emit('input', newValue)
this.highlighted = 0
const position = this.wordAtCaret.start + replacement.length
this.$nextTick(function () {
// Re-focus inputbox after clicking suggestion
this.input.elm.focus()
// Set selection right after the replacement instead of the very end
this.input.elm.setSelectionRange(position, position)
this.caret = position
})
e.preventDefault()
}
},
cycleBackward (e) {
const len = this.suggestions.length || 0
if (len > 1) {
this.highlighted -= 1
if (this.highlighted < 0) {
this.highlighted = this.suggestions.length - 1
}
e.preventDefault()
} else {
this.highlighted = 0
}
},
cycleForward (e) {
const len = this.suggestions.length || 0
if (len > 1) {
this.highlighted += 1
if (this.highlighted >= len) {
this.highlighted = 0
}
e.preventDefault()
} else {
this.highlighted = 0
}
},
scrollIntoView () {
const rootRef = this.$refs['picker'].$el
/* Scroller is either `window` (replies in TL), sidebar (main post form,
* replies in notifs) or mobile post form. Note that getting and setting
* scroll is different for `Window` and `Element`s
*/
const scrollerRef = this.$el.closest('.sidebar-scroller') ||
this.$el.closest('.post-form-modal-view') ||
window
const currentScroll = scrollerRef === window
? scrollerRef.scrollY
: scrollerRef.scrollTop
const scrollerHeight = scrollerRef === window
? scrollerRef.innerHeight
: scrollerRef.offsetHeight
const scrollerBottomBorder = currentScroll + scrollerHeight
// We check where the bottom border of root element is, this uses findOffset
// to find offset relative to scrollable container (scroller)
const rootBottomBorder = rootRef.offsetHeight + findOffset(rootRef, scrollerRef).top
const bottomDelta = Math.max(0, rootBottomBorder - scrollerBottomBorder)
// could also check top delta but there's no case for it
const targetScroll = currentScroll + bottomDelta
if (scrollerRef === window) {
scrollerRef.scroll(0, targetScroll)
} else {
scrollerRef.scrollTop = targetScroll
}
this.$nextTick(() => {
const { offsetHeight } = this.input.elm
const { picker } = this.$refs
const pickerBottom = picker.$el.getBoundingClientRect().bottom
if (pickerBottom > window.innerHeight) {
picker.$el.style.top = 'auto'
picker.$el.style.bottom = offsetHeight + 'px'
}
})
},
onTransition (e) {
this.resize()
},
onBlur (e) {
// Clicking on any suggestion removes focus from autocomplete,
// preventing click handler ever executing.
this.blurTimeout = setTimeout(() => {
this.focused = false
this.setCaret(e)
this.resize()
}, 200)
},
onClick (e, suggestion) {
this.replaceText(e, suggestion)
},
onFocus (e) {
if (this.blurTimeout) {
clearTimeout(this.blurTimeout)
this.blurTimeout = null
}
if (!this.keepOpen) {
this.showPicker = false
}
this.focused = true
this.setCaret(e)
this.resize()
this.temporarilyHideSuggestions = false
},
onKeyUp (e) {
const { key } = e
this.setCaret(e)
this.resize()
// Setting hider in keyUp to prevent suggestions from blinking
// when moving away from suggested spot
if (key === 'Escape') {
this.temporarilyHideSuggestions = true
} else {
this.temporarilyHideSuggestions = false
}
},
onPaste (e) {
this.setCaret(e)
this.resize()
},
onKeyDown (e) {
const { ctrlKey, shiftKey, key } = e
// Disable suggestions hotkeys if suggestions are hidden
if (!this.temporarilyHideSuggestions) {
if (key === 'Tab') {
if (shiftKey) {
this.cycleBackward(e)
} else {
this.cycleForward(e)
}
}
if (key === 'ArrowUp') {
this.cycleBackward(e)
} else if (key === 'ArrowDown') {
this.cycleForward(e)
}
if (key === 'Enter') {
if (!ctrlKey) {
this.replaceText(e)
}
}
}
// Probably add optional keyboard controls for emoji picker?
// Escape hides suggestions, if suggestions are hidden it
// de-focuses the element (i.e. default browser behavior)
if (key === 'Escape') {
if (!this.temporarilyHideSuggestions) {
this.input.elm.focus()
}
}
this.showPicker = false
this.resize()
},
onInput (e) {
this.showPicker = false
this.setCaret(e)
this.resize()
this.$emit('input', e.target.value)
},
onClickInput (e) {
this.showPicker = false
},
onClickOutside (e) {
if (this.disableClickOutside) return
this.showPicker = false
},
onStickerUploaded (e) {
this.showPicker = false
this.$emit('sticker-uploaded', e)
},
onStickerUploadFailed (e) {
this.showPicker = false
this.$emit('sticker-upload-Failed', e)
},
setCaret ({ target: { selectionStart } }) {
this.caret = selectionStart
},
resize () {
const { panel, picker } = this.$refs
if (!panel) return
const { offsetHeight, offsetTop } = this.input.elm
const offsetBottom = offsetTop + offsetHeight
panel.style.top = offsetBottom + 'px'
picker.$el.style.top = offsetBottom + 'px'
picker.$el.style.bottom = 'auto'
}
}
}
export default EmojiInput
+180
View File
@@ -0,0 +1,180 @@
<template>
<div
v-click-outside="onClickOutside"
class="emoji-input"
:class="{ 'with-picker': !hideEmojiButton }"
>
<slot />
<template v-if="enableEmojiPicker">
<div
v-if="!hideEmojiButton"
class="emoji-picker-icon"
@click.prevent="togglePicker"
>
<i class="icon-smile" />
</div>
<EmojiPicker
v-if="enableEmojiPicker"
ref="picker"
:class="{ hide: !showPicker }"
:enable-sticker-picker="enableStickerPicker"
class="emoji-picker-panel"
@emoji="insert"
@sticker-uploaded="onStickerUploaded"
@sticker-upload-failed="onStickerUploadFailed"
/>
</template>
<div
ref="panel"
class="autocomplete-panel"
:class="{ hide: !showSuggestions }"
>
<div class="autocomplete-panel-body">
<div
v-for="(suggestion, index) in suggestions"
:key="index"
class="autocomplete-item"
:class="{ highlighted: suggestion.highlighted }"
@click.stop.prevent="onClick($event, suggestion)"
>
<span class="image">
<img
v-if="suggestion.img"
:src="suggestion.img"
>
<span v-else>{{ suggestion.replacement }}</span>
</span>
<div class="label">
<span class="displayText">{{ suggestion.displayText }}</span>
<span class="detailText">{{ suggestion.detailText }}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script src="./emoji_input.js"></script>
<style lang="scss">
@import '../../_variables.scss';
.emoji-input {
display: flex;
flex-direction: column;
position: relative;
&.with-picker input {
padding-right: 30px;
}
.emoji-picker-icon {
position: absolute;
top: 0;
right: 0;
margin: .2em .25em;
font-size: 16px;
cursor: pointer;
line-height: 24px;
&:hover i {
color: $fallback--text;
color: var(--text, $fallback--text);
}
}
.emoji-picker-panel {
position: absolute;
z-index: 20;
margin-top: 2px;
&.hide {
display: none
}
}
.autocomplete {
&-panel {
position: absolute;
z-index: 20;
margin-top: 2px;
&.hide {
display: none
}
&-body {
margin: 0 0.5em 0 0.5em;
border-radius: $fallback--tooltipRadius;
border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
box-shadow: var(--popupShadow);
min-width: 75%;
background-color: $fallback--bg;
background-color: var(--popover, $fallback--bg);
color: $fallback--link;
color: var(--popoverText, $fallback--link);
--faint: var(--popoverFaintText, $fallback--faint);
--faintLink: var(--popoverFaintLink, $fallback--faint);
--lightText: var(--popoverLightText, $fallback--lightText);
--postLink: var(--popoverPostLink, $fallback--link);
--postFaintLink: var(--popoverPostFaintLink, $fallback--link);
--icon: var(--popoverIcon, $fallback--icon);
}
}
&-item {
display: flex;
cursor: pointer;
padding: 0.2em 0.4em;
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
height: 32px;
.image {
width: 32px;
height: 32px;
line-height: 32px;
text-align: center;
font-size: 32px;
margin-right: 4px;
img {
width: 32px;
height: 32px;
object-fit: contain;
}
}
.label {
display: flex;
flex-direction: column;
justify-content: center;
margin: 0 0.1em 0 0.2em;
.displayText {
line-height: 1.5;
}
.detailText {
font-size: 9px;
line-height: 9px;
}
}
&.highlighted {
background-color: $fallback--fg;
background-color: var(--selectedMenuPopover, $fallback--fg);
color: var(--selectedMenuPopoverText, $fallback--text);
--faint: var(--selectedMenuPopoverFaintText, $fallback--faint);
--faintLink: var(--selectedMenuPopoverFaintLink, $fallback--faint);
--lightText: var(--selectedMenuPopoverLightText, $fallback--lightText);
--icon: var(--selectedMenuPopoverIcon, $fallback--icon);
}
}
}
input, textarea {
flex: 1 0 auto;
}
}
</style>
+106
View File
@@ -0,0 +1,106 @@
import { debounce } from 'lodash'
/**
* suggest - generates a suggestor function to be used by emoji-input
* data: object providing source information for specific types of suggestions:
* data.emoji - optional, an array of all emoji available i.e.
* (state.instance.emoji + state.instance.customEmoji)
* data.users - optional, an array of all known users
* updateUsersList - optional, a function to search and append to users
*
* Depending on data present one or both (or none) can be present, so if field
* doesn't support user linking you can just provide only emoji.
*/
const debounceUserSearch = debounce((data, input) => {
data.updateUsersList(input)
}, 500, { leading: true, trailing: false })
export default data => input => {
const firstChar = input[0]
if (firstChar === ':' && data.emoji) {
return suggestEmoji(data.emoji)(input)
}
if (firstChar === '@' && data.users) {
return suggestUsers(data)(input)
}
return []
}
export const suggestEmoji = emojis => input => {
const noPrefix = input.toLowerCase().substr(1)
return emojis
.filter(({ displayText }) => displayText.toLowerCase().match(noPrefix))
.sort((a, b) => {
let aScore = 0
let bScore = 0
// An exact match always wins
aScore += a.displayText.toLowerCase() === noPrefix ? 200 : 0
bScore += b.displayText.toLowerCase() === noPrefix ? 200 : 0
// Prioritize custom emoji a lot
aScore += a.imageUrl ? 100 : 0
bScore += b.imageUrl ? 100 : 0
// Prioritize prefix matches somewhat
aScore += a.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0
bScore += b.displayText.toLowerCase().startsWith(noPrefix) ? 10 : 0
// Sort by length
aScore -= a.displayText.length
bScore -= b.displayText.length
// Break ties alphabetically
const alphabetically = a.displayText > b.displayText ? 0.5 : -0.5
return bScore - aScore + alphabetically
})
}
export const suggestUsers = data => input => {
const noPrefix = input.toLowerCase().substr(1)
const users = data.users
const newUsers = users.filter(
user =>
user.screen_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) => {
let aScore = 0
let bScore = 0
// Matches on screen name (i.e. user@instance) makes a priority
aScore += a.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0
bScore += b.screen_name.toLowerCase().startsWith(noPrefix) ? 2 : 0
// Matches on name takes second priority
aScore += a.name.toLowerCase().startsWith(noPrefix) ? 1 : 0
bScore += b.name.toLowerCase().startsWith(noPrefix) ? 1 : 0
const diff = (bScore - aScore) * 10
// Then sort alphabetically
const nameAlphabetically = a.name > b.name ? 1 : -1
const screenNameAlphabetically = a.screen_name > b.screen_name ? 1 : -1
return diff + nameAlphabetically + screenNameAlphabetically
/* eslint-disable camelcase */
}).map(({ screen_name, name, profile_image_url_original }) => ({
displayText: screen_name,
detailText: name,
imageUrl: profile_image_url_original,
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 */
}
+187
View File
@@ -0,0 +1,187 @@
import Checkbox from '../checkbox/checkbox.vue'
// At widest, approximately 20 emoji are visible in a row,
// loading 3 rows, could be overkill for narrow picker
const LOAD_EMOJI_BY = 60
// When to start loading new batch emoji, in pixels
const LOAD_EMOJI_MARGIN = 64
const filterByKeyword = (list, keyword = '') => {
return list.filter(x => x.displayText.includes(keyword))
}
const EmojiPicker = {
props: {
enableStickerPicker: {
required: false,
type: Boolean,
default: false
}
},
data () {
return {
keyword: '',
activeGroup: 'custom',
showingStickers: false,
groupsScrolledClass: 'scrolled-top',
keepOpen: false,
customEmojiBufferSlice: LOAD_EMOJI_BY,
customEmojiTimeout: null,
customEmojiLoadAllConfirmed: false
}
},
components: {
StickerPicker: () => import('../sticker_picker/sticker_picker.vue'),
Checkbox
},
methods: {
onStickerUploaded (e) {
this.$emit('sticker-uploaded', e)
},
onStickerUploadFailed (e) {
this.$emit('sticker-upload-failed', e)
},
onEmoji (emoji) {
const value = emoji.imageUrl ? `:${emoji.displayText}:` : emoji.replacement
this.$emit('emoji', { insertion: value, keepOpen: this.keepOpen })
},
onScroll (e) {
const target = (e && e.target) || this.$refs['emoji-groups']
this.updateScrolledClass(target)
this.scrolledGroup(target)
this.triggerLoadMore(target)
},
highlight (key) {
const ref = this.$refs['group-' + key]
const top = ref[0].offsetTop
this.setShowStickers(false)
this.activeGroup = key
this.$nextTick(() => {
this.$refs['emoji-groups'].scrollTop = top + 1
})
},
updateScrolledClass (target) {
if (target.scrollTop <= 5) {
this.groupsScrolledClass = 'scrolled-top'
} else if (target.scrollTop >= target.scrollTopMax - 5) {
this.groupsScrolledClass = 'scrolled-bottom'
} else {
this.groupsScrolledClass = 'scrolled-middle'
}
},
triggerLoadMore (target) {
const ref = this.$refs['group-end-custom'][0]
if (!ref) return
const bottom = ref.offsetTop + ref.offsetHeight
const scrollerBottom = target.scrollTop + target.clientHeight
const scrollerTop = target.scrollTop
const scrollerMax = target.scrollHeight
// Loads more emoji when they come into view
const approachingBottom = bottom - scrollerBottom < LOAD_EMOJI_MARGIN
// Always load when at the very top in case there's no scroll space yet
const atTop = scrollerTop < 5
// Don't load when looking at unicode category or at the very bottom
const bottomAboveViewport = bottom < scrollerTop || scrollerBottom === scrollerMax
if (!bottomAboveViewport && (approachingBottom || atTop)) {
this.loadEmoji()
}
},
scrolledGroup (target) {
const top = target.scrollTop + 5
this.$nextTick(() => {
this.emojisView.forEach(group => {
const ref = this.$refs['group-' + group.id]
if (ref[0].offsetTop <= top) {
this.activeGroup = group.id
}
})
})
},
loadEmoji () {
const allLoaded = this.customEmojiBuffer.length === this.filteredEmoji.length
if (allLoaded) {
return
}
this.customEmojiBufferSlice += LOAD_EMOJI_BY
},
startEmojiLoad (forceUpdate = false) {
if (!forceUpdate) {
this.keyword = ''
}
this.$nextTick(() => {
this.$refs['emoji-groups'].scrollTop = 0
})
const bufferSize = this.customEmojiBuffer.length
const bufferPrefilledAll = bufferSize === this.filteredEmoji.length
if (bufferPrefilledAll && !forceUpdate) {
return
}
this.customEmojiBufferSlice = LOAD_EMOJI_BY
},
toggleStickers () {
this.showingStickers = !this.showingStickers
},
setShowStickers (value) {
this.showingStickers = value
}
},
watch: {
keyword () {
this.customEmojiLoadAllConfirmed = false
this.onScroll()
this.startEmojiLoad(true)
}
},
computed: {
activeGroupView () {
return this.showingStickers ? '' : this.activeGroup
},
stickersAvailable () {
if (this.$store.state.instance.stickers) {
return this.$store.state.instance.stickers.length > 0
}
return 0
},
filteredEmoji () {
return filterByKeyword(
this.$store.state.instance.customEmoji || [],
this.keyword
)
},
customEmojiBuffer () {
return this.filteredEmoji.slice(0, this.customEmojiBufferSlice)
},
emojis () {
const standardEmojis = this.$store.state.instance.emoji || []
const customEmojis = this.customEmojiBuffer
return [
{
id: 'custom',
text: this.$t('emoji.custom'),
icon: 'icon-smile',
emojis: customEmojis
},
{
id: 'standard',
text: this.$t('emoji.unicode'),
icon: 'icon-picture',
emojis: filterByKeyword(standardEmojis, this.keyword)
}
]
},
emojisView () {
return this.emojis.filter(value => value.emojis.length > 0)
},
stickerPickerEnabled () {
return (this.$store.state.instance.stickers || []).length !== 0
}
}
}
export default EmojiPicker
@@ -0,0 +1,184 @@
@import '../../_variables.scss';
.emoji-picker {
display: flex;
flex-direction: column;
position: absolute;
right: 0;
left: 0;
margin: 0 !important;
z-index: 1;
background-color: $fallback--bg;
background-color: var(--popover, $fallback--bg);
color: $fallback--link;
color: var(--popoverText, $fallback--link);
--lightText: var(--popoverLightText, $fallback--faint);
--faint: var(--popoverFaintText, $fallback--faint);
--faintLink: var(--popoverFaintLink, $fallback--faint);
--lightText: var(--popoverLightText, $fallback--lightText);
--icon: var(--popoverIcon, $fallback--icon);
.keep-open,
.too-many-emoji {
padding: 7px;
line-height: normal;
}
.too-many-emoji {
display: flex;
flex-direction: column;
}
.keep-open-label {
padding: 0 7px;
display: flex;
}
.heading {
display: flex;
height: 32px;
padding: 10px 7px 5px;
}
.content {
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0px;
}
.emoji-tabs {
flex-grow: 1;
}
.emoji-groups {
min-height: 200px;
}
.additional-tabs {
border-left: 1px solid;
border-left-color: $fallback--icon;
border-left-color: var(--icon, $fallback--icon);
padding-left: 7px;
flex: 0 0 auto;
}
.additional-tabs,
.emoji-tabs {
display: block;
min-width: 0;
flex-basis: auto;
flex-shrink: 1;
&-item {
padding: 0 7px;
cursor: pointer;
font-size: 24px;
&.disabled {
opacity: 0.5;
pointer-events: none;
}
&.active {
border-bottom: 4px solid;
i {
color: $fallback--lightText;
color: var(--lightText, $fallback--lightText);
}
}
}
}
.sticker-picker {
flex: 1 1 auto
}
.stickers,
.emoji {
&-content {
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
&.hidden {
opacity: 0;
pointer-events: none;
position: absolute;
}
}
}
.emoji {
&-search {
padding: 5px;
flex: 0 0 auto;
input {
width: 100%;
}
}
&-groups {
flex: 1 1 1px;
position: relative;
overflow: auto;
user-select: none;
mask: linear-gradient(to top, white 0, transparent 100%) bottom no-repeat,
linear-gradient(to bottom, white 0, transparent 100%) top no-repeat,
linear-gradient(to top, white, white);
transition: mask-size 150ms;
mask-size: 100% 20px, 100% 20px, auto;
// Autoprefixed seem to ignore this one, and also syntax is different
-webkit-mask-composite: xor;
mask-composite: exclude;
&.scrolled {
&-top {
mask-size: 100% 20px, 100% 0, auto;
}
&-bottom {
mask-size: 100% 0, 100% 20px, auto;
}
}
}
&-group {
display: flex;
align-items: center;
flex-wrap: wrap;
padding-left: 5px;
justify-content: left;
&-title {
font-size: 12px;
width: 100%;
margin: 0;
&.disabled {
display: none;
}
}
}
&-item {
width: 32px;
height: 32px;
box-sizing: border-box;
display: flex;
font-size: 32px;
align-items: center;
justify-content: center;
margin: 4px;
cursor: pointer;
img {
object-fit: contain;
max-width: 100%;
max-height: 100%;
}
}
}
}
@@ -0,0 +1,99 @@
<template>
<div class="emoji-picker panel panel-default panel-body">
<div class="heading">
<span class="emoji-tabs">
<span
v-for="group in emojis"
:key="group.id"
class="emoji-tabs-item"
:class="{
active: activeGroupView === group.id,
disabled: group.emojis.length === 0
}"
:title="group.text"
@click.prevent="highlight(group.id)"
>
<i :class="group.icon" />
</span>
</span>
<span
v-if="stickerPickerEnabled"
class="additional-tabs"
>
<span
class="stickers-tab-icon additional-tabs-item"
:class="{active: showingStickers}"
:title="$t('emoji.stickers')"
@click.prevent="toggleStickers"
>
<i class="icon-star" />
</span>
</span>
</div>
<div class="content">
<div
class="emoji-content"
:class="{hidden: showingStickers}"
>
<div class="emoji-search">
<input
v-model="keyword"
type="text"
class="form-control"
:placeholder="$t('emoji.search_emoji')"
>
</div>
<div
ref="emoji-groups"
class="emoji-groups"
:class="groupsScrolledClass"
@scroll="onScroll"
>
<div
v-for="group in emojisView"
:key="group.id"
class="emoji-group"
>
<h6
:ref="'group-' + group.id"
class="emoji-group-title"
>
{{ group.text }}
</h6>
<span
v-for="emoji in group.emojis"
:key="group.id + emoji.displayText"
:title="emoji.displayText"
class="emoji-item"
@click.stop.prevent="onEmoji(emoji)"
>
<span v-if="!emoji.imageUrl">{{ emoji.replacement }}</span>
<img
v-else
:src="emoji.imageUrl"
>
</span>
<span :ref="'group-end-' + group.id" />
</div>
</div>
<div class="keep-open">
<Checkbox v-model="keepOpen">
{{ $t('emoji.keep_open') }}
</Checkbox>
</div>
</div>
<div
v-if="showingStickers"
class="stickers-content"
>
<sticker-picker
@uploaded="onStickerUploaded"
@upload-failed="onStickerUploadFailed"
/>
</div>
</div>
</div>
</template>
<script src="./emoji_picker.js"></script>
<style lang="scss" src="./emoji_picker.scss"></style>
@@ -0,0 +1,69 @@
import UserAvatar from '../user_avatar/user_avatar.vue'
import Popover from '../popover/popover.vue'
const EMOJI_REACTION_COUNT_CUTOFF = 12
const EmojiReactions = {
name: 'EmojiReactions',
components: {
UserAvatar,
Popover
},
props: ['status'],
data: () => ({
showAll: false
}),
computed: {
tooManyReactions () {
return this.status.emoji_reactions.length > EMOJI_REACTION_COUNT_CUTOFF
},
emojiReactions () {
return this.showAll
? this.status.emoji_reactions
: this.status.emoji_reactions.slice(0, EMOJI_REACTION_COUNT_CUTOFF)
},
showMoreString () {
return `+${this.status.emoji_reactions.length - EMOJI_REACTION_COUNT_CUTOFF}`
},
accountsForEmoji () {
return this.status.emoji_reactions.reduce((acc, reaction) => {
acc[reaction.name] = reaction.accounts || []
return acc
}, {})
},
loggedIn () {
return !!this.$store.state.users.currentUser
}
},
methods: {
toggleShowAll () {
this.showAll = !this.showAll
},
reactedWith (emoji) {
return this.status.emoji_reactions.find(r => r.name === emoji).me
},
fetchEmojiReactionsByIfMissing () {
const hasNoAccounts = this.status.emoji_reactions.find(r => !r.accounts)
if (hasNoAccounts) {
this.$store.dispatch('fetchEmojiReactionsBy', this.status.id)
}
},
reactWith (emoji) {
this.$store.dispatch('reactWithEmoji', { id: this.status.id, emoji })
},
unreact (emoji) {
this.$store.dispatch('unreactWithEmoji', { id: this.status.id, emoji })
},
emojiOnClick (emoji, event) {
if (!this.loggedIn) return
if (this.reactedWith(emoji)) {
this.unreact(emoji)
} else {
this.reactWith(emoji)
}
}
}
}
export default EmojiReactions
@@ -0,0 +1,141 @@
<template>
<div class="emoji-reactions">
<Popover
v-for="(reaction) in emojiReactions"
:key="reaction.name"
trigger="hover"
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
slot="trigger"
class="emoji-reaction btn btn-default"
:class="{ 'picked-reaction': reactedWith(reaction.name), 'not-clickable': !loggedIn }"
@click="emojiOnClick(reaction.name, $event)"
@mouseenter="fetchEmojiReactionsByIfMissing()"
>
<span class="reaction-emoji">{{ reaction.name }}</span>
<span>{{ reaction.count }}</span>
</button>
</Popover>
<a
v-if="tooManyReactions"
class="emoji-reaction-expand faint"
href="javascript:void(0)"
@click="toggleShowAll"
>
{{ showAll ? $t('general.show_less') : showMoreString }}
</a>
</div>
</template>
<script src="./emoji_reactions.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
.emoji-reactions {
display: flex;
margin-top: 0.25em;
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 {
padding: 0 0.5em;
margin-right: 0.5em;
margin-top: 0.5em;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
.reaction-emoji {
width: 1.25em;
margin-right: 0.25em;
}
&:focus {
outline: none;
}
&.not-clickable {
cursor: default;
&:hover {
box-shadow: $fallback--buttonShadow;
box-shadow: var(--buttonShadow);
}
}
}
.emoji-reaction-expand {
padding: 0 0.5em;
margin-right: 0.5em;
margin-top: 0.5em;
display: flex;
align-items: center;
justify-content: center;
&:hover {
text-decoration: underline;
}
}
.picked-reaction {
border: 1px solid var(--accent, $fallback--link);
margin-left: -1px; // offset the border, can't use inset shadows either
margin-right: calc(0.5em - 1px);
}
</style>
+25 -10
View File
@@ -1,12 +1,27 @@
<template>
<div class="import-export-container">
<slot name="before"/>
<button class="btn" @click="exportData">{{ exportLabel }}</button>
<button class="btn" @click="importData">{{ importLabel }}</button>
<slot name="afterButtons"/>
<p v-if="importFailed" class="alert error">{{ importFailedText }}</p>
<slot name="afterError"/>
</div>
<div class="import-export-container">
<slot name="before" />
<button
class="btn"
@click="exportData"
>
{{ exportLabel }}
</button>
<button
class="btn"
@click="importData"
>
{{ importLabel }}
</button>
<slot name="afterButtons" />
<p
v-if="importFailed"
class="alert error"
>
{{ importFailedText }}
</p>
<slot name="afterError" />
</div>
</template>
<script>
@@ -27,7 +42,7 @@ export default {
},
methods: {
exportData () {
const stringified = JSON.stringify(this.exportObject) // Pretty-print and indent with 2 spaces
const stringified = JSON.stringify(this.exportObject, null, 2) // Pretty-print and indent with 2 spaces
// Create an invisible link with a data url and simulate a click
const e = document.createElement('a')
@@ -49,7 +64,7 @@ export default {
if (event.target.files[0]) {
// eslint-disable-next-line no-undef
const reader = new FileReader()
reader.onload = ({target}) => {
reader.onload = ({ target }) => {
try {
const parsed = JSON.parse(target.result)
const valid = this.validator(parsed)
+48
View File
@@ -0,0 +1,48 @@
const Exporter = {
props: {
getContent: {
type: Function,
required: true
},
filename: {
type: String,
default: 'export.csv'
},
exportButtonLabel: {
type: String,
default () {
return this.$t('exporter.export')
}
},
processingMessage: {
type: String,
default () {
return this.$t('exporter.processing')
}
}
},
data () {
return {
processing: false
}
},
methods: {
process () {
this.processing = true
this.getContent()
.then((content) => {
const fileToDownload = document.createElement('a')
fileToDownload.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content))
fileToDownload.setAttribute('download', this.filename)
fileToDownload.style.display = 'none'
document.body.appendChild(fileToDownload)
fileToDownload.click()
document.body.removeChild(fileToDownload)
// Add delay before hiding processing state since browser takes some time to handle file download
setTimeout(() => { this.processing = false }, 2000)
})
}
}
}
export default Exporter
+26
View File
@@ -0,0 +1,26 @@
<template>
<div class="exporter">
<div v-if="processing">
<i class="icon-spin4 animate-spin exporter-processing" />
<span>{{ processingMessage }}</span>
</div>
<button
v-else
class="btn btn-default"
@click="process"
>
{{ exportButtonLabel }}
</button>
</div>
</template>
<script src="./exporter.js"></script>
<style lang="scss">
.exporter {
&-processing {
font-size: 1.5em;
margin: 0.25em;
}
}
</style>
@@ -0,0 +1,53 @@
import Popover from '../popover/popover.vue'
const ExtraButtons = {
props: [ 'status' ],
components: { Popover },
methods: {
deleteStatus () {
const confirmed = window.confirm(this.$t('status.delete_confirm'))
if (confirmed) {
this.$store.dispatch('deleteStatus', { id: this.status.id })
}
},
pinStatus () {
this.$store.dispatch('pinStatus', this.status.id)
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
},
unpinStatus () {
this.$store.dispatch('unpinStatus', this.status.id)
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
},
muteConversation () {
this.$store.dispatch('muteConversation', this.status.id)
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
},
unmuteConversation () {
this.$store.dispatch('unmuteConversation', this.status.id)
.then(() => this.$emit('onSuccess'))
.catch(err => this.$emit('onError', err.error.error))
}
},
computed: {
currentUser () { return this.$store.state.users.currentUser },
canDelete () {
if (!this.currentUser) { return }
const superuser = this.currentUser.rights.moderator || this.currentUser.rights.admin
return superuser || this.status.user.id === this.currentUser.id
},
ownStatus () {
return this.status.user.id === this.currentUser.id
},
canPin () {
return this.ownStatus && (this.status.visibility === 'public' || this.status.visibility === 'unlisted')
},
canMute () {
return !!this.currentUser
}
}
}
export default ExtraButtons
@@ -0,0 +1,71 @@
<template>
<Popover
v-if="canDelete || canMute || canPin"
trigger="click"
placement="top"
class="extra-button-popover"
>
<div slot="content">
<div class="dropdown-menu">
<button
v-if="canMute && !status.thread_muted"
class="dropdown-item dropdown-item-icon"
@click.prevent="muteConversation"
>
<i class="icon-eye-off" /><span>{{ $t("status.mute_conversation") }}</span>
</button>
<button
v-if="canMute && status.thread_muted"
class="dropdown-item dropdown-item-icon"
@click.prevent="unmuteConversation"
>
<i class="icon-eye-off" /><span>{{ $t("status.unmute_conversation") }}</span>
</button>
<button
v-if="!status.pinned && canPin"
v-close-popover
class="dropdown-item dropdown-item-icon"
@click.prevent="pinStatus"
>
<i class="icon-pin" /><span>{{ $t("status.pin") }}</span>
</button>
<button
v-if="status.pinned && canPin"
v-close-popover
class="dropdown-item dropdown-item-icon"
@click.prevent="unpinStatus"
>
<i class="icon-pin" /><span>{{ $t("status.unpin") }}</span>
</button>
<button
v-if="canDelete"
v-close-popover
class="dropdown-item dropdown-item-icon"
@click.prevent="deleteStatus"
>
<i class="icon-cancel" /><span>{{ $t("status.delete") }}</span>
</button>
</div>
</div>
<i
slot="trigger"
class="icon-ellipsis button-icon"
/>
</Popover>
</template>
<script src="./extra_buttons.js" ></script>
<style lang="scss">
@import '../../_variables.scss';
.icon-ellipsis {
cursor: pointer;
&:hover,
.extra-button-popover.open & {
color: $fallback--text;
color: var(--text, $fallback--text);
}
}
</style>
@@ -1,19 +1,18 @@
import { mapGetters } from 'vuex'
const FavoriteButton = {
props: ['status', 'loggedIn'],
data () {
return {
hidePostStatsLocal: typeof this.$store.state.config.hidePostStats === 'undefined'
? this.$store.state.instance.hidePostStats
: this.$store.state.config.hidePostStats,
animated: false
}
},
methods: {
favorite () {
if (!this.status.favorited) {
this.$store.dispatch('favorite', {id: this.status.id})
this.$store.dispatch('favorite', { id: this.status.id })
} else {
this.$store.dispatch('unfavorite', {id: this.status.id})
this.$store.dispatch('unfavorite', { id: this.status.id })
}
this.animated = true
setTimeout(() => {
@@ -28,7 +27,8 @@ const FavoriteButton = {
'icon-star': this.status.favorited,
'animate-spin': this.animated
}
}
},
...mapGetters(['mergedConfig'])
}
}
@@ -1,11 +1,20 @@
<template>
<div v-if="loggedIn">
<i :class='classes' class='button-icon favorite-button fav-active' @click.prevent='favorite()' :title="$t('tool_tip.favorite')"/>
<span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
<i
:class="classes"
class="button-icon favorite-button fav-active"
:title="$t('tool_tip.favorite')"
@click.prevent="favorite()"
/>
<span v-if="!mergedConfig.hidePostStats && status.fave_num > 0">{{ status.fave_num }}</span>
</div>
<div v-else>
<i :class='classes' class='button-icon favorite-button' :title="$t('tool_tip.favorite')"/>
<span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
<i
:class="classes"
class="button-icon favorite-button"
:title="$t('tool_tip.favorite')"
/>
<span v-if="!mergedConfig.hidePostStats && status.fave_num > 0">{{ status.fave_num }}</span>
</div>
</template>
@@ -1,12 +1,10 @@
const FeaturesPanel = {
computed: {
chat: function () {
return this.$store.state.instance.chatAvailable && (!this.$store.state.chatDisabled)
},
chat: function () { return this.$store.state.instance.chatAvailable },
gopher: function () { return this.$store.state.instance.gopherAvailable },
whoToFollow: function () { return this.$store.state.instance.suggestionsEnabled },
mediaProxy: function () { return this.$store.state.instance.mediaProxyAvailable },
scopeOptions: function () { return this.$store.state.instance.scopeOptionsEnabled },
minimalScopesMode: function () { return this.$store.state.instance.minimalScopesMode },
textlimit: function () { return this.$store.state.instance.textlimit }
}
}
@@ -3,17 +3,25 @@
<div class="panel panel-default base01-background">
<div class="panel-heading timeline-heading base02-background base04">
<div class="title">
{{$t('features_panel.title')}}
{{ $t('features_panel.title') }}
</div>
</div>
<div class="panel-body features-panel">
<ul>
<li v-if="chat">{{$t('features_panel.chat')}}</li>
<li v-if="gopher">{{$t('features_panel.gopher')}}</li>
<li v-if="whoToFollow">{{$t('features_panel.who_to_follow')}}</li>
<li v-if="mediaProxy">{{$t('features_panel.media_proxy')}}</li>
<li v-if="scopeOptions">{{$t('features_panel.scope_options')}}</li>
<li>{{$t('features_panel.text_limit')}} = {{textlimit}}</li>
<li v-if="chat">
{{ $t('features_panel.chat') }}
</li>
<li v-if="gopher">
{{ $t('features_panel.gopher') }}
</li>
<li v-if="whoToFollow">
{{ $t('features_panel.who_to_follow') }}
</li>
<li v-if="mediaProxy">
{{ $t('features_panel.media_proxy') }}
</li>
<li>{{ $t('features_panel.scope_options') }}</li>
<li>{{ $t('features_panel.text_limit') }} = {{ textlimit }}</li>
</ul>
</div>
</div>
@@ -0,0 +1,53 @@
import { requestFollow, requestUnfollow } from '../../services/follow_manipulate/follow_manipulate'
export default {
props: ['user', 'labelFollowing', 'buttonClass'],
data () {
return {
inProgress: false
}
},
computed: {
isPressed () {
return this.inProgress || this.user.following
},
title () {
if (this.inProgress || this.user.following) {
return this.$t('user_card.follow_unfollow')
} else if (this.user.requested) {
return this.$t('user_card.follow_again')
} else {
return this.$t('user_card.follow')
}
},
label () {
if (this.inProgress) {
return this.$t('user_card.follow_progress')
} else if (this.user.following) {
return this.labelFollowing || this.$t('user_card.following')
} else if (this.user.requested) {
return this.$t('user_card.follow_sent')
} else {
return this.$t('user_card.follow')
}
}
},
methods: {
onClick () {
this.user.following ? this.unfollow() : this.follow()
},
follow () {
this.inProgress = true
requestFollow(this.user, this.$store).then(() => {
this.inProgress = false
})
},
unfollow () {
const store = this.$store
this.inProgress = true
requestUnfollow(this.user, store).then(() => {
this.inProgress = false
store.commit('removeStatus', { timeline: 'friends', userId: this.user.id })
})
}
}
}
@@ -0,0 +1,13 @@
<template>
<button
class="btn btn-default follow-button"
:class="{ toggled: isPressed }"
:disabled="inProgress"
:title="title"
@click="onClick"
>
{{ label }}
</button>
</template>
<script src="./follow_button.js"></script>
+25
View File
@@ -0,0 +1,25 @@
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
import RemoteFollow from '../remote_follow/remote_follow.vue'
import FollowButton from '../follow_button/follow_button.vue'
const FollowCard = {
props: [
'user',
'noFollowsYou'
],
components: {
BasicUserCard,
RemoteFollow,
FollowButton
},
computed: {
isMe () {
return this.$store.state.users.currentUser.id === this.user.id
},
loggedIn () {
return this.$store.state.users.currentUser
}
}
}
export default FollowCard
@@ -0,0 +1,48 @@
<template>
<basic-user-card :user="user">
<div class="follow-card-content-container">
<span
v-if="!noFollowsYou && user.follows_you"
class="faint"
>
{{ isMe ? $t('user_card.its_you') : $t('user_card.follows_you') }}
</span>
<template v-if="!loggedIn">
<div
v-if="!user.following"
class="follow-card-follow-button"
>
<RemoteFollow :user="user" />
</div>
</template>
<template v-else>
<FollowButton
:user="user"
class="follow-card-follow-button"
:label-following="$t('user_card.follow_unfollow')"
/>
</template>
</div>
</basic-user-card>
</template>
<script src="./follow_card.js"></script>
<style lang="scss">
.follow-card {
&-content-container {
flex-shrink: 0;
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
line-height: 1.5em;
}
&-follow-button {
margin-top: 0.5em;
margin-left: auto;
width: 10em;
}
}
</style>
-65
View File
@@ -1,65 +0,0 @@
import UserCard from '../user_card/user_card.vue'
const FollowList = {
data () {
return {
loading: false,
bottomedOut: false,
error: false
}
},
props: ['userId', 'showFollowers'],
created () {
window.addEventListener('scroll', this.scrollLoad)
if (this.entries.length === 0) {
this.fetchEntries()
}
},
destroyed () {
window.removeEventListener('scroll', this.scrollLoad)
this.$store.dispatch('clearFriendsAndFollowers', this.userId)
},
computed: {
user () {
return this.$store.getters.userById(this.userId)
},
entries () {
return this.showFollowers ? this.user.followers : this.user.friends
},
showFollowsYou () {
return !this.showFollowers || (this.showFollowers && this.userId !== this.$store.state.users.currentUser.id)
}
},
methods: {
fetchEntries () {
if (!this.loading) {
const command = this.showFollowers ? 'addFollowers' : 'addFriends'
this.loading = true
this.$store.dispatch(command, this.userId).then(entries => {
this.error = false
this.loading = false
this.bottomedOut = entries.length === 0
}).catch(() => {
this.error = true
this.loading = false
})
}
},
scrollLoad (e) {
const bodyBRect = document.body.getBoundingClientRect()
const height = Math.max(bodyBRect.height, -(bodyBRect.y))
if (this.loading === false &&
this.bottomedOut === false &&
this.$el.offsetHeight > 0 &&
(window.innerHeight + window.pageYOffset) >= (height - 750)
) {
this.fetchEntries()
}
}
},
components: {
UserCard
}
}
export default FollowList
@@ -1,33 +0,0 @@
<template>
<div class="follow-list">
<user-card
v-for="entry in entries"
:key="entry.id" :user="entry"
:noFollowsYou="!showFollowsYou"
/>
<div class="text-center panel-footer">
<a v-if="error" @click="fetchEntries" class="alert error">
{{$t('general.generic_error')}}
</a>
<i v-else-if="loading" class="icon-spin3 animate-spin"/>
<span v-else-if="bottomedOut"></span>
<a v-else @click="fetchEntries">{{$t('general.more')}}</a>
</div>
</div>
</template>
<script src="./follow_list.js"></script>
<style lang="scss">
.follow-list {
.panel-footer {
padding: 10px;
}
.error {
font-size: 14px;
}
}
</style>
@@ -0,0 +1,40 @@
import BasicUserCard from '../basic_user_card/basic_user_card.vue'
import { notificationsFromStore } from '../../services/notification_utils/notification_utils.js'
const FollowRequestCard = {
props: ['user'],
components: {
BasicUserCard
},
methods: {
findFollowRequestNotificationId () {
const notif = notificationsFromStore(this.$store).find(
(notif) => notif.from_profile.id === this.user.id && notif.type === 'follow_request'
)
return notif && notif.id
},
approveUser () {
this.$store.state.api.backendInteractor.approveUser({ id: this.user.id })
this.$store.dispatch('removeFollowRequest', this.user)
const notifId = this.findFollowRequestNotificationId()
this.$store.dispatch('markSingleNotificationAsSeen', { id: notifId })
this.$store.dispatch('updateNotification', {
id: notifId,
updater: notification => {
notification.type = 'follow'
}
})
},
denyUser () {
const notifId = this.findFollowRequestNotificationId()
this.$store.state.api.backendInteractor.denyUser({ id: this.user.id })
.then(() => {
this.$store.dispatch('dismissNotificationLocal', { id: notifId })
this.$store.dispatch('removeFollowRequest', this.user)
})
}
}
}
export default FollowRequestCard
@@ -0,0 +1,39 @@
<template>
<basic-user-card :user="user">
<div class="follow-request-card-content-container">
<button
class="btn btn-default"
@click="approveUser"
>
{{ $t('user_card.approve') }}
</button>
<button
class="btn btn-default"
@click="denyUser"
>
{{ $t('user_card.deny') }}
</button>
</div>
</basic-user-card>
</template>
<script src="./follow_request_card.js"></script>
<style lang="scss">
.follow-request-card-content-container {
display: flex;
flex-direction: row;
flex-wrap: wrap;
button {
margin-top: 0.5em;
margin-right: 0.5em;
flex: 1 1;
max-width: 12em;
min-width: 8em;
&:last-child {
margin-right: 0;
}
}
}
</style>
@@ -1,22 +1,13 @@
import UserCard from '../user_card/user_card.vue'
import FollowRequestCard from '../follow_request_card/follow_request_card.vue'
const FollowRequests = {
components: {
UserCard
},
created () {
this.updateRequests()
FollowRequestCard
},
computed: {
requests () {
return this.$store.state.api.followRequests
}
},
methods: {
updateRequests () {
this.$store.state.api.backendInteractor.fetchFollowRequests()
.then((requests) => { this.$store.commit('setFollowRequests', requests) })
}
}
}
@@ -1,10 +1,15 @@
<template>
<div class="settings panel panel-default">
<div class="panel-heading">
{{$t('nav.friend_requests')}}
{{ $t('nav.friend_requests') }}
</div>
<div class="panel-body">
<user-card v-for="request in requests" :key="request.id" :user="request" :showFollows="false" :showApproval="true"></user-card>
<FollowRequestCard
v-for="request in requests"
:key="request.id"
:user="request"
class="list-item"
/>
</div>
</div>
</template>
+51 -30
View File
@@ -1,35 +1,56 @@
<template>
<div class="font-control style-control" :class="{ custom: isCustom }">
<label :for="preset === 'custom' ? name : name + '-font-switcher'" class="label">
{{label}}
</label>
<input
v-if="typeof fallback !== 'undefined'"
class="opt exlcude-disabled"
type="checkbox"
:id="name + '-o'"
:checked="present"
@input="$emit('input', typeof value === 'undefined' ? fallback : undefined)">
<label v-if="typeof fallback !== 'undefined'" class="opt-l" :for="name + '-o'"></label>
<label :for="name + '-font-switcher'" class="select" :disabled="!present">
<select
<div
class="font-control style-control"
:class="{ custom: isCustom }"
>
<label
:for="preset === 'custom' ? name : name + '-font-switcher'"
class="label"
>
{{ label }}
</label>
<input
v-if="typeof fallback !== 'undefined'"
:id="name + '-o'"
class="opt exlcude-disabled"
type="checkbox"
:checked="present"
@input="$emit('input', typeof value === 'undefined' ? fallback : undefined)"
>
<label
v-if="typeof fallback !== 'undefined'"
class="opt-l"
:for="name + '-o'"
/>
<label
:for="name + '-font-switcher'"
class="select"
:disabled="!present"
v-model="preset"
class="font-switcher"
:id="name + '-font-switcher'">
<option v-for="option in availableOptions" :value="option">
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
</option>
</select>
<i class="icon-down-open"/>
</label>
<input
v-if="isCustom"
class="custom-font"
type="text"
:id="name"
v-model="family">
</div>
>
<select
:id="name + '-font-switcher'"
v-model="preset"
:disabled="!present"
class="font-switcher"
>
<option
v-for="option in availableOptions"
:key="option"
:value="option"
>
{{ option === 'custom' ? $t('settings.style.fonts.custom') : option }}
</option>
</select>
<i class="icon-down-open" />
</label>
<input
v-if="isCustom"
:id="name"
v-model="family"
class="custom-font"
type="text"
>
</div>
</template>
<script src="./font_control.js" ></script>
@@ -1,5 +1,9 @@
<template>
<Timeline :title="$t('nav.timeline')" v-bind:timeline="timeline" v-bind:timeline-name="'friends'"/>
<Timeline
:title="$t('nav.timeline')"
:timeline="timeline"
:timeline-name="'friends'"
/>
</template>
<script src="./friends_timeline.js"></script>
+20 -22
View File
@@ -1,23 +1,18 @@
import Attachment from '../attachment/attachment.vue'
import { chunk, last, dropRight } from 'lodash'
import { chunk, last, dropRight, sumBy } from 'lodash'
const Gallery = {
data: () => ({
width: 500
}),
props: [
'attachments',
'nsfw',
'setMedia'
],
data () {
return {
sizes: {}
}
},
components: { Attachment },
mounted () {
this.resize()
window.addEventListener('resize', this.resize)
},
destroyed () {
window.removeEventListener('resize', this.resize)
},
computed: {
rows () {
if (!this.attachments) {
@@ -33,21 +28,24 @@ const Gallery = {
}
return rows
},
rowHeight () {
return itemsPerRow => ({ 'height': `${(this.width / (itemsPerRow + 0.6))}px` })
},
useContainFit () {
return this.$store.state.config.useContainFit
return this.$store.getters.mergedConfig.useContainFit
}
},
methods: {
resize () {
// Quick optimization to make resizing not always trigger state change,
// only update attachment size in 10px steps
const width = Math.floor(this.$el.getBoundingClientRect().width / 10) * 10
if (this.width !== width) {
this.width = width
}
onNaturalSizeLoad (id, size) {
this.$set(this.sizes, id, size)
},
rowStyle (itemsPerRow) {
return { 'padding-bottom': `${(100 / (itemsPerRow + 0.6))}%` }
},
itemStyle (id, row) {
const total = sumBy(row, item => this.getAspectRatio(item.id))
return { flex: `${this.getAspectRatio(id) / total} 1 0%` }
},
getAspectRatio (id) {
const size = this.sizes[id]
return size ? size.width / size.height : 1
}
}
}
+49 -19
View File
@@ -1,14 +1,27 @@
<template>
<div ref="galleryContainer" style="width: 100%;">
<div class="gallery-row" v-for="row in rows" :style="rowHeight(row.length)" :class="{ 'contain-fit': useContainFit, 'cover-fit': !useContainFit }">
<attachment
v-for="attachment in row"
:setMedia="setMedia"
:nsfw="nsfw"
:attachment="attachment"
:allowPlay="false"
:key="attachment.id"
/>
<div
ref="galleryContainer"
style="width: 100%;"
>
<div
v-for="(row, index) in rows"
:key="index"
class="gallery-row"
:style="rowStyle(row.length)"
:class="{ 'contain-fit': useContainFit, 'cover-fit': !useContainFit }"
>
<div class="gallery-row-inner">
<attachment
v-for="attachment in row"
:key="attachment.id"
:set-media="setMedia"
:nsfw="nsfw"
:attachment="attachment"
:allow-play="false"
:natural-size-load="onNaturalSizeLoad.bind(null, attachment.id)"
:style="itemStyle(attachment.id, row)"
/>
</div>
</div>
</div>
</template>
@@ -19,23 +32,36 @@
@import '../../_variables.scss';
.gallery-row {
height: 200px;
position: relative;
height: 0;
width: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: stretch;
flex-grow: 1;
margin-top: 0.5em;
margin-bottom: 0.25em;
.attachments, .attachment {
.gallery-row-inner {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: stretch;
}
// FIXME: specificity problem with this and .attachments.attachment
// we shouldn't have the need for .image here
.attachment.image {
margin: 0 0.5em 0 0;
flex-grow: 1;
height: 100%;
box-sizing: border-box;
// to make failed images a bit more noticeable on chromium
min-width: 2em;
&:last-child {
margin: 0;
}
}
.image-attachment {
@@ -48,13 +74,17 @@
}
&.contain-fit {
img, video {
img,
video,
canvas {
object-fit: contain;
}
}
&.cover-fit {
img, video {
img,
video,
canvas {
object-fit: cover;
}
}
@@ -0,0 +1,134 @@
import Cropper from 'cropperjs'
import 'cropperjs/dist/cropper.css'
const ImageCropper = {
props: {
trigger: {
type: [String, window.Element],
required: true
},
submitHandler: {
type: Function,
required: true
},
cropperOptions: {
type: Object,
default () {
return {
aspectRatio: 1,
autoCropArea: 1,
viewMode: 1,
movable: false,
zoomable: false,
guides: false
}
}
},
mimes: {
type: String,
default: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon'
},
saveButtonLabel: {
type: String
},
saveWithoutCroppingButtonlabel: {
type: String
},
cancelButtonLabel: {
type: String
}
},
data () {
return {
cropper: undefined,
dataUrl: undefined,
filename: undefined,
submitting: false,
submitError: null
}
},
computed: {
saveText () {
return this.saveButtonLabel || this.$t('image_cropper.save')
},
saveWithoutCroppingText () {
return this.saveWithoutCroppingButtonlabel || this.$t('image_cropper.save_without_cropping')
},
cancelText () {
return this.cancelButtonLabel || this.$t('image_cropper.cancel')
},
submitErrorMsg () {
return this.submitError && this.submitError instanceof Error ? this.submitError.toString() : this.submitError
}
},
methods: {
destroy () {
if (this.cropper) {
this.cropper.destroy()
}
this.$refs.input.value = ''
this.dataUrl = undefined
this.$emit('close')
},
submit (cropping = true) {
this.submitting = true
this.avatarUploadError = null
this.submitHandler(cropping && this.cropper, this.file)
.then(() => this.destroy())
.catch((err) => {
this.submitError = err
})
.finally(() => {
this.submitting = false
})
},
pickImage () {
this.$refs.input.click()
},
createCropper () {
this.cropper = new Cropper(this.$refs.img, this.cropperOptions)
},
getTriggerDOM () {
return typeof this.trigger === 'object' ? this.trigger : document.querySelector(this.trigger)
},
readFile () {
const fileInput = this.$refs.input
if (fileInput.files != null && fileInput.files[0] != null) {
this.file = fileInput.files[0]
let reader = new window.FileReader()
reader.onload = (e) => {
this.dataUrl = e.target.result
this.$emit('open')
}
reader.readAsDataURL(this.file)
this.$emit('changed', this.file, reader)
}
},
clearError () {
this.submitError = null
}
},
mounted () {
// listen for click event on trigger
const trigger = this.getTriggerDOM()
if (!trigger) {
this.$emit('error', 'No image make trigger found.', 'user')
} else {
trigger.addEventListener('click', this.pickImage)
}
// listen for input file changes
const fileInput = this.$refs.input
fileInput.addEventListener('change', this.readFile)
},
beforeDestroy: function () {
// remove the event listeners
const trigger = this.getTriggerDOM()
if (trigger) {
trigger.removeEventListener('click', this.pickImage)
}
const fileInput = this.$refs.input
fileInput.removeEventListener('change', this.readFile)
}
}
export default ImageCropper
@@ -0,0 +1,84 @@
<template>
<div class="image-cropper">
<div v-if="dataUrl">
<div class="image-cropper-image-container">
<img
ref="img"
:src="dataUrl"
alt=""
@load.stop="createCropper"
>
</div>
<div class="image-cropper-buttons-wrapper">
<button
class="btn"
type="button"
:disabled="submitting"
@click="submit()"
v-text="saveText"
/>
<button
class="btn"
type="button"
:disabled="submitting"
@click="destroy"
v-text="cancelText"
/>
<button
class="btn"
type="button"
:disabled="submitting"
@click="submit(false)"
v-text="saveWithoutCroppingText"
/>
<i
v-if="submitting"
class="icon-spin4 animate-spin"
/>
</div>
<div
v-if="submitError"
class="alert error"
>
{{ submitErrorMsg }}
<i
class="button-icon icon-cancel"
@click="clearError"
/>
</div>
</div>
<input
ref="input"
type="file"
class="image-cropper-img-input"
:accept="mimes"
>
</div>
</template>
<script src="./image_cropper.js"></script>
<style lang="scss">
.image-cropper {
&-img-input {
display: none;
}
&-image-container {
position: relative;
img {
display: block;
max-width: 100%;
}
}
&-buttons-wrapper {
margin-top: 10px;
button {
margin-top: 5px;
}
}
}
</style>
+53
View File
@@ -0,0 +1,53 @@
const Importer = {
props: {
submitHandler: {
type: Function,
required: true
},
submitButtonLabel: {
type: String,
default () {
return this.$t('importer.submit')
}
},
successMessage: {
type: String,
default () {
return this.$t('importer.success')
}
},
errorMessage: {
type: String,
default () {
return this.$t('importer.error')
}
}
},
data () {
return {
file: null,
error: false,
success: false,
submitting: false
}
},
methods: {
change () {
this.file = this.$refs.input.files[0]
},
submit () {
this.dismiss()
this.submitting = true
this.submitHandler(this.file)
.then(() => { this.success = true })
.catch(() => { this.error = true })
.finally(() => { this.submitting = false })
},
dismiss () {
this.success = false
this.error = false
}
}
}
export default Importer
+47
View File
@@ -0,0 +1,47 @@
<template>
<div class="importer">
<form>
<input
ref="input"
type="file"
@change="change"
>
</form>
<i
v-if="submitting"
class="icon-spin4 animate-spin importer-uploading"
/>
<button
v-else
class="btn btn-default"
@click="submit"
>
{{ submitButtonLabel }}
</button>
<div v-if="success">
<i
class="icon-cross"
@click="dismiss"
/>
<p>{{ successMessage }}</p>
</div>
<div v-else-if="error">
<i
class="icon-cross"
@click="dismiss"
/>
<p>{{ errorMessage }}</p>
</div>
</div>
</template>
<script src="./importer.js"></script>
<style lang="scss">
.importer {
&-uploading {
font-size: 1.5em;
margin: 0.25em;
}
}
</style>
@@ -2,9 +2,6 @@ const InstanceSpecificPanel = {
computed: {
instanceSpecificPanelContent () {
return this.$store.state.instance.instanceSpecificPanelContent
},
show () {
return !this.$store.state.config.hideISP
}
}
}
@@ -1,15 +1,13 @@
<template>
<div v-if="show" class="instance-specific-panel">
<div class="instance-specific-panel">
<div class="panel panel-default">
<div class="panel-body">
<div v-html="instanceSpecificPanelContent">
</div>
<!-- eslint-disable vue/no-v-html -->
<div v-html="instanceSpecificPanelContent" />
<!-- eslint-enable vue/no-v-html -->
</div>
</div>
</div>
</template>
<script src="./instance_specific_panel.js" ></script>
<style lang="scss">
</style>
@@ -0,0 +1,27 @@
import Notifications from '../notifications/notifications.vue'
const tabModeDict = {
mentions: ['mention'],
'likes+repeats': ['repeat', 'like'],
follows: ['follow'],
moves: ['move']
}
const Interactions = {
data () {
return {
allowFollowingMove: this.$store.state.users.currentUser.allow_following_move,
filterMode: tabModeDict['mentions']
}
},
methods: {
onModeSwitch (key) {
this.filterMode = tabModeDict[key]
}
},
components: {
Notifications
}
}
export default Interactions
@@ -0,0 +1,39 @@
<template>
<div class="panel panel-default">
<div class="panel-heading">
<div class="title">
{{ $t("nav.interactions") }}
</div>
</div>
<tab-switcher
ref="tabSwitcher"
:on-switch="onModeSwitch"
>
<span
key="mentions"
:label="$t('nav.mentions')"
/>
<span
key="likes+repeats"
:label="$t('interactions.favs_repeats')"
/>
<span
key="follows"
:label="$t('interactions.follows')"
/>
<span
v-if="!allowFollowingMove"
key="moves"
:label="$t('interactions.moves')"
/>
</tab-switcher>
<Notifications
ref="notifications"
:no-heading="true"
:minimal-mode="true"
:filter-mode="filterMode"
/>
</div>
</template>
<script src="./interactions.js"></script>
@@ -3,39 +3,60 @@
<label for="interface-language-switcher">
{{ $t('settings.interfaceLanguage') }}
</label>
<label for="interface-language-switcher" class='select'>
<select id="interface-language-switcher" v-model="language">
<option v-for="(langCode, i) in languageCodes" :value="langCode">
<label
for="interface-language-switcher"
class="select"
>
<select
id="interface-language-switcher"
v-model="language"
>
<option
v-for="(langCode, i) in languageCodes"
:key="langCode"
:value="langCode"
>
{{ languageNames[i] }}
</option>
</select>
<i class="icon-down-open"/>
<i class="icon-down-open" />
</label>
</div>
</template>
<script>
import languagesObject from '../../i18n/messages'
import ISO6391 from 'iso-639-1'
import _ from 'lodash'
import languagesObject from '../../i18n/messages'
import ISO6391 from 'iso-639-1'
import _ from 'lodash'
export default {
computed: {
languageCodes () {
return Object.keys(languagesObject)
},
export default {
computed: {
languageCodes () {
return Object.keys(languagesObject)
},
languageNames () {
return _.map(this.languageCodes, ISO6391.getName)
},
languageNames () {
return _.map(this.languageCodes, this.getLanguageName)
},
language: {
get: function () { return this.$store.state.config.interfaceLanguage },
set: function (val) {
this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
this.$i18n.locale = val
}
language: {
get: function () { return this.$store.getters.mergedConfig.interfaceLanguage },
set: function (val) {
this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
this.$i18n.locale = val
}
}
},
methods: {
getLanguageName (code) {
const specialLanguageNames = {
'ja': 'Japanese (日本語)',
'ja_easy': 'Japanese (やさしいにほんご)',
'zh': 'Chinese (简体中文)'
}
return specialLanguageNames[code] || ISO6391.getName(code)
}
}
}
</script>
@@ -5,6 +5,11 @@ const LinkPreview = {
'size',
'nsfw'
],
data () {
return {
imageLoaded: false
}
},
computed: {
useImage () {
// Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid
@@ -15,6 +20,15 @@ const LinkPreview = {
useDescription () {
return this.card.description && /\S/.test(this.card.description)
}
},
created () {
if (this.useImage) {
const newImg = new Image()
newImg.onload = () => {
this.imageLoaded = true
}
newImg.src = this.card.image
}
}
}
+17 -8
View File
@@ -1,13 +1,25 @@
<template>
<div>
<a class="link-preview-card" :href="card.url" target="_blank" rel="noopener">
<div class="card-image" :class="{ 'small-image': size === 'small' }" v-if="useImage">
<img :src="card.image"></img>
<a
class="link-preview-card"
:href="card.url"
target="_blank"
rel="noopener"
>
<div
v-if="useImage && imageLoaded"
class="card-image"
:class="{ 'small-image': size === 'small' }"
>
<img :src="card.image">
</div>
<div class="card-content">
<span class="card-host faint">{{ card.provider_name }}</span>
<h4 class="card-title">{{ card.title }}</h4>
<p class="card-description" v-if="useDescription">{{ card.description }}</p>
<p
v-if="useDescription"
class="card-description"
>{{ card.description }}</p>
</div>
</a>
</div>
@@ -23,10 +35,7 @@
flex-direction: row;
cursor: pointer;
overflow: hidden;
// TODO: clean up the random margins in attachments, this makes preview line
// up with attachments...
margin-right: 0.5em;
margin-top: 0.5em;
.card-image {
flex-shrink: 0;

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