Commit graph

96 commits

Author SHA1 Message Date
Claire
02851848e9
Revamp post filtering system ()
* Add model for custom filter keywords

* Use CustomFilterKeyword internally

Does not change the API

* Fix /filters/edit and /filters/new

* Add migration tests

* Remove whole_word column from custom_filters (covered by custom_filter_keywords)

* Redesign /filters

Instead of a list, present a card that displays more information and handles
multiple keywords per filter.

* Redesign /filters/new and /filters/edit to add and remove keywords

This adds a new gem dependency: cocoon, as well as a npm dependency:
cocoon-js-vanilla. Those are used to easily populate and remove form fields
from the user interface when manipulating multiple keyword filters at once.

* Add /api/v2/filters to edit filter with multiple keywords

Entities:
- `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context`
  `keywords`
- `FilterKeyword`: `id`, `keyword`, `whole_word`

API endpoits:
- `GET /api/v2/filters` to list filters (including keywords)
- `POST /api/v2/filters` to create a new filter
  `keywords_attributes` can also be passed to create keywords in one request
- `GET /api/v2/filters/:id` to read a particular filter
- `PUT /api/v2/filters/:id` to update a new filter
  `keywords_attributes` can also be passed to edit, delete or add keywords in
   one request
- `DELETE /api/v2/filters/:id` to delete a particular filter
- `GET /api/v2/filters/:id/keywords` to list keywords for a filter
- `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a
   filter
- `GET /api/v2/filter_keywords/:id` to read a particular keyword
- `PUT /api/v2/filter_keywords/:id` to edit a particular keyword
- `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword

* Change from `irreversible` boolean to `action` enum

* Remove irrelevent `irreversible_must_be_within_context` check

* Fix /filters/new and /filters/edit with update for filter_action

* Fix Rubocop/Codeclimate complaining about task names

* Refactor FeedManager#phrase_filtered?

This moves regexp building and filter caching to the `CustomFilter` class.

This does not change the functional behavior yet, but this changes how the
cache is built, doing per-custom_filter regexps so that filters can be matched
independently, while still offering caching.

* Perform server-side filtering and output result in REST API

* Fix numerous filters_changed events being sent when editing multiple keywords at once

* Add some tests

* Use the new API in the WebUI

- use client-side logic for filters we have fetched rules for.
  This is so that filter changes can be retroactively applied without
  reloading the UI.
- use server-side logic for filters we haven't fetched rules for yet
  (e.g. network error, or initial timeline loading)

* Minor optimizations and refactoring

* Perform server-side filtering on the streaming server

* Change the wording of filter action labels

* Fix issues pointed out by linter

* Change design of “Show anyway” link in accordence to review comments

* Drop “irreversible” filtering behavior

* Move /api/v2/filter_keywords to /api/v1/filters/keywords

* Rename `filter_results` attribute to `filtered`

* Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer

* Fix systemChannelId value in streaming server

* Simplify code by removing client-side filtering code

The simplifcation comes at a cost though: filters aren't retroactively
applied anymore.
2022-06-28 09:42:13 +02:00
Claire
eed5a4bf9c
Fix empty “Server rules violation” report option () 2022-04-28 21:29:29 +02:00
Eugen Rochko
d4592bbfcd
Add explore page to web UI ()
* Add explore page to web UI

* Fix not removing loaded statuses from trends on mute/block action
2022-02-25 00:34:33 +01:00
Claire
11502ae46e
Add aliases for WebUI routes that were renamed in ()
* Add aliases for some WebUI routes that were renamed in 

Accounts and statuses routes need more work as they use different parameters.

