thredded 0.15.3 → 0.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/assets/javascripts/thredded/components/submit_hotkey.es6 +18 -0
- data/app/assets/stylesheets/thredded/components/_pagination.scss +1 -1
- data/app/assets/stylesheets/thredded/components/_post-form.scss +0 -1
- data/app/assets/stylesheets/thredded/components/_topics.scss +2 -28
- data/app/controllers/thredded/application_controller.rb +2 -0
- data/app/controllers/thredded/post_permalinks_controller.rb +1 -1
- data/app/controllers/thredded/post_previews_controller.rb +1 -1
- data/app/controllers/thredded/posts_controller.rb +2 -3
- data/app/controllers/thredded/private_post_permalinks_controller.rb +1 -1
- data/app/controllers/thredded/private_post_previews_controller.rb +1 -1
- data/app/controllers/thredded/private_posts_controller.rb +2 -3
- data/app/helpers/thredded/urls_helper.rb +28 -1
- data/app/models/concerns/thredded/content_moderation_state.rb +2 -2
- data/app/models/concerns/thredded/post_common.rb +1 -1
- data/app/models/concerns/thredded/topic_common.rb +1 -1
- data/app/models/thredded/messageboard.rb +0 -3
- data/app/models/thredded/post.rb +8 -0
- data/app/models/thredded/post_moderation_record.rb +2 -0
- data/app/models/thredded/private_post.rb +8 -0
- data/app/models/thredded/private_topic.rb +14 -0
- data/app/models/thredded/topic.rb +2 -2
- data/app/models/thredded/user_extender.rb +2 -2
- data/app/views/thredded/posts_common/_form.html.erb +1 -0
- data/app/views/thredded/posts_common/form/_content_field.html.erb +1 -1
- data/app/views/thredded/private_topics/_form.html.erb +2 -0
- data/app/views/thredded/private_topics/_private_topic.html.erb +0 -5
- data/app/views/thredded/topics/_form.html.erb +1 -0
- data/app/views/thredded/topics/_topic.html.erb +6 -4
- data/app/views/thredded/topics/unread.html.erb +4 -1
- data/config/i18n-tasks.yml +1 -0
- data/config/locales/de.yml +5 -0
- data/config/locales/en.yml +5 -0
- data/config/locales/es.yml +5 -0
- data/config/locales/fr.yml +5 -0
- data/config/locales/it.yml +5 -0
- data/config/locales/pl.yml +5 -0
- data/config/locales/pt-BR.yml +5 -0
- data/config/locales/ru.yml +6 -1
- data/config/locales/zh-CN.yml +5 -0
- data/lib/generators/thredded/install/templates/initializer.rb +17 -11
- data/lib/thredded.rb +111 -48
- data/lib/thredded/content_formatter.rb +2 -2
- data/lib/thredded/database_seeder.rb +6 -6
- data/lib/thredded/db_tools.rb +2 -2
- data/lib/thredded/errors.rb +13 -1
- data/lib/thredded/html_pipeline/onebox_filter.rb +2 -2
- data/lib/thredded/version.rb +1 -1
- data/vendor/assets/javascripts/autosize.min.js +2 -6
- data/vendor/assets/javascripts/textcomplete.min.js +2 -2
- metadata +4 -3
@@ -29,10 +29,12 @@
|
|
29
29
|
<%= user_link topic.last_user %>
|
30
30
|
</cite>
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
<% if local_assigns[:show_messageboard] %>
|
33
|
+
<span class="thredded--topics--messageboard">
|
34
|
+
<%= t 'thredded.topics.in_messageboard_html',
|
35
|
+
messageboard_link: link_to(topic.messageboard_name, topic.messageboard_path) %>
|
36
|
+
</span>
|
37
|
+
<% end %>
|
36
38
|
|
37
39
|
<% if topic.blocked? && topic.can_moderate? %>
|
38
40
|
<span class="thredded--topics--moderation-state thredded--alert thredded--alert-danger">
|
@@ -18,7 +18,10 @@
|
|
18
18
|
placeholder: t('thredded.topics.form.title_placeholder_start') if @new_topic %>
|
19
19
|
<%= render partial: 'thredded/topics/topic',
|
20
20
|
collection: @topics,
|
21
|
-
locals: {
|
21
|
+
locals: {
|
22
|
+
topics: @topics,
|
23
|
+
show_messageboard: !messageboard_or_nil
|
24
|
+
} %>
|
22
25
|
<% end %>
|
23
26
|
<footer class="thredded--pagination-bottom">
|
24
27
|
<%= paginate @topics %>
|
data/config/i18n-tasks.yml
CHANGED
data/config/locales/de.yml
CHANGED
@@ -44,8 +44,11 @@ de:
|
|
44
44
|
errors:
|
45
45
|
login_required: Bitte zuerst anmelden
|
46
46
|
not_authorized: Du hast keinen Zugriff auf diese Seite
|
47
|
+
post_not_found: Dieser Beitrag existiert nicht.
|
48
|
+
private_post_not_found: Diese private Nachricht existiert nicht.
|
47
49
|
private_topic_create_denied: Du bist nicht autorisiert, private Unterhaltungen zu erstellen
|
48
50
|
private_topic_not_found: Diese private Unterhaltung existiert nicht
|
51
|
+
topic_not_found: Dieses Thema existiert nicht.
|
49
52
|
form:
|
50
53
|
create_btn_submitting: Erstellen...
|
51
54
|
preview: Vorschau
|
@@ -224,6 +227,7 @@ de:
|
|
224
227
|
title_placeholder: :thredded.topics.form.title_label
|
225
228
|
title_placeholder_start: Starte eine neue Diskussion
|
226
229
|
update_btn: Beitrag bearbeiten
|
230
|
+
in_messageboard_html: in %{messageboard_link}
|
227
231
|
locked:
|
228
232
|
label: Gesperrt
|
229
233
|
message: Der Beitrag wurde von einem Moderator gesperrt
|
@@ -257,6 +261,7 @@ de:
|
|
257
261
|
one: Einmalig hochgeladen
|
258
262
|
other: "%{count} -mal hochgeladen"
|
259
263
|
recent_activity: :thredded.recent_activity
|
264
|
+
send_private_message: Private Nachricht senden
|
260
265
|
started_topic_html: "%{topic_link} gestartet"
|
261
266
|
started_topics_count:
|
262
267
|
one: Eine Diskussion gestartet
|
data/config/locales/en.yml
CHANGED
@@ -43,8 +43,11 @@ en:
|
|
43
43
|
errors:
|
44
44
|
login_required: Please sign in first.
|
45
45
|
not_authorized: You are not authorized to access this page.
|
46
|
+
post_not_found: This post does not exist.
|
47
|
+
private_post_not_found: This private message does not exist.
|
46
48
|
private_topic_create_denied: You are not authorized to create private topics.
|
47
49
|
private_topic_not_found: This private topic does not exist.
|
50
|
+
topic_not_found: This topic does not exist.
|
48
51
|
form:
|
49
52
|
create_btn_submitting: Creating...
|
50
53
|
preview: Preview
|
@@ -221,6 +224,7 @@ en:
|
|
221
224
|
title_placeholder: :thredded.topics.form.title_label
|
222
225
|
title_placeholder_start: Start a New Topic
|
223
226
|
update_btn: Update Topic
|
227
|
+
in_messageboard_html: in %{messageboard_link}
|
224
228
|
locked:
|
225
229
|
label: Locked
|
226
230
|
message: This topic has been locked by a moderator.
|
@@ -253,6 +257,7 @@ en:
|
|
253
257
|
one: Posted once
|
254
258
|
other: Posted %{count} times
|
255
259
|
recent_activity: :thredded.recent_activity
|
260
|
+
send_private_message: Send private message
|
256
261
|
started_topic_html: Started %{topic_link}
|
257
262
|
started_topics_count:
|
258
263
|
one: Started one topic
|
data/config/locales/es.yml
CHANGED
@@ -45,8 +45,11 @@ es:
|
|
45
45
|
errors:
|
46
46
|
login_required: Por favor, inicia sesión.
|
47
47
|
not_authorized: No estás autorizado para ver esta página.
|
48
|
+
post_not_found: Esta publicación no existe.
|
49
|
+
private_post_not_found: Este mensaje privado no existe.
|
48
50
|
private_topic_create_denied: No estás autorizado para crear temas privados.
|
49
51
|
private_topic_not_found: Este tema privado no existe.
|
52
|
+
topic_not_found: Este tema no existe.
|
50
53
|
form:
|
51
54
|
create_btn_submitting: Creando...
|
52
55
|
preview: Vista previa
|
@@ -225,6 +228,7 @@ es:
|
|
225
228
|
title_placeholder: :thredded.topics.form.title_label
|
226
229
|
title_placeholder_start: Crear un Nuevo Tema
|
227
230
|
update_btn: Actualizar Tema
|
231
|
+
in_messageboard_html: en %{messageboard_link}
|
228
232
|
locked:
|
229
233
|
label: Bloqueado
|
230
234
|
message: Este tema ha sido bloqueado por un moderador.
|
@@ -257,6 +261,7 @@ es:
|
|
257
261
|
one: Ha escrito una vez
|
258
262
|
other: Ha escrito %{count} veces
|
259
263
|
recent_activity: :thredded.recent_activity
|
264
|
+
send_private_message: Enviar mensaje privado
|
260
265
|
started_topic_html: Empezó %{topic_link}
|
261
266
|
started_topics_count:
|
262
267
|
one: Ha empezado un tema
|
data/config/locales/fr.yml
CHANGED
@@ -43,8 +43,11 @@ fr:
|
|
43
43
|
errors:
|
44
44
|
login_required: Veuillez vous connecter
|
45
45
|
not_authorized: Vous n'êtes pas autorisé à accéder à cette page.
|
46
|
+
post_not_found: Ce post n'existe pas.
|
47
|
+
private_post_not_found: Ce message privé n'existe pas.
|
46
48
|
private_topic_create_denied: Vous n'êtes pas autorisé à créer des sujets.
|
47
49
|
private_topic_not_found: Ce sujet privé n'existe pas.
|
50
|
+
topic_not_found: Ce sujet n'existe pas.
|
48
51
|
form:
|
49
52
|
create_btn_submitting: Création en cours...
|
50
53
|
preview: Aperçu
|
@@ -222,6 +225,7 @@ fr:
|
|
222
225
|
title_placeholder: :thredded.topics.form.title_label
|
223
226
|
title_placeholder_start: Commencer un nouveau sujet
|
224
227
|
update_btn: Mettre à jour le sujet
|
228
|
+
in_messageboard_html: dans %{messageboard_link}
|
225
229
|
locked:
|
226
230
|
label: Verrouillé
|
227
231
|
message: Ce sujet a été verrouillé par un modérateur.
|
@@ -255,6 +259,7 @@ fr:
|
|
255
259
|
one: Commenté une seule fois
|
256
260
|
other: Commenté %{count} fois
|
257
261
|
recent_activity: :thredded.recent_activity
|
262
|
+
send_private_message: Envoyer un message privé
|
258
263
|
started_topic_html: Démarré %{topic_link}
|
259
264
|
started_topics_count:
|
260
265
|
one: Démarré un sujet
|
data/config/locales/it.yml
CHANGED
@@ -43,8 +43,11 @@ it:
|
|
43
43
|
errors:
|
44
44
|
login_required: Per visualizzare questa pagina bisogna accedere tramite login.
|
45
45
|
not_authorized: Non sei autorizzato a vedere questa pagina.
|
46
|
+
post_not_found: Questo post non esiste.
|
47
|
+
private_post_not_found: Questo messaggio privato non esiste.
|
46
48
|
private_topic_create_denied: Non sei autorizzato a creare discussioni private.
|
47
49
|
private_topic_not_found: Questa discussione privata non esiste.
|
50
|
+
topic_not_found: Questo argomento non esiste.
|
48
51
|
form:
|
49
52
|
create_btn_submitting: Creazione in corso...
|
50
53
|
preview: Anteprima
|
@@ -225,6 +228,7 @@ it:
|
|
225
228
|
title_placeholder: :thredded.topics.form.title_label
|
226
229
|
title_placeholder_start: Inizia una Nuova Discussione
|
227
230
|
update_btn: Aggiorna Discussione
|
231
|
+
in_messageboard_html: in %{messageboard_link}
|
228
232
|
locked:
|
229
233
|
label: Bloccata
|
230
234
|
message: Questa discussione è stata bloccata da un moderatore.
|
@@ -257,6 +261,7 @@ it:
|
|
257
261
|
one: Ha commentato una volta
|
258
262
|
other: Ha commentato %{count} volte
|
259
263
|
recent_activity: :thredded.recent_activity
|
264
|
+
send_private_message: Invia un messaggio privato
|
260
265
|
started_topic_html: Ha iniziato %{topic_link}
|
261
266
|
started_topics_count:
|
262
267
|
one: Ha iniziato una discussione
|
data/config/locales/pl.yml
CHANGED
@@ -43,8 +43,11 @@ pl:
|
|
43
43
|
errors:
|
44
44
|
login_required: Proszę się najpierw zalogować.
|
45
45
|
not_authorized: Nie masz uprawnień aby zobaczyć tę stronę.
|
46
|
+
post_not_found: Ten wpis nie istnieje.
|
47
|
+
private_post_not_found: Ta prywatna wiadomość nie istnieje.
|
46
48
|
private_topic_create_denied: Nie masz uprawnień do tworzenia prywatnych tematów.
|
47
49
|
private_topic_not_found: Ten prywatny temat nie istnieje.
|
50
|
+
topic_not_found: Ten temat nie istnieje.
|
48
51
|
form:
|
49
52
|
create_btn_submitting: Tworzenie...
|
50
53
|
preview: Zapowiedź
|
@@ -221,6 +224,7 @@ pl:
|
|
221
224
|
title_placeholder: :thredded.topics.form.title_label
|
222
225
|
title_placeholder_start: Rozpocznij nowy temat
|
223
226
|
update_btn: Zaktualizuj temat
|
227
|
+
in_messageboard_html: w %{messageboard_link}
|
224
228
|
locked:
|
225
229
|
label: Zablokowany
|
226
230
|
message: Ten temat został zablokowany przez moderatora.
|
@@ -255,6 +259,7 @@ pl:
|
|
255
259
|
one: Napisał 1 post
|
256
260
|
other: Napisał %{count} postów
|
257
261
|
recent_activity: :thredded.recent_activity
|
262
|
+
send_private_message: Wyślij Wiadomość Prywatną
|
258
263
|
started_topic_html: Rozpoczął %{topic_link}
|
259
264
|
started_topics_count:
|
260
265
|
few: Rozpoczął %{count} tematy
|
data/config/locales/pt-BR.yml
CHANGED
@@ -44,8 +44,11 @@ pt-BR:
|
|
44
44
|
errors:
|
45
45
|
login_required: Por favor, autentique-se primeiro.
|
46
46
|
not_authorized: Você não está autorizado a acessar esta página.
|
47
|
+
post_not_found: Este post não existe.
|
48
|
+
private_post_not_found: Esta mensagem privada não existe.
|
47
49
|
private_topic_create_denied: Você não está autorizado a criar tópicos privados.
|
48
50
|
private_topic_not_found: Este tópico privado não existe.
|
51
|
+
topic_not_found: Este tópico não existe.
|
49
52
|
form:
|
50
53
|
create_btn_submitting: Criando...
|
51
54
|
preview: Pré-visualização
|
@@ -226,6 +229,7 @@ pt-BR:
|
|
226
229
|
title_placeholder: :thredded.topics.form.title_label
|
227
230
|
title_placeholder_start: Iniciar um novo tópico
|
228
231
|
update_btn: Atualizar Tópico
|
232
|
+
in_messageboard_html: em %{messageboard_link}
|
229
233
|
locked:
|
230
234
|
label: Trancado
|
231
235
|
message: Este tópico foi bloqueado por um moderador.
|
@@ -258,6 +262,7 @@ pt-BR:
|
|
258
262
|
one: Postado uma vez
|
259
263
|
other: vezes %{count} Publicado
|
260
264
|
recent_activity: :thredded.recent_activity
|
265
|
+
send_private_message: Enviar mensagem privada
|
261
266
|
started_topic_html: Começou %{topic_link}
|
262
267
|
started_topics_count:
|
263
268
|
one: Começou um tópico
|
data/config/locales/ru.yml
CHANGED
@@ -42,8 +42,11 @@ ru:
|
|
42
42
|
errors:
|
43
43
|
login_required: Необходимо зайти на форум.
|
44
44
|
not_authorized: Вы не авторизованы.
|
45
|
+
post_not_found: Это сообщение не существует.
|
46
|
+
private_post_not_found: Это личное сообщение не существует.
|
45
47
|
private_topic_create_denied: Вы не авторизованы для создания личных сообщений.
|
46
48
|
private_topic_not_found: Личное сообщение не найдено.
|
49
|
+
topic_not_found: Эта тема не существует.
|
47
50
|
form:
|
48
51
|
create_btn_submitting: Создаю...
|
49
52
|
preview: Обзор
|
@@ -219,6 +222,7 @@ ru:
|
|
219
222
|
title_placeholder: :thredded.topics.form.title_label
|
220
223
|
title_placeholder_start: Начать новую тему
|
221
224
|
update_btn: Обновление темы
|
225
|
+
in_messageboard_html: в %{messageboard_link}
|
222
226
|
locked:
|
223
227
|
label: Заблокировать тему
|
224
228
|
message: Эта тема закрыта модератором.
|
@@ -253,12 +257,13 @@ ru:
|
|
253
257
|
one: Сделан %{count} пост
|
254
258
|
other: Сделано %{count} постов
|
255
259
|
recent_activity: :thredded.recent_activity
|
260
|
+
send_private_message: Отправить личное сообщение
|
256
261
|
started_topic_html: Начато %{topic_link}
|
257
262
|
started_topics_count:
|
258
263
|
few: Начато %{count} темы
|
259
264
|
many: Начато %{count} тем
|
260
265
|
one: Начата %{count} тема
|
261
266
|
other: Начато %{count} тем
|
262
|
-
user_posted_in_topic_html: "%{user_link}
|
267
|
+
user_posted_in_topic_html: "%{user_link} написал в %{topic_link}"
|
263
268
|
user_since_html: Пользователь был %{time_ago}
|
264
269
|
user_started_topic_html: "%{user_link} начал %{topic_link}"
|
data/config/locales/zh-CN.yml
CHANGED
@@ -40,8 +40,11 @@ zh-CN:
|
|
40
40
|
errors:
|
41
41
|
login_required: 请先登录
|
42
42
|
not_authorized: 你没有权限访问该页面
|
43
|
+
post_not_found: 这篇文章不存在。
|
44
|
+
private_post_not_found: 此私人消息不存在。
|
43
45
|
private_topic_create_denied: 你没有权限创建私人对话
|
44
46
|
private_topic_not_found: 该私人对话不存在
|
47
|
+
topic_not_found: 此主题不存在。
|
45
48
|
form:
|
46
49
|
create_btn_submitting: 创建中...
|
47
50
|
preview: 预览
|
@@ -214,6 +217,7 @@ zh-CN:
|
|
214
217
|
title_placeholder: :thredded.topics.form.title_label
|
215
218
|
title_placeholder_start: 发布新帖子
|
216
219
|
update_btn: 更新帖子
|
220
|
+
in_messageboard_html: 在%{messageboard_link}
|
217
221
|
locked:
|
218
222
|
label: 锁定
|
219
223
|
message: 该帖子被某个审核者锁定
|
@@ -246,6 +250,7 @@ zh-CN:
|
|
246
250
|
one: 一个回复
|
247
251
|
other: "%{count} 个回复"
|
248
252
|
recent_activity: :thredded.recent_activity
|
253
|
+
send_private_message: 发送私人讯息
|
249
254
|
started_topic_html: 发布帖子 %{topic_link}
|
250
255
|
started_topics_count:
|
251
256
|
one: 发布一个帖子
|
@@ -21,10 +21,10 @@ Thredded.user_name_column = :name
|
|
21
21
|
# the path or url to your user. This lambda is evaluated in the view context.
|
22
22
|
# If the lambda returns nil, a span element is returned instead of a link; so
|
23
23
|
# setting this to always return nil effectively disables all user links.
|
24
|
-
Thredded.user_path =
|
24
|
+
Thredded.user_path = ->(user) {
|
25
25
|
user_path = :"#{Thredded.user_class_name.demodulize.underscore}_path"
|
26
26
|
main_app.respond_to?(user_path) ? main_app.send(user_path, user) : "/users/#{user.to_param}"
|
27
|
-
|
27
|
+
}
|
28
28
|
|
29
29
|
# This method is used by Thredded controllers and views to fetch the currently signed-in user
|
30
30
|
Thredded.current_user_method = :"current_#{Thredded.user_class_name.demodulize.underscore}"
|
@@ -32,13 +32,6 @@ Thredded.current_user_method = :"current_#{Thredded.user_class_name.demodulize.u
|
|
32
32
|
# User avatar URL. rb-gravatar gem is used by default:
|
33
33
|
Thredded.avatar_url = ->(user) { Gravatar.src(user.email, 156, 'mm') }
|
34
34
|
|
35
|
-
# ==> Database Configuration
|
36
|
-
# By default, thredded uses integers for record ID route constraints.
|
37
|
-
# For integer based IDs (default):
|
38
|
-
# Thredded.routes_id_constraint = /[1-9]\d*/
|
39
|
-
# For UUID based IDs (example):
|
40
|
-
# Thredded.routes_id_constraint = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
|
41
|
-
|
42
35
|
# ==> Permissions Configuration
|
43
36
|
# By default, thredded uses a simple permission model, where all the users can post to all message boards,
|
44
37
|
# and admins and moderators are determined by a flag on the users table.
|
@@ -71,6 +64,12 @@ Thredded.currently_online_enabled = true
|
|
71
64
|
# Whether private messaging functionality is enabled.
|
72
65
|
Thredded.private_messaging_enabled = true
|
73
66
|
|
67
|
+
# The number of topics to display per page.
|
68
|
+
# Thredded.topics_per_page = 50
|
69
|
+
|
70
|
+
# The number of posts to display per page in a topic.
|
71
|
+
# Thredded.posts_per_page = 25
|
72
|
+
|
74
73
|
# The layout for rendering Thredded views.
|
75
74
|
Thredded.layout = 'thredded/application'
|
76
75
|
|
@@ -88,8 +87,8 @@ Thredded.layout = 'thredded/application'
|
|
88
87
|
# The range of valid topic title lengths. Default:
|
89
88
|
# Thredded.topic_title_length_range = (1..200)
|
90
89
|
|
91
|
-
# ==> URLs
|
92
|
-
# How Thredded generates URL slugs from text
|
90
|
+
# ==> Routes and URLs
|
91
|
+
# How Thredded generates URL slugs from text:
|
93
92
|
|
94
93
|
# Default:
|
95
94
|
# Thredded.slugifier = ->(input) { input.parameterize }
|
@@ -97,6 +96,13 @@ Thredded.layout = 'thredded/application'
|
|
97
96
|
# If your forum is in a language other than English, you might want to use the babosa gem instead
|
98
97
|
# Thredded.slugifier = ->(input) { Babosa::Identifier.new(input).normalize.transliterate(:russian).to_s }
|
99
98
|
|
99
|
+
# By default, thredded uses integers for record ID route constraints.
|
100
|
+
# For integer based IDs (default):
|
101
|
+
# Thredded.routes_id_constraint = /[1-9]\d*/
|
102
|
+
#
|
103
|
+
# For UUID based IDs (example):
|
104
|
+
# Thredded.routes_id_constraint = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
|
105
|
+
|
100
106
|
# ==> Post Content Formatting
|
101
107
|
# Customize the way Thredded handles post formatting.
|
102
108
|
|
data/lib/thredded.rb
CHANGED
@@ -46,43 +46,85 @@ require 'thredded/collection_to_strings_with_cache_renderer'
|
|
46
46
|
|
47
47
|
module Thredded
|
48
48
|
class << self
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
:email_from,
|
54
|
-
:email_outgoing_prefix,
|
55
|
-
:layout,
|
56
|
-
:messageboards_order,
|
57
|
-
:routes_id_constraint,
|
58
|
-
:user_name_column
|
59
|
-
|
60
|
-
# A lambda that generates a URL path to the user page for the given user.
|
61
|
-
attr_writer :user_path
|
49
|
+
#== User
|
50
|
+
|
51
|
+
# @return [String] The name of the user class
|
52
|
+
attr_reader :user_class_name
|
62
53
|
|
63
54
|
# @return [Symbol] The name of the method used by Thredded controllers and views to get the currently signed-in user
|
64
55
|
attr_accessor :current_user_method
|
65
56
|
|
66
|
-
# @return [Symbol] The
|
67
|
-
attr_accessor :
|
57
|
+
# @return [Symbol] The user table column that contains the username. Must be unique.
|
58
|
+
attr_accessor :user_name_column
|
59
|
+
|
60
|
+
# @return [Symbol] The name of the method used by Thredded to display users
|
61
|
+
attr_writer :user_display_name_method
|
62
|
+
|
63
|
+
# @return [Proc] A lambda that returns the avatar URL for the given user.
|
64
|
+
attr_accessor :avatar_url
|
65
|
+
|
66
|
+
# @return [Proc] A lambda that generates a URL path to the user page for the given user.
|
67
|
+
attr_writer :user_path
|
68
68
|
|
69
69
|
# @return [Symbol] The name of the admin flag column on the users table for the default permissions model
|
70
70
|
attr_accessor :admin_column
|
71
71
|
|
72
|
+
#== Moderation
|
73
|
+
|
72
74
|
# @return [Boolean] Whether posts that are pending moderation are visible to regular users.
|
73
75
|
attr_accessor :content_visible_while_pending_moderation
|
74
76
|
|
77
|
+
# @return [Symbol] The name of the moderator flag column on the users table for the default permissions model
|
78
|
+
attr_accessor :moderator_column
|
79
|
+
|
80
|
+
#== UI
|
81
|
+
|
82
|
+
# @return [String] The layout to use for rendering Thredded views.
|
83
|
+
attr_accessor :layout
|
84
|
+
|
85
|
+
#=== Topic page
|
86
|
+
|
87
|
+
# @return [Number] The number of posts to display per page in a topic.
|
88
|
+
attr_accessor :posts_per_page
|
89
|
+
|
75
90
|
# @return [Boolean] Whether users that are following a topic are listed on the topic page.
|
76
91
|
attr_accessor :show_topic_followers
|
77
92
|
|
78
|
-
|
79
|
-
attr_writer :user_display_name_method
|
93
|
+
#=== Private messages
|
80
94
|
|
81
|
-
# @return [
|
82
|
-
attr_accessor :
|
95
|
+
# @return [Boolean] Whether the private messaging functionality is enabled.
|
96
|
+
attr_accessor :private_messaging_enabled
|
83
97
|
|
84
|
-
|
85
|
-
|
98
|
+
#=== Currently online
|
99
|
+
|
100
|
+
# @return [Boolean] Whether the list of users who are currently online is displayed.
|
101
|
+
attr_accessor :currently_online_enabled
|
102
|
+
|
103
|
+
# @return [ActiveSupport::Duration] How long the users are considered online after their last action.
|
104
|
+
attr_accessor :active_user_threshold
|
105
|
+
|
106
|
+
#=== Other
|
107
|
+
|
108
|
+
# How to calculate the position of messageboards in a list:
|
109
|
+
# :position set the position manually (new messageboards go to the bottom, by creation timestamp)
|
110
|
+
# :last_post_at_desc most recent post first
|
111
|
+
# :topics_count_desc most topics first
|
112
|
+
# @return [:position, :last_post_at_desc, :topics_count_desc]
|
113
|
+
attr_accessor :messageboards_order
|
114
|
+
|
115
|
+
# @return [Number] The number of topics to display per page.
|
116
|
+
attr_accessor :topics_per_page
|
117
|
+
|
118
|
+
# @return [Number] Minimum length to trigger username auto-completion for @-mentions and private message recipients.
|
119
|
+
attr_accessor :autocomplete_min_length
|
120
|
+
|
121
|
+
# @return [Thredded::AllViewHooks] View hooks configuration.
|
122
|
+
def view_hooks
|
123
|
+
Thredded::AllViewHooks.instance ||
|
124
|
+
fail('`Thredded.view_hooks` must be configured in a `Rails.application.config.to_prepare` block!')
|
125
|
+
end
|
126
|
+
|
127
|
+
#== Topic following and notifications
|
86
128
|
|
87
129
|
# @return [Boolean] Whether the user should get subscribed to a new topic they've created.
|
88
130
|
attr_accessor :auto_follow_when_creating_topic
|
@@ -90,26 +132,33 @@ module Thredded
|
|
90
132
|
# @return [Boolean] Whether the user should get subscribed to a topic after posting in it.
|
91
133
|
attr_accessor :auto_follow_when_posting_in_topic
|
92
134
|
|
93
|
-
|
94
|
-
attr_reader :user_class_name
|
135
|
+
#== Emails
|
95
136
|
|
96
|
-
# @return [
|
97
|
-
attr_accessor :
|
137
|
+
# @return [String] The name of the parent mailer class for Thredded mailers.
|
138
|
+
attr_accessor :parent_mailer
|
98
139
|
|
99
|
-
# @return [
|
100
|
-
attr_accessor :
|
140
|
+
# @return [String] Sender email for Thredded notification emails.
|
141
|
+
attr_accessor :email_from
|
101
142
|
|
102
|
-
# @return [
|
103
|
-
attr_accessor :
|
143
|
+
# @return [String] Email subject prefix.
|
144
|
+
attr_accessor :email_outgoing_prefix
|
104
145
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
146
|
+
#== Routes
|
147
|
+
|
148
|
+
# @return [Proc] The proc that Thredded uses to generate URL slugs from text.
|
149
|
+
attr_accessor :slugifier
|
150
|
+
|
151
|
+
# By default, thredded uses integers for record ID route constraints.
|
152
|
+
# For integer based IDs (default):
|
153
|
+
# Thredded.routes_id_constraint = /[1-9]\d*/
|
154
|
+
# For UUID based IDs (example):
|
155
|
+
# Thredded.routes_id_constraint = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
|
156
|
+
attr_accessor :routes_id_constraint
|
157
|
+
|
158
|
+
#== Misc
|
159
|
+
|
160
|
+
# @return [Range<Integer>] The range of valid topic title lengths.
|
161
|
+
attr_accessor :topic_title_length_range
|
113
162
|
|
114
163
|
# @return [Array] The notifiers, by default just the EmailNotifier
|
115
164
|
def notifiers
|
@@ -164,6 +213,8 @@ module Thredded
|
|
164
213
|
layout.is_a?(String) && layout.start_with?('thredded/')
|
165
214
|
end
|
166
215
|
|
216
|
+
#== Helper methods for use by main app.
|
217
|
+
|
167
218
|
# Returns a view for the given posts' scope, applying read permission filters to the scope.
|
168
219
|
# Can be used in main_app, e.g. for showing the recent user posts on the profile page.
|
169
220
|
#
|
@@ -187,22 +238,34 @@ module Thredded
|
|
187
238
|
end
|
188
239
|
end
|
189
240
|
|
190
|
-
self.
|
191
|
-
self.admin_column = :admin
|
192
|
-
self.auto_follow_when_creating_topic = true
|
193
|
-
self.auto_follow_when_posting_in_topic = true
|
194
|
-
self.autocomplete_min_length = 2
|
241
|
+
self.user_name_column = :name
|
195
242
|
self.avatar_url = ->(user) { Gravatar.src(user.email, 156, 'mm') }
|
243
|
+
self.admin_column = :admin
|
244
|
+
|
196
245
|
self.content_visible_while_pending_moderation = true
|
246
|
+
self.moderator_column = :admin
|
247
|
+
|
197
248
|
self.layout = 'thredded/application'
|
249
|
+
|
250
|
+
self.posts_per_page = 25
|
251
|
+
self.show_topic_followers = false
|
252
|
+
|
253
|
+
self.private_messaging_enabled = true
|
254
|
+
|
255
|
+
self.currently_online_enabled = true
|
256
|
+
self.active_user_threshold = 5.minutes
|
257
|
+
|
198
258
|
self.messageboards_order = :position
|
199
|
-
self.
|
259
|
+
self.topics_per_page = 50
|
260
|
+
self.autocomplete_min_length = 2
|
261
|
+
|
262
|
+
self.auto_follow_when_creating_topic = true
|
263
|
+
self.auto_follow_when_posting_in_topic = true
|
264
|
+
|
200
265
|
self.parent_mailer = 'ActionMailer::Base'
|
201
|
-
|
202
|
-
self.show_topic_followers = false
|
266
|
+
|
203
267
|
self.slugifier = ->(input) { input.parameterize }
|
268
|
+
self.routes_id_constraint = /[1-9]\d*/
|
269
|
+
|
204
270
|
self.topic_title_length_range = (1..200)
|
205
|
-
self.user_name_column = :name
|
206
|
-
self.private_messaging_enabled = true
|
207
|
-
self.currently_online_enabled = true
|
208
271
|
end
|