threddedDANIEL 0.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +744 -0
  4. data/app/assets/images/favicons/README.md +3 -0
  5. data/app/assets/images/favicons/amazon.png +0 -0
  6. data/app/assets/images/favicons/github.png +0 -0
  7. data/app/assets/images/favicons/google_branding/logo_calendar_128px.png +0 -0
  8. data/app/assets/images/favicons/google_branding/logo_docs_48px.png +0 -0
  9. data/app/assets/images/favicons/google_branding/logo_drive_48px.png +0 -0
  10. data/app/assets/images/favicons/google_branding/logo_forms_48px.png +0 -0
  11. data/app/assets/images/favicons/google_branding/logo_sheets_48px.png +0 -0
  12. data/app/assets/images/favicons/google_branding/logo_slides_48px.png +0 -0
  13. data/app/assets/images/favicons/stackexchange.png +0 -0
  14. data/app/assets/images/favicons/twitter.png +0 -0
  15. data/app/assets/images/favicons/wikipedia.png +0 -0
  16. data/app/assets/images/thredded/breadcrumb-chevron.svg +1 -0
  17. data/app/assets/images/thredded/follow.svg +1 -0
  18. data/app/assets/images/thredded/lock.svg +1 -0
  19. data/app/assets/images/thredded/moderation.svg +1 -0
  20. data/app/assets/images/thredded/private-messages.svg +1 -0
  21. data/app/assets/images/thredded/settings.svg +1 -0
  22. data/app/assets/images/thredded/three-dot-menu.svg +3 -0
  23. data/app/assets/images/thredded/unfollow.svg +1 -0
  24. data/app/assets/javascripts/thredded.es6 +2 -0
  25. data/app/assets/javascripts/thredded/components/currently_online.es6 +32 -0
  26. data/app/assets/javascripts/thredded/components/flash_messages.es6 +9 -0
  27. data/app/assets/javascripts/thredded/components/mention_autocompletion.es6 +40 -0
  28. data/app/assets/javascripts/thredded/components/post_form.es6 +37 -0
  29. data/app/assets/javascripts/thredded/components/preview_area.es6 +56 -0
  30. data/app/assets/javascripts/thredded/components/quote_post.es6 +49 -0
  31. data/app/assets/javascripts/thredded/components/time_stamps.es6 +25 -0
  32. data/app/assets/javascripts/thredded/components/topic_form.es6 +94 -0
  33. data/app/assets/javascripts/thredded/components/topics.es6 +46 -0
  34. data/app/assets/javascripts/thredded/components/turboforms.es6 +25 -0
  35. data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +66 -0
  36. data/app/assets/javascripts/thredded/components/user_textcomplete.es6 +50 -0
  37. data/app/assets/javascripts/thredded/components/users_select.es6 +122 -0
  38. data/app/assets/javascripts/thredded/core/csrf_tokens.es6 +9 -0
  39. data/app/assets/javascripts/thredded/core/debounce.es6 +32 -0
  40. data/app/assets/javascripts/thredded/core/escape_html.es6 +7 -0
  41. data/app/assets/javascripts/thredded/core/hide_soft_keyboard.es6 +7 -0
  42. data/app/assets/javascripts/thredded/core/on_page_load.es6 +54 -0
  43. data/app/assets/javascripts/thredded/core/serialize_form.es6 +9 -0
  44. data/app/assets/javascripts/thredded/core/thredded.es6 +1 -0
  45. data/app/assets/javascripts/thredded/dependencies.js +8 -0
  46. data/app/assets/javascripts/thredded/dependencies/autosize.js +1 -0
  47. data/app/assets/javascripts/thredded/dependencies/textcomplete.js +1 -0
  48. data/app/assets/javascripts/thredded/dependencies/timeago.js +1 -0
  49. data/app/assets/javascripts/thredded/dependencies/ujs.js +1 -0
  50. data/app/assets/javascripts/thredded/thredded.es6 +2 -0
  51. data/app/assets/stylesheets/thredded.scss +3 -0
  52. data/app/assets/stylesheets/thredded/_base.scss +13 -0
  53. data/app/assets/stylesheets/thredded/_dependencies.scss +0 -0
  54. data/app/assets/stylesheets/thredded/_email.scss +51 -0
  55. data/app/assets/stylesheets/thredded/_thredded.scss +33 -0
  56. data/app/assets/stylesheets/thredded/base/_alerts.scss +44 -0
  57. data/app/assets/stylesheets/thredded/base/_buttons.scss +73 -0
  58. data/app/assets/stylesheets/thredded/base/_dropdown-menu.scss +83 -0
  59. data/app/assets/stylesheets/thredded/base/_forms.scss +84 -0
  60. data/app/assets/stylesheets/thredded/base/_grid.scss +58 -0
  61. data/app/assets/stylesheets/thredded/base/_lists.scss +31 -0
  62. data/app/assets/stylesheets/thredded/base/_nav.scss +67 -0
  63. data/app/assets/stylesheets/thredded/base/_tables.scss +17 -0
  64. data/app/assets/stylesheets/thredded/base/_typography.scss +72 -0
  65. data/app/assets/stylesheets/thredded/base/_variables.scss +141 -0
  66. data/app/assets/stylesheets/thredded/components/_alerts.scss +19 -0
  67. data/app/assets/stylesheets/thredded/components/_base.scss +25 -0
  68. data/app/assets/stylesheets/thredded/components/_currently-online.scss +54 -0
  69. data/app/assets/stylesheets/thredded/components/_empty.scss +11 -0
  70. data/app/assets/stylesheets/thredded/components/_flash-message.scss +19 -0
  71. data/app/assets/stylesheets/thredded/components/_following.scss +14 -0
  72. data/app/assets/stylesheets/thredded/components/_form-list.scss +39 -0
  73. data/app/assets/stylesheets/thredded/components/_icons.scss +3 -0
  74. data/app/assets/stylesheets/thredded/components/_main-section.scss +9 -0
  75. data/app/assets/stylesheets/thredded/components/_mention-autocomplete.scss +57 -0
  76. data/app/assets/stylesheets/thredded/components/_messageboard.scss +155 -0
  77. data/app/assets/stylesheets/thredded/components/_onebox.scss +275 -0
  78. data/app/assets/stylesheets/thredded/components/_pagination.scss +35 -0
  79. data/app/assets/stylesheets/thredded/components/_post-form.scss +27 -0
  80. data/app/assets/stylesheets/thredded/components/_post.scss +138 -0
  81. data/app/assets/stylesheets/thredded/components/_preferences.scss +19 -0
  82. data/app/assets/stylesheets/thredded/components/_preview_area.scss +11 -0
  83. data/app/assets/stylesheets/thredded/components/_topic-delete.scss +8 -0
  84. data/app/assets/stylesheets/thredded/components/_topic-header.scss +111 -0
  85. data/app/assets/stylesheets/thredded/components/_topics.scss +186 -0
  86. data/app/assets/stylesheets/thredded/layout/_main-container.scss +16 -0
  87. data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +79 -0
  88. data/app/assets/stylesheets/thredded/layout/_moderation.scss +97 -0
  89. data/app/assets/stylesheets/thredded/layout/_navigation.scss +87 -0
  90. data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +126 -0
  91. data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +20 -0
  92. data/app/assets/stylesheets/thredded/layout/_user.scss +10 -0
  93. data/app/assets/stylesheets/thredded/utilities/_is-compact.scss +26 -0
  94. data/app/assets/stylesheets/thredded/utilities/_is-expanded.scss +16 -0
  95. data/app/commands/thredded/at_notification_extractor.rb +23 -0
  96. data/app/commands/thredded/autofollow_users.rb +62 -0
  97. data/app/commands/thredded/create_messageboard.rb +42 -0
  98. data/app/commands/thredded/mark_all_read.rb +22 -0
  99. data/app/commands/thredded/moderate_post.rb +48 -0
  100. data/app/commands/thredded/notify_following_users.rb +78 -0
  101. data/app/commands/thredded/notify_private_topic_users.rb +34 -0
  102. data/app/controllers/concerns/thredded/new_post_params.rb +21 -0
  103. data/app/controllers/concerns/thredded/new_private_post_params.rb +21 -0
  104. data/app/controllers/concerns/thredded/new_private_topic_params.rb +25 -0
  105. data/app/controllers/concerns/thredded/new_topic_params.rb +19 -0
  106. data/app/controllers/concerns/thredded/render_preview.rb +16 -0
  107. data/app/controllers/thredded/application_controller.rb +145 -0
  108. data/app/controllers/thredded/autocomplete_users_controller.rb +52 -0
  109. data/app/controllers/thredded/messageboard_groups_controller.rb +31 -0
  110. data/app/controllers/thredded/messageboards_controller.rb +53 -0
  111. data/app/controllers/thredded/moderation_controller.rb +103 -0
  112. data/app/controllers/thredded/post_permalinks_controller.rb +11 -0
  113. data/app/controllers/thredded/post_previews_controller.rb +29 -0
  114. data/app/controllers/thredded/posts_controller.rb +97 -0
  115. data/app/controllers/thredded/preferences_controller.rb +42 -0
  116. data/app/controllers/thredded/private_post_permalinks_controller.rb +12 -0
  117. data/app/controllers/thredded/private_post_previews_controller.rb +29 -0
  118. data/app/controllers/thredded/private_posts_controller.rb +96 -0
  119. data/app/controllers/thredded/private_topic_previews_controller.rb +15 -0
  120. data/app/controllers/thredded/private_topics_controller.rb +102 -0
  121. data/app/controllers/thredded/read_states_controller.rb +13 -0
  122. data/app/controllers/thredded/theme_previews_controller.rb +34 -0
  123. data/app/controllers/thredded/topic_previews_controller.rb +15 -0
  124. data/app/controllers/thredded/topics_controller.rb +205 -0
  125. data/app/forms/thredded/edit_topic_form.rb +51 -0
  126. data/app/forms/thredded/post_form.rb +54 -0
  127. data/app/forms/thredded/private_post_form.rb +50 -0
  128. data/app/forms/thredded/private_topic_form.rb +160 -0
  129. data/app/forms/thredded/topic_form.rb +95 -0
  130. data/app/forms/thredded/user_preferences_form.rb +110 -0
  131. data/app/helpers/thredded/application_helper.rb +129 -0
  132. data/app/helpers/thredded/nav_helper.rb +42 -0
  133. data/app/helpers/thredded/render_helper.rb +15 -0
  134. data/app/helpers/thredded/urls_helper.rb +134 -0
  135. data/app/jobs/thredded/activity_updater_job.rb +21 -0
  136. data/app/jobs/thredded/auto_follow_and_notify_job.rb +14 -0
  137. data/app/jobs/thredded/notify_private_topic_users_job.rb +12 -0
  138. data/app/mailer_previews/thredded/base_mailer_preview.rb +118 -0
  139. data/app/mailer_previews/thredded/post_mailer_preview.rb +13 -0
  140. data/app/mailer_previews/thredded/private_topic_mailer_preview.rb +13 -0
  141. data/app/mailers/thredded/base_mailer.rb +18 -0
  142. data/app/mailers/thredded/post_mailer.rb +21 -0
  143. data/app/mailers/thredded/private_topic_mailer.rb +21 -0
  144. data/app/models/concerns/thredded/content_moderation_state.rb +67 -0
  145. data/app/models/concerns/thredded/friendly_id_reserved_words_and_pagination.rb +17 -0
  146. data/app/models/concerns/thredded/moderation_state.rb +14 -0
  147. data/app/models/concerns/thredded/notifier_preference.rb +19 -0
  148. data/app/models/concerns/thredded/post_common.rb +76 -0
  149. data/app/models/concerns/thredded/search_parser.rb +41 -0
  150. data/app/models/concerns/thredded/topic_common.rb +94 -0
  151. data/app/models/concerns/thredded/topics_search.rb +67 -0
  152. data/app/models/concerns/thredded/user_topic_read_state_common.rb +42 -0
  153. data/app/models/thredded/category.rb +18 -0
  154. data/app/models/thredded/messageboard.rb +120 -0
  155. data/app/models/thredded/messageboard_group.rb +19 -0
  156. data/app/models/thredded/messageboard_notifications_for_followed_topics.rb +30 -0
  157. data/app/models/thredded/messageboard_user.rb +14 -0
  158. data/app/models/thredded/notifications_for_followed_topics.rb +25 -0
  159. data/app/models/thredded/notifications_for_private_topics.rb +22 -0
  160. data/app/models/thredded/null_user.rb +51 -0
  161. data/app/models/thredded/null_user_topic_read_state.rb +17 -0
  162. data/app/models/thredded/post.rb +77 -0
  163. data/app/models/thredded/post_moderation_record.rb +56 -0
  164. data/app/models/thredded/private_post.rb +63 -0
  165. data/app/models/thredded/private_topic.rb +89 -0
  166. data/app/models/thredded/private_user.rb +8 -0
  167. data/app/models/thredded/stats.rb +25 -0
  168. data/app/models/thredded/topic.rb +179 -0
  169. data/app/models/thredded/topic_category.rb +8 -0
  170. data/app/models/thredded/user_detail.rb +27 -0
  171. data/app/models/thredded/user_extender.rb +75 -0
  172. data/app/models/thredded/user_messageboard_preference.rb +45 -0
  173. data/app/models/thredded/user_permissions/admin/if_admin_column_true.rb +14 -0
  174. data/app/models/thredded/user_permissions/admin/none.rb +14 -0
  175. data/app/models/thredded/user_permissions/message/readers_of_writeable_boards.rb +15 -0
  176. data/app/models/thredded/user_permissions/moderate/if_moderator_column_true.rb +16 -0
  177. data/app/models/thredded/user_permissions/moderate/none.rb +16 -0
  178. data/app/models/thredded/user_permissions/read/all.rb +27 -0
  179. data/app/models/thredded/user_permissions/write/all.rb +16 -0
  180. data/app/models/thredded/user_permissions/write/none.rb +16 -0
  181. data/app/models/thredded/user_post_notification.rb +29 -0
  182. data/app/models/thredded/user_preference.rb +26 -0
  183. data/app/models/thredded/user_private_topic_read_state.rb +13 -0
  184. data/app/models/thredded/user_topic_follow.rb +34 -0
  185. data/app/models/thredded/user_topic_read_state.rb +13 -0
  186. data/app/notifiers/thredded/email_notifier.rb +25 -0
  187. data/app/policies/thredded/messageboard_group_policy.rb +16 -0
  188. data/app/policies/thredded/messageboard_policy.rb +49 -0
  189. data/app/policies/thredded/post_policy.rb +64 -0
  190. data/app/policies/thredded/private_post_policy.rb +38 -0
  191. data/app/policies/thredded/private_topic_policy.rb +24 -0
  192. data/app/policies/thredded/topic_policy.rb +49 -0
  193. data/app/view_hooks/thredded/all_view_hooks.rb +125 -0
  194. data/app/view_models/thredded/base_topic_view.rb +43 -0
  195. data/app/view_models/thredded/messageboard_group_view.rb +27 -0
  196. data/app/view_models/thredded/post_view.rb +89 -0
  197. data/app/view_models/thredded/posts_page_view.rb +27 -0
  198. data/app/view_models/thredded/private_topic_view.rb +20 -0
  199. data/app/view_models/thredded/private_topics_page_view.rb +31 -0
  200. data/app/view_models/thredded/topic_email_view.rb +18 -0
  201. data/app/view_models/thredded/topic_posts_page_view.rb +17 -0
  202. data/app/view_models/thredded/topic_view.rb +68 -0
  203. data/app/view_models/thredded/topics_page_view.rb +38 -0
  204. data/app/views/layouts/thredded/application.html.erb +18 -0
  205. data/app/views/thredded/categories/_category.html.erb +1 -0
  206. data/app/views/thredded/error_pages/forbidden.html.erb +6 -0
  207. data/app/views/thredded/error_pages/not_found.html.erb +6 -0
  208. data/app/views/thredded/kaminari/_first_page.html.erb +11 -0
  209. data/app/views/thredded/kaminari/_gap.html.erb +8 -0
  210. data/app/views/thredded/kaminari/_last_page.html.erb +11 -0
  211. data/app/views/thredded/kaminari/_next_page.html.erb +11 -0
  212. data/app/views/thredded/kaminari/_page.html.erb +12 -0
  213. data/app/views/thredded/kaminari/_paginator.html.erb +23 -0
  214. data/app/views/thredded/kaminari/_prev_page.html.erb +11 -0
  215. data/app/views/thredded/messageboard_groups/new.html.erb +28 -0
  216. data/app/views/thredded/messageboards/_form.html.erb +30 -0
  217. data/app/views/thredded/messageboards/_messageboard.html.erb +20 -0
  218. data/app/views/thredded/messageboards/_messageboard_meta.html.erb +13 -0
  219. data/app/views/thredded/messageboards/edit.html.erb +15 -0
  220. data/app/views/thredded/messageboards/index.html.erb +34 -0
  221. data/app/views/thredded/messageboards/new.html.erb +15 -0
  222. data/app/views/thredded/moderation/_nav.html.erb +19 -0
  223. data/app/views/thredded/moderation/_post.html.erb +19 -0
  224. data/app/views/thredded/moderation/_post_moderation_actions.html.erb +12 -0
  225. data/app/views/thredded/moderation/_post_moderation_record.html.erb +46 -0
  226. data/app/views/thredded/moderation/_user_moderation_state.html.erb +3 -0
  227. data/app/views/thredded/moderation/_user_post.html.erb +12 -0
  228. data/app/views/thredded/moderation/_users_search_form.html.erb +13 -0
  229. data/app/views/thredded/moderation/activity.html.erb +20 -0
  230. data/app/views/thredded/moderation/history.html.erb +13 -0
  231. data/app/views/thredded/moderation/pending.html.erb +24 -0
  232. data/app/views/thredded/moderation/user.html.erb +54 -0
  233. data/app/views/thredded/moderation/users.html.erb +41 -0
  234. data/app/views/thredded/post_mailer/post_notification.html.erb +26 -0
  235. data/app/views/thredded/post_mailer/post_notification.text.erb +14 -0
  236. data/app/views/thredded/post_previews/preview.html.erb +1 -0
  237. data/app/views/thredded/post_previews/update.html.erb +1 -0
  238. data/app/views/thredded/posts/_content.html.erb +1 -0
  239. data/app/views/thredded/posts/_form.html.erb +5 -0
  240. data/app/views/thredded/posts/_post.html.erb +13 -0
  241. data/app/views/thredded/posts/_user.html.erb +3 -0
  242. data/app/views/thredded/posts/edit.html.erb +16 -0
  243. data/app/views/thredded/posts/new.html.erb +15 -0
  244. data/app/views/thredded/posts_common/_actions.html.erb +28 -0
  245. data/app/views/thredded/posts_common/_content.html.erb +3 -0
  246. data/app/views/thredded/posts_common/_form.html.erb +22 -0
  247. data/app/views/thredded/posts_common/_header.html.erb +8 -0
  248. data/app/views/thredded/posts_common/_header_with_topic.html.erb +15 -0
  249. data/app/views/thredded/posts_common/_header_with_user_and_topic.html.erb +18 -0
  250. data/app/views/thredded/posts_common/actions/_delete.html.erb +4 -0
  251. data/app/views/thredded/posts_common/actions/_edit.html.erb +3 -0
  252. data/app/views/thredded/posts_common/actions/_mark_as_unread.html.erb +2 -0
  253. data/app/views/thredded/posts_common/actions/_quote.html.erb +4 -0
  254. data/app/views/thredded/posts_common/form/_after_content.html.erb +8 -0
  255. data/app/views/thredded/posts_common/form/_before_content.html.erb +8 -0
  256. data/app/views/thredded/posts_common/form/_content.html.erb +7 -0
  257. data/app/views/thredded/posts_common/form/_content_field.html.erb +8 -0
  258. data/app/views/thredded/posts_common/form/_preview_area.html.erb +16 -0
  259. data/app/views/thredded/preferences/_form.html.erb +95 -0
  260. data/app/views/thredded/preferences/_messageboards_nav.html.erb +8 -0
  261. data/app/views/thredded/preferences/_messageboards_nav_item.html.erb +2 -0
  262. data/app/views/thredded/preferences/edit.html.erb +20 -0
  263. data/app/views/thredded/private_post_previews/preview.html.erb +1 -0
  264. data/app/views/thredded/private_post_previews/update.html.erb +1 -0
  265. data/app/views/thredded/private_posts/_content.html.erb +1 -0
  266. data/app/views/thredded/private_posts/_form.html.erb +6 -0
  267. data/app/views/thredded/private_posts/_private_post.html.erb +6 -0
  268. data/app/views/thredded/private_posts/edit.html.erb +16 -0
  269. data/app/views/thredded/private_posts/new.html.erb +11 -0
  270. data/app/views/thredded/private_topic_mailer/message_notification.html.erb +26 -0
  271. data/app/views/thredded/private_topic_mailer/message_notification.text.erb +15 -0
  272. data/app/views/thredded/private_topic_previews/preview.html.erb +1 -0
  273. data/app/views/thredded/private_topics/_breadcrumbs.html.erb +4 -0
  274. data/app/views/thredded/private_topics/_form.html.erb +39 -0
  275. data/app/views/thredded/private_topics/_header.html.erb +17 -0
  276. data/app/views/thredded/private_topics/_no_private_topics.html.erb +6 -0
  277. data/app/views/thredded/private_topics/_private_topic.html.erb +23 -0
  278. data/app/views/thredded/private_topics/edit.html.erb +35 -0
  279. data/app/views/thredded/private_topics/header/_participant.html.erb +1 -0
  280. data/app/views/thredded/private_topics/index.html.erb +32 -0
  281. data/app/views/thredded/private_topics/new.html.erb +11 -0
  282. data/app/views/thredded/private_topics/private_topic/_participant.html.erb +1 -0
  283. data/app/views/thredded/private_topics/show.html.erb +28 -0
  284. data/app/views/thredded/search/_form.html.erb +13 -0
  285. data/app/views/thredded/shared/_breadcrumbs.html.erb +6 -0
  286. data/app/views/thredded/shared/_content_moderation_blocked_state.html.erb +8 -0
  287. data/app/views/thredded/shared/_currently_online.html.erb +6 -0
  288. data/app/views/thredded/shared/_flash_messages.html.erb +7 -0
  289. data/app/views/thredded/shared/_header.html.erb +3 -0
  290. data/app/views/thredded/shared/_nav.html.erb +19 -0
  291. data/app/views/thredded/shared/_page.html.erb +15 -0
  292. data/app/views/thredded/shared/currently_online/_header.html.erb +5 -0
  293. data/app/views/thredded/shared/currently_online/_user_list.html.erb +3 -0
  294. data/app/views/thredded/shared/currently_online/_user_list_item.html.erb +6 -0
  295. data/app/views/thredded/shared/nav/_moderation.html.erb +14 -0
  296. data/app/views/thredded/shared/nav/_notification_preferences.html.erb +8 -0
  297. data/app/views/thredded/shared/nav/_private_topics.html.erb +12 -0
  298. data/app/views/thredded/shared/nav/_standalone.html.erb +12 -0
  299. data/app/views/thredded/shared/nav/_standalone_profile.html.erb +3 -0
  300. data/app/views/thredded/shared/preview.html.erb +10 -0
  301. data/app/views/thredded/theme_previews/_section_title.html.erb +3 -0
  302. data/app/views/thredded/theme_previews/show.html.erb +99 -0
  303. data/app/views/thredded/topic_previews/preview.html.erb +1 -0
  304. data/app/views/thredded/topics/_followers.html.erb +12 -0
  305. data/app/views/thredded/topics/_form.html.erb +32 -0
  306. data/app/views/thredded/topics/_header.html.erb +32 -0
  307. data/app/views/thredded/topics/_sticky_topics_divider.html.erb +1 -0
  308. data/app/views/thredded/topics/_topic.html.erb +47 -0
  309. data/app/views/thredded/topics/_topic_form_admin_options.html.erb +12 -0
  310. data/app/views/thredded/topics/edit.html.erb +50 -0
  311. data/app/views/thredded/topics/index.html.erb +35 -0
  312. data/app/views/thredded/topics/new.html.erb +12 -0
  313. data/app/views/thredded/topics/search.html.erb +39 -0
  314. data/app/views/thredded/topics/show.html.erb +46 -0
  315. data/app/views/thredded/users/_link.html.erb +14 -0
  316. data/app/views/thredded/users/_post.html.erb +6 -0
  317. data/app/views/thredded/users/_posts.html.erb +7 -0
  318. data/bin/rails +6 -0
  319. data/config/i18n-tasks.yml +16 -0
  320. data/config/locales/de.yml +257 -0
  321. data/config/locales/en.yml +253 -0
  322. data/config/locales/es.yml +257 -0
  323. data/config/locales/fr.yml +255 -0
  324. data/config/locales/it.yml +257 -0
  325. data/config/locales/pl.yml +257 -0
  326. data/config/locales/pt-BR.yml +258 -0
  327. data/config/locales/ru.yml +255 -0
  328. data/config/locales/zh-CN.yml +246 -0
  329. data/config/routes.rb +87 -0
  330. data/db/migrate/20160329231848_create_thredded.rb +257 -0
  331. data/db/seeds.rb +4 -0
  332. data/db/upgrade_migrations/20160611094616_upgrade_v0_5_to_v0_6.rb +28 -0
  333. data/db/upgrade_migrations/20160723012349_upgrade_v0_6_to_v0_7.rb +46 -0
  334. data/db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb +34 -0
  335. data/db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb +60 -0
  336. data/db/upgrade_migrations/20170125033319_upgrade_v0_9_to_v0_10.rb +36 -0
  337. data/db/upgrade_migrations/20170312131417_upgrade_thredded_v0_10_to_v0_11.rb +23 -0
  338. data/db/upgrade_migrations/20170420163138_upgrade_thredded_v0_11_to_v0_12.rb +28 -0
  339. data/db/upgrade_migrations/20170811090735_upgrade_thredded_v0_13_to_v_014.rb +21 -0
  340. data/lib/generators/thredded/install/USAGE +8 -0
  341. data/lib/generators/thredded/install/install_generator.rb +20 -0
  342. data/lib/generators/thredded/install/templates/initializer.rb +160 -0
  343. data/lib/tasks/thredded_tasks.rake +14 -0
  344. data/lib/thredded.rb +190 -0
  345. data/lib/thredded/base_migration.rb +14 -0
  346. data/lib/thredded/base_notifier.rb +28 -0
  347. data/lib/thredded/collection_to_strings_with_cache_renderer.rb +86 -0
  348. data/lib/thredded/content_formatter.rb +129 -0
  349. data/lib/thredded/database_seeder.rb +290 -0
  350. data/lib/thredded/db_tools.rb +103 -0
  351. data/lib/thredded/email_transformer.rb +22 -0
  352. data/lib/thredded/email_transformer/base.rb +47 -0
  353. data/lib/thredded/email_transformer/onebox.rb +21 -0
  354. data/lib/thredded/engine.rb +28 -0
  355. data/lib/thredded/errors.rb +68 -0
  356. data/lib/thredded/formatting_demo_content.rb +30 -0
  357. data/lib/thredded/html_pipeline/at_mention_filter.rb +78 -0
  358. data/lib/thredded/html_pipeline/autolink_filter.rb +15 -0
  359. data/lib/thredded/html_pipeline/kramdown_filter.rb +39 -0
  360. data/lib/thredded/html_pipeline/onebox_filter.rb +143 -0
  361. data/lib/thredded/html_pipeline/wrap_iframes_filter.rb +13 -0
  362. data/lib/thredded/version.rb +5 -0
  363. data/lib/thredded/view_hooks/config.rb +37 -0
  364. data/lib/thredded/view_hooks/renderer.rb +30 -0
  365. data/vendor/assets/javascripts/autosize.min.js +6 -0
  366. data/vendor/assets/javascripts/textcomplete.min.js +2 -0
  367. metadata +1035 -0
