thredded 0.8.4 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -9
  3. data/app/assets/images/thredded/breadcrumb-chevron.svg +1 -1
  4. data/app/assets/images/thredded/follow.svg +1 -1
  5. data/app/assets/images/thredded/moderation.svg +1 -4
  6. data/app/assets/images/thredded/private-messages.svg +1 -4
  7. data/app/assets/images/thredded/settings.svg +1 -4
  8. data/app/assets/images/thredded/unfollow.svg +1 -1
  9. data/app/assets/javascripts/thredded/components/time_stamps.es6 +1 -1
  10. data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +26 -49
  11. data/app/assets/javascripts/thredded/dependencies.js +2 -1
  12. data/app/assets/stylesheets/thredded/base/_grid.scss +4 -4
  13. data/app/assets/stylesheets/thredded/base/_typography.scss +18 -0
  14. data/app/assets/stylesheets/thredded/components/_base.scss +4 -0
  15. data/app/assets/stylesheets/thredded/components/_currently-online.scss +4 -0
  16. data/app/assets/stylesheets/thredded/components/_form-list.scss +5 -0
  17. data/app/assets/stylesheets/thredded/components/_messageboard.scss +3 -0
  18. data/app/assets/stylesheets/thredded/components/_post-form.scss +7 -4
  19. data/app/assets/stylesheets/thredded/components/_post.scss +3 -0
  20. data/app/assets/stylesheets/thredded/components/_topic-delete.scss +3 -0
  21. data/app/assets/stylesheets/thredded/components/_topic-header.scss +20 -0
  22. data/app/assets/stylesheets/thredded/components/_topics.scss +13 -1
  23. data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +1 -1
  24. data/app/assets/stylesheets/thredded/layout/_navigation.scss +3 -1
  25. data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +4 -0
  26. data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +3 -0
  27. data/app/commands/thredded/at_notification_extractor.rb +1 -2
  28. data/app/commands/thredded/autofollow_mentioned_users.rb +0 -1
  29. data/app/commands/thredded/notify_following_users.rb +20 -11
  30. data/app/commands/thredded/notify_private_topic_users.rb +12 -28
  31. data/app/controllers/thredded/application_controller.rb +8 -4
  32. data/app/controllers/thredded/messageboards_controller.rb +2 -2
  33. data/app/controllers/thredded/moderation_controller.rb +12 -13
  34. data/app/controllers/thredded/posts_controller.rb +1 -1
  35. data/app/controllers/thredded/preferences_controller.rb +11 -7
  36. data/app/controllers/thredded/private_topics_controller.rb +13 -9
  37. data/app/controllers/thredded/topics_controller.rb +20 -12
  38. data/app/forms/thredded/user_preferences_form.rb +23 -4
  39. data/app/helpers/thredded/application_helper.rb +11 -1
  40. data/app/mailers/thredded/post_mailer.rb +2 -3
  41. data/app/mailers/thredded/private_topic_mailer.rb +2 -3
  42. data/app/models/concerns/thredded/content_moderation_state.rb +1 -1
  43. data/app/models/concerns/thredded/notifier_preference.rb +18 -0
  44. data/app/models/concerns/thredded/post_common.rb +5 -1
  45. data/{lib → app/models/concerns}/thredded/search_parser.rb +0 -0
  46. data/app/models/concerns/thredded/topic_common.rb +3 -3
  47. data/{lib → app/models/concerns}/thredded/topics_search.rb +2 -3
  48. data/app/models/thredded/messageboard.rb +11 -0
  49. data/app/models/thredded/messageboard_notifications_for_followed_topics.rb +29 -0
  50. data/app/models/thredded/notifications_for_followed_topics.rb +22 -0
  51. data/app/models/thredded/notifications_for_private_topics.rb +21 -0
  52. data/app/models/thredded/post.rb +5 -3
  53. data/app/models/thredded/post_moderation_record.rb +1 -1
  54. data/app/models/thredded/private_post.rb +1 -1
  55. data/app/models/thredded/private_topic.rb +8 -4
  56. data/app/models/thredded/stats.rb +1 -1
  57. data/app/models/thredded/topic.rb +10 -7
  58. data/app/models/thredded/user_detail.rb +1 -1
  59. data/app/models/thredded/user_extender.rb +3 -1
  60. data/app/models/thredded/user_preference.rb +16 -5
  61. data/app/models/thredded/user_private_topic_read_state.rb +1 -1
  62. data/app/models/thredded/user_topic_read_state.rb +1 -1
  63. data/app/notifiers/thredded/base_notifier.rb +28 -0
  64. data/app/notifiers/thredded/email_notifier.rb +34 -0
  65. data/app/policies/thredded/post_policy.rb +3 -4
  66. data/app/policies/thredded/private_post_policy.rb +2 -3
  67. data/app/policies/thredded/topic_policy.rb +1 -2
  68. data/app/view_hooks/thredded/all_view_hooks.rb +0 -3
  69. data/app/view_models/thredded/base_topic_view.rb +0 -1
  70. data/app/view_models/thredded/post_view.rb +0 -1
  71. data/app/view_models/thredded/posts_page_view.rb +1 -4
  72. data/app/view_models/thredded/private_topic_view.rb +3 -1
  73. data/app/view_models/thredded/private_topics_page_view.rb +8 -3
  74. data/app/view_models/thredded/topic_posts_page_view.rb +1 -2
  75. data/app/view_models/thredded/topic_view.rb +3 -3
  76. data/app/view_models/thredded/topics_page_view.rb +0 -1
  77. data/app/views/thredded/messageboard_groups/new.html.erb +5 -1
  78. data/app/views/thredded/messageboards/_form.html.erb +7 -2
  79. data/app/views/thredded/posts/_form.html.erb +2 -1
  80. data/app/views/thredded/posts/edit.html.erb +3 -2
  81. data/app/views/thredded/posts_common/_form.html.erb +6 -2
  82. data/app/views/thredded/preferences/_form.html.erb +41 -29
  83. data/app/views/thredded/private_posts/_form.html.erb +1 -0
  84. data/app/views/thredded/private_topics/_form.html.erb +3 -2
  85. data/app/views/thredded/private_topics/_header.html.erb +4 -0
  86. data/app/views/thredded/private_topics/_no_private_topics.html.erb +1 -1
  87. data/app/views/thredded/private_topics/_private_topic.html.erb +5 -2
  88. data/app/views/thredded/private_topics/edit.html.erb +2 -1
  89. data/app/views/thredded/private_topics/header/_participant.html.erb +1 -0
  90. data/app/views/thredded/private_topics/index.html.erb +6 -5
  91. data/app/views/thredded/private_topics/new.html.erb +0 -1
  92. data/app/views/thredded/private_topics/private_topic/_participant.html.erb +1 -0
  93. data/app/views/thredded/private_topics/show.html.erb +1 -3
  94. data/app/views/thredded/topics/_form.html.erb +1 -1
  95. data/app/views/thredded/topics/show.html.erb +4 -5
  96. data/config/locales/en.yml +22 -9
  97. data/config/locales/pt-BR.yml +22 -10
  98. data/config/routes.rb +1 -1
  99. data/db/migrate/20160329231848_create_thredded.rb +23 -3
  100. data/db/upgrade_migrations/20160410111522_upgrade_v0_2_to_v0_3.rb +1 -1
  101. data/db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb +56 -0
  102. data/lib/generators/thredded/install/templates/initializer.rb +28 -0
  103. data/lib/thredded.rb +32 -8
  104. data/lib/thredded/content_formatter.rb +3 -2
  105. data/lib/thredded/database_seeder.rb +11 -8
  106. data/lib/thredded/db_tools.rb +82 -0
  107. data/lib/thredded/html_pipeline/wrap_iframes_filter.rb +12 -0
  108. data/lib/thredded/version.rb +1 -1
  109. metadata +18 -8
  110. data/app/models/thredded/null_preference.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0ae737f91c634807997bd570331a9e198cd6d45
