Fill in create, edit, update, and destroy for keyword mutes interface.

Also add a destroy-all action, which can be useful if you're flushing an
old list entirely to start a new one.
lolsob-rspec
David Yip 2017-10-20 15:12:45 -05:00
parent 05ee0aeb8b
commit e3f5ec2652
8 changed files with 84 additions and 23 deletions

View File

@ -5,6 +5,7 @@ class Settings::KeywordMutesController < ApplicationController
before_action :authenticate_user! before_action :authenticate_user!
before_action :set_account before_action :set_account
before_action :load_keyword_mute, only: [:edit, :update, :destroy]
def index def index
@keyword_mutes = paginated_keyword_mutes_for_account @keyword_mutes = paginated_keyword_mutes_for_account
@ -14,6 +15,39 @@ class Settings::KeywordMutesController < ApplicationController
@keyword_mute = keyword_mutes_for_account.build @keyword_mute = keyword_mutes_for_account.build
end end
def create
@keyword_mute = keyword_mutes_for_account.create(keyword_mute_params)
if @keyword_mute.persisted?
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
else
render :new
end
end
def update
if @keyword_mute.update(keyword_mute_params)
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
else
render :new
end
end
def destroy
if @keyword_mute.destroy
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
else
# FIXME
redirect_to settings_keyword_mutes_path, notice: "huh that didn't work right"
end
end
def destroy_all
keyword_mutes_for_account.delete_all
redirect_to settings_keyword_mutes_path, notice: I18n.t('generic.changes_saved_msg')
end
private private
def set_account def set_account
@ -24,6 +58,14 @@ class Settings::KeywordMutesController < ApplicationController
KeywordMute.where(account: @account) KeywordMute.where(account: @account)
end end
def load_keyword_mute
@keyword_mute = keyword_mutes_for_account.find(params[:id])
end
def keyword_mute_params
params.require(:keyword_mute).permit(:keyword, :whole_word)
end
def paginated_keyword_mutes_for_account def paginated_keyword_mutes_for_account
keyword_mutes_for_account.order(:keyword).page params[:page] keyword_mutes_for_account.order(:keyword).page params[:page]
end end

View File

@ -0,0 +1,11 @@
.fields-group
= f.input :keyword
= f.check_box :whole_word
= f.label :whole_word, t('keyword_mutes.match_whole_word')
.actions
- if f.object.persisted?
= f.button :button, t('generic.save_changes'), type: :submit
= link_to t('keyword_mutes.remove'), settings_keyword_mute_path(f.object), class: 'negative button', method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
- else
= f.button :button, t('keyword_mutes.add_keyword'), type: :submit

View File

@ -1,6 +1,9 @@
%tr %tr
%td %td
= keyword_mute.keyword = keyword_mute.keyword
%td
- if keyword_mute.whole_word
%i.fa.fa-check
%td %td
= table_link_to 'edit', t('settings.keyword_mutes.edit'), edit_settings_keyword_mute_path(keyword_mute) = table_link_to 'edit', t('settings.keyword_mutes.edit'), edit_settings_keyword_mute_path(keyword_mute)
%td %td

View File

@ -0,0 +1,6 @@
- content_for :page_title do
= t('keyword_mutes.edit_keyword')
= simple_form_for @keyword_mute, url: settings_keyword_mute_path(@keyword_mute) do |f|
= render 'shared/error_messages', object: @keyword_mute
= render 'fields', f: f

View File

@ -5,11 +5,14 @@
%table.table %table.table
%thead %thead
%tr %tr
%th= t('settings.keyword_mutes.keyword') %th= t('keyword_mutes.keyword')
%th= t('keyword_mutes.match_whole_word')
%th %th
%th %th
%tbody %tbody
= render @keyword_mutes = render @keyword_mutes
= paginate @keyword_mutes = paginate @keyword_mutes
= link_to t('settings.keyword_mutes.add_keyword'), new_settings_keyword_mute_path, class: 'button' .simple_form
= link_to t('keyword_mutes.add_keyword'), new_settings_keyword_mute_path, class: 'button'
= link_to t('keyword_mutes.remove_all'), destroy_all_settings_keyword_mutes_path, class: 'button negative', method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }

View File

@ -1,19 +1,6 @@
- content_for :page_title do - content_for :page_title do
= t('settings.keyword_mutes.add_keyword') = t('keyword_mutes.add_keyword')
= simple_form_for @keyword_mute, url: settings_keyword_mutes_path do |f| = simple_form_for @keyword_mute, url: settings_keyword_mutes_path do |f|
= render 'shared/error_messages', object: @keyword_mute = render 'shared/error_messages', object: @keyword_mute
= render 'fields', f: f
%p.muted-hint
Keywords match word boundaries case-insensitively. For example:
%ul
%li
<strong>alice</strong> matches <strong>alice</strong>, <strong>Alice</strong>, and <strong>Alice's</strong>
%li
<strong>bob</strong> matches <strong>bob</strong> and <strong>Bob</strong> but not <strong>bobcat</strong>
.fields-group
= f.input :keyword
.actions
= f.button :button, t('admin.keyword_mutes.add_keyword'), type: :submit

View File

@ -215,11 +215,6 @@ en:
contact_information: contact_information:
email: Business e-mail email: Business e-mail
username: Contact username username: Contact username
keyword_mutes:
edit: Edit
delete: Delete
add_keyword: Add keyword
keyword: Keyword
registrations: registrations:
closed_message: closed_message:
desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags
@ -378,6 +373,14 @@ en:
following: Following list following: Following list
muting: Muting list muting: Muting list
upload: Upload upload: Upload
keyword_mutes:
add_keyword: Add keyword
delete: Delete
edit: Edit
edit_keyword: Edit keyword
keyword: Keyword
match_whole_word: Match whole word
remove_all: Remove all
landing_strip_html: "<strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse." landing_strip_html: "<strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse."
landing_strip_signup_html: If you don't, you can <a href="%{sign_up_path}">sign up here</a>. landing_strip_signup_html: If you don't, you can <a href="%{sign_up_path}">sign up here</a>.
media_attachments: media_attachments:

View File

@ -66,7 +66,13 @@ Rails.application.routes.draw do
namespace :settings do namespace :settings do
resource :profile, only: [:show, :update] resource :profile, only: [:show, :update]
resources :keyword_mutes
resources :keyword_mutes do
collection do
delete :destroy_all
end
end
resource :preferences, only: [:show, :update] resource :preferences, only: [:show, :update]
resource :notifications, only: [:show, :update] resource :notifications, only: [:show, :update]
resource :import, only: [:show, :create] resource :import, only: [:show, :create]