about summary refs log tree commit diff
path: root/app/views/filters
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-06-29 15:34:36 +0200
committerGitHub <noreply@github.com>2018-06-29 15:34:36 +0200
commitcdb101340a20183a82889f811d9311c370c855e5 (patch)
treedaacd56d1edbf359b0d97a926e90b999ba7f6129 /app/views/filters
parentfbee9b5ac898e571e384792a92b40fa1524cf127 (diff)
Keyword/phrase filtering (#7905)
* 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
Diffstat (limited to 'app/views/filters')
-rw-r--r--app/views/filters/_fields.html.haml11
-rw-r--r--app/views/filters/edit.html.haml8
-rw-r--r--app/views/filters/index.html.haml20
-rw-r--r--app/views/filters/new.html.haml8
4 files changed, 47 insertions, 0 deletions
diff --git a/app/views/filters/_fields.html.haml b/app/views/filters/_fields.html.haml
new file mode 100644
index 000000000..af5d648b8
--- /dev/null
+++ b/app/views/filters/_fields.html.haml
@@ -0,0 +1,11 @@
+.fields-group
+  = f.input :phrase, as: :string, wrapper: :with_block_label
+
+.fields-group
+  = f.input :context, wrapper: :with_block_label, collection: CustomFilter::VALID_CONTEXTS, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label_method: lambda { |context| I18n.t("filters.contexts.#{context}") }, include_blank: false
+
+.fields-group
+  = f.input :irreversible, wrapper: :with_label
+
+.fields-group
+  = f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: lambda { |i| I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt')
diff --git a/app/views/filters/edit.html.haml b/app/views/filters/edit.html.haml
new file mode 100644
index 000000000..e971215ac
--- /dev/null
+++ b/app/views/filters/edit.html.haml
@@ -0,0 +1,8 @@
+- content_for :page_title do
+  = t('filters.edit.title')
+
+= simple_form_for @filter, url: filter_path(@filter), method: :put do |f|
+  = render 'fields', f: f
+
+  .actions
+    = f.button :button, t('generic.save_changes'), type: :submit
diff --git a/app/views/filters/index.html.haml b/app/views/filters/index.html.haml
new file mode 100644
index 000000000..18ebee570
--- /dev/null
+++ b/app/views/filters/index.html.haml
@@ -0,0 +1,20 @@
+- content_for :page_title do
+  = t('filters.index.title')
+
+.table-wrapper
+  %table.table
+    %thead
+      %tr
+        %th= t('simple_form.labels.defaults.phrase')
+        %th= t('simple_form.labels.defaults.context')
+        %th
+    %tbody
+      - @filters.each do |filter|
+        %tr
+          %td= filter.phrase
+          %td= filter.context.map { |context| I18n.t("filters.contexts.#{context}") }.join(', ')
+          %td
+            = table_link_to 'pencil', t('filters.edit.title'), edit_filter_path(filter)
+            = table_link_to 'times', t('filters.index.delete'), filter_path(filter), method: :delete
+
+= link_to t('filters.new.title'), new_filter_path, class: 'button'
diff --git a/app/views/filters/new.html.haml b/app/views/filters/new.html.haml
new file mode 100644
index 000000000..05bec343f
--- /dev/null
+++ b/app/views/filters/new.html.haml
@@ -0,0 +1,8 @@
+- content_for :page_title do
+  = t('filters.new.title')
+
+= simple_form_for @filter, url: filters_path do |f|
+  = render 'fields', f: f
+
+  .actions
+    = f.button :button, t('filters.new.title'), type: :submit