@@ -0,0 +1 @@
1
+ <%= @post.filtered_content(self) %>
@@ -0,0 +1,12 @@
1
+ <% if Thredded.show_topic_followers %>
2
+ <div class="thredded--topic-followers">
3
+ <% if topic.followers.present? %>
4
+ <%= t('thredded.topics.followed_by')%>
5
+ <% topic.followers.each do |user| %>
6
+ <%= user_mention(user) %>
7
+ <% end %>
8
+ <% else %>
9
+ <%= t('thredded.topics.followed_by_noone')%>
10
+ <% end %>
11
+ </div>
12
+ <% end %>
@@ -0,0 +1,32 @@
1
+ <%= form_for topic,
2
+ url: topic.submit_path,
3
+ html: {
4
+ class: "thredded--form thredded--new-topic-form #{local_assigns[:css_class]}",
5
+ 'data-thredded-topic-form' => true,
6
+ 'data-autocomplete-url' => autocomplete_users_path,
7
+ 'data-autocomplete-min-length' => Thredded.autocomplete_min_length,
8
+ } do |form| %>
9
+ <ul class="thredded--form-list on-top">
10
+ <li class="title">
11
+ <%= form.label :title, t('thredded.topics.form.title_label') %>
12
+ <%= form.text_field :title, placeholder: placeholder, required: true %>
13
+ </li>
14
+
15
+ <% if form.object.category_options.any? %>
16
+ <li class="category">
17
+ <%= form.select :category_ids,
18
+ form.object.category_options,
19
+ {},
20
+ { multiple: true, 'data-placeholder' => t('thredded.topics.form.categories_placeholder') } %>
21
+ </li>
22
+ <% end %>
23
+
24
+ <%= render 'thredded/posts_common/form/content',
25
+ form: form,
26
+ content_label: t('thredded.topics.form.content_label'),
27
+ preview_url: topic.preview_path %>
28
+ <%= render 'thredded/topics/topic_form_admin_options', form: form %>
29
+
30
+ <li><%= form.submit t('thredded.topics.form.create_btn'), class: 'thredded--form--submit' %></li>
31
+ </ul>
32
+ <% end %>
@@ -0,0 +1,32 @@
1
+ <header class="thredded--topic-header">
2
+ <h1 class="thredded--topic-header--title"><%= topic.title %></h1>
3
+ <cite class="thredded--topic-header--started-by">
4
+ <%= t 'thredded.topics.started_by_html',
5
+ time_ago: time_ago(topic.created_at),
6
+ user: user_link(topic.user) %>
7
+ </cite>
8
+ <% if topic.can_update? %>
9
+ <%= link_to t('thredded.topics.edit'), topic.edit_path,
10
+ class: 'thredded--topic-header--edit-topic',
11
+ rel: 'nofollow' %>
12
+ <% end %>
13
+ <% if thredded_current_user %>
14
+ <% if topic.followed? %>
15
+ <div class="thredded--topic-header--follow-info">
16
+ <span class="thredded--topic-header--follow-info--reason">
17
+ <%= topic_follow_reason_text topic.follow_reason %>
18
+ </span>
19
+ <%= button_to topic.unfollow_path, form: {class: 'thredded--topic-header--follow-info--unfollow'} do %>
20
+ <%= t('thredded.topics.unfollow') %>
21
+ <%= inline_svg 'thredded/follow.svg', class: 'thredded--topic-header--follow-icon' %>
22
+ <% end %>
23
+ </div>
24
+ <% else %>
25
+ <div class="thredded--topic-header--follow-info">
26
+ <%= button_to t('thredded.topics.follow'), topic.follow_path,
27
+ form: {class: 'thredded--topic-header--follow-info--follow'} %>
28
+ </div>
29
+ <% end %>
30
+ <% end %>
31
+ <%= render partial: 'thredded/topics/followers', locals: {topic: topic} %>
32
+ </header>
@@ -0,0 +1 @@
1
+ <hr class="thredded--topics--sticky-topics-divider">
@@ -0,0 +1,47 @@
1
+ <%= content_tag :article,
2
+ id: dom_id(topic),
3
+ class: ['thredded--topics--topic', topic_css_classes(topic)],
4
+ data: {topic: topic.id, messageboard: topic.messageboard_id} do %>
5
+ <div class="thredded--topics--posts-count"><%= topic.posts_count %></div>
6
+
7
+ <div class="thredded--topics--follow-info" title="<%= topic_follow_reason_text topic.follow_reason %>">
8
+ <svg class="thredded--topics--follow-icon" viewBox="0 0 116 121" role="img">
9
+ <% if topic.followed? %>
10
+ <use xlink:href="#thredded-follow-icon"></use>
11
+ <% else %>
12
+ <use xlink:href="#thredded-unfollow-icon"></use>
13
+ <% end %>
14
+ </svg>
15
+ </div>
16
+
17
+ <h1 class="thredded--topics--title">
18
+ <%= link_to topic.title, topic.path %>
19
+ </h1>
20
+
21
+ <% if topic.categories.any? %>
22
+ <ul class="thredded--topics--categories">
23
+ <%= render topic.categories %>
24
+ </ul>
25
+ <% end %>
26
+
27
+ <cite class="thredded--topics--updated-by">
28
+ <%= time_ago topic.last_post_at %>
29
+ <%= user_link topic.last_user %>
30
+ </cite>
31
+
32
+ <cite class="thredded--topics--started-by">
33
+ <%= time_ago topic.created_at %>
34
+ <%= user_link topic.user %>
35
+ </cite>
36
+
37
+ <% if topic.blocked? && topic.can_moderate? %>
38
+ <span class="thredded--topics--moderation-state thredded--alert thredded--alert-danger">
39
+ <%= render 'thredded/shared/content_moderation_blocked_state', moderation_record: topic.last_moderation_record %>
40
+ </span>
41
+ <% end %>
42
+ <% end %>
43
+
44
+ <% if local_assigns[:sticky_topics_divider] &&
45
+ !topic_iteration.last? && topic.sticky? && !topics[topic_counter + 1].sticky? %>
46
+ <%= render 'thredded/topics/sticky_topics_divider' %>
47
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <% topic = form.object.respond_to?(:topic) ? form.object.topic : form.object %>
2
+ <% if policy(topic).moderate? %>
3
+ <li class="thredded--form-list--admin-options">
4
+ <%= form.label :locked do %>
5
+ <%= form.check_box :locked %> <%= t 'thredded.topics.locked.label' %>
6
+ <% end %>
7
+
8
+ <%= form.label :sticky do %>
9
+ <%= form.check_box :sticky %> <%= t 'thredded.topics.sticky.label' %>
10
+ <% end %>
11
+ </li>
12
+ <% end %>
@@ -0,0 +1,50 @@
1
+ <% content_for :thredded_page_title, t('thredded.nav.edit_topic') %>
2
+ <% content_for :thredded_page_id, 'thredded--edit-topic' %>
3
+ <% content_for :thredded_breadcrumbs do %>
4
+ <ul class="thredded--navigation-breadcrumbs">
5
+ <li><%= link_to t('thredded.nav.all_messageboards'), messageboards_path %></li>
6
+ <li><%= link_to messageboard.name, @edit_topic.messageboard_path %></li>
7
+ <li><%= link_to @edit_topic.title, @edit_topic.path %></li>
8
+ <li><%= link_to t('thredded.nav.edit_topic'), @edit_topic.edit_path %></li>
9
+ </ul>
10
+ <% end %>
11
+
12
+ <%= thredded_page do %>
13
+ <section class="thredded--main-section">
14
+ <%= form_for @edit_topic,
15
+ url: @edit_topic.path,
16
+ html: { class: 'thredded--form thredded--is-expanded', 'data-thredded-topic-form' => true } do |form| %>
17
+ <ul class="thredded--form-list on-top">
18
+
19
+ <li class="title">
20
+ <%= form.label :title, t('thredded.topics.form.title_label') %>
21
+ <%= form.text_field :title,
22
+ placeholder: t('thredded.topics.form.title_placeholder'),
23
+ autofocus: true,
24
+ required: true %>
25
+ </li>
26
+
27
+ <% if form.object.category_options.any? %>
28
+ <li class="category">
29
+ <%= form.select :category_ids, form.object.category_options, {},
30
+ multiple: true,
31
+ 'data-placeholder' => t('thredded.topics.form.categories_placeholder') %>
32
+ </li>
33
+ <% end %>
34
+
35
+ <li>
36
+ <%= form.label :messageboard_id, t('thredded.topics.form.messageboard_label') %>
37
+ <%= form.select :messageboard_id, form.object.messageboard_options %>
38
+ </li>
39
+
40
+ <%= render 'thredded/topics/topic_form_admin_options', form: form %>
41
+
42
+ <li>
43
+ <button type="submit" class="thredded--form--submit">
44
+ <%= t('thredded.topics.form.update_btn') %>
45
+ </button>
46
+ </li>
47
+ <% end %>
48
+ </ul>
49
+ </section>
50
+ <% end %>
@@ -0,0 +1,35 @@
1
+ <% content_for :thredded_page_title, messageboard.name %>
2
+ <% content_for :thredded_page_id, 'thredded--topics-index' %>
3
+ <% content_for :thredded_breadcrumbs, render('thredded/shared/breadcrumbs') %>
4
+
5
+ <%= thredded_page do %>
6
+ <div class="thredded--svg-definitions ">
7
+ <%= inline_svg 'thredded/follow.svg', id: 'thredded-follow-icon', title: nil %>
8
+ <%= inline_svg 'thredded/unfollow.svg', id: 'thredded-unfollow-icon' %>
9
+ </div>
10
+
11
+ <%= content_tag :section, class: 'thredded--main-section thredded--topics', 'data-thredded-topics' => true do %>
12
+ <%= render 'thredded/topics/form',
13
+ topic: @new_topic,
14
+ css_class: 'thredded--is-compact',
15
+ placeholder: t('thredded.topics.form.title_placeholder_start') if @new_topic %>
16
+ <%= render partial: 'thredded/topics/topic',
17
+ collection: @topics,
18
+ locals: {
19
+ sticky_topics_divider: true,
20
+ topics: @topics
21
+ } %>
22
+ <% end %>
23
+
24
+ <footer class="thredded--pagination-bottom">
25
+ <%= paginate @topics %>
26
+ </footer>
27
+
28
+ <div class="thredded--messageboards--actions">
29
+ <% if policy(messageboard).update? %>
30
+ <a class="thredded--button" href="<%= edit_messageboard_path(messageboard) %>" rel="nofollow">
31
+ <%= t('thredded.nav.edit_messageboard') %>
32
+ </a>
33
+ <% end %>
34
+ </div>
35
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <% content_for :thredded_page_title, t('thredded.topics.create') %>
2
+ <% content_for :thredded_page_id, 'thredded--new-topic' %>
3
+ <% content_for :thredded_breadcrumbs, render('thredded/shared/breadcrumbs') %>
4
+
5
+ <%= thredded_page do %>
6
+ <section class="thredded--main-section">
7
+ <%= render 'thredded/topics/form',
8
+ topic: @new_topic,
9
+ css_class: 'thredded--is-expanded',
10
+ placeholder: t('thredded.topics.form.title_placeholder_start') %>
11
+ </section>
12
+ <% end %>
@@ -0,0 +1,39 @@
1
+ <% content_for :thredded_page_title, t('thredded.topics.search.page_title') %>
2
+ <% content_for :thredded_page_id, 'thredded--topic-search-results' %>
3
+ <% content_for :thredded_breadcrumbs, render('thredded/shared/breadcrumbs') %>
4
+
5
+ <%= thredded_page do %>
6
+ <% if @topics.present? %>
7
+ <p class="thredded--alert thredded--alert-success">
8
+ <% if messageboard_or_nil %>
9
+ <%= t 'thredded.topics.search.results_in_messageboard_message_html',
10
+ query: @query, messageboard: messageboard.name %>
11
+ <br>
12
+ <a href="<%= messageboards_search_path(q: @query) %>">
13
+ <%= t('thredded.topics.search.search_in_all_messageboards_btn') -%>
14
+ </a>
15
+ <% else %>
16
+ <%= t 'thredded.topics.search.results_message_html', query: @query %>
17
+ <% end %>
18
+ </p>
19
+ <section class="thredded--main-section thredded--topics">
20
+ <%= render @topics %>
21
+ </section>
22
+ <footer class="thredded--pagination-bottom">
23
+ <%= paginate @topics %>
24
+ </footer>
25
+ <% else %>
26
+ <p class="thredded--alert thredded--alert-danger">
27
+ <% if messageboard_or_nil %>
28
+ <%= t 'thredded.topics.search.no_results_in_messageboard_message_html',
29
+ query: @query, messageboard: messageboard.name -%>
30
+ <br>
31
+ <a href="<%= messageboards_search_path(q: @query) %>">
32
+ <%= t('thredded.topics.search.search_in_all_messageboards_btn') -%>
33
+ </a>
34
+ <% else %>
35
+ <%= t 'thredded.topics.search.no_results_message_html', query: @query %>
36
+ <% end %>
37
+ </p>
38
+ <% end %>
39
+ <% end %>
@@ -0,0 +1,46 @@
1
+ <% topic = @posts.topic %>
2
+ <% content_for :thredded_page_title, topic.title %>
3
+ <% content_for :thredded_page_id, 'thredded--topic-show' %>
4
+ <% content_for :thredded_breadcrumbs, render('thredded/shared/breadcrumbs') %>
5
+
6
+ <%= thredded_page do %>
7
+ <%= content_tag :section,
8
+ id: dom_id(topic),
9
+ class: ['thredded--main-section', 'thredded--topic', *topic_css_classes(topic)] do %>
10
+
11
+ <%= render 'thredded/topics/header', topic: topic %>
12
+ <%= view_hooks.posts_common.pagination_top.render(self, posts: @posts) do %>
13
+ <footer class="thredded--pagination-top"><%= paginate @posts %></footer>
14
+ <% end %>
15
+ <%= render_posts @posts,
16
+ partial: 'thredded/posts/post',
17
+ content_partial: 'thredded/posts/content',
18
+ locals: { actions: { quote: true } } %>
19
+ <%= view_hooks.posts_common.pagination_bottom.render(self, posts: @posts) do %>
20
+ <footer class="thredded--pagination-bottom"><%= paginate @posts %></footer>
21
+ <% end %>
22
+
23
+ <% if topic.locked? %>
24
+ <p class="thredded--topic--locked-notice"><%= t 'thredded.topics.locked.message'%></p>
25
+ <% end %>
26
+
27
+ <% if policy(@new_post.post).create? %>
28
+ <div class="thredded--post-form--wrapper">
29
+ <h3 class="thredded--post-form--title"><%= t('thredded.posts.form.title_label') %></h3>
30
+ <%= render 'thredded/posts/form',
31
+ post: @new_post,
32
+ button_text: t('thredded.posts.form.create_btn'),
33
+ button_submitting_text: t('thredded.posts.form.create_btn_submitting') %>
34
+ </div>
35
+ <% end %>
36
+
37
+ <% if topic.can_destroy? %>
38
+ <div class="thredded--topic-delete--wrapper">
39
+ <%= button_to t('thredded.topics.delete_topic'), topic.destroy_path, method: :delete,
40
+ form_class: 'thredded--topic-delete-form',
41
+ class: 'thredded--button',
42
+ 'data-confirm' => t('thredded.topics.delete_confirm') %>
43
+ </div>
44
+ <% end %>
45
+ <% end %>
46
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <% if user %>
2
+ <% if !user.thredded_anonymous? %>
3
+ <% user_path = user_path(user) %>
4
+ <% if user_path.blank? %>
5
+ <span class='thredded--username'><%= user.thredded_display_name %></span>
6
+ <% else %>
7
+ <a href="<%= user_path %>"><%= user.thredded_display_name %></a>
8
+ <% end %>
9
+ <% else %>
10
+ <%= user.thredded_display_name %>
11
+ <% end %>
12
+ <% else %>
13
+ <em><%= t 'thredded.null_user_name' %></em>
14
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <% post, content = post_and_content if local_assigns.key?(:post_and_content) %>
2
+ <%= content_tag :article, id: dom_id(post), class: 'thredded--post' do %>
3
+ <%= render 'thredded/posts_common/actions', post: post %>
4
+ <%= render 'thredded/posts_common/header_with_topic', post: post %>
5
+ <%= content || render('thredded/posts/content', post: post) %>
6
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <%#
2
+ This partial can be called from the parent app to render the user's posts.
3
+ The parent view context that renders this partial must include Thredded::ApplicationHelper.
4
+ TODO: Use a Cell instead. https://github.com/apotonick/cells
5
+ %>
6
+ <%# @param posts [Thredded::PostsPageView] %>
7
+ <%= render_posts posts, partial: 'thredded/users/post', content_partial: 'thredded/posts/content' %>
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ APP_PATH = File.expand_path('../../spec/dummy/config/application', __FILE__)
5
+ require File.expand_path('../../spec/dummy/config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,16 @@
1
+ # i18n-tasks finds and manages missing and unused translations
2
+ # See https://github.com/glebm/i18n-tasks/blob/master/templates/config/i18n-tasks.yml
3
+
4
+ # Do not consider these keys missing:
5
+ ignore_missing:
6
+ # The kaminari gem keys
7
+ - views.pagination.*
8
+
9
+ search:
10
+ paths:
11
+ - app/
12
+ - lib/
13
+ data:
14
+ yaml:
15
+ write:
16
+ line_width: 110
@@ -0,0 +1,257 @@
1
+ ---
2
+ de:
3
+ thredded:
4
+ content_moderation_states:
5
+ content_blocked_notice: Blockiert
6
+ content_blocked_notice_with_record_html: Blockiert von %{moderator} %{time_ago}
7
+ email_notifier:
8
+ by_email: Per E-mail
9
+ emails:
10
+ message_notification:
11
+ html:
12
+ email_sent_reason_html: >-
13
+ Sie erhalten diese E-Mail, da %{user} Sie zu einer privaten Diskussion hinzugefügt hat, “<a href="%{post_url}">%{topic_title}</a>”.
14
+ post_lead_html: 'Eine neue Nachricht von %{user} in <a href="%{post_url}">“%{topic_title}”</a>:'
15
+ unsubscribe_instructions_html: :thredded.emails.post_notification.html.unsubscribe_instructions_html
16
+ subject: Neue Nachricht von %{user} in “%{topic_title}”
17
+ text:
18
+ email_sent_reason: |-
19
+ Sie erhalten diese E-Mail, da %{user} Sie zu einer privaten Diskussion
20
+ “%{topic_title}” hinzugefügt hat.
21
+
22
+ Klicken sie hier um die Diskussion zu sehen:
23
+ %{post_url}
24
+ post_lead: Neue Nachricht von %{user} in “%{topic_title}”
25
+ unsubscribe_instructions: :thredded.emails.post_notification.text.unsubscribe_instructions
26
+ post_notification:
27
+ html:
28
+ email_sent_reason_html: 'Sie erhalten diese E-Mail, da Sie der folgenden Diskussion folgen: “<a href="%{post_url}">%{topic_title}</a>”.'
29
+ post_lead_html: '%{user} <a href="%{post_url}">schrieb in “%{topic_title}”</a>:'
30
+ unsubscribe_instructions_html: >-
31
+ Um keine weiteren E-Mails zu erhalten, ändern Sie hier ihre <a href="%{preferences_url}">Benachrichtigungseinstellungen</a>.
32
+ subject: Ein neuer Beitrag in “%{topic_title}”
33
+ text:
34
+ email_sent_reason: |-
35
+ Sie erhalten diese E-Mail, da Sie der folgenden Diskussion
36
+ “%{topic_title}” folgen.
37
+
38
+ Klicken sie hier um die Diskussion zu sehen:
39
+ %{post_url}
40
+ post_lead: "%{user} schrieb in “%{topic_title}”:"
41
+ unsubscribe_instructions: |-
42
+ Um keine weiteren E-Mails zu erhalten, ändern Sie hier ihre Benachrichtigungseinstellungen:
43
+ %{unsubscribe_url}
44
+ errors:
45
+ login_required: Bitte zuerst anmelden
46
+ not_authorized: Du hast keinen Zugriff auf diese Seite
47
+ private_topic_create_denied: Du bist nicht autorisiert, private Unterhaltungen zu erstellen
48
+ private_topic_not_found: Diese private Unterhaltung existiert nicht
49
+ form:
50
+ create_btn_submitting: Erstellen...
51
+ preview: Vorschau
52
+ update: Änderungen übernehmen
53
+ update_btn_submitting: Änderungen übernehmen...
54
+ messageboard:
55
+ create: Erstelle ein neues Forum
56
+ form:
57
+ create_btn_submitting: :thredded.form.create_btn_submitting
58
+ description_label: Beschreibung
59
+ locked_label: Geschlossen
60
+ locked_notice: Dieses Forum ist geschlossen. Nur Moderatoren können hier neue Beiträge erstellen.
61
+ messageboard_group_id_label: Gruppe
62
+ no_group: Keine Gruppe
63
+ title_label: Name
64
+ update_btn_submitting: :thredded.form.update_btn_submitting
65
+ index:
66
+ page_title: Forum
67
+ last_updated_by_html: Letzter Beitrag %{time_ago} <cite>von %{user}</cite>
68
+ topics_and_posts_counts: "%{topics_count} Diskussionen / %{posts_count} Beiträge"
69
+ update: :thredded.form.update
70
+ updated_notice: Das Forum wurde aktualisiert
71
+ messageboard_first_topic:
72
+ content: |-
73
+ There's not a whole lot here for now.
74
+
75
+ These forums are powered by [Thredded](https://github.com/thredded/thredded) v%{thredded_version}.
76
+ You can contact the Thredded team via the [Thredded chat room](https://gitter.im/thredded/thredded).
77
+ Please let us know that you are using Thredded by tweeting [@thredded](https://twitter.com/thredded)!
78
+ title: Welcome to your messageboard's very first thread
79
+ messageboard_group:
80
+ create: Erstelle eine neue Gruppe
81
+ form:
82
+ create_btn_submitting: :thredded.form.create_btn_submitting
83
+ saved: Die Gruppe %{name} wurde erstellt
84
+ moderation:
85
+ approve_btn: Erlauben
86
+ block_btn: Blockieren
87
+ moderation_state:
88
+ name: Moderationsstatus
89
+ pending:
90
+ empty:
91
+ content: Alle Beiträge wurden moderiert
92
+ title: Gute Arbeit!
93
+ post_approved_html: Beitrag wurde von %{moderator} %{time_ago} erlaubt
94
+ post_blocked_html: Beitrag wurde von %{moderator} %{time_ago} blockiert
95
+ post_deleted_notice: Dieser Beitrag wurde gelöscht
96
+ posts_content_changed_since_moderation_html: >-
97
+ Der Beitrag <a href="%{post_url}">post's</a> wurde in seinem Inhalt geändert. Unten wird der ursprüngliche
98
+ Beitrag angezeigt.
99
+ search_users:
100
+ form_label: Benutzer suchen
101
+ form_placeholder: :thredded.moderation.search_users.form_label
102
+ no_results_message: Keine Nutzer mit dem Inhalt %{query} gefunden
103
+ results_message: Nutzer mit dem Inhalt %{query} gefunden
104
+ user:
105
+ name: Benutzer
106
+ nav:
107
+ all_messageboards: Forenübersicht
108
+ edit_messageboard: Forum bearbeiten
109
+ edit_post: Beitrag bearbeiten
110
+ edit_private_topic: :thredded.nav.edit_topic
111
+ edit_topic: Bearbeiten
112
+ mark_all_read: Alles als gelesen markieren
113
+ moderation: Verwaltung
114
+ moderation_activity: Aktivität
115
+ moderation_history: Verlauf
116
+ moderation_pending: Ausstehend
117
+ moderation_users: Nutzer
118
+ private_topics: Private Unterhaltungen
119
+ settings: Benachrichtigungseinstellungen
120
+ null_user_name: Gelöschte Nutzer
121
+ posts:
122
+ delete: Beitrag gelöscht
123
+ delete_confirm: Bist du sicher, dass du diesen Beitrag löschen willst?
124
+ deleted_notice: Dein Beitrag wurde gelöscht
125
+ edit: :thredded.nav.edit_post
126
+ form:
127
+ content_label: Inhalt
128
+ create_btn: Beitrag erstellen
129
+ create_btn_submitting: Beitragen...
130
+ title_label: Erstelle einen neuen Beitrag
131
+ update_btn: Beitrag ändern
132
+ update_btn_submitting: :thredded.form.update_btn_submitting
133
+ pending_moderation_notice: Dein Beitrag wird veröffentlicht, sobald ein Moderator ihn angeschaut hat.
134
+ quote_btn: Zitat
135
+ preferences:
136
+ edit:
137
+ page_title: :thredded.nav.settings
138
+ form:
139
+ auto_follow_topics:
140
+ hint: Automatisch allen neuen Diskussionen folgen. Das Ändern dieser Einstellung wird alle Foren betreffen.
141
+ label: Allen Diskussionen folgen
142
+ follow_topics_on_mention:
143
+ hint: 'Wenn dich jemand mit deinem Nutzernamen erwähnt (eg: @sam) wirst du dem Beitrag folgen.'
144
+ label: Allen Diskussionen folgen, in denen du erwähnt wurdest
145
+ messageboard_auto_follow_topics:
146
+ hint: >-
147
+ Folge automatisch allen neuen Diskussionen in diesem Forum. Dies überschreibt die jeweiligen Einstellungen
148
+ weiter oben.
149
+ label: Folge allen neuen Diskussionen
150
+ messageboard_follow_topics_on_mention:
151
+ hint: 'Wenn jemand deinen Nutzernamen (eg: @sam) in diesem Forum erwähnt, wirst du der Diskussion folgen.'
152
+ label: :thredded.preferences.form.follow_topics_on_mention.label
153
+ messageboard_notifications_for_followed_topics:
154
+ label: :thredded.preferences.form.notifications_for_followed_topics.label
155
+ notifications_for_followed_topics:
156
+ label: Benachrichtigung für Diskussionen, denen du folgst
157
+ notifications_for_private_topics:
158
+ label: Benachrichtigung für private Unterhaltungen
159
+ submit_btn: Einstellungen bearbeiten
160
+ update_btn_submitting: :thredded.form.update_btn_submitting
161
+ global_preferences_title: Allgemeine Einstellungen
162
+ messageboard_preferences_nav_title: Forum bearbeiten
163
+ messageboard_preferences_title_html: Einstellungen für <em>%{messageboard}</em>
164
+ updated_notice: Deine Einstellungen sind jetzt gültig
165
+ private_posts:
166
+ form:
167
+ content_label: Nachricht
168
+ create_btn: Nchricht senden
169
+ create_btn_submitting: Senden...
170
+ update_btn_submitting: :thredded.form.update_btn_submitting
171
+ private_topics:
172
+ create: :thredded.private_topics.form.create_btn
173
+ edit: Bearbeiten
174
+ errors:
175
+ user_ids_length: Bitte nenne mindestens einen anderen Nutzer
176
+ form:
177
+ content_label: :thredded.private_posts.form.content_label
178
+ create_btn: :thredded.private_posts.form.create_btn
179
+ create_btn_submitting: :thredded.private_posts.form.create_btn_submitting
180
+ title_label: :thredded.topics.form.title_label
181
+ title_placeholder_new: Nenne das Thema der Unterhaltung
182
+ title_placeholder_start: Starte eine neue Unterhaltung
183
+ update_btn: Aktualisieren
184
+ update_btn_submitting: :thredded.private_posts.form.update_btn_submitting
185
+ users_label: Teilnehmer
186
+ users_placeholder: Lade Nutzer ein, an dieser Unterhaltung teilzunehmen
187
+ no_private_topics:
188
+ create_btn: Starte deine erste private Unterhaltung
189
+ title: Du hast keine privaten Nachrichten
190
+ updated_notice: Überschrift bearbeitet
191
+ recent_activity: Letzte Aktivität
192
+ search:
193
+ form:
194
+ btn_submit: :thredded.search.form.label
195
+ label: Suche
196
+ placeholder: Foren durchsuchen
197
+ time_ago: 'vor %{time} '
198
+ topics:
199
+ create: :thredded.topics.form.create_btn
200
+ delete_confirm: >-
201
+ Bist du sicher, dass du diese Diskussion endgültig löschen möchtest? Dies kann nicht rückgängig gemacht
202
+ werden.
203
+ delete_topic: Diskussion löschen
204
+ deleted_notice: Diskussion gelöscht
205
+ edit: Diskussion bearbeiten
206
+ follow: Folge dieser Diskussion
207
+ followed_by: 'gefolgt von:'
208
+ followed_by_noone: Die Diskussion wird von Niemandem verfolgt
209
+ followed_notice: Du folgst der Diskussion
210
+ following:
211
+ auto: Du folgst dieser Diskussion, da automatisches Folgen aktiviert ist
212
+ manual: Du folgst dieser Diskussion
213
+ mentioned: Du folgst dieser Diskussion, da du in ihr erwähnt wurdest
214
+ posted: Du folgst dieser Diskussion, da du diese kommentiert hast
215
+ form:
216
+ categories_placeholder: Kategorien
217
+ content_label: :thredded.posts.form.content_label
218
+ create_btn: Erstelle eine neue Diskussion
219
+ messageboard_label: Forum
220
+ title_label: Titel
221
+ title_placeholder: :thredded.topics.form.title_label
222
+ title_placeholder_start: Starte eine neue Diskussion
223
+ update_btn: Beitrag bearbeiten
224
+ locked:
225
+ label: Gesperrt
226
+ message: Der Beitrag wurde von einem Moderator gesperrt
227
+ mark_as_unread: Als ungelesen markieren
228
+ not_following: Du folgst dieser Diskussion nicht
229
+ search:
230
+ no_results_in_messageboard_message_html: Deine Suche nach <q>%{query}</q> in %{messageboard} hat keine Ergebnisse
231
+ erzielt
232
+ no_results_message_html: Deine Suche nach <q>%{query}</q> erzielte keine Treffer
233
+ page_title: Suchergebnisse
234
+ results_in_messageboard_message_html: Suchergebnisse für <q>%{query}</q> in %{messageboard}
235
+ results_message_html: Suchergebnisse für <q>%{query}</q>
236
+ search_in_all_messageboards_btn: Suche überall
237
+ started_by_html: Gestartet %{time_ago} von %{user}
238
+ sticky:
239
+ label: Angepinnt
240
+ unfollow: Nich mehr folgen
241
+ unfollowed_notice: Du folgst der Diskussion nicht mehr
242
+ updated_notice: Beitrag aktualisiert
243
+ users:
244
+ currently_online: Zurzeit Online
245
+ last_active_html: Zuletzt aktiv %{time_ago}
246
+ posted_in_topic_html: Hochgeladen in %{topic_link}
247
+ posts_count:
248
+ one: Einmalig hochgeladen
249
+ other: "%{count} -mal hochgeladen"
250
+ recent_activity: :thredded.recent_activity
251
+ started_topic_html: "%{topic_link} gestartet"
252
+ started_topics_count:
253
+ one: Eine Diskussion gestartet
254
+ other: "%{count} Diskussionen gestartet"
255
+ user_posted_in_topic_html: "%{user_link} hochgeladen in %{topic_link}"
256
+ user_since_html: Nutzer seit %{time_ago}
257
+ user_started_topic_html: "%{user_link} hat %{topic_link} gestartet"