thredded 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -17
- data/app/assets/images/thredded/three-dot-menu.svg +3 -0
- data/app/assets/stylesheets/thredded/base/_tables.scss +1 -0
- data/app/assets/stylesheets/thredded/base/_variables.scss +24 -1
- data/app/assets/stylesheets/thredded/components/_currently-online.scss +1 -0
- data/app/assets/stylesheets/thredded/components/_messageboard.scss +18 -10
- data/app/assets/stylesheets/thredded/components/_post.scss +84 -13
- data/app/assets/stylesheets/thredded/components/_topics.scss +7 -1
- data/app/assets/stylesheets/thredded/layout/_main-container.scss +1 -0
- data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +15 -6
- data/app/controllers/thredded/application_controller.rb +6 -3
- data/app/controllers/thredded/moderation_controller.rb +1 -1
- data/app/controllers/thredded/posts_controller.rb +19 -22
- data/app/controllers/thredded/preferences_controller.rb +1 -2
- data/app/controllers/thredded/private_posts_controller.rb +77 -0
- data/app/controllers/thredded/private_topics_controller.rb +1 -1
- data/app/controllers/thredded/read_states_controller.rb +1 -1
- data/app/controllers/thredded/topics_controller.rb +1 -1
- data/app/forms/thredded/private_topic_form.rb +3 -3
- data/app/forms/thredded/topic_form.rb +1 -1
- data/app/helpers/thredded/application_helper.rb +12 -1
- data/app/helpers/thredded/render_helper.rb +14 -0
- data/app/helpers/thredded/urls_helper.rb +8 -0
- data/app/models/concerns/thredded/post_common.rb +20 -0
- data/app/models/concerns/thredded/user_topic_read_state_common.rb +6 -0
- data/app/models/thredded/null_user_topic_read_state.rb +4 -0
- data/app/policies/thredded/post_policy.rb +4 -0
- data/app/policies/thredded/private_post_policy.rb +4 -0
- data/app/view_hooks/thredded/all_view_hooks.rb +15 -0
- data/app/view_models/thredded/base_topic_view.rb +1 -1
- data/app/view_models/thredded/post_view.rb +23 -21
- data/app/view_models/thredded/posts_page_view.rb +4 -2
- data/app/view_models/thredded/topic_posts_page_view.rb +1 -1
- data/app/view_models/thredded/topic_view.rb +1 -1
- data/app/view_models/thredded/topics_page_view.rb +1 -0
- data/app/views/thredded/moderation/_post.html.erb +2 -2
- data/app/views/thredded/moderation/_user_post.html.erb +2 -2
- data/app/views/thredded/moderation/activity.html.erb +3 -1
- data/app/views/thredded/moderation/pending.html.erb +3 -1
- data/app/views/thredded/moderation/user.html.erb +3 -1
- data/app/views/thredded/posts/_content.html.erb +1 -0
- data/app/views/thredded/posts/_post.html.erb +11 -12
- data/app/views/thredded/posts/edit.html.erb +3 -4
- data/app/views/thredded/posts_common/_actions.html.erb +21 -8
- data/app/views/thredded/posts_common/actions/_delete.html.erb +4 -0
- data/app/views/thredded/posts_common/actions/_edit.html.erb +2 -0
- data/app/views/thredded/posts_common/actions/_mark_as_unread.html.erb +2 -0
- data/app/views/thredded/private_posts/_content.html.erb +1 -0
- data/app/views/thredded/private_posts/_private_post.html.erb +5 -6
- data/app/views/thredded/private_posts/edit.html.erb +18 -0
- data/app/views/thredded/private_topics/show.html.erb +3 -1
- data/app/views/thredded/shared/_nav.html.erb +1 -1
- data/app/views/thredded/shared/nav/_standalone.html.erb +1 -1
- data/app/views/thredded/topics/_sticky_topics_divider.html.erb +1 -0
- data/app/views/thredded/topics/_topic.html.erb +4 -0
- data/app/views/thredded/topics/index.html.erb +1 -1
- data/app/views/thredded/topics/show.html.erb +1 -1
- data/app/views/thredded/users/_post.html.erb +2 -2
- data/app/views/thredded/users/_posts.html.erb +1 -1
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +1 -0
- data/config/locales/pl.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/routes.rb +9 -4
- data/lib/generators/thredded/install/templates/initializer.rb +7 -0
- data/lib/thredded.rb +4 -0
- data/lib/thredded/collection_to_strings_with_cache_renderer.rb +62 -0
- data/lib/thredded/version.rb +1 -1
- metadata +15 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 584af3429d4903d4e71c2a9c6ade98a1ce121505
|
4
|
+
data.tar.gz: 0c4a78eaeb21357be674af2a152bf0e72a35ad9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fca75e1a3052d79bb58f55202add9746e393418a04d5afca1e07cfa95fd90301eaced3f63189493f94639722d1a689f06170e586388a06ba12fadbee65c0a72
|
7
|
+
data.tar.gz: 4bb3d36a5fa56b0180e5f73c6c4de8cd5130805e07d0057dabef25d580d1a1de178441b96df0321c8f9c5cd700759a72caf006b7abe7783e51dc2be77fa16501
|
data/README.md
CHANGED
@@ -56,7 +56,7 @@ Then, see the rest of this Readme for more information about using and customizi
|
|
56
56
|
Add the gem to your Gemfile:
|
57
57
|
|
58
58
|
```ruby
|
59
|
-
gem 'thredded', '~> 0.10.
|
59
|
+
gem 'thredded', '~> 0.10.1'
|
60
60
|
```
|
61
61
|
|
62
62
|
Add the Thredded [initializer] to your parent app by running the install generator.
|
@@ -105,27 +105,14 @@ rails g thredded:install
|
|
105
105
|
|
106
106
|
But then compare this with the previous version to decide what to keep.
|
107
107
|
|
108
|
-
2) To upgrade the database:
|
109
|
-
|
110
|
-
Latest version (in this example from v0.6 to v0.7):
|
108
|
+
2) To upgrade the database (in this example from v0.9 to v0.10):
|
111
109
|
|
112
110
|
```console
|
113
|
-
# Note that for guaranteed best results you will want to run this with the gem checked out with v0.
|
114
|
-
cp `bundle show thredded`/db/upgrade_migrations/
|
111
|
+
# Note that for guaranteed best results you will want to run this with the gem checked out with v0.10.0
|
112
|
+
cp `bundle show thredded`/db/upgrade_migrations/20170125033319_upgrade_v0_9_to_v0_10.rb db/migrate
|
115
113
|
rake db:migrate
|
116
114
|
```
|
117
115
|
|
118
|
-
|
119
|
-
To upgrade the database (in this example from v0.7 to v0.8):
|
120
|
-
|
121
|
-
```console
|
122
|
-
# Note that for guaranteed best results you will want to run this with the gem checked out with v0.8.0.
|
123
|
-
cp `bundle show thredded`/db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb db/migrate
|
124
|
-
rake db:migrate
|
125
|
-
```
|
126
|
-
|
127
|
-
|
128
|
-
|
129
116
|
### Migrating from Forem
|
130
117
|
|
131
118
|
Are you currently using [Forem]? Thredded provides [a migration][forem-to-thredded] to copy all of your existing data from Forem over
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="408px" height="408px" viewBox="0 0 408 408">
|
2
|
+
<path d="M204,102c28.05,0,51-22.95,51-51S232.05,0,204,0s-51,22.95-51,51S175.95,102,204,102z M204,153c-28.05,0-51,22.95-51,51 s22.95,51,51,51s51-22.95,51-51S232.05,153,204,153z M204,306c-28.05,0-51,22.95-51,51s22.95,51,51,51s51-22.95,51-51 S232.05,306,204,306z"/>
|
3
|
+
</svg>
|
@@ -31,6 +31,8 @@ $thredded-action-transition: color 0.1s linear !default;
|
|
31
31
|
$thredded-nav-color: $thredded-text-color !default;
|
32
32
|
$thredded-nav-hover-color: $thredded-action-color !default;
|
33
33
|
$thredded-nav-current-color: $thredded-action-color !default;
|
34
|
+
$thredded-overlay-background-color: $thredded-background-color !default;
|
35
|
+
$thredded-overlay-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) !default;
|
34
36
|
$thredded-secondary-nav-color: $thredded-secondary-text-color !default;
|
35
37
|
$thredded-spoiler-hidden-color: $thredded-light-gray !default;
|
36
38
|
$thredded-spoiler-shown-color: black !default;
|
@@ -85,7 +87,28 @@ $thredded-badge-inactive-color: $thredded-button-color !default;
|
|
85
87
|
$thredded-badge-inactive-background: rgba($thredded-text-color, 0.3) !default;
|
86
88
|
|
87
89
|
// Layout features
|
90
|
+
|
91
|
+
// Messageboards grid
|
88
92
|
// Whether to display messageboards as a grid on the desktop screen sizes.
|
89
93
|
$thredded-messageboards-grid: true !default;
|
94
|
+
// Paddings within a grid item
|
95
|
+
$thredded-messageboards-grid-item-padding-x: ($thredded-base-spacing * 0.8) !default;
|
96
|
+
$thredded-messageboards-grid-item-padding-y: $thredded-base-spacing !default;
|
97
|
+
// Spacing between grid items, must be set in the same unit as the border width
|
98
|
+
$thredded-messageboards-grid-item-gutter-x: 0 !default;
|
99
|
+
$thredded-messageboards-grid-item-gutter-y: 0 !default;
|
100
|
+
// The width of the border around a grid item
|
101
|
+
$thredded-messageboards-grid-item-border-width: 1px !default;
|
102
|
+
$thredded-messageboards-grid-item-border-color:
|
103
|
+
// If one of the gutters is 0 the borders will be collapsed by overlap.
|
104
|
+
// Ensure their color does not have and alpha component:
|
105
|
+
if($thredded-messageboards-grid-item-gutter-x == 0 or $thredded-messageboards-grid-item-gutter-y == 0,
|
106
|
+
// Use the closest non-transparent color
|
107
|
+
mix(opacify($thredded-base-border-color, 1), $thredded-background-color,
|
108
|
+
percentage(alpha($thredded-base-border-color))),
|
109
|
+
$thredded-base-border-color) !default;
|
90
110
|
// Minimum width of a grid item
|
91
|
-
$thredded-messageboards-grid-item-flex-basis:
|
111
|
+
$thredded-messageboards-grid-item-flex-basis: 21.5rem !default;
|
112
|
+
|
113
|
+
// Topics list
|
114
|
+
$thredded-topics-list-gutter-y: $thredded-base-spacing !default;
|
@@ -1,16 +1,18 @@
|
|
1
1
|
.thredded--messageboards-group {
|
2
|
+
box-sizing: border-box;
|
2
3
|
margin-bottom: $thredded-base-spacing;
|
3
4
|
}
|
4
5
|
|
5
6
|
.thredded--messageboard {
|
6
7
|
@extend %thredded--link;
|
8
|
+
box-sizing: border-box;
|
7
9
|
display: block;
|
8
|
-
margin-bottom:
|
10
|
+
margin-bottom: -$thredded-messageboards-grid-item-border-width;
|
9
11
|
padding: $thredded-base-spacing;
|
10
12
|
position: relative;
|
11
13
|
|
12
14
|
&, &:focus, &:hover, &:active {
|
13
|
-
|
15
|
+
border: $thredded-messageboards-grid-item-border-width solid $thredded-messageboards-grid-item-border-color;
|
14
16
|
}
|
15
17
|
|
16
18
|
&:hover {
|
@@ -95,13 +97,18 @@
|
|
95
97
|
|
96
98
|
@if $thredded-messageboards-grid {
|
97
99
|
@include thredded-media-desktop-and-up {
|
98
|
-
$item-
|
99
|
-
$
|
100
|
-
$
|
100
|
+
$gutter-x: $thredded-messageboards-grid-item-gutter-x;
|
101
|
+
$gutter-y: $thredded-messageboards-grid-item-gutter-y;
|
102
|
+
$border-width: $thredded-messageboards-grid-item-border-width;
|
103
|
+
// Collapse borders when there is no gutter
|
104
|
+
$margin-x: $gutter-x / 2 - if($gutter-x == 0, $border-width / 2, 0);
|
105
|
+
$margin-y: $gutter-y / 2 - if($gutter-y == 0, $border-width / 2, 0);
|
101
106
|
|
102
107
|
%thredded--messageboards-cell-flex {
|
103
108
|
flex-basis: $thredded-messageboards-grid-item-flex-basis;
|
104
109
|
flex-grow: 1;
|
110
|
+
margin-left: $margin-x;
|
111
|
+
margin-right: $margin-x;
|
105
112
|
}
|
106
113
|
|
107
114
|
.thredded--messageboards-group {
|
@@ -109,14 +116,14 @@
|
|
109
116
|
flex-direction: row;
|
110
117
|
flex-wrap: wrap;
|
111
118
|
justify-content: space-between;
|
112
|
-
margin
|
119
|
+
margin: (-$margin-y) (-$margin-x);
|
113
120
|
|
114
121
|
// Size incomplete last rows with up to two missing items.
|
115
122
|
&::after, &::before {
|
116
123
|
@extend %thredded--messageboards-cell-flex;
|
124
|
+
box-sizing: border-box;
|
117
125
|
content: "";
|
118
|
-
|
119
|
-
padding: 0 $item-padding-x;
|
126
|
+
padding: 0 $thredded-messageboards-grid-item-padding-x;
|
120
127
|
}
|
121
128
|
|
122
129
|
&::before {
|
@@ -126,8 +133,9 @@
|
|
126
133
|
|
127
134
|
.thredded--messageboard {
|
128
135
|
@extend %thredded--messageboards-cell-flex;
|
129
|
-
margin-
|
130
|
-
|
136
|
+
margin-top: $margin-y;
|
137
|
+
margin-bottom: $margin-y;
|
138
|
+
padding: $thredded-messageboards-grid-item-padding-y $thredded-messageboards-grid-item-padding-x;
|
131
139
|
}
|
132
140
|
|
133
141
|
}
|
@@ -6,6 +6,90 @@
|
|
6
6
|
}
|
7
7
|
}
|
8
8
|
|
9
|
+
.thredded--post--dropdown--toggle {
|
10
|
+
fill: currentColor;
|
11
|
+
color: $thredded-action-color;
|
12
|
+
display: inline-block;
|
13
|
+
width: 1rem;
|
14
|
+
height: 1rem;
|
15
|
+
padding: 0.875rem 0.875rem 0.875rem 1.5rem;
|
16
|
+
margin-right: -0.875rem;
|
17
|
+
-webkit-tap-highlight-color: transparent;
|
18
|
+
}
|
19
|
+
|
20
|
+
.thredded--post--dropdown {
|
21
|
+
position: relative;
|
22
|
+
display: inline-block;
|
23
|
+
float: right;
|
24
|
+
cursor: pointer;
|
25
|
+
@media print {
|
26
|
+
display: none;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
.thredded--post--dropdown--actions {
|
31
|
+
position: absolute;
|
32
|
+
margin-top: -0.875rem;
|
33
|
+
right: 0;
|
34
|
+
background-color: $thredded-overlay-background-color;
|
35
|
+
border-radius: 2px;
|
36
|
+
overflow: hidden;
|
37
|
+
min-width: 10rem;
|
38
|
+
z-index: 1;
|
39
|
+
cursor: pointer;
|
40
|
+
box-shadow: $thredded-overlay-box-shadow;
|
41
|
+
transform: scale(0);
|
42
|
+
opacity: 0;
|
43
|
+
transform-origin: 100% 0;
|
44
|
+
transition: transform .3s cubic-bezier(.4, 0, .2, 1), opacity .2s cubic-bezier(.4, 0, .2, 1);
|
45
|
+
will-change: transform;
|
46
|
+
}
|
47
|
+
|
48
|
+
.thredded--post--dropdown--actions--item,
|
49
|
+
// This specific selector protects from global button rules
|
50
|
+
form.button_to > .thredded--post--dropdown--actions--item {
|
51
|
+
// Override potential global rules
|
52
|
+
background: none;
|
53
|
+
border-radius: 0;
|
54
|
+
border: 0;
|
55
|
+
box-sizing: border-box;
|
56
|
+
font: inherit;
|
57
|
+
margin: 0;
|
58
|
+
text-align: left;
|
59
|
+
transition: none;
|
60
|
+
width: 100%;
|
61
|
+
|
62
|
+
font-size: $thredded-font-size-small;
|
63
|
+
color: $thredded-text-color;
|
64
|
+
text-decoration: none;
|
65
|
+
padding: 1rem 0.75rem;
|
66
|
+
display: block;
|
67
|
+
white-space: nowrap;
|
68
|
+
|
69
|
+
&:active,
|
70
|
+
&:focus,
|
71
|
+
&:hover {
|
72
|
+
background-color: $thredded-action-color;
|
73
|
+
color: $thredded-background-color;
|
74
|
+
text-decoration: none;
|
75
|
+
cursor: pointer;
|
76
|
+
}
|
77
|
+
|
78
|
+
&:active,
|
79
|
+
&:focus {
|
80
|
+
outline: none;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
.thredded--post--dropdown:hover .thredded--post--dropdown--actions {
|
85
|
+
transform: scale(1);
|
86
|
+
opacity: 1;
|
87
|
+
}
|
88
|
+
|
89
|
+
.thredded--post--dropdown:hover .thredded--post--dropdown--toggle {
|
90
|
+
color: $thredded-action-hover-color;
|
91
|
+
}
|
92
|
+
|
9
93
|
.thredded--post--avatar {
|
10
94
|
border-radius: 50%;
|
11
95
|
display: inline-block;
|
@@ -59,19 +143,6 @@
|
|
59
143
|
display: inline-block;
|
60
144
|
}
|
61
145
|
|
62
|
-
.thredded--post--edit,
|
63
|
-
.thredded--post--delete {
|
64
|
-
font-size: $thredded-font-size-small;
|
65
|
-
@extend %thredded--link;
|
66
|
-
@media print {
|
67
|
-
display: none;
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
.thredded--post--delete {
|
72
|
-
margin-left: 0.4rem;
|
73
|
-
}
|
74
|
-
|
75
146
|
.thredded--post--content {
|
76
147
|
font-size: 1.063rem; // 17px
|
77
148
|
line-height: 1.65;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
.thredded--topics--topic {
|
2
|
-
margin-bottom: $thredded-
|
2
|
+
margin-bottom: $thredded-topics-list-gutter-y;
|
3
3
|
position: relative;
|
4
4
|
|
5
5
|
@media (max-width: $thredded-grid-container-max-width) {
|
@@ -8,7 +8,13 @@
|
|
8
8
|
@include thredded-media-mobile {
|
9
9
|
margin-right: 2rem;
|
10
10
|
}
|
11
|
+
}
|
11
12
|
|
13
|
+
.thredded--topics--sticky-topics-divider {
|
14
|
+
margin-top: -$thredded-topics-list-gutter-y / 2;
|
15
|
+
margin-bottom: $thredded-topics-list-gutter-y / 2;
|
16
|
+
border: 0;
|
17
|
+
border-top: $thredded-base-border;
|
12
18
|
}
|
13
19
|
|
14
20
|
.thredded--topics--title {
|
@@ -30,18 +30,15 @@
|
|
30
30
|
width: auto;
|
31
31
|
padding: 0.9375rem 0.75rem 0.875rem 0.75rem;
|
32
32
|
margin: -1px (-$padding-x) 0 0;
|
33
|
-
// Webkit adds an extra padding that we need to remove.
|
34
|
-
-webkit-margin-end: -($padding-x + 0.75rem);
|
35
33
|
|
36
34
|
&, &:focus {
|
37
35
|
transition: background, border-color, box-shadow, min-width 0.15s ease-out 0s;
|
38
36
|
}
|
39
37
|
|
40
|
-
&:focus {
|
38
|
+
&:focus, &:not(:placeholder-shown) {
|
41
39
|
background: $thredded-background-color;
|
42
40
|
box-shadow: none;
|
43
41
|
margin-right: 0;
|
44
|
-
-webkit-margin-end: 0;
|
45
42
|
min-width: 16rem;
|
46
43
|
text-align: left;
|
47
44
|
}
|
@@ -59,6 +56,16 @@
|
|
59
56
|
max-height: $line-height;
|
60
57
|
}
|
61
58
|
|
59
|
+
&:placeholder-shown, &:not(:focus) {
|
60
|
+
// On Chrome, the search [x] takes up space even when invisible,
|
61
|
+
// breaking the placeholder positioning. Remove it:
|
62
|
+
&::-webkit-search-cancel-button,
|
63
|
+
&::-webkit-search-decoration {
|
64
|
+
-webkit-appearance: none;
|
65
|
+
margin: 0;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
62
69
|
&::placeholder {
|
63
70
|
color: $thredded-secondary-nav-color;
|
64
71
|
transition: $thredded-action-transition;
|
@@ -70,13 +77,15 @@
|
|
70
77
|
}
|
71
78
|
|
72
79
|
&:hover:not(:focus) {
|
73
|
-
|
80
|
+
&:placeholder-shown {
|
81
|
+
cursor: pointer;
|
82
|
+
}
|
74
83
|
&::placeholder {
|
75
84
|
color: $thredded-nav-hover-color;
|
76
85
|
}
|
77
86
|
}
|
78
87
|
|
79
|
-
&:focus {
|
88
|
+
&:focus, &:not(:placeholder-shown) {
|
80
89
|
border-color: $thredded-base-border-color;
|
81
90
|
}
|
82
91
|
}
|
@@ -12,7 +12,7 @@ module Thredded
|
|
12
12
|
:messageboard,
|
13
13
|
:messageboard_or_nil,
|
14
14
|
:preferences,
|
15
|
-
:
|
15
|
+
:thredded_signed_in?
|
16
16
|
|
17
17
|
rescue_from Thredded::Errors::MessageboardNotFound,
|
18
18
|
Thredded::Errors::PrivateTopicNotFound,
|
@@ -40,11 +40,14 @@ module Thredded
|
|
40
40
|
|
41
41
|
protected
|
42
42
|
|
43
|
+
# The `current_user` and `signed_in?` methods are prefixed with `thredded_`
|
44
|
+
# to avoid conflicts with methods from the parent controller.
|
45
|
+
|
43
46
|
def thredded_current_user
|
44
47
|
send(Thredded.current_user_method) || NullUser.new
|
45
48
|
end
|
46
49
|
|
47
|
-
def
|
50
|
+
def thredded_signed_in?
|
48
51
|
!thredded_current_user.thredded_anonymous?
|
49
52
|
end
|
50
53
|
|
@@ -76,7 +79,7 @@ module Thredded
|
|
76
79
|
end
|
77
80
|
|
78
81
|
def update_user_activity
|
79
|
-
return if !messageboard_or_nil || !
|
82
|
+
return if !messageboard_or_nil || !thredded_signed_in?
|
80
83
|
|
81
84
|
Thredded::ActivityUpdaterJob.perform_later(
|
82
85
|
thredded_current_user.id,
|
@@ -76,7 +76,7 @@ module Thredded
|
|
76
76
|
|
77
77
|
def maybe_set_last_moderated_record_flash
|
78
78
|
return unless flash[:last_moderated_record_id]
|
79
|
-
@last_moderated_record = accessible_post_moderation_records.find(flash[:last_moderated_record_id].
|
79
|
+
@last_moderated_record = accessible_post_moderation_records.find(flash[:last_moderated_record_id].to_s)
|
80
80
|
end
|
81
81
|
|
82
82
|
def moderatable_posts
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Thredded
|
3
|
-
#
|
4
|
-
# TODO: split up the PrivatePost functionality into a separate controller.
|
3
|
+
# A controller for managing {Post}s.
|
5
4
|
class PostsController < Thredded::ApplicationController
|
6
5
|
include ActionView::RecordIdentifier
|
7
6
|
|
@@ -37,40 +36,38 @@ module Thredded
|
|
37
36
|
notice: I18n.t('thredded.posts.deleted_notice')
|
38
37
|
end
|
39
38
|
|
39
|
+
def mark_as_unread
|
40
|
+
authorize post, :read?
|
41
|
+
page = post.page(user: thredded_current_user)
|
42
|
+
post.mark_as_unread(thredded_current_user, page)
|
43
|
+
after_mark_as_unread # customization hook
|
44
|
+
end
|
45
|
+
|
40
46
|
private
|
41
47
|
|
48
|
+
def after_mark_as_unread
|
49
|
+
redirect_to messageboard_topics_path(messageboard)
|
50
|
+
end
|
51
|
+
|
42
52
|
def topic
|
43
53
|
post.postable
|
44
54
|
end
|
45
55
|
|
46
56
|
def post_params
|
47
|
-
|
57
|
+
params.require(:post)
|
48
58
|
.permit(:content)
|
49
|
-
.merge(user: thredded_current_user, ip: request.remote_ip)
|
50
|
-
p = p.merge(messageboard: messageboard) unless for_a_private_topic?
|
51
|
-
p
|
59
|
+
.merge(user: thredded_current_user, ip: request.remote_ip, messageboard: messageboard)
|
52
60
|
end
|
53
61
|
|
54
62
|
def parent_topic
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
.find(params[:private_topic_id])
|
60
|
-
else
|
61
|
-
Topic
|
62
|
-
.where(messageboard: messageboard)
|
63
|
-
.friendly
|
64
|
-
.find(params[:topic_id])
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def for_a_private_topic?
|
69
|
-
params[:private_topic_id].present?
|
63
|
+
Topic
|
64
|
+
.where(messageboard: messageboard)
|
65
|
+
.friendly
|
66
|
+
.find(params[:topic_id])
|
70
67
|
end
|
71
68
|
|
72
69
|
def post
|
73
|
-
@post ||=
|
70
|
+
@post ||= Thredded::Post.find(params[:id])
|
74
71
|
end
|
75
72
|
|
76
73
|
def current_page
|