* Add aliases for /statuses/* routes

* Add aliases for /accounts/* WebUI routes

Does not correctly set the “active” state on the navigation tabs but this is
a minor issue.

* Fix some routes

* Fix /accounts/:id/{media,followers,following} not loading on legacy routes
2021-09-27 07:23:48 +02:00
Eugen Rochko
52e5c07948
Change routing paths to use usernames in web UI () 2021-09-26 05:46:13 +02:00
Claire
d3791cca0c
Improve modal flow and back button handling ()
* Refactor shouldUpdateScroll passing

So far, shouldUpdateScroll has been manually passed down from the very top of
the React component hierarchy even though it is a static function common to
all ScrollContainer instances, so replaced that with a custom class extending
ScrollContainer.

* Generalize “press back to close modal” to any modal and to public pages

* Fix boost confirmation modal closing media modal
2021-07-13 15:45:17 +02:00
Claire
92f1d739b5
Fix unread notification count when polling ()
* Fix unread notification count when polling

Fixes 

* Immediately fetch markers to avoid incorrect unread notification count
2021-05-19 23:51:05 +02:00
Eugen Rochko
0ad240cb6b
Change home timeline to reload after follow recommendations in web UI () 2021-05-07 14:33:57 +02:00
Eugen Rochko
bf903dc510
Change onboarding by replacing tutorial with follow recommendations in web UI () 2021-04-19 14:45:15 +02:00
Eugen Rochko
18ca4e0e9a
Fix pop-out player appearing on mobile screens in web UI ()
Fix 
2020-11-16 05:16:39 +01:00
ThibG
f54ca3d08e
Fix browser notification permission request logic ()
* Add notification permission handling code

* Request notification permission when enabling any notification setting

* Add badge to notification settings when permissions insufficient

* Disable alerts by default, requesting permission and enable them on onboarding
2020-10-13 00:37:21 +02:00
ThibG
63770d3aac
Ignore alt-key hotkeys in text fields ()
Fixes 

This used to be the case until , which introduced a hotkey to toggle
the Content Warning field.

Unfortunately, MacOS relies on the “alt” key for many things, including
composing text (see ), therefore, even if that makes the CW toggle
hotkey significantly less useful, it makes sense to not interfere with
composing toots.
2020-10-05 22:04:06 +02:00
Takeshi Umeda
bec8b12bb5
Fix mark as read in notifications to be saved immediately ()
* Fix mark as read in notifications to be saved immediately

* fix code style
2020-10-01 04:17:46 +02:00
Eugen Rochko
d88a79b456
Add pop-out player for audio/video in web UI ()
Fix 
2020-09-28 13:29:43 +02:00
ThibG
ff89025979
Add unread notification markers ()
* Add unread notification markers

Fixes 

* Allow IntersectionObserverArticle's children to be updated
2020-09-26 20:57:07 +02:00
ThibG
6b6a9d0ea3
Add hotkey for toggling content warning composer field () 2020-06-09 10:32:32 +02:00
ThibG
eeddb1a624
Fix unsent toot confirmation dialog not popping up in single column () 2020-05-31 20:38:56 +02:00
ThibG
5aff2a6957
Fix timeline markers not working on Chrome ()
* Periodically save timeline markers

This saves timeline markers immediately upon message arrival, but not more
than once every 5 minutes.

This does not change how the markers are saved on closing the window,
except that it avoids submitting them if there is no need for it.

* Use the Fetch API when possible instead of XHR on window unload
2020-05-29 16:14:16 +02:00
ThibG
a690b3e470 Add hotkey for opening media files ()
* [WiP] Add hotkey to open media

* Give focus to play/pause button when opening video modal
2019-11-29 17:02:35 +01:00
ThibG
dfea7368c9 Add bookmarks ()
* Add backend support for bookmarks

Bookmarks behave like favourites, except they aren't shared with other
users and do not have an associated counter.

* Add spec for bookmark endpoints

* Add front-end support for bookmarks

* Introduce OAuth scopes for bookmarks

* Add bookmarks to archive takeout

* Fix migration

* Coding style fixes

* Fix rebase issue

* Update bookmarked_statuses to latest UI changes

* Update bookmark actions to properly reflect status changes in state

* Add bookmarks item to single-column layout

* Make active bookmarks red
2019-11-13 23:02:10 +01:00
Hinaloe
8568018935 dont crash with null-ref () 2019-11-04 12:58:19 +01:00
Jeong Arm
3abe003f59 Fix drag and drop link to composebox () 2019-10-02 17:10:56 +02:00
Eugen Rochko
bdeff5ae15
Fix web UI allowing uploads past status limit via drag & drop ()
Fix 
2019-09-16 20:42:19 +02:00
Eugen Rochko
e445a8af64
Add timeline read markers API ()
Fix 
2019-09-06 13:55:51 +02:00
Eugen Rochko
cb447b28c4
Add profile directory to web UI ()
* Add profile directory to web UI

* Add a line of bio to the directory
2019-08-30 00:14:36 +02:00
ThibG
bd4099d976 Change window resize handler to switch to/from mobile layout as soon as needed () 2019-08-25 15:48:50 +02:00
Eugen Rochko
c09ecbc53e
Add indicator of unread content to window title when web UI is out of focus ()
Fix 
2019-08-13 12:22:16 +02:00
Eugen Rochko
aa22b38fdb
Change single-column mode to scroll the whole page ()
Fix 
2019-07-19 09:25:22 +02:00
ThibG
a472190729 Add a keyboard shortcut to hide/show media ()
* Move control of media visibility to parent component

* Add keyboard shortcut to toggle media visibility
2019-05-25 23:20:51 +02:00
Eugen Rochko
1e5532e693
Add responsive panels to the single-column layout ()
* Add responsive panels to the single-column layout

* Fixes

* Fix not being able to save the preference

* Fix code style issues

* Set max-height on the compose textarea and add a link to relationship manager
2019-05-25 21:27:00 +02:00
Eugen Rochko
9ddeb30f90
Add forceSingleColumn prop to <UI /> ()
* Move TabsBar rendering logic from CSS to the ColumnsArea component

* Add forceSingleColumn mode

* Add unread notifications counter to tabs bar

* Add toggle to control `forceSingleColumn`

* Increase paddings in mobile layout responsively at large sizes
2019-05-23 01:35:22 +02:00
ThibG
4f73cde4e1 Minor account media gallery fixes ()
* Make the cursor icon consistant across media types in account media gallery

* Fix the video player modal causing scroll position to reset
2019-05-04 17:36:43 +02:00
ThibG
5121d9c12f When selecting a toot via keyboard, ensure it is scrolled into view () 2019-05-03 06:20:35 +02:00
tmm576
750c67660d Allow multiple files upload through web UI, including drag & drop ()
* Allow drag and drop uploads of multiple files to compose

* Calculate aggregate upload progress for single action

* Allow multiple uploads to compose through traditional input, consolidate update file limit logic, provide file limit feedback
2019-02-02 20:22:05 +01:00
tmm576
4cd0a10793 Allow event defaults on index for text data transfer () 2019-01-17 23:27:51 +01:00
Hinaloe
d6433b3931 make draggingOver state off correctly ()
* make draggingOver stat off correctly

* ignore safari and Edge

* Revert "ignore safari and Edge"

This reverts commit b9b93ea3674877670161207a3f9b3a4f82b68a2d.

* Revert "make draggingOver stat off correctly"

This reverts commit f5fd6b94dc1d4b812e0b910b2b4f35792c3ea3a1.

* clear drag stack when drop
2019-01-14 07:44:26 +00:00
Yamagishi Kazutoshi
8f5fdab5bf Update dependencies for Node.js (2018-12-31) ()
* Update react-* to v16.7.0

* Upgrade react-hotkeys to v1.1.4

* Update react-intl to v2.7.2

* Update react-select to v2.2.0

* Update react-swipeable-views to v0.13.0

* Upgrade react-textarea-autosize to v7.1.0

* Upgrade redux to v4.0.1

* Upgrade reselect to v4.0.0

* Update raf to v3.4.1

* Update enzyme to v3.8.0

* Update rails-ujs to v5.2.2

* Update axios to v0.18.0

* Update http-link-header to v1.0.2

* Update rellax to v1.7.1

* Update intersection-observer to v0.5.1

* Update stringz to v1.0.0

* Upgrade babel-eslint to v10.0.1

* Update @babel/* to v7.2.x

* Update babel-plugin-react-intl to v3.0.1

* Update babel-plugin-transform-react-remove-prop-types to v0.4.21

* Upgrade dotenv to v6.2.0

* Update express to v4.16.4

* Update webpack to v4.28.3

* Upgrade autoprefixer to v9.4.3

* Update babel-loader to v8.0.4

* Upgrade css-loader to v2.1.0

* Upgrade file-loader to v3.0.1

* Update marky to v1.2.1

* Update mini-css-extract-plugin to v0.5.0

* Update offline-plugin to v5.0.6

* Update style-loader to v0.23.1

* Update eslint-plugin-jsx-a11y to v6.1.2

* yarn upgrade

* fix

* Replace webpack-manifest-plugin to webpack-assets-manifest

* Replace node-zopfli to @gfz/zopfli

* Remove monkey-patch for http-link-header
2018-12-31 18:11:48 +01:00
ThibG
e70e496e29 Clean up dead code in public timeline code () 2018-12-18 22:00:18 +01:00
Eugen Rochko
9cb26bb56b
Add new first-time tutorial ()
* Prepare to load onboarding as a full page

* Update the first-time introduction

* Improve responsive design

* Replace speech bubble with logo

* Increase text size and reword first paragraph
2018-12-17 11:07:17 +01:00
ThibG
adb06baef6 Handle global hotkeys even when no element has focus ()
This fixes hotkeys not working when pressing the column
“back” button, for instance.
2018-10-17 16:56:16 +02:00
ThibG
05f90e3695 Adjust beforeUnload conditions ()
Fixes 
2018-09-21 18:54:17 +02:00
Yamagishi Kazutoshi
0ddbccf7e6 Upgrade Babel to version 7.0.0 () 2018-09-14 17:59:48 +02:00
Jakub Mendyk
5129f6f2aa Add messages informing that collections are empty (fixes ) ()
* Add messages informing that collections are empty

Adds empty messages to blocked users, domain blocks, favourited statuses, users
that favourited toot, follow requests, followers of given user, user's being
followed by given user, lists, muted users, toots' boosts.

Switched from using ScrollContainer to ScrollableList and/or added empty
message's text.

Fixes 

* Update localization files with strings for 

* Fix whitespace issues pointed out by codeclimate
2018-08-26 16:39:37 +02:00
Annika Backstrom
25f6f41052 Add hotkey for follow requests () 2018-08-20 03:44:16 +02:00
Yamagishi Kazutoshi
06c83527f5 Do not scroll up when modal is opened () 2018-07-29 16:52:06 +02:00
Eugen Rochko
cdb101340a
Keyword/phrase filtering ()
* Add keyword filtering

    GET|POST       /api/v1/filters
    GET|PUT|DELETE /api/v1/filters/:id

- Irreversible filters can drop toots from home or notifications
- Other filters can hide toots through the client app
- Filters use a phrase valid in particular contexts, expiration

* Make sure expired filters don't get applied client-side

* Add missing API methods

* Remove "regex filter" from column settings

* Add tests

* Add test for FeedManager

* Add CustomFilter test

* Add UI for managing filters

* Add streaming API event to allow syncing filters

* Fix tests
2018-06-29 15:34:36 +02:00
Hinaloe
b347d55432 DataTransfer.types may Array-like object () 2018-06-18 01:10:58 +09:00
Eugen Rochko
0deb9fa6b9
Remove trending hashtags ()
* Delete trends_controller.rb

* Update routes.rb

* Update trending_tags.rb

* Update index.js

* Update index.js

* Update search_results.js

* Update async-components.js

* Update index.js

* Delete trends.js

* Delete trends.js

* Delete trends_container.js

* Delete trends.js

* Update search_results.js

* Update search_results_container.js
2018-06-04 02:18:18 +02:00
Eugen Rochko
73c0c36e7b
Improve trends layout ()
* Allow collapsing trends, responsively hide trends

* Add trends column
2018-06-01 19:18:37 +02:00
Eugen Rochko
3623aea6c9
Redirect / to home on mobile layout, to getting started on desktop () 2018-05-30 18:42:06 +02:00