4
- data.tar.gz: 816e598eb872a77f20c595c9bfa42a84de5e9d90
3
+ metadata.gz: 279e815e52564fc440a5495e4952aaf8ab84a5fb
4
+ data.tar.gz: 5907233bce4511abeb29d7d6a9ce01fdb30c1d11
5
5
  SHA512:
6
- metadata.gz: 12d028119412d16ab051683c9e0d63559e1f220f96c64b737786e8b705c756151827ac1c4416e53693e571f96026b32e6483f00c2c01b5664c8b0235aa1537de
7
- data.tar.gz: 771a6a57fa030bbbe80d6fb552f0c7e9b974d42a8e44e9f79305d3fa082041556d00e113e8c4ca8f16f98e401f432dbc5f19796a6ab399673ff0b2af1ff3811f
6
+ metadata.gz: a6dc5895f37044bc4da48f31065ecb5a6b42360c56cba3ced82d9ff6723d014c79d249065857dcacaa315803b817515459ac42c4a270cc7281d897d7bc70af67
7
+ data.tar.gz: be64c3bae2cef65b90988c9473ca1b003fae0fbffa464b717622d982f93a18d4420c695d50d3fd53bef115150d8697b7b474cfdcd70de31a2edfc003bd907328
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.8.4'
59
+ gem 'thredded', '~> 0.9.1'
60
60
  ```
61
61
 
62
62
  Add the Thredded [initializer] to your parent app by running the install generator.
@@ -105,14 +105,26 @@ 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 (in this example from v0.4 to the v0.5):
108
+ 2) To upgrade the database:
109
+
110
+ Latest version (in this example from v0.6 to v0.7):
109
111
 
110
112
  ```console
111
- cp `bundle show thredded`/db/upgrade_migrations/20160501151908_upgrade_v0_4_to_v0_5.rb db/migrate
113
+ # Note that for guaranteed best results you will want to run this with the gem checked out with v0.7.0
114
+ cp `bundle show thredded`/db/upgrade_migrations/20160723012349_upgrade_v0_6_to_v0_7.rb db/migrate
112
115
  rake db:migrate
