diff --git a/app/controllers/settings/keyword_mutes_controller.rb b/app/controllers/settings/keyword_mutes_controller.rb
index ffe94e33a4..4b3e01b9ca 100644
--- a/app/controllers/settings/keyword_mutes_controller.rb
+++ b/app/controllers/settings/keyword_mutes_controller.rb
@@ -4,4 +4,27 @@ class Settings::KeywordMutesController < ApplicationController
layout 'admin'
before_action :authenticate_user!
+ before_action :set_account
+
+ def index
+ @keyword_mutes = paginated_keyword_mutes_for_account
+ end
+
+ def new
+ @keyword_mute = keyword_mutes_for_account.build
+ end
+
+ private
+
+ def set_account
+ @account = current_user.account
+ end
+
+ def keyword_mutes_for_account
+ KeywordMute.where(account: @account)
+ end
+
+ def paginated_keyword_mutes_for_account
+ keyword_mutes_for_account.order(:keyword).page params[:page]
+ end
end
diff --git a/app/views/settings/keyword_mutes/_keyword_mute.html.haml b/app/views/settings/keyword_mutes/_keyword_mute.html.haml
new file mode 100644
index 0000000000..a2698ac7b4
--- /dev/null
+++ b/app/views/settings/keyword_mutes/_keyword_mute.html.haml
@@ -0,0 +1,7 @@
+%tr
+ %td
+ = keyword_mute.keyword
+ %td
+ = table_link_to 'edit', t('settings.keyword_mutes.edit'), edit_settings_keyword_mute_path(keyword_mute)
+ %td
+ = table_link_to 'times', t('settings.keyword_mutes.delete'), settings_keyword_mute_path(keyword_mute), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
diff --git a/app/views/settings/keyword_mutes/index.html.haml b/app/views/settings/keyword_mutes/index.html.haml
index 421fbeba29..6b212895d2 100644
--- a/app/views/settings/keyword_mutes/index.html.haml
+++ b/app/views/settings/keyword_mutes/index.html.haml
@@ -1,2 +1,15 @@
- content_for :page_title do
= t('settings.keyword_mutes')
+
+.table-wrapper
+ %table.table
+ %thead
+ %tr
+ %th= t('settings.keyword_mutes.keyword')
+ %th
+ %th
+ %tbody
+ = render @keyword_mutes
+
+= paginate @keyword_mutes
+= link_to t('settings.keyword_mutes.add_keyword'), new_settings_keyword_mute_path, class: 'button'
diff --git a/app/views/settings/keyword_mutes/new.html.haml b/app/views/settings/keyword_mutes/new.html.haml
new file mode 100644
index 0000000000..5e8268e978
--- /dev/null
+++ b/app/views/settings/keyword_mutes/new.html.haml
@@ -0,0 +1,19 @@
+- content_for :page_title do
+ = t('settings.keyword_mutes.add_keyword')
+
+= simple_form_for @keyword_mute, url: settings_keyword_mutes_path do |f|
+ = render 'shared/error_messages', object: @keyword_mute
+
+ %p.muted-hint
+ Keywords match word boundaries case-insensitively. For example:
+ %ul
+ %li
+ alice matches alice, Alice, and Alice's
+ %li
+ bob matches bob and Bob but not bobcat
+
+ .fields-group
+ = f.input :keyword
+
+ .actions
+ = f.button :button, t('admin.keyword_mutes.add_keyword'), type: :submit
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 6b4e602bd8..5b91f83205 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -215,6 +215,11 @@ en:
contact_information:
email: Business e-mail
username: Contact username
+ keyword_mutes:
+ edit: Edit
+ delete: Delete
+ add_keyword: Add keyword
+ keyword: Keyword
registrations:
closed_message:
desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags