thredded 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.mkdn +15 -0
- data/README.mkdn +3 -2
- data/app/assets/stylesheets/thredded/layout/_moderation.scss +2 -1
- data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +2 -1
- data/app/commands/thredded/at_notification_extractor.rb +14 -7
- data/app/commands/thredded/autofollow_mentioned_users.rb +4 -4
- data/app/controllers/thredded/moderation_controller.rb +13 -0
- data/app/models/concerns/thredded/post_common.rb +2 -5
- data/app/models/thredded/user_detail.rb +1 -1
- data/app/models/thredded/user_topic_follow.rb +1 -1
- data/app/views/thredded/moderation/_nav.html.erb +3 -0
- data/app/views/thredded/moderation/_post.html.erb +5 -0
- data/app/views/thredded/moderation/_post_moderation_record.html.erb +3 -3
- data/app/views/thredded/moderation/_user_post.html.erb +5 -0
- data/app/views/thredded/moderation/activity.html.erb +18 -0
- data/config/locales/en.yml +4 -2
- data/config/locales/pt-BR.yml +4 -2
- data/config/routes.rb +1 -0
- data/heroku.gemfile.lock +2 -4
- data/lib/html/pipeline/at_mention_filter.rb +62 -9
- data/lib/thredded/content_formatter.rb +1 -2
- data/lib/thredded/version.rb +1 -1
- data/thredded.gemspec +0 -1
- metadata +3 -17
- data/lib/thredded/at_users.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 868d81f0b7ff77d6ae58e572377f1001be7131b7
|
4
|
+
data.tar.gz: f23376c4be14345f85932348d1b9745322ac642a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11bf79cf05bbf641a8c78540d6d07c2522dbb6ba660de178bdbbe1d98a18958b0edbc4360eaf74b71bb6db71f3f60717eb945326791ae03903f0cf64d1fc780e
|
7
|
+
data.tar.gz: 12b1603c89e6e4660d67fb7a6ed90993c42d2edd408a261d8b15f107e201d1a47dbff2b157ad94628e74713cf9d4607f1ae2a10fcbdbf86b36b49a4dac6a5f95
|
data/CHANGELOG.mkdn
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# v0.6.1
|
2
|
+
|
3
|
+
This is a minor bugfix release.
|
4
|
+
|
5
|
+
## Added
|
6
|
+
|
7
|
+
* Adds an Activity tab to moderation, with a list of all the forum topics and posts, most recent first.
|
8
|
+
|
9
|
+
## Fixed
|
10
|
+
|
11
|
+
* Moderation history rendering of deleted content.
|
12
|
+
* Various bugs in @-mentions and highlighting.
|
13
|
+
|
14
|
+
See the full list of changes here: https://github.com/thredded/thredded/compare/v0.6.0...v0.6.1.
|
15
|
+
|
1
16
|
# 0.6.0 - 2016-06-12
|
2
17
|
|
3
18
|
**NB:** If updating to this version from 0.5.x, you will need to copy and run [this migration](https://github.com/thredded/thredded/blob/66f64068b9501ff4e8686c95894b6795aae6082f/db/upgrade_migrations/20160611094616_upgrade_v0_5_to_v0_6.rb).
|
data/README.mkdn
CHANGED
@@ -44,7 +44,7 @@ application and not an engine like Thredded.
|
|
44
44
|
Add the gem to your Gemfile:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
gem 'thredded', '~> 0.6.
|
47
|
+
gem 'thredded', '~> 0.6.1'
|
48
48
|
```
|
49
49
|
|
50
50
|
Add the Thredded [initializer] to your parent app by running the install generator.
|
@@ -154,11 +154,12 @@ Thredded does not provide a user's profile page, but it provides a helper for re
|
|
154
154
|
in your app's user profile page.
|
155
155
|
|
156
156
|
To use it:
|
157
|
+
|
157
158
|
1. Include `Thredded::ApplicationHelper` in the app's helpers module.
|
158
159
|
2. Render the partial like this:
|
159
160
|
|
160
161
|
```erb
|
161
|
-
<%= render 'thredded/users/
|
162
|
+
<%= render 'thredded/users/posts',
|
162
163
|
posts: Thredded.posts_page_view(
|
163
164
|
scope: user.thredded_posts.order_newest_first.limit(5),
|
164
165
|
current_user: current_user) %>
|
@@ -11,7 +11,8 @@
|
|
11
11
|
.thredded--pending-moderation &--moderation-navigation--pending,
|
12
12
|
.thredded--moderation-history &--moderation-navigation--history,
|
13
13
|
.thredded--moderation-users &--moderation-navigation--users,
|
14
|
-
.thredded--moderation-user &--moderation-navigation--users
|
14
|
+
.thredded--moderation-user &--moderation-navigation--users,
|
15
|
+
.thredded--moderation-activity &--moderation-navigation--activity {
|
15
16
|
@extend %thredded--nav-tabs--item-current;
|
16
17
|
}
|
17
18
|
|
@@ -13,7 +13,8 @@
|
|
13
13
|
.thredded--pending-moderation &--user-navigation--moderation,
|
14
14
|
.thredded--moderation-history &--user-navigation--moderation,
|
15
15
|
.thredded--moderation-users &--user-navigation--moderation,
|
16
|
-
.thredded--moderation-user &--user-navigation--moderation
|
16
|
+
.thredded--moderation-user &--user-navigation--moderation,
|
17
|
+
.thredded--moderation-activity &--user-navigation--moderation {
|
17
18
|
@extend %thredded--nav-tabs--item-current;
|
18
19
|
}
|
19
20
|
|
@@ -1,16 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require_dependency 'html/pipeline/at_mention_filter'
|
2
3
|
module Thredded
|
3
4
|
class AtNotificationExtractor
|
4
|
-
|
5
|
-
|
6
|
-
MATCH_NAME_RE = /(?:^|[\s>])@([\w]+|"[\w ]+")(?=\W|$)/
|
7
|
-
|
8
|
-
def initialize(content)
|
9
|
-
@content = content
|
5
|
+
def initialize(post)
|
6
|
+
@post = post
|
10
7
|
end
|
11
8
|
|
9
|
+
# @return [Array<Thredded.user_class>]
|
12
10
|
def run
|
13
|
-
|
11
|
+
view_context = Thredded::ApplicationController.new.view_context
|
12
|
+
# Do not highlight @-mentions at first, because:
|
13
|
+
# * When parsing, @-mentions within <a> tags will not be considered.
|
14
|
+
# * We can't always generate the user URL here because request.host is not available.
|
15
|
+
html = @post.filtered_content(view_context, users_provider: nil)
|
16
|
+
HTML::Pipeline::AtMentionFilter.new(
|
17
|
+
html,
|
18
|
+
view_context: view_context,
|
19
|
+
users_provider: -> (user_names) { @post.readers_from_user_names(user_names).to_a }
|
20
|
+
).mentioned_users
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require_dependency 'thredded/at_notification_extractor'
|
2
3
|
module Thredded
|
3
4
|
class AutofollowMentionedUsers
|
4
5
|
def initialize(post)
|
@@ -12,10 +13,9 @@ module Thredded
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def autofollowers
|
15
|
-
|
16
|
-
autofollowers
|
17
|
-
autofollowers
|
18
|
-
exclude_those_opting_out_of_at_notifications(autofollowers)
|
16
|
+
autofollowers = Thredded::AtNotificationExtractor.new(post).run
|
17
|
+
autofollowers.delete(post.user)
|
18
|
+
exclude_those_opting_out_of_at_notifications autofollowers
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
@@ -26,6 +26,19 @@ module Thredded
|
|
26
26
|
.page(current_page)
|
27
27
|
end
|
28
28
|
|
29
|
+
def activity
|
30
|
+
@posts = PostsPageView.new(
|
31
|
+
thredded_current_user,
|
32
|
+
moderatable_posts
|
33
|
+
.order_newest_first
|
34
|
+
.preload(:user, :postable)
|
35
|
+
.page(current_page)
|
36
|
+
)
|
37
|
+
if flash[:last_moderated_record_id]
|
38
|
+
@last_moderated_record = accessible_post_moderation_records.find(flash[:last_moderated_record_id].to_i)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
29
42
|
def moderate_post
|
30
43
|
return head(:bad_request) unless Thredded::Post.moderation_states.include?(params[:moderation_state])
|
31
44
|
flash[:last_moderated_record_id] = ModeratePost.run!(
|
@@ -25,11 +25,8 @@ module Thredded
|
|
25
25
|
|
26
26
|
# @param view_context [Object] the context of the rendering view.
|
27
27
|
# @return [String] formatted and sanitized html-safe post content.
|
28
|
-
def filtered_content(view_context)
|
29
|
-
Thredded::ContentFormatter.new(
|
30
|
-
view_context,
|
31
|
-
users_provider: -> (names) { readers_from_user_names(names) }
|
32
|
-
).format_content(content)
|
28
|
+
def filtered_content(view_context, users_provider: -> (names) { readers_from_user_names(names) })
|
29
|
+
Thredded::ContentFormatter.new(view_context, users_provider: users_provider).format_content(content)
|
33
30
|
end
|
34
31
|
|
35
32
|
private
|
@@ -4,7 +4,7 @@ module Thredded
|
|
4
4
|
include ModerationState
|
5
5
|
|
6
6
|
belongs_to :user, class_name: Thredded.user_class, inverse_of: :thredded_user_detail
|
7
|
-
validates :user_id, presence: true
|
7
|
+
validates :user_id, presence: true, uniqueness: true
|
8
8
|
|
9
9
|
has_many :topics, class_name: 'Thredded::Topic', foreign_key: :user_id, primary_key: :user_id
|
10
10
|
has_many :private_topics, class_name: 'Thredded::PrivateTopic', foreign_key: :user_id, primary_key: :user_id
|
@@ -3,7 +3,7 @@ module Thredded
|
|
3
3
|
class UserTopicFollow < ActiveRecord::Base
|
4
4
|
enum reason: [:manual, :posted, :mentioned]
|
5
5
|
|
6
|
-
belongs_to :user, inverse_of: :thredded_topic_follows
|
6
|
+
belongs_to :user, inverse_of: :thredded_topic_follows, class_name: Thredded.user_class
|
7
7
|
belongs_to :topic, inverse_of: :user_follows
|
8
8
|
|
9
9
|
validates :user_id, presence: true
|
@@ -7,6 +7,9 @@
|
|
7
7
|
<li class="thredded--moderation-navigation--item thredded--moderation-navigation--history">
|
8
8
|
<%= link_to t('thredded.nav.moderation_history'), moderation_history_path %>
|
9
9
|
</li>
|
10
|
+
<li class="thredded--moderation-navigation--item thredded--moderation-navigation--activity">
|
11
|
+
<%= link_to t('thredded.nav.moderation_activity'), moderation_activity_path %>
|
12
|
+
</li>
|
10
13
|
<li class="thredded--moderation-navigation--item thredded--moderation-navigation--users">
|
11
14
|
<%= link_to t('thredded.nav.moderation_users'), users_moderation_path %>
|
12
15
|
</li>
|
@@ -10,5 +10,10 @@
|
|
10
10
|
%>
|
11
11
|
<%= render 'thredded/posts_common/content', post: post %>
|
12
12
|
<%= render 'thredded/posts_common/actions', post: post %>
|
13
|
+
<% if post.blocked? %>
|
14
|
+
<p class="thredded--alert thredded--alert-danger">
|
15
|
+
<%= render 'thredded/shared/content_moderation_blocked_state', moderation_record: post.last_moderation_record %>
|
16
|
+
</p>
|
17
|
+
<% end %>
|
13
18
|
<%= render 'post_moderation_actions', post: post %>
|
14
19
|
<% end %>
|
@@ -23,12 +23,12 @@
|
|
23
23
|
<%= t('thredded.moderation.posts_content_changed_since_moderation_html', post_url: post_permalink_path(post)) %>
|
24
24
|
</p>
|
25
25
|
<% end %>
|
26
|
-
<%= t
|
26
|
+
<%= content_tag :em, t('thredded.moderation.post_deleted_notice') unless post %>
|
27
27
|
</header>
|
28
28
|
<article class="thredded--post">
|
29
29
|
<% post_user_link = capture do %>
|
30
|
-
<% if
|
31
|
-
<%= link_to
|
30
|
+
<% if record.post_user %>
|
31
|
+
<%= link_to record.post_user, user_moderation_path(record.post_user.id) %>
|
32
32
|
<% else %>
|
33
33
|
<%= safe_join [record.post_user_name, content_tag(:em, t('thredded.null_user_name'))].compact, ', ' %>
|
34
34
|
<% end %>
|
@@ -3,5 +3,10 @@
|
|
3
3
|
<%= render 'thredded/posts_common/header_with_topic', post: post %>
|
4
4
|
<%= render 'thredded/posts_common/content', post: post %>
|
5
5
|
<%= render 'thredded/posts_common/actions', post: post %>
|
6
|
+
<% if post.blocked? %>
|
7
|
+
<p class="thredded--alert thredded--alert-danger">
|
8
|
+
<%= render 'thredded/shared/content_moderation_blocked_state', moderation_record: post.last_moderation_record %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
6
11
|
<%= render 'post_moderation_actions', post: post %>
|
7
12
|
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% content_for :thredded_page_title, t('thredded.nav.moderation') %>
|
2
|
+
<% content_for :thredded_page_id, 'thredded--moderation-activity' %>
|
3
|
+
<%= render 'nav' %>
|
4
|
+
|
5
|
+
<%= thredded_page do %>
|
6
|
+
<h1><%= t 'thredded.recent_activity' %></h1>
|
7
|
+
<%= content_tag :section, class: 'thredded--main-section' do %>
|
8
|
+
<% if @last_moderated_record %>
|
9
|
+
<div class="thredded--moderated-notice">
|
10
|
+
<%= render 'post_moderation_record', post_moderation_record: @last_moderated_record %>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
<% if @posts.present? %>
|
14
|
+
<%= render partial: 'post', collection: @posts %>
|
15
|
+
<%= paginate @posts %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
data/config/locales/en.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
---
|
2
2
|
en:
|
3
3
|
thredded:
|
4
|
+
recent_activity: Recent activity
|
4
5
|
errors:
|
5
6
|
login_required: Please sign in first.
|
6
7
|
not_authorized: You are not authorized to access this page.
|
@@ -9,7 +10,7 @@ en:
|
|
9
10
|
form:
|
10
11
|
update: Update
|
11
12
|
content_moderation_states:
|
12
|
-
content_blocked_notice: Blocked
|
13
|
+
content_blocked_notice: Blocked
|
13
14
|
content_blocked_notice_with_record_html: Blocked by %{moderator} %{time_ago}
|
14
15
|
messageboard:
|
15
16
|
create: Create a New Messageboard
|
@@ -51,6 +52,7 @@ en:
|
|
51
52
|
moderation_history: History
|
52
53
|
moderation_pending: Pending
|
53
54
|
moderation_users: Users
|
55
|
+
moderation_activity: Activity
|
54
56
|
private_topics: Private Messages
|
55
57
|
settings: Notification Settings
|
56
58
|
null_user_name: Deleted user
|
@@ -140,7 +142,7 @@ en:
|
|
140
142
|
users:
|
141
143
|
last_active_html: "Last active %{time_ago}"
|
142
144
|
posted_in_topic_html: "Posted in %{topic_link}"
|
143
|
-
recent_activity:
|
145
|
+
recent_activity: :thredded.recent_activity
|
144
146
|
started_topic_html: "Started %{topic_link}"
|
145
147
|
user_posted_in_topic_html: "%{user_link} posted in %{topic_link}"
|
146
148
|
user_since_html: "User since %{time_ago}"
|
data/config/locales/pt-BR.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
pt-BR:
|
3
3
|
thredded:
|
4
4
|
content_moderation_states:
|
5
|
-
content_blocked_notice: Bloqueado
|
5
|
+
content_blocked_notice: Bloqueado
|
6
6
|
content_blocked_notice_with_record_html: Bloqueados por %{moderator} %{time_ago}
|
7
7
|
errors:
|
8
8
|
login_required: Por favor, autentique-se primeiro.
|
@@ -48,6 +48,7 @@ pt-BR:
|
|
48
48
|
edit_private_topic: :thredded.nav.edit_topic
|
49
49
|
edit_topic: Editar
|
50
50
|
moderation: Moderação
|
51
|
+
moderation_activity: Atividade
|
51
52
|
moderation_history: História
|
52
53
|
moderation_pending: Pendente
|
53
54
|
moderation_users: Usuários
|
@@ -108,6 +109,7 @@ pt-BR:
|
|
108
109
|
create_btn: Inicie sua primeira conversa privada
|
109
110
|
title: Você não possui mensagens privadas.
|
110
111
|
updated_notice: Título atualizado
|
112
|
+
recent_activity: Atividade recente
|
111
113
|
search:
|
112
114
|
form:
|
113
115
|
btn_submit: :thredded.search.form.label
|
@@ -144,7 +146,7 @@ pt-BR:
|
|
144
146
|
posts_count:
|
145
147
|
one: Postado uma vez
|
146
148
|
other: vezes %{count} Publicado
|
147
|
-
recent_activity:
|
149
|
+
recent_activity: :thredded.recent_activity
|
148
150
|
started_topic_html: Começou %{topic_link}
|
149
151
|
started_topics_count:
|
150
152
|
one: Começou um tópico
|
data/config/routes.rb
CHANGED
@@ -35,6 +35,7 @@ Thredded::Engine.routes.draw do
|
|
35
35
|
get '/history(/page-:page)', action: :history, as: :moderation_history
|
36
36
|
get '/users(/page-:page)', action: :users, as: :users_moderation
|
37
37
|
get '/users/:id(/page-:page)', action: :user, as: :user_moderation
|
38
|
+
get '/activity(/page-:page)', action: :activity, as: :moderation_activity
|
38
39
|
end
|
39
40
|
post '', action: :moderate_post, as: :moderate_post
|
40
41
|
post '/user/:id', action: :moderate_user, as: :moderate_user
|
data/heroku.gemfile.lock
CHANGED
@@ -9,7 +9,7 @@ GIT
|
|
9
9
|
PATH
|
10
10
|
remote: .
|
11
11
|
specs:
|
12
|
-
thredded (0.6.
|
12
|
+
thredded (0.6.1)
|
13
13
|
active_record_union (>= 1.1.1)
|
14
14
|
autoprefixer-rails
|
15
15
|
autosize-rails
|
@@ -30,7 +30,6 @@ PATH
|
|
30
30
|
rails (>= 4.2.0)
|
31
31
|
rails-timeago
|
32
32
|
rb-gravatar
|
33
|
-
rinku
|
34
33
|
sanitize
|
35
34
|
sass (>= 3.4.21)
|
36
35
|
select2-rails (~> 3.5)
|
@@ -212,7 +211,6 @@ GEM
|
|
212
211
|
rb-gravatar (1.0.5)
|
213
212
|
ref (2.0.0)
|
214
213
|
request_store (1.3.1)
|
215
|
-
rinku (2.0.0)
|
216
214
|
rollbar (2.11.5)
|
217
215
|
multi_json
|
218
216
|
sanitize (4.0.1)
|
@@ -228,7 +226,7 @@ GEM
|
|
228
226
|
tilt (>= 1.1, < 3)
|
229
227
|
select2-rails (3.5.10)
|
230
228
|
thor (~> 0.14)
|
231
|
-
sprockets (3.6.
|
229
|
+
sprockets (3.6.1)
|
232
230
|
concurrent-ruby (~> 1.0)
|
233
231
|
rack (> 1, < 3)
|
234
232
|
sprockets-es6 (0.9.0)
|
@@ -1,23 +1,76 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'thredded/at_users'
|
3
|
-
|
4
2
|
module HTML
|
5
3
|
class Pipeline
|
6
4
|
class AtMentionFilter < Filter
|
5
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS = %w(pre code tt a style).freeze
|
6
|
+
|
7
7
|
# @param context [Hash]
|
8
8
|
# @options context :users_provider [#call(usernames)] given usernames, returns a list of users.
|
9
|
-
def initialize(
|
10
|
-
super
|
11
|
-
@text = text.to_s.delete("\r")
|
9
|
+
def initialize(doc, context = nil, result = nil)
|
10
|
+
super doc, context, result
|
12
11
|
@users_provider = context[:users_provider]
|
13
12
|
@view_context = context[:view_context]
|
14
13
|
end
|
15
14
|
|
16
15
|
def call
|
17
|
-
return
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
return doc unless @users_provider
|
17
|
+
process_text_nodes! do |node|
|
18
|
+
content = node.to_html
|
19
|
+
next unless content.include?('@')
|
20
|
+
highlight! content
|
21
|
+
node.replace content
|
22
|
+
end
|
23
|
+
doc
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Array<Thredded.user_class>] users that were @-mentioned
|
27
|
+
def mentioned_users
|
28
|
+
return [] unless @users_provider
|
29
|
+
names = []
|
30
|
+
process_text_nodes! { |node| names.concat mentioned_names(node.to_html) }
|
31
|
+
names.uniq!
|
32
|
+
@users_provider.call(names)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
MATCH_NAME_RE = /(?:^|[\s>])@([\w]+|"[\w ]+")(?=\W|$)/
|
38
|
+
|
39
|
+
def mentioned_names(text_node_html)
|
40
|
+
text_node_html.scan(MATCH_NAME_RE).map(&:first).map { |m| m.start_with?('"') ? m[1..-2] : m }
|
41
|
+
end
|
42
|
+
|
43
|
+
def highlight!(text_node_html)
|
44
|
+
names = mentioned_names(text_node_html)
|
45
|
+
return unless names.present?
|
46
|
+
@users_provider.call(names).each do |user|
|
47
|
+
name = user.to_s
|
48
|
+
maybe_quoted_name = name.include?(' ') ? %("#{name}") : name
|
49
|
+
url = Thredded.user_path(@view_context, user)
|
50
|
+
text_node_html.gsub!(
|
51
|
+
/(^|[\s>])(@#{Regexp.escape maybe_quoted_name})([^a-z\d]|$)/i,
|
52
|
+
%(\\1<a href="#{ERB::Util.html_escape url}">@#{ERB::Util.html_escape maybe_quoted_name}</a>\\3)
|
53
|
+
)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Yields text nodes that should be processed.
|
58
|
+
def process_text_nodes!
|
59
|
+
doc.search('.//text()').each do |node|
|
60
|
+
next if has_ancestor?(node, ignored_ancestor_tags)
|
61
|
+
yield node
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Return ancestor tags to stop the at-mention highlighting.
|
66
|
+
#
|
67
|
+
# @return [Array<String>] Ancestor tags.
|
68
|
+
def ignored_ancestor_tags
|
69
|
+
if @context[:ignored_ancestor_tags]
|
70
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS | @context[:ignored_ancestor_tags]
|
71
|
+
else
|
72
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS
|
73
|
+
end
|
21
74
|
end
|
22
75
|
end
|
23
76
|
end
|
@@ -43,13 +43,12 @@ module Thredded
|
|
43
43
|
mattr_accessor :pipeline_filters
|
44
44
|
|
45
45
|
self.pipeline_filters = [
|
46
|
-
HTML::Pipeline::AtMentionFilter,
|
47
46
|
HTML::Pipeline::VimeoFilter,
|
48
47
|
HTML::Pipeline::YoutubeFilter,
|
49
48
|
HTML::Pipeline::BbcodeFilter,
|
50
49
|
HTML::Pipeline::MarkdownFilter,
|
50
|
+
HTML::Pipeline::AtMentionFilter,
|
51
51
|
HTML::Pipeline::EmojiFilter,
|
52
|
-
HTML::Pipeline::AutolinkFilter,
|
53
52
|
HTML::Pipeline::SanitizationFilter,
|
54
53
|
].freeze
|
55
54
|
|
data/lib/thredded/version.rb
CHANGED
data/thredded.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thredded
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Oliveira
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-06-
|
12
|
+
date: 2016-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bbcoder
|
@@ -235,20 +235,6 @@ dependencies:
|
|
235
235
|
- - ">="
|
236
236
|
- !ruby/object:Gem::Version
|
237
237
|
version: '0'
|
238
|
-
- !ruby/object:Gem::Dependency
|
239
|
-
name: rinku
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
241
|
-
requirements:
|
242
|
-
- - ">="
|
243
|
-
- !ruby/object:Gem::Version
|
244
|
-
version: '0'
|
245
|
-
type: :runtime
|
246
|
-
prerelease: false
|
247
|
-
version_requirements: !ruby/object:Gem::Requirement
|
248
|
-
requirements:
|
249
|
-
- - ">="
|
250
|
-
- !ruby/object:Gem::Version
|
251
|
-
version: '0'
|
252
238
|
- !ruby/object:Gem::Dependency
|
253
239
|
name: sanitize
|
254
240
|
requirement: !ruby/object:Gem::Requirement
|
@@ -788,6 +774,7 @@ files:
|
|
788
774
|
- app/views/thredded/moderation/_user_moderation_state.html.erb
|
789
775
|
- app/views/thredded/moderation/_user_post.html.erb
|
790
776
|
- app/views/thredded/moderation/_users_search_form.html.erb
|
777
|
+
- app/views/thredded/moderation/activity.html.erb
|
791
778
|
- app/views/thredded/moderation/history.html.erb
|
792
779
|
- app/views/thredded/moderation/pending.html.erb
|
793
780
|
- app/views/thredded/moderation/user.html.erb
|
@@ -871,7 +858,6 @@ files:
|
|
871
858
|
- lib/html/pipeline/bbcode_filter.rb
|
872
859
|
- lib/tasks/thredded_tasks.rake
|
873
860
|
- lib/thredded.rb
|
874
|
-
- lib/thredded/at_users.rb
|
875
861
|
- lib/thredded/content_formatter.rb
|
876
862
|
- lib/thredded/engine.rb
|
877
863
|
- lib/thredded/errors.rb
|
data/lib/thredded/at_users.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module Thredded
|
3
|
-
class AtUsers
|
4
|
-
# @param users_provider [#call(usernames)] given usernames, returns a list of users.
|
5
|
-
def self.render(content, users_provider, view_context)
|
6
|
-
at_names = AtNotificationExtractor.new(content).run
|
7
|
-
|
8
|
-
if at_names.any?
|
9
|
-
members = users_provider.call(at_names)
|
10
|
-
|
11
|
-
members.each do |member|
|
12
|
-
member_path = Thredded.user_path(view_context, member)
|
13
|
-
name = member.to_s
|
14
|
-
content.gsub!(/(^|[\s>])(@#{name.include?(' ') ? %("#{name}") : name})\b/i,
|
15
|
-
%(\1<a href="#{ERB::Util.html_escape member_path}">@#{ERB::Util.html_escape name}</a>))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
content
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|