113
116
  ```
114
117
 
115
- Note that for guaranteed best results you will want to run this with the gem checked out with v0.5.0.
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
+
116
128
 
117
129
  ### Migrating from Forem
118
130
 
@@ -145,30 +157,54 @@ You can also use Thredded with your application (or other) layout by by setting
145
157
 
146
158
  In this case, you will need to reference your paths/routes carefully and pull in thredded assets (styles and javascript):
147
159
 
148
- #### Referencing your paths so that thredded views can find them
160
+ #### Reference your paths so that Thredded can find them
149
161
 
150
162
  In your layout you will probably have links to other paths in your app (e.g. navigation links).
151
- For any url helpers (like `users_path` or `projects_path` or whatever) will need to have `main_app.` prefixed to them so that they can be found from thredded (`main_app.users_path` will work from either thredded or your app).
163
+ For any url helpers (like `users_path` or `projects_path` or whatever) will need to have `main_app.`
164
+ prefixed to them so that they can be found from thredded (`main_app.users_path` will work from both thredded and your app).
152
165
 
153
166
  However if you don't want to update your layouts and partials, you can define methods automatically to delegate to the main_app's routes:
154
167
  See https://gist.github.com/timdiggins/bf6d09b28828a392198562c93554ad07.
155
168
 
156
- #### Pulling in thredded assets (styles and javascript)
169
+ #### Add Thredded styles
157
170
 
158
171
  In this case, you will also need to include Thredded styles and JavaScript into the application styles and JavaScript.
159
172
 
160
- Add thredded styles to your `application.scss` (see below for customizing the styles):
173
+ Add thredded styles to your `application.scss`:
161
174
 
162
175
  ```scss
163
176
  @import "thredded";
164
177
  ```
165
178
 
179
+ Thredded wraps the views in a container element that has a `max-width` and paddings by default.
180
+ If your app layout already has a container element that handles these, you can remove the `max-width` and paddings
181
+ from the Thredded one by adding this Sass snippet after `@import "thredded";`:
182
+
183
+ ```scss
184
+ .thredded--main-container {
185
+ // The padding and max-width are handled by the app's container.
186
+ max-width: none;
187
+ padding: 0;
188
+ @include thredded-media-tablet-and-up {
189
+ padding: 0;
190
+ }
191
+ }
192
+ ```
193
+
194
+ See [below](#styles) for customizing the styles via Sass variables.
195
+
196
+ #### Add Thredded JavaScripts
197
+
166
198
  Include thredded JavaScripts in your `application.js`:
167
199
 
168
200
  ```js
169
201
  //= require thredded
170
202
  ```
171
203
 
204
+ Thredded is fully compatible with deferred and async script loading.
205
+
206
+ ##### jQuery version
207
+
172
208
  To use thredded with your application layout, you also need to ensure that your layout and thredded don't load different
173
209
  versions of jQuery. By default, Thredded loads jQuery v3 (via `//= require jquery3` from [jquery-rails]),
174
210
  but if you want to use jQuery v1 or v2, then you need to create a file at
@@ -274,7 +310,7 @@ any duplicate CSS.
274
310
  [select2-rails]: https://github.com/argerim/select2-rails
275
311
  [thredded-scss-base]: https://github.com/thredded/thredded/blob/master/app/assets/stylesheets/thredded/_base.scss
276
312
 
277
- ### Emails
313
+ ### Email and other notifications
278
314
 
279
315
  Thredded sends several notification emails to the users. You can override in the same way as the views.
280
316
  If you use [Rails Email Preview], you can include Thredded emails into the list of previews by adding
@@ -282,6 +318,9 @@ If you use [Rails Email Preview], you can include Thredded emails into the list
282
318
 
283
319
  [Rails Email Preview]: https://github.com/glebm/rails_email_preview
284
320
 
321
+ You can also turn off the email notifier totally, or add other notifiers (e.g. Pushover, possibly Slack) by adjusting the
322
+ `Thredded.notifiers` configuration in your initializer. See the default initializer for examples.
323
+
285
324
  ## I18n
286
325
 
287
326
  Thredded is mostly internationalized. It is currently available in English and Brazilian Portuguese. We welcome PRs
