thredded 0.7.0 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +119 -17
- data/app/assets/javascripts/thredded/components/currently_online.es6 +3 -3
- data/app/assets/javascripts/thredded/components/flash_messages.es6 +11 -0
- data/app/assets/javascripts/thredded/components/post_form.es6 +21 -4
- data/app/assets/javascripts/thredded/components/time_stamps.es6 +8 -6
- data/app/assets/javascripts/thredded/components/topic_form.es6 +14 -3
- data/app/assets/javascripts/thredded/components/topics.es6 +3 -3
- data/app/assets/javascripts/thredded/components/turboforms.es6 +15 -0
- data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +47 -20
- data/app/assets/javascripts/thredded/components/users_select.es6 +25 -9
- data/app/assets/javascripts/thredded/core/hide_soft_keyboard.es6 +6 -0
- data/app/assets/javascripts/thredded/core/mention_autocompletion.es6 +54 -0
- data/app/assets/javascripts/thredded/core/on_page_load.es6 +46 -0
- data/app/assets/javascripts/thredded/dependencies.js +2 -1
- data/app/assets/javascripts/thredded/dependencies/jquery.js +1 -0
- data/app/assets/javascripts/thredded/thredded.es6 +1 -0
- data/app/assets/stylesheets/thredded/_thredded.scss +1 -0
- data/app/assets/stylesheets/thredded/base/_alerts.scss +5 -1
- data/app/assets/stylesheets/thredded/base/_grid.scss +8 -0
- data/app/assets/stylesheets/thredded/base/_nav.scss +0 -5
- data/app/assets/stylesheets/thredded/components/_following.scss +0 -3
- data/app/assets/stylesheets/thredded/components/_mention-autocomplete.scss +35 -0
- data/app/assets/stylesheets/thredded/components/_topic-header.scss +37 -17
- data/app/assets/stylesheets/thredded/components/_topics.scss +13 -0
- data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +57 -14
- data/app/assets/stylesheets/thredded/layout/_moderation.scss +5 -0
- data/app/assets/stylesheets/thredded/layout/_navigation.scss +14 -17
- data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +15 -3
- data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +3 -11
- data/app/commands/thredded/at_notification_extractor.rb +2 -2
- data/app/commands/thredded/autofollow_mentioned_users.rb +2 -2
- data/app/commands/thredded/create_messageboard.rb +45 -0
- data/app/commands/thredded/notify_following_users.rb +10 -0
- data/app/controllers/thredded/autocomplete_users_controller.rb +2 -3
- data/app/controllers/thredded/messageboards_controller.rb +1 -24
- data/app/controllers/thredded/moderation_controller.rb +1 -1
- data/app/controllers/thredded/post_permalinks_controller.rb +1 -1
- data/app/controllers/thredded/preferences_controller.rb +4 -2
- data/app/controllers/thredded/private_post_permalinks_controller.rb +1 -1
- data/app/controllers/thredded/theme_previews_controller.rb +1 -1
- data/app/controllers/thredded/topics_controller.rb +0 -1
- data/app/forms/thredded/user_preferences_form.rb +4 -2
- data/app/helpers/thredded/application_helper.rb +5 -0
- data/app/helpers/thredded/nav_helper.rb +41 -0
- data/app/mailer_previews/thredded/base_mailer_preview.rb +0 -1
- data/app/mailers/thredded/post_mailer.rb +0 -1
- data/app/mailers/thredded/private_topic_mailer.rb +0 -1
- data/app/models/concerns/thredded/user_topic_read_state_common.rb +2 -2
- data/app/models/thredded/messageboard.rb +0 -1
- data/app/models/thredded/null_preference.rb +5 -1
- data/app/models/thredded/private_post.rb +2 -2
- data/app/policies/thredded/messageboard_group_policy.rb +1 -1
- data/app/view_hooks/thredded/all_view_hooks.rb +68 -0
- data/app/view_models/thredded/post_view.rb +3 -3
- data/app/view_models/thredded/topic_email_view.rb +0 -4
- data/app/view_models/thredded/topics_page_view.rb +12 -1
- data/app/views/layouts/thredded/application.html.erb +5 -2
- data/app/views/thredded/messageboard_groups/new.html.erb +3 -1
- data/app/views/thredded/messageboards/edit.html.erb +3 -1
- data/app/views/thredded/messageboards/new.html.erb +3 -1
- data/app/views/thredded/moderation/_users_search_form.html.erb +4 -1
- data/app/views/thredded/moderation/user.html.erb +34 -28
- data/app/views/thredded/posts_common/_form.html.erb +6 -1
- data/app/views/thredded/posts_common/form/_content_field.html.erb +5 -3
- data/app/views/thredded/preferences/_form.html.erb +30 -12
- data/app/views/thredded/private_topics/_form.html.erb +4 -3
- data/app/views/thredded/private_topics/index.html.erb +5 -5
- data/app/views/thredded/search/_form.html.erb +2 -1
- data/app/views/thredded/shared/_flash_messages.html.erb +1 -1
- data/app/views/thredded/shared/_page.html.erb +10 -1
- data/app/views/thredded/shared/nav/_moderation.html.erb +3 -2
- data/app/views/thredded/shared/nav/_notification_preferences.html.erb +5 -3
- data/app/views/thredded/shared/nav/_private_topics.html.erb +3 -2
- data/app/views/thredded/topics/_form.html.erb +6 -1
- data/app/views/thredded/topics/_header.html.erb +8 -5
- data/config/locales/en.yml +15 -7
- data/config/locales/pt-BR.yml +21 -13
- data/config/routes.rb +4 -2
- data/db/migrate/20160329231848_create_thredded.rb +5 -5
- data/db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb +31 -0
- data/lib/generators/thredded/install/templates/initializer.rb +20 -8
- data/lib/tasks/thredded_tasks.rake +0 -7
- data/lib/thredded.rb +19 -5
- data/lib/thredded/content_formatter.rb +43 -8
- data/lib/thredded/database_seeder.rb +7 -1
- data/lib/thredded/engine.rb +2 -21
- data/lib/{html/pipeline → thredded/html_pipeline}/at_mention_filter.rb +4 -4
- data/lib/thredded/html_pipeline/autolink_filter.rb +14 -0
- data/lib/thredded/html_pipeline/kramdown_filter.rb +34 -0
- data/lib/thredded/version.rb +1 -1
- data/lib/thredded/view_hooks/config.rb +36 -0
- data/lib/thredded/view_hooks/renderer.rb +29 -0
- data/vendor/assets/javascripts/jquery.textcomplete.js +1488 -0
- metadata +65 -52
- data/app/commands/thredded/messageboard_destroyer.rb +0 -65
- data/lib/html/pipeline/bbcode_filter.rb +0 -33
- data/lib/thredded/main_app_route_delegator.rb +0 -25
@@ -17,12 +17,12 @@
|
|
17
17
|
placeholder: t('thredded.private_topics.form.title_placeholder_start') %>
|
18
18
|
|
19
19
|
<%= render @private_topics %>
|
20
|
-
<% end -%>
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
<%= link_to t('thredded.nav.mark_all_read'),
|
22
|
+
mark_all_private_topics_read_path,
|
23
|
+
class: 'thredded--button thredded--button-light thredded--button-wide',
|
24
|
+
method: :put -%>
|
25
|
+
<% end -%>
|
26
26
|
<% end %>
|
27
27
|
|
28
28
|
<footer>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
<%= form_tag search_path(messageboard),
|
2
2
|
method: 'get',
|
3
|
-
class: 'thredded--form thredded--navigation--search thredded--navigation--search-topics'
|
3
|
+
class: 'thredded--form thredded--navigation--search thredded--navigation--search-topics',
|
4
|
+
'data-thredded-turboform' => true do %>
|
4
5
|
<%= label_tag :q, t('thredded.search.form.label') %>
|
5
6
|
<%= text_field_tag :q, @query,
|
6
7
|
type: 'search',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<% [:success, :error, :notice, :alert].each do |key| %>
|
2
2
|
<% if flash[key] %>
|
3
|
-
<div class="thredded--flash-message thredded--flash-message--<%= key %>"
|
3
|
+
<div class="thredded--flash-message thredded--flash-message--<%= key %>" data-thredded-flash-message>
|
4
4
|
<%= flash[key] %>
|
5
5
|
</div>
|
6
6
|
<% end %>
|
@@ -1,6 +1,15 @@
|
|
1
|
-
<%= content_tag(:div, id:
|
1
|
+
<%= content_tag(:div, id: 'thredded--container', class: thredded_container_classes, data: thredded_container_data) do %>
|
2
2
|
<%= render 'thredded/shared/header' %>
|
3
3
|
<%= render 'thredded/shared/flash_messages' %>
|
4
4
|
<%= yield :thredded_page_content %>
|
5
5
|
<%= render 'thredded/shared/currently_online' %>
|
6
6
|
<%- end %>
|
7
|
+
|
8
|
+
<%# If thredded JS is loaded via an [async] script, the JS may
|
9
|
+
run before or after DOMContentLoaded. Expose a flag to Thredded
|
10
|
+
so it can initialize correctly. %>
|
11
|
+
<script data-turbolinks-eval="false">
|
12
|
+
document.addEventListener('DOMContentLoaded', function() {
|
13
|
+
(window.Thredded = window.Thredded || {}).DOMContentLoadedFired = true;
|
14
|
+
});
|
15
|
+
</script>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
<% if moderatable_messageboards_ids.present? %>
|
2
|
-
|
3
|
-
|
2
|
+
<% current = current_page_moderation? %>
|
3
|
+
<li class="thredded--user-navigation--item thredded--user-navigation--moderation<%= ' thredded--is-current' if current %>">
|
4
|
+
<%= link_to (current ? messageboards_path : pending_moderation_path), rel: 'nofollow' do %>
|
4
5
|
<%= inline_svg 'thredded/moderation.svg',
|
5
6
|
class: 'thredded--icon',
|
6
7
|
title: t('thredded.nav.moderation') %>
|
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<% current = current_page_preferences? %>
|
2
|
+
<li class="thredded--user-navigation--settings thredded--user-navigation--item<%= ' thredded--is-current' if current %>">
|
3
|
+
<%= link_to current ? (messageboard ? messageboard_topics_path(messageboard) : messageboards_path)
|
4
|
+
: edit_preferences_path(messageboard) do %>
|
3
5
|
<%= inline_svg 'thredded/settings.svg', class: 'thredded--icon', title: t('thredded.nav.settings') %>
|
4
6
|
<span class="thredded--nav-text"><%= t('thredded.nav.settings') %></span>
|
5
|
-
<% end %>
|
7
|
+
<% end %>
|
6
8
|
</li>
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<% current = current_page_private_topics? %>
|
2
|
+
<li class="thredded--user-navigation--item thredded--user-navigation--private-topics<%= ' thredded--is-current' if current %>">
|
3
|
+
<%= link_to (current ? messageboards_path : private_topics_path), rel: 'nofollow' do %>
|
3
4
|
<%= inline_svg 'thredded/private-messages.svg',
|
4
5
|
class: 'thredded--icon',
|
5
6
|
title: t('thredded.nav.private_topics') %>
|
@@ -1,5 +1,10 @@
|
|
1
1
|
<%= form_for [messageboard, topic],
|
2
|
-
html: {
|
2
|
+
html: {
|
3
|
+
class: "thredded--form #{local_assigns[:css_class]}",
|
4
|
+
'data-thredded-topic-form' => true,
|
5
|
+
'data-autocomplete-url' => autocomplete_users_path,
|
6
|
+
'data-autocomplete-min-length' => Thredded.autocomplete_min_length,
|
7
|
+
} do |form| %>
|
3
8
|
<ul class="thredded--form-list on-top">
|
4
9
|
<li class="title">
|
5
10
|
<%= form.label :title, t('thredded.topics.form.title_label') %>
|
@@ -12,15 +12,18 @@
|
|
12
12
|
<% if thredded_current_user %>
|
13
13
|
<% if topic.followed? %>
|
14
14
|
<div class="thredded--topic-header--follow-info">
|
15
|
-
|
16
|
-
<div>
|
15
|
+
<span class="thredded--topic-header--follow-info--reason">
|
17
16
|
<%= topic_follow_reason_text topic.follow_reason %>
|
18
|
-
|
19
|
-
|
17
|
+
</span>
|
18
|
+
<%= button_to topic.unfollow_path, form: {class: 'thredded--topic-header--follow-info--unfollow'} do %>
|
19
|
+
<%= t('thredded.topics.unfollow') %>
|
20
|
+
<%= inline_svg 'thredded/follow.svg', class: 'thredded--topic-header--follow-icon' %>
|
21
|
+
<% end %>
|
20
22
|
</div>
|
21
23
|
<% else %>
|
22
24
|
<div class="thredded--topic-header--follow-info">
|
23
|
-
<%= button_to '
|
25
|
+
<%= button_to t('thredded.topics.follow'), topic.follow_path,
|
26
|
+
form: {class: 'thredded--topic-header--follow-info--follow'} %>
|
24
27
|
</div>
|
25
28
|
<% end %>
|
26
29
|
<% end %>
|
data/config/locales/en.yml
CHANGED
@@ -72,20 +72,26 @@ en:
|
|
72
72
|
page_title: :thredded.nav.settings
|
73
73
|
form:
|
74
74
|
global_preferences_label: Global Settings
|
75
|
-
|
75
|
+
messageboard_follow_topics_on_mention:
|
76
76
|
hint: >-
|
77
77
|
When someone mentions you by your username (eg: @sam) in this messageboard you will follow the topic.
|
78
|
-
|
79
|
-
|
78
|
+
label: :thredded.preferences.form.follow_topics_on_mention.label
|
79
|
+
messageboard_followed_topic_emails:
|
80
|
+
hint: >-
|
81
|
+
When there is a post in a topic you follow on this messageboard you will be sent an email.
|
82
|
+
label: Email notifications for followed topics
|
83
|
+
followed_topic_emails:
|
84
|
+
hint: >-
|
85
|
+
When there is a post in a topic you follow you will receive an email.
|
86
|
+
label: Email notifications for followed topics
|
80
87
|
messageboard_preferences_label_html: Notification Settings for <em>%{messageboard}</em>
|
81
|
-
|
88
|
+
follow_topics_on_mention:
|
82
89
|
hint: >-
|
83
|
-
When someone mentions you by your username (eg: @sam) you will follow the topic.
|
84
|
-
with the contents of that post and any replies.
|
90
|
+
When someone mentions you by your username (eg: @sam) you will follow the topic.
|
85
91
|
label: Follow topics you are mentioned in
|
86
92
|
notify_on_message:
|
87
93
|
hint: When you are added to a private conversation you will receive an email with its content.
|
88
|
-
label:
|
94
|
+
label: Email notifications for private messages
|
89
95
|
submit_btn: Update Settings
|
90
96
|
title: Settings
|
91
97
|
updated_notice: Your settings have been updated.
|
@@ -124,6 +130,8 @@ en:
|
|
124
130
|
followed_by: 'Followed by:'
|
125
131
|
followed_by_noone: No one is following this topic
|
126
132
|
followed_notice: You are now following this topic
|
133
|
+
follow: Follow this topic
|
134
|
+
unfollow: Stop following
|
127
135
|
following:
|
128
136
|
manual: You are following this topic.
|
129
137
|
mentioned: You are following this topic because you were mentioned on it.
|
data/config/locales/pt-BR.yml
CHANGED
@@ -71,22 +71,28 @@ pt-BR:
|
|
71
71
|
edit:
|
72
72
|
page_title: :thredded.nav.settings
|
73
73
|
form:
|
74
|
+
follow_topics_on_mention:
|
75
|
+
hint: >-
|
76
|
+
Quando alguém mencionar você através do seu usuário (ex.: @sam) você irá receber um e-mail com o conteúdo
|
77
|
+
deste post.
|
78
|
+
label: Siga os tópicos que são mencionados na
|
79
|
+
followed_topic_emails:
|
80
|
+
hint: Quando há um post em um tópico que você siga, você receberá um e-mail.
|
81
|
+
label: Notificações de e-mail para tópicos seguido
|
74
82
|
global_preferences_label: Configurações Globais
|
75
|
-
|
83
|
+
messageboard_follow_topics_on_mention:
|
76
84
|
hint: >-
|
77
85
|
Quando alguém mencionar você através do seu usuário (ex.: @sam) neste fórum de mensagens, você irá receber
|
78
86
|
um e-mail com o conteúdo deste post.
|
79
|
-
label: :thredded.preferences.form.
|
87
|
+
label: :thredded.preferences.form.follow_topics_on_mention.label
|
88
|
+
messageboard_followed_topic_emails:
|
89
|
+
hint: Quando há um post em um tópico que você siga nesta messageboard será enviado um e-mail.
|
90
|
+
label: Notificações de e-mail para tópicos seguido
|
80
91
|
messageboard_preferences_label_html: Configurações de Notificação para <em>%{messageboard}</em>
|
81
|
-
notify_on_mention:
|
82
|
-
hint: >-
|
83
|
-
Quando alguém mencionar você através do seu usuário (ex.: @sam) você irá receber um e-mail com o conteúdo
|
84
|
-
deste post.
|
85
|
-
label: "@ Notificações"
|
86
92
|
notify_on_message:
|
87
93
|
hint: Quando você for adicionado a uma conversa privada, você receberá um e-mail com o conteúdo desta
|
88
94
|
conversa.
|
89
|
-
label:
|
95
|
+
label: E-mail notificações de mensagens privadas
|
90
96
|
submit_btn: Atualizar Configurações
|
91
97
|
title: Configurações
|
92
98
|
updated_notice: Suas configurações foram atualizadas.
|
@@ -122,13 +128,14 @@ pt-BR:
|
|
122
128
|
delete_topic: Remover Tópico
|
123
129
|
deleted_notice: Tópico removido
|
124
130
|
edit: Editar Tópico
|
131
|
+
follow: Siga este tópico
|
125
132
|
followed_by: 'Seguido por:'
|
126
133
|
followed_by_noone: Ninguém está seguindo este tópico
|
127
|
-
followed_notice: Você agora está
|
134
|
+
followed_notice: Você agora está seguindo este tópico
|
128
135
|
following:
|
129
|
-
manual: Você está
|
130
|
-
mentioned: Você está
|
131
|
-
posted: Você está
|
136
|
+
manual: Você está seguindo este tópico.
|
137
|
+
mentioned: Você está seguindo este tópico porque você foi mencionado nele.
|
138
|
+
posted: Você está seguindo este tópico porque foi você que o publicou.
|
132
139
|
form:
|
133
140
|
categories_placeholder: Categorias
|
134
141
|
content_label: :thredded.posts.form.content_label
|
@@ -142,7 +149,8 @@ pt-BR:
|
|
142
149
|
page_title: Tópicos dos Resultados da Busca
|
143
150
|
results_message: Resultados de Busca para %{query}
|
144
151
|
started_by_html: Iniciado %{time_ago} por %{user}
|
145
|
-
|
152
|
+
unfollow: Pare de seguir
|
153
|
+
unfollowed_notice: Você não está mais seguindo este tópico
|
146
154
|
updated_notice: Tópico atualizado
|
147
155
|
users:
|
148
156
|
last_active_html: Última %{time_ago} ativa
|
data/config/routes.rb
CHANGED
@@ -56,8 +56,10 @@ Thredded::Engine.routes.draw do
|
|
56
56
|
end
|
57
57
|
member do
|
58
58
|
get '(page-:page)', action: :show, as: '', constraints: page_constraint
|
59
|
-
|
60
|
-
|
59
|
+
|
60
|
+
# match (un)follow via get as well so that redirecting back to it after sign in works.
|
61
|
+
match 'follow', via: [:post, :get]
|
62
|
+
match 'unfollow', via: [:post, :get]
|
61
63
|
end
|
62
64
|
resources :posts, except: [:index, :show], path: ''
|
63
65
|
end
|
@@ -32,18 +32,16 @@ class CreateThredded < ActiveRecord::Migration
|
|
32
32
|
DbTextSearch::CaseInsensitive.add_index connection, :thredded_categories, :name, name: :thredded_categories_name_ci
|
33
33
|
|
34
34
|
create_table :thredded_messageboards do |t|
|
35
|
-
t.string :name, limit:
|
35
|
+
t.string :name, limit: 191, null: false
|
36
36
|
t.string :slug, limit: 191
|
37
37
|
t.text :description
|
38
38
|
t.integer :topics_count, default: 0
|
39
39
|
t.integer :posts_count, default: 0
|
40
40
|
t.integer :position, null: false
|
41
|
-
t.boolean :closed, default: false, null: false
|
42
41
|
t.references :last_topic
|
43
42
|
t.references :messageboard_group
|
44
43
|
t.timestamps null: false
|
45
44
|
t.index [:messageboard_group_id], name: :index_thredded_messageboards_on_messageboard_group_id
|
46
|
-
t.index [:closed], name: :index_thredded_messageboards_on_closed
|
47
45
|
t.index [:slug], name: :index_thredded_messageboards_on_slug
|
48
46
|
end
|
49
47
|
|
@@ -162,8 +160,9 @@ class CreateThredded < ActiveRecord::Migration
|
|
162
160
|
|
163
161
|
create_table :thredded_user_preferences do |t|
|
164
162
|
t.references :user, null: false
|
165
|
-
t.boolean :
|
163
|
+
t.boolean :follow_topics_on_mention, default: true, null: false
|
166
164
|
t.boolean :notify_on_message, default: true, null: false
|
165
|
+
t.boolean :followed_topic_emails, default: true, null: false
|
167
166
|
t.timestamps null: false
|
168
167
|
t.index [:user_id], name: :index_thredded_user_preferences_on_user_id
|
169
168
|
end
|
@@ -171,7 +170,8 @@ class CreateThredded < ActiveRecord::Migration
|
|
171
170
|
create_table :thredded_user_messageboard_preferences do |t|
|
172
171
|
t.references :user, null: false
|
173
172
|
t.references :messageboard, null: false
|
174
|
-
t.boolean :
|
173
|
+
t.boolean :follow_topics_on_mention, default: true, null: false
|
174
|
+
t.boolean :followed_topic_emails, default: true, null: false
|
175
175
|
t.timestamps null: false
|
176
176
|
t.index [:user_id, :messageboard_id],
|
177
177
|
name: :thredded_user_messageboard_preferences_user_id_messageboard_id,
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class UpgradeV07ToV08 < ActiveRecord::Migration
|
3
|
+
def up
|
4
|
+
closed_messageboards = Thredded::Messageboard.unscoped.where(closed: true).to_a
|
5
|
+
if closed_messageboards.present?
|
6
|
+
fail ActiveRecord::MigrationError, <<-TEXT
|
7
|
+
There are #{closed_messageboards.length} closed Messageboards:
|
8
|
+
#{closed_messageboards.map { |m| "#{m.name} (id=#{m.id})" }.join("\n")}
|
9
|
+
Support for closed messageboards has been removed in thredded v0.8.0.
|
10
|
+
Delete or un-close these messageboards and consider using the "paranoia" gem to support soft deletion instead.
|
11
|
+
TEXT
|
12
|
+
end
|
13
|
+
remove_index :thredded_messageboards, name: :index_thredded_messageboards_on_closed
|
14
|
+
remove_column :thredded_messageboards, :closed
|
15
|
+
add_column :thredded_user_preferences, :followed_topic_emails, :boolean, default: true, null: false
|
16
|
+
add_column :thredded_user_messageboard_preferences, :followed_topic_emails, :boolean, default: true, null: false
|
17
|
+
rename_column :thredded_user_preferences, :notify_on_mention, :follow_topics_on_mention
|
18
|
+
rename_column :thredded_user_messageboard_preferences, :notify_on_mention, :follow_topics_on_mention
|
19
|
+
change_column :thredded_messageboards, :name, :string, limit: 191
|
20
|
+
end
|
21
|
+
|
22
|
+
def down
|
23
|
+
change_column :thredded_messageboards, :name, :string, limit: 255
|
24
|
+
rename_column :thredded_user_messageboard_preferences, :follow_topics_on_mention, :notify_on_mention
|
25
|
+
rename_column :thredded_user_preferences, :follow_topics_on_mention, :notify_on_mention
|
26
|
+
remove_column :thredded_user_messageboard_preferences, :followed_topic_emails
|
27
|
+
remove_column :thredded_user_preferences, :followed_topic_emails
|
28
|
+
add_column :thredded_messageboards, :closed, :boolean, default: false, null: false
|
29
|
+
add_index :thredded_messageboards, :closed, name: :index_thredded_messageboards_on_closed
|
30
|
+
end
|
31
|
+
end
|
@@ -59,15 +59,9 @@ Thredded.messageboards_order = :position
|
|
59
59
|
# Email "From:" field will use the following
|
60
60
|
# Thredded.email_from = 'no-reply@example.com'
|
61
61
|
|
62
|
-
# Incoming email will be directed to this host
|
63
|
-
# Thredded.email_incoming_host = 'example.com'
|
64
|
-
|
65
62
|
# Emails going out will prefix the "Subject:" with the following string
|
66
63
|
# Thredded.email_outgoing_prefix = '[My Forum] '
|
67
64
|
|
68
|
-
# Reply to field for email notifications
|
69
|
-
# Thredded.email_reply_to = -> postable { "#{postable.hash_id}@#{Thredded.email_incoming_host}" }
|
70
|
-
|
71
65
|
# ==> View Configuration
|
72
66
|
# Set the layout for rendering the thredded views.
|
73
67
|
Thredded.layout = 'thredded/application'
|
@@ -76,14 +70,18 @@ Thredded.layout = 'thredded/application'
|
|
76
70
|
# Customize the way Thredded handles post formatting.
|
77
71
|
|
78
72
|
# Change the default html-pipeline filters used by thredded.
|
79
|
-
# E.g. to
|
80
|
-
# Thredded::ContentFormatter.
|
73
|
+
# E.g. to replace default emoji filter with your own:
|
74
|
+
# Thredded::ContentFormatter.after_markup_filters[
|
75
|
+
# Thredded::ContentFormatter.after_markup_filters.index(HTML::Pipeline::EmojiFilter)] = MyEmojiFilter
|
81
76
|
|
82
77
|
# Change the HTML sanitization settings used by Thredded.
|
83
78
|
# See the Sanitize docs for more information on the underlying library: https://github.com/rgrove/sanitize/#readme
|
84
79
|
# E.g. to allow a custom element <custom-element>:
|
85
80
|
# Thredded::ContentFormatter.whitelist[:elements] += %w(custom-element)
|
86
81
|
|
82
|
+
# ==> User autocompletion (Private messages and @-mentions)
|
83
|
+
# Thredded.autocomplete_min_length = 2 lower to 1 if have 1-letter names -- increase if you want
|
84
|
+
|
87
85
|
# ==> Error Handling
|
88
86
|
# By default Thredded just renders a flash alert on errors such as Topic not found, or Login required.
|
89
87
|
# Below is an example of overriding the default behavior on LoginRequired:
|
@@ -96,3 +94,17 @@ Thredded.layout = 'thredded/application'
|
|
96
94
|
# end
|
97
95
|
# end
|
98
96
|
# end
|
97
|
+
|
98
|
+
# ==> View hooks
|
99
|
+
#
|
100
|
+
# Customize the UI before/after/replacing individual components.
|
101
|
+
# See the full list of view hooks and their arguments by running:
|
102
|
+
#
|
103
|
+
# $ grep view_hooks -R --include '*.html.erb' "$(bundle show thredded)"
|
104
|
+
#
|
105
|
+
# Rails.application.config.to_prepare do
|
106
|
+
# Thredded.view_hooks.post_form.content_text_area.config.before do |form:, **args|
|
107
|
+
# # This is called in the Thredded view context, so all Thredded helpers and URLs are accessible here directly.
|
108
|
+
# 'hi'
|
109
|
+
# end
|
110
|
+
# end
|
@@ -1,12 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
namespace :thredded do
|
3
|
-
desc 'Destroy messageboard and all related data'
|
4
|
-
task :destroy, [:slug] => :environment do |_, args|
|
5
|
-
Thredded::MessageboardDestroyer.new(args.slug).run
|
6
|
-
end
|
7
|
-
|
8
|
-
task :nuke, [:slug] => :destroy
|
9
|
-
|
10
3
|
namespace :install do
|
11
4
|
desc 'Copy emoji to the Rails `public/emoji` directory'
|
12
5
|
task :emoji do
|
data/lib/thredded.rb
CHANGED
@@ -5,15 +5,21 @@ require 'active_record_union'
|
|
5
5
|
require 'db_text_search'
|
6
6
|
require 'friendly_id'
|
7
7
|
require 'html/pipeline'
|
8
|
-
require 'html/pipeline/
|
9
|
-
require 'html/pipeline/bbcode_filter'
|
8
|
+
require 'html/pipeline/sanitization_filter'
|
10
9
|
require 'html/pipeline/vimeo/vimeo_filter'
|
11
10
|
require 'html/pipeline/youtube/youtube_filter'
|
11
|
+
require 'rinku'
|
12
12
|
require 'kaminari'
|
13
13
|
require 'rb-gravatar'
|
14
14
|
require 'active_job'
|
15
15
|
require 'inline_svg'
|
16
16
|
|
17
|
+
# Require these explictly to make sure they are not reloaded.
|
18
|
+
# This allows for configuring them by accessing class methods in the initializer.
|
19
|
+
require 'thredded/html_pipeline/at_mention_filter'
|
20
|
+
require 'thredded/html_pipeline/autolink_filter'
|
21
|
+
require 'thredded/html_pipeline/kramdown_filter'
|
22
|
+
|
17
23
|
# Asset compilation
|
18
24
|
require 'autoprefixer-rails'
|
19
25
|
require 'autosize/rails'
|
@@ -26,12 +32,11 @@ require 'thredded/engine'
|
|
26
32
|
|
27
33
|
module Thredded
|
28
34
|
mattr_accessor \
|
35
|
+
:autocomplete_min_length,
|
29
36
|
:active_user_threshold,
|
30
37
|
:avatar_url,
|
31
38
|
:email_from,
|
32
|
-
:email_incoming_host,
|
33
39
|
:email_outgoing_prefix,
|
34
|
-
:email_reply_to,
|
35
40
|
:layout,
|
36
41
|
:messageboards_order,
|
37
42
|
:user_class,
|
@@ -60,13 +65,22 @@ module Thredded
|
|
60
65
|
self.active_user_threshold = 5.minutes
|
61
66
|
self.admin_column = :admin
|
62
67
|
self.avatar_url = ->(user) { Gravatar.src(user.email, 128, 'mm') }
|
63
|
-
self.email_reply_to = -> (postable) { "#{postable.hash_id}@#{Thredded.email_incoming_host}" }
|
64
68
|
self.layout = 'thredded/application'
|
65
69
|
self.moderator_column = :admin
|
66
70
|
self.user_name_column = :name
|
67
71
|
self.content_visible_while_pending_moderation = true
|
68
72
|
self.show_topic_followers = false
|
69
73
|
self.messageboards_order = :position
|
74
|
+
self.autocomplete_min_length = 2
|
75
|
+
|
76
|
+
# @return [Thredded::AllViewHooks] View hooks configuration.
|
77
|
+
def self.view_hooks
|
78
|
+
instance = Thredded::AllViewHooks.instance
|
79
|
+
unless instance
|
80
|
+
fail '`Thredded.view_hooks` must be configured in a `Rails.application.config.to_prepare` block!'
|
81
|
+
end
|
82
|
+
instance
|
83
|
+
end
|
70
84
|
|
71
85
|
def self.user_display_name_method
|
72
86
|
@@user_display_name_method || user_name_column
|