@@ -1 +1 @@
1
- <svg width="7" height="11" viewBox="0 0 7 11" xmlns="http://www.w3.org/2000/svg"><title>breadcrumb-chevron</title><desc>Created with Sketch.</desc><g fill="none" fill-rule="evenodd"><g fill="#B0AEBC"><path d="M1.96.19c-.19-.198-.497-.198-.685 0L.592.91c-.19.197-.19.518 0 .715l3.295 3.405L.564 8.462c-.19.198-.19.518 0 .716l.684.717c.188.197.494.197.684 0l4.35-4.508c.187-.2.187-.52 0-.717L1.958.19"/></g></g></svg>
1
+ <svg viewBox="0 0 7 11" xmlns="http://www.w3.org/2000/svg"><path d="M1.96.19a.47.47 0 0 0-.685 0L.592.91a.52.52 0 0 0 0 .715L3.887 5.03.564 8.462a.52.52 0 0 0 0 .716l.684.717a.47.47 0 0 0 .684 0l4.35-4.508a.528.528 0 0 0 0-.717L1.958.19" fill="#B0AEBC" fill-rule="evenodd"/></svg>
@@ -1 +1 @@
1
- <svg width="116" height="121" viewBox="0 0 116 121" xmlns="http://www.w3.org/2000/svg"><path d="M57.071 113.714c0-.714-.357-1.071-1.071-1.071-2.634 0-4.9-.949-6.797-2.846-1.897-1.897-2.846-4.163-2.846-6.797 0-.714-.357-1.071-1.071-1.071-.715 0-1.072.357-1.072 1.071 0 3.259 1.15 6.038 3.449 8.337 2.3 2.3 5.078 3.449 8.337 3.449.714 0 1.071-.357 1.071-1.072zM12.473 94.43h87.054C87.652 81.036 81.714 62.464 81.714 38.714c0-2.277-.535-4.62-1.607-7.031-1.071-2.41-2.611-4.71-4.62-6.897-2.01-2.188-4.721-3.985-8.137-5.39-3.415-1.407-7.198-2.11-11.35-2.11-4.152 0-7.935.703-11.35 2.11-3.416 1.405-6.128 3.202-8.137 5.39-2.009 2.187-3.549 4.486-4.62 6.897-1.072 2.41-1.607 4.754-1.607 7.031 0 23.75-5.938 42.322-17.813 55.715zm99.241 0c0 2.321-.848 4.33-2.544 6.026-1.697 1.697-3.706 2.545-6.027 2.545h-30c0 4.732-1.674 8.772-5.022 12.12-3.349 3.349-7.389 5.023-12.121 5.023s-8.772-1.674-12.12-5.022c-3.349-3.349-5.023-7.389-5.023-12.121h-30c-2.321 0-4.33-.848-6.027-2.545C1.134 98.76.286 96.75.286 94.43a58.82 58.82 0 0 0 6.093-5.893c1.83-2.054 3.728-4.721 5.692-8.003 1.965-3.28 3.628-6.819 4.99-10.613 1.36-3.795 2.477-8.393 3.347-13.795.871-5.402 1.306-11.205 1.306-17.41 0-6.786 2.612-13.092 7.835-18.918 5.223-5.826 12.076-9.364 20.558-10.614a6.67 6.67 0 0 1-.536-2.612c0-1.785.625-3.303 1.875-4.553S54.214.143 56 .143c1.786 0 3.304.625 4.554 1.875 1.25 1.25 1.875 2.768 1.875 4.553a6.67 6.67 0 0 1-.536 2.612c8.482 1.25 15.335 4.788 20.558 10.614 5.223 5.826 7.835 12.132 7.835 18.917 0 6.206.435 12.01 1.306 17.411.87 5.402 1.986 10 3.348 13.795 1.361 3.794 3.024 7.332 4.989 10.613 1.964 3.282 3.861 5.95 5.692 8.003a58.82 58.82 0 0 0 6.093 5.893z" fill-rule="evenodd"/></svg>
1
+ <svg viewBox="0 0 116 121" xmlns="http://www.w3.org/2000/svg"><path d="M57.071 113.714c0-.714-.357-1.071-1.071-1.071-2.634 0-4.9-.949-6.797-2.846-1.897-1.897-2.846-4.163-2.846-6.797 0-.714-.357-1.071-1.071-1.071-.715 0-1.072.357-1.072 1.071 0 3.259 1.15 6.038 3.449 8.337 2.3 2.3 5.078 3.449 8.337 3.449.714 0 1.071-.357 1.071-1.072zM12.473 94.43h87.054C87.652 81.036 81.714 62.464 81.714 38.714c0-2.277-.535-4.62-1.607-7.031-1.071-2.41-2.611-4.71-4.62-6.897-2.01-2.188-4.721-3.985-8.137-5.39-3.415-1.407-7.198-2.11-11.35-2.11-4.152 0-7.935.703-11.35 2.11-3.416 1.405-6.128 3.202-8.137 5.39-2.009 2.187-3.549 4.486-4.62 6.897-1.072 2.41-1.607 4.754-1.607 7.031 0 23.75-5.938 42.322-17.813 55.715zm99.241 0c0 2.321-.848 4.33-2.544 6.026-1.697 1.697-3.706 2.545-6.027 2.545h-30c0 4.732-1.674 8.772-5.022 12.12-3.349 3.349-7.389 5.023-12.121 5.023s-8.772-1.674-12.12-5.022c-3.349-3.349-5.023-7.389-5.023-12.121h-30c-2.321 0-4.33-.848-6.027-2.545C1.134 98.76.286 96.75.286 94.43a58.82 58.82 0 0 0 6.093-5.893c1.83-2.054 3.728-4.721 5.692-8.003 1.965-3.28 3.628-6.819 4.99-10.613 1.36-3.795 2.477-8.393 3.347-13.795.871-5.402 1.306-11.205 1.306-17.41 0-6.786 2.612-13.092 7.835-18.918 5.223-5.826 12.076-9.364 20.558-10.614a6.67 6.67 0 0 1-.536-2.612c0-1.785.625-3.303 1.875-4.553S54.214.143 56 .143c1.786 0 3.304.625 4.554 1.875 1.25 1.25 1.875 2.768 1.875 4.553a6.67 6.67 0 0 1-.536 2.612c8.482 1.25 15.335 4.788 20.558 10.614 5.223 5.826 7.835 12.132 7.835 18.917 0 6.206.435 12.01 1.306 17.411.87 5.402 1.986 10 3.348 13.795 1.361 3.794 3.024 7.332 4.989 10.613 1.964 3.282 3.861 5.95 5.692 8.003a58.82 58.82 0 0 0 6.093 5.893z" fill-rule="evenodd"/></svg>
@@ -1,4 +1 @@
1
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.75c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.67-1.5-1.5-1.5z"/>
3
- <path d="M0 0h24v24H0z" fill="none"/>
4
- </svg>
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.75c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.67-1.5-1.5-1.5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
@@ -1,4 +1 @@
1
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M0 0h24v24H0z" fill="none"/>
3
- <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V8l8 5 8-5v10zm-8-7L4 6h16l-8 5z"/>
4
- </svg>
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V8l8 5 8-5v10zm-8-7L4 6h16l-8 5z"/></svg>
@@ -1,4 +1 @@
1
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M0 0h24v24H0z" fill="none"/>
3
- <path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/>
4
- </svg>
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65A.488.488 0 0 0 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/></svg>
@@ -1 +1 @@
1
- <svg width="138" height="121" viewBox="0 0 138 121" xmlns="http://www.w3.org/2000/svg"><path d="M69.643 113.714c0-.714-.357-1.071-1.072-1.071-2.634 0-4.9-.949-6.796-2.846-1.898-1.897-2.846-4.163-2.846-6.797 0-.714-.358-1.071-1.072-1.071-.714 0-1.071.357-1.071 1.071 0 3.259 1.15 6.038 3.448 8.337 2.3 2.3 5.078 3.449 8.337 3.449.715 0 1.072-.357 1.072-1.072zm-35.96-31.808l58.728-50.893c-1.875-3.928-4.833-7.198-8.873-9.81-4.04-2.611-9.029-3.917-14.967-3.917-4.151 0-7.935.703-11.35 2.11-3.415 1.405-6.127 3.202-8.136 5.39-2.01 2.187-3.55 4.486-4.62 6.897-1.072 2.41-1.608 4.754-1.608 7.031 0 17.143-3.058 31.54-9.174 43.192zm90.603 12.523c0 2.321-.848 4.33-2.545 6.026-1.696 1.697-3.705 2.545-6.027 2.545h-30c0 4.732-1.674 8.772-5.022 12.12-3.348 3.349-7.388 5.023-12.12 5.023-4.733 0-8.762-1.663-12.088-4.989-3.326-3.326-5.01-7.355-5.055-12.087l9.977-8.638h50.692c-7.41-8.349-12.477-18.594-15.2-30.737l7.432-6.496c2.724 15.893 9.375 28.304 19.956 37.233zm5.759-93.215l5.625 6.429c.357.446.524.97.502 1.574a2.052 2.052 0 0 1-.703 1.506L10.112 119.34c-.447.357-.971.514-1.574.469-.603-.045-1.083-.29-1.44-.737l-5.625-6.428c-.357-.447-.524-.971-.502-1.574.022-.602.257-1.082.703-1.44L14.13 98.85c-.848-1.43-1.272-2.903-1.272-4.42a58.82 58.82 0 0 0 6.094-5.893c1.83-2.054 3.728-4.721 5.692-8.003 1.964-3.28 3.627-6.819 4.989-10.613 1.361-3.795 2.477-8.393 3.348-13.795.87-5.402 1.306-11.205 1.306-17.41 0-6.786 2.611-13.092 7.835-18.918 5.223-5.826 12.075-9.364 20.558-10.614a6.67 6.67 0 0 1-.536-2.612c0-1.785.625-3.303 1.875-4.553S66.786.143 68.57.143c1.786 0 3.304.625 4.554 1.875C74.375 3.268 75 4.786 75 6.57a6.67 6.67 0 0 1-.536 2.612c5.536.804 10.424 2.645 14.665 5.525 4.242 2.88 7.545 6.395 9.911 10.546L127.031.946c.447-.357.971-.513 1.574-.468.603.044 1.082.29 1.44.736z" fill-rule="evenodd"/></svg>
1
+ <svg viewBox="0 0 138 121" xmlns="http://www.w3.org/2000/svg"><path d="M69.643 113.714c0-.714-.357-1.071-1.072-1.071-2.634 0-4.9-.949-6.796-2.846-1.898-1.897-2.846-4.163-2.846-6.797 0-.714-.358-1.071-1.072-1.071-.714 0-1.071.357-1.071 1.071 0 3.259 1.15 6.038 3.448 8.337 2.3 2.3 5.078 3.449 8.337 3.449.715 0 1.072-.357 1.072-1.072zm-35.96-31.808l58.728-50.893c-1.875-3.928-4.833-7.198-8.873-9.81-4.04-2.611-9.029-3.917-14.967-3.917-4.151 0-7.935.703-11.35 2.11-3.415 1.405-6.127 3.202-8.136 5.39-2.01 2.187-3.55 4.486-4.62 6.897-1.072 2.41-1.608 4.754-1.608 7.031 0 17.143-3.058 31.54-9.174 43.192zm90.603 12.523c0 2.321-.848 4.33-2.545 6.026-1.696 1.697-3.705 2.545-6.027 2.545h-30c0 4.732-1.674 8.772-5.022 12.12-3.348 3.349-7.388 5.023-12.12 5.023-4.733 0-8.762-1.663-12.088-4.989-3.326-3.326-5.01-7.355-5.055-12.087l9.977-8.638h50.692c-7.41-8.349-12.477-18.594-15.2-30.737l7.432-6.496c2.724 15.893 9.375 28.304 19.956 37.233zm5.759-93.215l5.625 6.429c.357.446.524.97.502 1.574a2.052 2.052 0 0 1-.703 1.506L10.112 119.34c-.447.357-.971.514-1.574.469-.603-.045-1.083-.29-1.44-.737l-5.625-6.428c-.357-.447-.524-.971-.502-1.574.022-.602.257-1.082.703-1.44L14.13 98.85c-.848-1.43-1.272-2.903-1.272-4.42a58.82 58.82 0 0 0 6.094-5.893c1.83-2.054 3.728-4.721 5.692-8.003 1.964-3.28 3.627-6.819 4.989-10.613 1.361-3.795 2.477-8.393 3.348-13.795.87-5.402 1.306-11.205 1.306-17.41 0-6.786 2.611-13.092 7.835-18.918 5.223-5.826 12.075-9.364 20.558-10.614a6.67 6.67 0 0 1-.536-2.612c0-1.785.625-3.303 1.875-4.553S66.786.143 68.57.143c1.786 0 3.304.625 4.554 1.875C74.375 3.268 75 4.786 75 6.57a6.67 6.67 0 0 1-.536 2.612c5.536.804 10.424 2.645 14.665 5.525 4.242 2.88 7.545 6.395 9.911 10.546L127.031.946c.447-.357.971-.513 1.574-.468.603.044 1.082.29 1.44.736z" fill-rule="evenodd"/></svg>
@@ -1,5 +1,5 @@
1
1
  (($) => {
2
- const COMPONENT_SELECTOR = '#thredded--container abbr.timeago';
2
+ const COMPONENT_SELECTOR = '#thredded--container [data-time-ago]';
3
3
 
4
4
  window.Thredded.onPageLoad(() => {
5
5
  const allowFutureWas = jQuery.timeago.settings.allowFuture;
@@ -1,63 +1,40 @@
1
1
  (($) => {
2
2
  const COMPONENT_SELECTOR = '[data-thredded-user-preferences-form]';
3
- const FOLLOW_TOPICS_ON_MENTION_SELECTOR = ':checkbox[name="user_preferences_form[follow_topics_on_mention]"]';
4
- const MESSAGEBOARD_FOLLOW_TOPICS_ON_MENTION_SELECTOR = '[name="user_preferences_form[messageboard_follow_topics_on_mention]"]';
5
- const FOLLOWED_TOPIC_EMAILS_SELECTOR = ':checkbox[name="user_preferences_form[followed_topic_emails]"]';
6
- const MESSAGEBOARD_FOLLOWED_TOPIC_EMAILS_SELECTOR = ':checkbox[name="user_preferences_form[messageboard_followed_topic_emails]"]';
7
-
8
- class UserPreferencesForm {
9
- constructor(form) {
10
- this.$form = $(form);
11
- this.$followTopicsOnMention = this.$form.find(FOLLOW_TOPICS_ON_MENTION_SELECTOR);
12
- this.$messageboardFollowTopicsOnMention = this.$form.find(MESSAGEBOARD_FOLLOW_TOPICS_ON_MENTION_SELECTOR);
13
- this.$followedTopicEmails = this.$form.find(FOLLOWED_TOPIC_EMAILS_SELECTOR);
14
- this.$messageboardFollowedTopicEmails = this.$form.find(MESSAGEBOARD_FOLLOWED_TOPIC_EMAILS_SELECTOR);
15
-
16
- this.messageboardFollowTopicsOnMentionCheckedWas = this.$messageboardFollowTopicsOnMention.prop('checked');
17
- this.$messageboardFollowTopicsOnMention.on('change', () => {
18
- this.rememberMessageboardAutofollowTopicsChecked();
3
+ const BOUND_MESSAGEBOARD_NAME = 'data-thredded-bound-messageboard-pref';
4
+
5
+ class MessageboardPreferenceBinding {
6
+ constructor($form, genericCheckboxName, messageboardCheckboxName) {
7
+ this.$genericCheckbox = $form.find(`:checkbox[name="${genericCheckboxName}"]`);
8
+ this.$messageboardCheckbox = $form.find(`:checkbox[name="${messageboardCheckboxName}"]`);
9
+ this.$messageboardCheckbox.on('change', () => {
10
+ this.rememberMessageboardChecked();
19
11
  });
20
- this.rememberMessageboardAutofollowTopicsChecked();
21
-
22
- this.$followTopicsOnMention.on('change', () => {
23
- this.updateMessageboardAutofollowTopics();
24
- });
25
- this.updateMessageboardAutofollowTopics();
26
-
27
- this.messageboardFollowedTopicEmailsCheckedWas = this.$messageboardFollowedTopicEmails.prop('checked');
28
- this.$messageboardFollowedTopicEmails.on('change', () => {
29
- this.rememberMessageboardFollowedTopicEmailsChecked();
12
+ this.rememberMessageboardChecked();
13
+ this.$genericCheckbox.on('change', () => {
14
+ this.updateMessageboardCheckbox();
30
15
  });
31
- this.rememberMessageboardFollowedTopicEmailsChecked();
32
-
33
- this.$followedTopicEmails.on('change', () => {
34
- this.updateMessageboardFollowedTopicEmails();
35
- });
36
- this.updateMessageboardFollowedTopicEmails();
16
+ this.updateMessageboardCheckbox();
37
17
  }
38
18
 
39
- rememberMessageboardAutofollowTopicsChecked() {
40
- this.messageboardFollowTopicsOnMentionCheckedWas =
41
- this.$messageboardFollowTopicsOnMention.filter(':checkbox').prop('checked');
19
+ rememberMessageboardChecked() {
20
+ this.messageboardCheckedWas = this.$messageboardCheckbox.filter(':checkbox').prop('checked');
42
21
  }
43
22
 
44
- updateMessageboardAutofollowTopics() {
45
- const enabled = this.$followTopicsOnMention.prop('checked');
46
- this.$messageboardFollowTopicsOnMention
23
+ updateMessageboardCheckbox() {
24
+ const enabled = this.$genericCheckbox.prop('checked');
25
+ this.$messageboardCheckbox
47
26
  .prop('disabled', !enabled)
48
- .filter(':checkbox').prop('checked', enabled ? this.messageboardFollowTopicsOnMentionCheckedWas : false);
49
- }
50
-
51
- rememberMessageboardFollowedTopicEmailsChecked() {
52
- this.messageboardFollowedTopicEmailsCheckedWas =
53
- this.$messageboardFollowedTopicEmails.filter(':checkbox').prop('checked');
27
+ .filter(':checkbox').prop('checked', enabled ? this.messageboardCheckedWas : false);
54
28
  }
55
29
 
56
- updateMessageboardFollowedTopicEmails() {
57
- const enabled = this.$followedTopicEmails.prop('checked');
58
- this.$messageboardFollowedTopicEmails
59
- .prop('disabled', !enabled)
60
- .filter(':checkbox').prop('checked', enabled ? this.messageboardFollowedTopicEmailsCheckedWas : false);
30
+ }
31
+ class UserPreferencesForm {
32
+ constructor(form) {
33
+ const $form = $(form);
34
+ $form.find(`input[${BOUND_MESSAGEBOARD_NAME}]`).each((index, element) => {
35
+ const $elem = $(element);
36
+ new MessageboardPreferenceBinding($form, $elem.attr('name'), $elem.attr(BOUND_MESSAGEBOARD_NAME));
37
+ })
61
38
  }
62
39
  }
63
40
 
@@ -1,8 +1,9 @@
1
1
  //= require thredded/dependencies/jquery
2
+ // Require jquery.timeago instead of rails-timeago so that we can control the initialization.
3
+ //= require jquery.timeago
2
4
  //= require jquery_ujs
3
5
  //= require jquery.autosize
4
6
  //= require jquery.textcomplete
5
- //= require rails-timeago
6
7
  //= require select2
7
8
 
8
9
  // We are not currently using any features that require the Babel polyfill
@@ -1,17 +1,17 @@
1
1
  @mixin thredded-media-mobile {
2
- @media screen and (max-width: map-get($thredded-grid-breakpoint-max-widths, mobile)) {
2
+ @media (max-width: map-get($thredded-grid-breakpoint-max-widths, mobile)) {
3
3
  @content;
4
4
  }
5
5
  }
6
6
 
7
7
  @mixin thredded-media-tablet-and-down {
8
- @media screen and (max-width: map-get($thredded-grid-breakpoint-max-widths, tablet)) {
8
+ @media (max-width: map-get($thredded-grid-breakpoint-max-widths, tablet)) {
9
9
  @content;
10
10
  }
11
11
  }
12
12
 
13
13
  @mixin thredded-media-tablet-and-up {
14
- @media screen and (min-width: map-get($thredded-grid-breakpoint-max-widths, mobile) + 0.00001rem) {
14
+ @media (min-width: map-get($thredded-grid-breakpoint-max-widths, mobile) + 0.00001rem) {
15
15
  @content;
16
16
  }
17
17
  }
@@ -25,7 +25,7 @@
25
25
  }
26
26
 
27
27
  @mixin thredded-media-desktop-and-up {
28
- @media screen and (min-width: map-get($thredded-grid-breakpoint-max-widths, tablet) + 0.00001rem) {
28
+ @media (min-width: map-get($thredded-grid-breakpoint-max-widths, tablet) + 0.00001rem) {
29
29
  @content;
30
30
  }
31
31
  }
@@ -48,3 +48,21 @@
48
48
  margin-bottom: 0;
49
49
  }
50
50
  }
51
+
52
+ %thredded--embed-16-by-9 {
53
+ display: block;
54
+ position: relative;
55
+ // 16 by 9
56
+ padding-bottom: 56.25%;
57
+ // Account for the video player chrome
58
+ padding-top: 35px;
59
+ height: 0;
60
+ overflow: hidden;
61
+ > iframe {
62
+ position: absolute;
63
+ top: 0;
64
+ left: 0;
65
+ width: 100%;
66
+ height: 100%;
67
+ }
68
+ }
@@ -19,3 +19,7 @@
19
19
  .thredded--table {
20
20
  @extend %thredded--table;
21
21
  }
22
+
23
+ .thredded--embed-16-by-9 {
24
+ @extend %thredded--embed-16-by-9;
25
+ }
@@ -45,4 +45,8 @@
45
45
  height: auto;
46
46
  visibility: visible;
47
47
  }
48
+
49
+ @media print {
50
+ display: none;
51
+ }
48
52
  }
@@ -13,6 +13,11 @@
13
13
  label {
14
14
  transition: all 0.15s ease-out 0s;
15
15
  }
16
+
17
+ label + label {
18
+ display: inline-block;
19
+ font-weight: normal;
20
+ }
16
21
  }
17
22
 
18
23
  .thredded--form-list--admin-options {
@@ -52,4 +52,7 @@
52
52
 
53
53
  .thredded--messageboards--actions {
54
54
  @extend %thredded--buttons-list;
55
+ @media print {
56
+ display: none;
57
+ }
55
58
  }
@@ -6,10 +6,7 @@
6
6
  &--wrapper {
7
7
  border-top: $thredded-base-border;
8
8
  margin-top: $thredded-base-spacing;
9
- padding-top: $thredded-large-spacing;
10
- @include thredded-media-mobile {
11
- padding-top: $thredded-base-spacing;
12
- }
9
+ padding-top: $thredded-base-spacing;
13
10
  }
14
11
 
15
12
  &--title {
@@ -22,3 +19,9 @@
22
19
  margin-top: $thredded-small-spacing;
23
20
  }
24
21
  }
22
+
23
+ .thredded--post-form--wrapper {
24
+ @media print {
25
+ display: none;
26
+ }
27
+ }
@@ -63,6 +63,9 @@
63
63
  .thredded--post--delete {
64
64
  font-size: $thredded-font-size-small;
65
65
  @extend %thredded--link;
66
+ @media print {
67
+ display: none;
68
+ }
66
69
  }
67
70
 
68
71
  .thredded--post--delete {
@@ -2,4 +2,7 @@
2
2
  border-top: $thredded-base-border;
3
3
  margin-top: $thredded-base-spacing;
4
4
  padding-top: $thredded-large-spacing;
5
+ @media print {
6
+ display: none;
7
+ }
5
8
  }
@@ -18,6 +18,20 @@
18
18
  }
19
19
  }
20
20
 
21
+ .thredded--topic-header--participants {
22
+ color: $thredded-secondary-text-color;
23
+
24
+ &--participant {
25
+ > a {
26
+ @extend %thredded--link;
27
+ font-size: $thredded-font-size-small;
28
+ }
29
+ &::before {
30
+ content: '\2022\00A0'; // • and a non-breaking space
31
+ }
32
+ }
33
+ }
34
+
21
35
  .thredded--topic-header--started-by {
22
36
  font-size: $thredded-font-size-small;
23
37
  color: $thredded-secondary-text-color;
@@ -31,6 +45,9 @@
31
45
  @extend %thredded--link;
32
46
  font-size: $thredded-font-size-small;
33
47
  margin-left: 0.4rem;
48
+ @media print {
49
+ display: none;
50
+ }
34
51
  }
35
52
 
36
53
  .thredded--topic-header--follow-info {
@@ -72,6 +89,9 @@
72
89
  cursor: pointer;
73
90
  @extend %thredded--link;
74
91
  }
92
+ @media print {
93
+ display: none;
94
+ }
75
95
  }
76
96
  }
77
97
 
@@ -60,7 +60,6 @@
60
60
  color: lighten($thredded-text-color, 20%);
61
61
 
62
62
  &:hover {
63
-
64
63
  color: $thredded-action-color;
65
64
  }
66
65
  }
@@ -82,6 +81,12 @@
82
81
  }
83
82
  }
84
83
 
84
+ .thredded--topics--participants--participant {
85
+ & + &::before {
86
+ content: '\2022\00A0'; // • and a non-breaking space
87
+ }
88
+ }
89
+
85
90
  .thredded--topics--started-by {
86
91
  display: none;
87
92
 
@@ -154,3 +159,10 @@
154
159
  @extend %thredded--not-following-icon;
155
160
  }
156
161
  }
162
+
163
+ .thredded--new-topic-form,
164
+ .thredded--new-private-topic-form {
165
+ @media print {
166
+ display: none;
167
+ }
168
+ }