elabs 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +9 -0
  3. data/.node-version +1 -1
  4. data/.rubocop.yml +4 -0
  5. data/.stylelintrc.yml +12 -2
  6. data/CHANGELOG.md +81 -12
  7. data/Gemfile +1 -1
  8. data/Gemfile.lock +96 -94
  9. data/README.md +2 -0
  10. data/ROADMAP.md +4 -2
  11. data/app/assets/config/elabs_manifest.js +2 -1
  12. data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.eot +0 -0
  13. data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.svg +1148 -0
  14. data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.ttf +0 -0
  15. data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.woff +0 -0
  16. data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.woff2 +0 -0
  17. data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.eot +0 -0
  18. data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.svg +467 -0
  19. data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.ttf +0 -0
  20. data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.woff +0 -0
  21. data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.woff2 +0 -0
  22. data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.eot +0 -0
  23. data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.svg +2231 -0
  24. data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.ttf +0 -0
  25. data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.woff +0 -0
  26. data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.woff2 +0 -0
  27. data/app/assets/fonts/elabs/OpenSans/Apache License.txt +201 -0
  28. data/app/assets/fonts/elabs/OpenSans/OpenSans-Bold.ttf +0 -0
  29. data/app/assets/fonts/elabs/OpenSans/OpenSans-Light.ttf +0 -0
  30. data/app/assets/fonts/elabs/OpenSans/OpenSans-Regular.ttf +0 -0
  31. data/app/assets/fonts/elabs/OpenSans/OpenSans-Semibold.ttf +0 -0
  32. data/app/assets/fonts/elabs/license-icons/license-icons.eot +0 -0
  33. data/app/assets/fonts/elabs/license-icons/license-icons.svg +51 -0
  34. data/app/assets/fonts/elabs/license-icons/license-icons.ttf +0 -0
  35. data/app/assets/fonts/elabs/license-icons/license-icons.woff +0 -0
  36. data/app/assets/fonts/elabs/license-icons/license-icons.woff2 +0 -0
  37. data/app/assets/images/elabs/preview_placeholder.png +0 -0
  38. data/app/assets/images/elabs/preview_placeholder_nsfw.png +0 -0
  39. data/app/assets/javascripts/elabs/announcements.js +33 -0
  40. data/app/assets/javascripts/elabs/application.js.erb +17 -14
  41. data/app/assets/javascripts/elabs/forms.js +0 -1
  42. data/app/assets/javascripts/elabs/helpers-markdown.js +2 -2
  43. data/app/assets/javascripts/elabs/helpers.js +17 -0
  44. data/app/assets/javascripts/elabs/menu.js +5 -0
  45. data/app/assets/stylesheets/elabs/_fonts.scss +32 -0
  46. data/app/assets/stylesheets/elabs/_variables.scss +286 -5
  47. data/app/assets/stylesheets/elabs/app/components/_act.scss +83 -0
  48. data/app/assets/stylesheets/elabs/app/components/_announcement.scss +41 -0
  49. data/app/assets/stylesheets/elabs/app/components/_classifier_types.scss +43 -0
  50. data/app/assets/stylesheets/elabs/app/components/_comment.scss +29 -0
  51. data/app/assets/stylesheets/elabs/app/components/_content_relations.scss +53 -0
  52. data/app/assets/stylesheets/elabs/app/components/_content_statuses.scss +39 -0
  53. data/app/assets/stylesheets/elabs/app/components/_content_types.scss +41 -0
  54. data/app/assets/stylesheets/elabs/app/components/_git_cards.scss +122 -0
  55. data/app/assets/stylesheets/elabs/app/elements/_alerts.scss +3 -0
  56. data/app/assets/stylesheets/elabs/app/elements/_badges.scss +17 -0
  57. data/app/assets/stylesheets/elabs/app/elements/_buttons.scss +34 -0
  58. data/app/assets/stylesheets/elabs/app/elements/_dropdowns.scss +78 -0
  59. data/app/assets/stylesheets/elabs/app/elements/_empty.scss +31 -0
  60. data/app/assets/stylesheets/elabs/app/elements/_errors.scss +15 -0
  61. data/app/assets/stylesheets/elabs/app/elements/_filter_link.scss +23 -0
  62. data/app/assets/stylesheets/elabs/app/elements/_fixed_links.scss +19 -0
  63. data/app/assets/stylesheets/elabs/app/elements/_forms.scss +123 -0
  64. data/app/assets/stylesheets/elabs/app/elements/_icons.scss +74 -0
  65. data/app/assets/stylesheets/elabs/app/{_medias.scss → elements/_medias.scss} +2 -0
  66. data/app/assets/stylesheets/elabs/app/{_modals.scss → elements/_modals.scss} +8 -4
  67. data/app/assets/stylesheets/elabs/app/elements/_nsfw.scss +41 -0
  68. data/app/assets/stylesheets/elabs/app/{_pagination.scss → elements/_pagination.scss} +0 -0
  69. data/app/assets/stylesheets/elabs/app/{_tables.scss → elements/_tables.scss} +2 -2
  70. data/app/assets/stylesheets/elabs/app/elements/_tabs.scss +73 -0
  71. data/app/assets/stylesheets/elabs/app/helpers/_cards.scss +80 -0
  72. data/app/assets/stylesheets/elabs/app/helpers/_containers.scss +7 -0
  73. data/app/assets/stylesheets/elabs/app/helpers/_states.scss +3 -0
  74. data/app/assets/stylesheets/elabs/app/{_helpers.scss → helpers/_typo.scss} +6 -4
  75. data/app/assets/stylesheets/elabs/app/layouts/_acts.scss +25 -0
  76. data/app/assets/stylesheets/elabs/app/layouts/_classifiers.scss +32 -0
  77. data/app/assets/stylesheets/elabs/app/{_comments.scss → layouts/_comments.scss} +0 -2
  78. data/app/assets/stylesheets/elabs/app/layouts/_devise.scss +65 -0
  79. data/app/assets/stylesheets/elabs/app/layouts/_layout.scss +40 -0
  80. data/app/assets/stylesheets/elabs/app/layouts/_page.scss +14 -0
  81. data/app/assets/stylesheets/elabs/app/layouts/_page_content.scss +13 -0
  82. data/app/assets/stylesheets/elabs/app/layouts/_page_footer.scss +20 -0
  83. data/app/assets/stylesheets/elabs/app/layouts/_page_header.scss +146 -0
  84. data/app/assets/stylesheets/elabs/app/layouts/_page_menu.scss +232 -0
  85. data/app/assets/stylesheets/elabs/app/layouts/_page_messages.scss +4 -0
  86. data/app/assets/stylesheets/elabs/app/layouts/_private_layout.scss +78 -0
  87. data/app/assets/stylesheets/elabs/app/{_typo.scss → layouts/_typo.scss} +3 -0
  88. data/app/assets/stylesheets/elabs/app/mixins/_classifier_card.scss +43 -0
  89. data/app/assets/stylesheets/elabs/app/mixins/_content_card.scss +103 -0
  90. data/app/assets/stylesheets/elabs/app/mixins/_content_full.scss +158 -0
  91. data/app/assets/stylesheets/elabs/app/mixins/{_content-inline.scss → _content_inline.scss} +0 -0
  92. data/app/assets/stylesheets/elabs/lib/_codemirror.scss +2 -2
  93. data/app/assets/stylesheets/elabs/{_colors.scss → lib/_colors_reference.scss} +0 -52
  94. data/app/assets/stylesheets/elabs/lib/_license_icons.scss +121 -0
  95. data/app/assets/stylesheets/elabs/lib/fontawesome/_fontawesome.scss +1 -1
  96. data/app/assets/stylesheets/elabs/lib/fontawesome/_fonts.scss +18 -18
  97. data/app/assets/stylesheets/elabs/lib/knacss/_knacss.scss +1 -1
  98. data/app/assets/stylesheets/elabs/lib/knacss/_knacss_variables.scss +227 -0
  99. data/app/assets/stylesheets/elabs/style.scss +62 -57
  100. data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
  101. data/app/controllers/elabs/admin/announcements_controller.rb +71 -0
  102. data/app/controllers/elabs/concerns/elabs_controller.rb +3 -0
  103. data/app/controllers/elabs/content_application_controller.rb +4 -0
  104. data/app/controllers/elabs/elabs_public_controller.rb +15 -0
  105. data/app/controllers/elabs/languages_controller.rb +1 -5
  106. data/app/controllers/elabs/member/comments_controller.rb +42 -0
  107. data/app/controllers/elabs/member/member_application_controller.rb +1 -1
  108. data/app/controllers/elabs/reports_controller.rb +2 -0
  109. data/app/helpers/elabs/acts_helper.rb +7 -2
  110. data/app/helpers/elabs/application_helper.rb +8 -50
  111. data/app/helpers/elabs/content_filters_helper.rb +17 -24
  112. data/app/helpers/elabs/content_helper.rb +8 -35
  113. data/app/helpers/elabs/content_renderer_helper.rb +4 -112
  114. data/app/helpers/elabs/form_helper.rb +11 -11
  115. data/app/helpers/elabs/icons_helper.rb +63 -0
  116. data/app/helpers/elabs/{admin_content_helper.rb → links_admin_helper.rb} +1 -1
  117. data/app/helpers/elabs/links_helper.rb +58 -0
  118. data/app/helpers/elabs/{member_content_helper.rb → links_member_helper.rb} +2 -2
  119. data/app/helpers/elabs/notification_helper.rb +17 -3
  120. data/app/helpers/elabs/shortcodes_helper.rb +108 -0
  121. data/app/helpers/elabs/thumbnails_helper.rb +1 -1
  122. data/app/models/elabs/album.rb +14 -0
  123. data/app/models/elabs/announcement.rb +33 -0
  124. data/app/models/elabs/article.rb +14 -0
  125. data/app/models/elabs/comment.rb +10 -4
  126. data/app/models/elabs/note.rb +14 -0
  127. data/app/models/elabs/project.rb +12 -0
  128. data/app/models/elabs/report.rb +1 -0
  129. data/app/models/elabs/upload.rb +16 -0
  130. data/app/models/elabs/user.rb +2 -1
  131. data/app/views/elabs/acts/_filters.html.haml +3 -2
  132. data/app/views/elabs/acts/index.html.haml +2 -13
  133. data/app/views/elabs/admin/announcements/_announcement.json.jbuilder +10 -0
  134. data/app/views/elabs/admin/announcements/_form.html.haml +52 -0
  135. data/app/views/elabs/admin/announcements/edit.html.haml +3 -0
  136. data/app/views/elabs/admin/announcements/index.html.haml +28 -0
  137. data/app/views/elabs/admin/announcements/index.json.jbuilder +1 -0
  138. data/app/views/elabs/admin/announcements/new.html.haml +3 -0
  139. data/app/views/elabs/admin/licenses/index.html.haml +2 -2
  140. data/app/views/elabs/admin/uploads/_upload.json.jbuilder +3 -3
  141. data/app/views/elabs/albums/_card_content.html.haml +8 -0
  142. data/app/views/elabs/albums/_filters.html.haml +5 -3
  143. data/app/views/elabs/albums/index.html.haml +1 -1
  144. data/app/views/elabs/albums/show.html.haml +38 -29
  145. data/app/views/elabs/articles/_filters.html.haml +5 -3
  146. data/app/views/elabs/articles/index.html.haml +1 -1
  147. data/app/views/elabs/articles/show.html.haml +33 -25
  148. data/app/views/elabs/auth/confirmations/new.html.haml +1 -1
  149. data/app/views/elabs/auth/passwords/edit.html.haml +1 -1
  150. data/app/views/elabs/auth/passwords/new.html.haml +1 -1
  151. data/app/views/elabs/auth/registrations/new.html.haml +7 -2
  152. data/app/views/elabs/auth/sessions/_new.html.haml +1 -1
  153. data/app/views/elabs/auth/unlocks/new.html.haml +1 -1
  154. data/app/views/elabs/comments/_comments.html.haml +29 -20
  155. data/app/views/elabs/comments/_form.html.haml +40 -36
  156. data/app/views/elabs/languages/_filters.html.haml +3 -5
  157. data/app/views/elabs/languages/index.html.haml +12 -13
  158. data/app/views/elabs/languages/show.html.haml +36 -31
  159. data/app/views/elabs/layouts/_announcements.html.haml +9 -0
  160. data/app/views/elabs/layouts/_content_associations.html.haml +89 -0
  161. data/app/views/elabs/layouts/_content_card.html.haml +41 -0
  162. data/app/views/elabs/layouts/_flash_messages.html.haml +4 -0
  163. data/app/views/elabs/layouts/_footer.html.haml +18 -10
  164. data/app/views/elabs/layouts/_form_honeypot.html.haml +12 -0
  165. data/app/views/elabs/layouts/_hidden_entry.html.haml +1 -1
  166. data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -2
  167. data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +1 -1
  168. data/app/views/elabs/layouts/_language_menu.html.haml +2 -2
  169. data/app/views/elabs/layouts/_menu.html.haml +58 -75
  170. data/app/views/elabs/layouts/_menu_admin.html.haml +40 -0
  171. data/app/views/elabs/layouts/_menu_member.html.haml +57 -0
  172. data/app/views/elabs/layouts/application.html.haml +24 -13
  173. data/app/views/elabs/layouts/application_admin.html.haml +33 -0
  174. data/app/views/elabs/layouts/application_member.html.haml +36 -0
  175. data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_albums.html.haml +0 -0
  176. data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_projects.html.haml +0 -0
  177. data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_tags.html.haml +0 -0
  178. data/app/views/elabs/layouts/{_shortcode_infinite_loop.html.haml → shortcodes/_infinite_loop.html.haml} +1 -1
  179. data/app/views/elabs/layouts/{_shortcode_infinite_loop_inline.html.haml → shortcodes/_infinite_loop_inline.html.haml} +0 -0
  180. data/app/views/elabs/layouts/{_shortcode_missing_content.html.haml → shortcodes/_missing_content.html.haml} +1 -1
  181. data/app/views/elabs/layouts/{_shortcode_missing_content_inline.html.haml → shortcodes/_missing_content_inline.html.haml} +0 -0
  182. data/app/views/elabs/layouts/shortcodes/_open_to_see.html.haml +2 -0
  183. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_repo_card.html.haml +1 -1
  184. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_repo_inline.html.haml +0 -0
  185. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_user_card.html.haml +0 -0
  186. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_group_card.html.haml +1 -1
  187. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_repo_card.html.haml +1 -1
  188. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_repo_inline.html.haml +0 -0
  189. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_user_card.html.haml +1 -1
  190. data/app/views/elabs/layouts/shortcodes/widgets/vue/_all_widgets.html.haml +5 -0
  191. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_github_repo_card_vue.html.haml +8 -8
  192. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_github_user_card_vue.html.haml +5 -5
  193. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_group_card_vue.html.haml +5 -5
  194. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_repo_card_vue.html.haml +8 -8
  195. data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_user_card_vue.html.haml +4 -4
  196. data/app/views/elabs/licenses/_filters.html.haml +3 -2
  197. data/app/views/elabs/licenses/index.html.haml +14 -12
  198. data/app/views/elabs/licenses/show.html.haml +40 -34
  199. data/app/views/elabs/member/albums/_form.html.haml +1 -43
  200. data/app/views/elabs/member/articles/_form.html.haml +1 -39
  201. data/app/views/elabs/member/layouts/_form_commons.html.haml +55 -0
  202. data/app/views/elabs/member/notes/_form.html.haml +1 -39
  203. data/app/views/elabs/member/preferences/edit.html.haml +1 -2
  204. data/app/views/elabs/member/projects/_form.html.haml +3 -38
  205. data/app/views/elabs/member/uploads/_form.html.haml +1 -42
  206. data/app/views/elabs/member/uploads/_upload.json.jbuilder +3 -3
  207. data/app/views/elabs/member/users/edit.html.haml +3 -4
  208. data/app/views/elabs/notes/_filters.html.haml +5 -3
  209. data/app/views/elabs/notes/index.html.haml +1 -1
  210. data/app/views/elabs/notes/show.html.haml +33 -25
  211. data/app/views/elabs/projects/_filters.html.haml +5 -3
  212. data/app/views/elabs/projects/index.html.haml +1 -1
  213. data/app/views/elabs/projects/show.html.haml +68 -62
  214. data/app/views/elabs/reports/_form.html.haml +2 -0
  215. data/app/views/elabs/tags/_filters.html.haml +3 -2
  216. data/app/views/elabs/tags/index.html.haml +11 -11
  217. data/app/views/elabs/tags/show.html.haml +31 -28
  218. data/app/views/elabs/uploads/_filters.html.haml +5 -3
  219. data/app/views/elabs/uploads/_preview.html.haml +5 -4
  220. data/app/views/elabs/uploads/_thumbnail.html.haml +9 -0
  221. data/app/views/elabs/uploads/_upload.json.jbuilder +3 -3
  222. data/app/views/elabs/uploads/index.html.haml +1 -1
  223. data/app/views/elabs/uploads/show.html.haml +45 -39
  224. data/app/views/elabs/users/_filters.html.haml +3 -2
  225. data/app/views/elabs/users/_user.html.haml +3 -3
  226. data/app/views/elabs/users/show.html.haml +48 -43
  227. data/config/routes.rb +13 -8
  228. data/db/migrate/20181025084232_add_archived_field_to_comments.rb +5 -0
  229. data/db/migrate/20181026071743_delete_comment_notifications.rb +5 -0
  230. data/db/migrate/20181030063505_create_announcements.rb +14 -0
  231. data/docs/CODEOWNERS +10 -0
  232. data/docs/migrating.md +16 -1
  233. data/docs/shortcodes_guide.md +51 -0
  234. data/lib/assets/javascripts/README-highlight.js.md +5 -5
  235. data/lib/assets/javascripts/highlight.js-9.13.1/highlight.pack.js +2 -0
  236. data/lib/assets/stylesheets/{highlight.js-9.12.0 → highlight.js-9.13.1}/styles/atelier-sulphurpool-light.css +0 -0
  237. data/lib/elabs.rb +8 -0
  238. data/lib/elabs/version.rb +1 -1
  239. data/lib/generators/elabs/{devise_views_generator.rb → devise_mailer_views_generator.rb} +2 -2
  240. data/lib/generators/elabs/images_generator.rb +24 -0
  241. data/lib/generators/elabs/required_assets_generator.rb +0 -2
  242. data/lib/generators/templates/elabs.rb +3 -0
  243. data/locale/app.pot +132 -19
  244. data/locale/en/app.edit.po +130 -17
  245. data/locale/en/app.po +130 -17
  246. data/locale/fr/app.edit.po +145 -28
  247. data/locale/fr/app.po +141 -27
  248. data/package.json +10 -12
  249. data/yarn.lock +885 -668
  250. metadata +136 -97
  251. data/app/assets/stylesheets/elabs/_icons.scss +0 -17
  252. data/app/assets/stylesheets/elabs/app/_acts.scss +0 -69
  253. data/app/assets/stylesheets/elabs/app/_alerts.scss +0 -3
  254. data/app/assets/stylesheets/elabs/app/_badges.scss +0 -11
  255. data/app/assets/stylesheets/elabs/app/_buttons.scss +0 -29
  256. data/app/assets/stylesheets/elabs/app/_content.scss +0 -25
  257. data/app/assets/stylesheets/elabs/app/_content_statuses.scss +0 -32
  258. data/app/assets/stylesheets/elabs/app/_content_uploads.scss +0 -39
  259. data/app/assets/stylesheets/elabs/app/_empty.scss +0 -19
  260. data/app/assets/stylesheets/elabs/app/_errors.scss +0 -9
  261. data/app/assets/stylesheets/elabs/app/_filter_links.scss +0 -27
  262. data/app/assets/stylesheets/elabs/app/_forms.scss +0 -74
  263. data/app/assets/stylesheets/elabs/app/_languages.scss +0 -6
  264. data/app/assets/stylesheets/elabs/app/_layout.scss +0 -206
  265. data/app/assets/stylesheets/elabs/app/_licenses.scss +0 -6
  266. data/app/assets/stylesheets/elabs/app/_link-to-top.scss +0 -8
  267. data/app/assets/stylesheets/elabs/app/_tabs.scss +0 -54
  268. data/app/assets/stylesheets/elabs/app/_tags.scss +0 -6
  269. data/app/assets/stylesheets/elabs/app/_toolbars.scss +0 -3
  270. data/app/assets/stylesheets/elabs/app/_users.scss +0 -21
  271. data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +0 -13
  272. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +0 -46
  273. data/app/assets/stylesheets/elabs/app/admin-members/_layout.scss +0 -17
  274. data/app/assets/stylesheets/elabs/app/areas/_devise.scss +0 -31
  275. data/app/assets/stylesheets/elabs/app/components/_cards.scss +0 -16
  276. data/app/assets/stylesheets/elabs/app/components/_container.scss +0 -4
  277. data/app/assets/stylesheets/elabs/app/mixins/_classifier-card.scss +0 -16
  278. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +0 -72
  279. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +0 -77
  280. data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +0 -88
  281. data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +0 -1118
  282. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +0 -239
  283. data/app/views/elabs/albums/_album.html.haml +0 -38
  284. data/app/views/elabs/articles/_article.html.haml +0 -30
  285. data/app/views/elabs/languages/_associations.html.haml +0 -61
  286. data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +0 -2
  287. data/app/views/elabs/layouts/admin_application.html.haml +0 -21
  288. data/app/views/elabs/layouts/member_application.html.haml +0 -24
  289. data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +0 -5
  290. data/app/views/elabs/licenses/_associations.html.haml +0 -61
  291. data/app/views/elabs/notes/_note.html.haml +0 -31
  292. data/app/views/elabs/projects/_associations.html.haml +0 -54
  293. data/app/views/elabs/projects/_project.html.haml +0 -29
  294. data/app/views/elabs/tags/_associations.html.haml +0 -61
  295. data/app/views/elabs/uploads/_upload.html.haml +0 -41
  296. data/app/views/elabs/users/_associations.html.haml +0 -61
  297. data/db/seeds.rb +0 -10
  298. data/db/seeds_development.rb +0 -21
  299. data/db/seeds_production.rb +0 -0
  300. data/lib/assets/javascripts/codemirror-5.39.2/addon/mode/overlay.js +0 -90
  301. data/lib/assets/javascripts/codemirror-5.39.2/lib/codemirror.js +0 -9684
  302. data/lib/assets/javascripts/codemirror-5.39.2/mode/clike/clike.js +0 -834
  303. data/lib/assets/javascripts/codemirror-5.39.2/mode/css/css.js +0 -832
  304. data/lib/assets/javascripts/codemirror-5.39.2/mode/gfm/gfm.js +0 -129
  305. data/lib/assets/javascripts/codemirror-5.39.2/mode/htmlmixed/htmlmixed.js +0 -152
  306. data/lib/assets/javascripts/codemirror-5.39.2/mode/javascript/javascript.js +0 -896
  307. data/lib/assets/javascripts/codemirror-5.39.2/mode/markdown/markdown.js +0 -882
  308. data/lib/assets/javascripts/codemirror-5.39.2/mode/meta.js +0 -217
  309. data/lib/assets/javascripts/codemirror-5.39.2/mode/xml/xml.js +0 -402
  310. data/lib/assets/javascripts/highlight.js-9.12.0/highlight.pack.js +0 -2
  311. data/lib/assets/stylesheets/codemirror-5.39.2/lib/codemirror.css +0 -346
  312. data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-dark.css +0 -38
  313. data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-light.css +0 -38
@@ -21,6 +21,6 @@
21
21
  autocomplete: 'email',
22
22
  value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email)
23
23
  .actions
24
- = f.submit _('Resend confirmation instructions'), class: 'btn btn--brand btn--block'
24
+ = f.submit _('Resend confirmation instructions'), class: 'btn btn--primary btn--block'
25
25
 
26
26
  = render 'elabs/auth/shared/links'
@@ -26,6 +26,6 @@
26
26
  = f.label :password_confirmation, _('Confirm new password')
27
27
  .field-input= f.password_field :password_confirmation, autocomplete: 'off'
28
28
  .actions
29
- = f.submit _('Change my password'), class: 'btn btn--brand btn--block'
29
+ = f.submit _('Change my password'), class: 'btn btn--primary btn--block'
30
30
 
31
31
  = render 'elabs/auth/shared/links'
@@ -18,6 +18,6 @@
18
18
  = f.label :email
19
19
  .field-input= f.email_field :email, autofocus: true, autocomplete: 'email'
20
20
  .actions
21
- = f.submit _('Send me reset password instructions'), class: 'btn btn--brand btn--block'
21
+ = f.submit _('Send me reset password instructions'), class: 'btn btn--primary btn--block'
22
22
 
23
23
  = render 'elabs/auth/shared/links'
@@ -14,7 +14,12 @@
14
14
  %li= message
15
15
  .field
16
16
  = f.label :username
17
- .field-input= f.text_field :username, autofocus: true, autocomplete: 'email'
17
+ .field-input
18
+ = f.text_field :username, autofocus: true, autocomplete: 'username'
19
+ .field-hint
20
+ -# haml-lint:disable LineLength
21
+ = _('Username can be upper/lower case ascii letters, digits, hyphens and underscores. Make it at least 4 characters. As in "super_man", "super-woman", "uberCat01"')
22
+ -# haml-lint:enable LineLength
18
23
  .field
19
24
  = f.label :email
20
25
  .field-input= f.email_field :email, autocomplete: 'email'
@@ -29,6 +34,6 @@
29
34
  .field-input= f.password_field :password_confirmation, autocomplete: 'off'
30
35
 
31
36
  .actions
32
- = f.submit _('Sign up'), class: 'btn btn--brand btn--block'
37
+ = f.submit _('Sign up'), class: 'btn btn--primary btn--block'
33
38
 
34
39
  = render 'elabs/auth/shared/links'
@@ -12,4 +12,4 @@
12
12
  = f.label :remember_me
13
13
 
14
14
  .actions
15
- = f.submit _('Log in'), class: 'btn btn--block btn--brand'
15
+ = f.submit _('Log in'), class: 'btn btn--block btn--primary'
@@ -18,6 +18,6 @@
18
18
  = f.label :email
19
19
  .field-input= f.email_field :email, autofocus: true, autocomplete: 'email'
20
20
  .actions
21
- = f.submit _('Resend unlock instructions'), class: 'btn btn--brand btn--block'
21
+ = f.submit _('Resend unlock instructions'), class: 'btn btn--primary btn--block'
22
22
 
23
23
  = render 'elabs/auth/shared/links'
@@ -1,22 +1,31 @@
1
- = render 'elabs/comments/form', url: url, new_comment: new_comment
1
+ .comments-area
2
+ = render 'elabs/comments/form', url: url, new_comment: new_comment, entity: entity
2
3
 
3
- %section.comments-list
4
- - if user_is_author_of entity
5
- %h2= _('Comments')
6
- - if entity.comments.count.zero?
7
- .empty
8
- = _('No comment has been left')
9
- - entity.comments.each do |comment|
10
- .comment.comment-card
11
- %header
12
- .headers
13
- %ul.informations
14
- %li
15
- = icon('user', ['fw'])
16
- = comment.name || link_to(comment.user.display_name, comment.user)
17
- %li
18
- = icon('calendar', ['fw'])
19
- %strong= _('Posted on:')
20
- = medium_datetime comment.created_at
21
- %article= render_entity_content comment, :comment, false
4
+ %section.comments-list
5
+ - if user_is_author_of entity
6
+ %h2= _('Comments')
7
+ - if entity.comments.count.zero?
8
+ .empty
9
+ = _('No comment has been left')
10
+ - entity.comments.each do |comment|
11
+ .comment.comment-card{ class: comment.archived ? 'comment-card--archived' : '' }
12
+ %header
13
+ .headers
14
+ %ul.information
15
+ %li
16
+ .btn-group
17
+ = member_destroy_link 'comment', comment
18
+ - if comment.archived
19
+ %a.btn.btn--small{ disabled: true }= icon 'archive', ['fw']
20
+ - else
21
+ = link_to icon('archive', ['fw']),
22
+ member_comment_archive_path(comment), method: :put, class: 'btn btn--small btn--primary'
23
+ %li
24
+ = icon('user', ['fw'])
25
+ = comment.name || link_to(comment.user.display_name, comment.user)
26
+ %li
27
+ = icon('calendar', ['fw'])
28
+ %strong= _('Posted on:')
29
+ = medium_datetime comment.created_at
30
+ %article= render_entity_content comment, :comment, false
22
31
 
@@ -1,43 +1,47 @@
1
1
  -# You must provide an url for the form
2
2
 
3
- %h2= _('Leave a comment')
3
+ - unless user_is_author_of(entity)
4
+ %h2= _('Leave a comment')
4
5
 
5
- %p= _('You want to react to this content or ask something to the author? Just leave a comment here!')
6
+ %p= _('You want to react to this content or ask something to the author? Just leave a comment here!')
6
7
 
7
- .alert.alert--info
8
- %p= _("Note that the comments are not publicly visible, so don't worry if you don't see yours.")
9
- %p= _("All the information you give will only be visible to the author. We don't share anything with anyone.")
8
+ .alert.alert--info
9
+ %p= _("Note that the comments are not publicly visible, so don't worry if you don't see yours.")
10
+ %p= _("All the information you give will only be visible to the author. We don't share anything with anyone.")
10
11
 
11
- = form_for new_comment, url: url do |f|
12
- - if new_comment.errors.any?
13
- .error
14
- %h2= format(n_('An error prevented your comment from being saved:',
15
- '%<nb>i errors prevented your comment from being saved:',
16
- new_comment.errors.count), nb: new_comment.errors.count)
17
- %ul
18
- - new_comment.errors.full_messages.each do |message|
19
- %li= message
12
+ = form_for new_comment, url: url do |f|
13
+ - if new_comment.errors.any?
14
+ .error
15
+ %h2= format(n_('An error prevented your comment from being saved:',
16
+ '%<nb>i errors prevented your comment from being saved:',
17
+ new_comment.errors.count), nb: new_comment.errors.count)
18
+ %ul
19
+ - new_comment.errors.full_messages.each do |message|
20
+ %li= message
20
21
 
21
- - if user_signed_in?
22
- .alert.alert--info
23
- -# haml-lint:disable LineLength
24
- = format(_('This comment will be posted as "%<name>s". By submitting this comment, you agree to be recontacted by the author.'),
25
- name: current_user.username)
26
- -# haml-lint:enable LineLength
27
- - else
22
+ - if user_signed_in?
23
+ .alert.alert--info
24
+ -# haml-lint:disable LineLength
25
+ = format(_('This comment will be posted as "%<name>s". By submitting this comment, you agree to be recontacted by the author.'),
26
+ name: current_user.username)
27
+ -# haml-lint:enable LineLength
28
+ - else
29
+ .field
30
+ = f.label :name
31
+ .field-input= f.text_field :name, required: true
32
+ .field
33
+ = f.label :email
34
+ .field-input= f.text_field :email, required: true, type: :email
35
+ .field
36
+ .field-input
37
+ = f.check_box :allow_contact
38
+ = f.label :allow_contact, _('I agree to be recontacted')
28
39
  .field
29
- = f.label :name
30
- .field-input= f.text_field :name, required: true
31
- .field
32
- = f.label :email
33
- .field-input= f.text_field :email, required: true
34
- .field
35
- .field-input
36
- = f.check_box :allow_contact
37
- = f.label :allow_contact, _('I agree to be recontacted')
38
- .field
39
- = f.label :comment
40
- .field-input= f.text_area :comment, required: true
41
- .actions
42
- .actions-buttons
43
- = f.submit 'Save', class: 'btn btn--save'
40
+ = f.label :comment
41
+ .field-input= f.text_area :comment, required: true, class: 'textarea--large'
42
+
43
+ = render 'elabs/layouts/form_honeypot', field: 'body'
44
+
45
+ .actions
46
+ .actions-buttons
47
+ = f.submit 'Save', class: 'btn btn--save'
@@ -1,6 +1,4 @@
1
- .filter-links
2
- .filter-links__group
1
+ .page__header__actions__filters
2
+ .page__header__actions__filters__group
3
+ .page__header__actions__filters__group__title= _('Sort by…')
3
4
  = order_link _('Name'), 'name'
4
-
5
- .filter-links__group
6
- = with_content_filter_links
@@ -6,28 +6,27 @@
6
6
  %header
7
7
  .icon= icon 'language', %w[3x fw]
8
8
  .headers
9
- %h3{ lang: language.iso639_1 }= link_to language.name, language, class: 'title'
9
+ %h3.title{ lang: language.iso639_1 }= link_to language.name, language
10
10
 
11
- %ul.informations
11
+ %ul.information
12
12
  %li
13
- = icon('info', ['fw'])
14
13
  %strong= _('ISO 639-1 code:')
15
14
  = language.iso639_1
16
15
  .content
17
16
  = link_to language_projects_path(language), class: 'btn btn--block' do
18
- = icon 'cog'
19
- = format(n_('%<nb>i project', '%<nb>i projects', language.projects_count), nb: language.projects_count)
17
+ = icon 'cog', %w[fw icon]
18
+ .text= format(n_('%<nb>i project', '%<nb>i projects', language.projects_count), nb: language.projects_count)
20
19
  = link_to language_articles_path(language), class: 'btn btn--block' do
21
- = icon 'font'
22
- = format(n_('%<nb>i article', '%<nb>i articles', language.articles_count), nb: language.articles_count)
20
+ = icon 'font', %w[fw icon]
21
+ .text= format(n_('%<nb>i article', '%<nb>i articles', language.articles_count), nb: language.articles_count)
23
22
  = link_to language_notes_path(language), class: 'btn btn--block' do
24
- = icon 'sticky-note'
25
- = format(n_('%<nb>i note', '%<nb>i notes', language.notes_count), nb: language.notes_count)
23
+ = icon 'sticky-note', %w[fw icon]
24
+ .text= format(n_('%<nb>i note', '%<nb>i notes', language.notes_count), nb: language.notes_count)
26
25
  = link_to language_uploads_path(language), class: 'btn btn--block' do
27
- = icon 'image'
28
- = format(n_('%<nb>i upload', '%<nb>i uploads', language.uploads_count), nb: language.uploads_count)
26
+ = icon 'image', %w[fw icon]
27
+ .text= format(n_('%<nb>i upload', '%<nb>i uploads', language.uploads_count), nb: language.uploads_count)
29
28
  = link_to language_albums_path(language), class: 'btn btn--block' do
30
- = icon 'book'
31
- = format(n_('%<nb>i album', '%<nb>i albums', language.albums_count), nb: language.albums_count)
29
+ = icon 'book', %w[fw icon]
30
+ .text= format(n_('%<nb>i album', '%<nb>i albums', language.albums_count), nb: language.albums_count)
32
31
 
33
32
  = paginate @languages
@@ -1,38 +1,43 @@
1
1
  - @page_title = @language.name
2
2
 
3
3
  .language.language--full
4
- %aside
4
+ %aside.always--inline
5
5
  %ul
6
- %li
7
- = icon('info', ['fw'])
8
- %strong= _('ISO 639-1 code')
9
- = @language.iso639_1
10
6
  %li.separator
11
- = icon('amount', ['fw'])
12
- %b= _('Albums:')
13
- = @language.albums_count
14
- %li
15
- = icon('amount', ['fw'])
16
- %b= _('Articles:')
17
- = @language.articles_count
18
- %li
19
- = icon('amount', ['fw'])
20
- %b= _('Notes:')
21
- = @language.notes_count
22
- %li
23
- = icon('amount', ['fw'])
24
- %b= _('Projects:')
25
- = @language.projects_count
26
- %li
27
- = icon('amount', ['fw'])
28
- %b= _('Uploads:')
29
- = @language.uploads_count
7
+ %ul
8
+ %li
9
+ = icon('info', ['fw'])
10
+ %strong= _('ISO 639-1 code')
11
+ = @language.iso639_1
12
+ %li.separator
13
+ %ul
14
+ %li
15
+ = icon('amount', ['fw'])
16
+ %b= _('Albums:')
17
+ = @language.albums_count
18
+ %li
19
+ = icon('amount', ['fw'])
20
+ %b= _('Articles:')
21
+ = @language.articles_count
22
+ %li
23
+ = icon('amount', ['fw'])
24
+ %b= _('Notes:')
25
+ = @language.notes_count
26
+ %li
27
+ = icon('amount', ['fw'])
28
+ %b= _('Projects:')
29
+ = @language.projects_count
30
+ %li
31
+ = icon('amount', ['fw'])
32
+ %b= _('Uploads:')
33
+ = @language.uploads_count
30
34
 
31
35
  .content
32
- = render 'associations',
33
- language: @language,
34
- language_albums: @language_albums,
35
- language_articles: @language_articles,
36
- language_notes: @language_notes,
37
- language_projects: @language_projects,
38
- language_uploads: @language_uploads
36
+ = render 'elabs/layouts/content_associations',
37
+ is_section: true,
38
+ entity: @language,
39
+ albums: @language_albums,
40
+ articles: @language_articles,
41
+ notes: @language_notes,
42
+ projects: @language_projects,
43
+ uploads: @language_uploads
@@ -0,0 +1,9 @@
1
+ - annoucements = Elabs::Announcement.for_user(current_user)
2
+
3
+ - if annoucements.count.positive?
4
+ .announcements
5
+ - annoucements.each do |a|
6
+ .announcement{ class: "announcement--#{a.level}", id: "announce-#{a.id}" }
7
+ .close-button{ onclick: "hideAnnounce(#{a.id})" }
8
+ = icon 'times', ['fw']
9
+ = markdown a.content
@@ -0,0 +1,89 @@
1
+ - is_section = false if is_section.nil?
2
+
3
+ %aside.tabs{ class: is_section ? 'is-section' : '' }
4
+ %ul.tabs__tabs-list
5
+ - if entity.respond_to?(:albums)
6
+ %li.tabs__tabs-list__tab#tab-albums
7
+ %a{ href: '#tab-content-albums', onclick: 'selectTab(event, "albums")' }
8
+ = _('Albums')
9
+ %span.badge= entity.albums_count
10
+ - if entity.respond_to?(:articles)
11
+ %li.tabs__tabs-list__tab#tab-articles
12
+ %a{ href: '#tab-content-articles', onclick: 'selectTab(event, "articles")' }
13
+ = _('Articles')
14
+ %span.badge= entity.articles_count
15
+ - if entity.respond_to?(:notes)
16
+ %li.tabs__tabs-list__tab#tab-notes
17
+ %a{ href: '#tab-content-notes', onclick: 'selectTab(event, "notes")' }
18
+ = _('Notes')
19
+ %span.badge= entity.notes_count
20
+ - if entity.respond_to?(:projects)
21
+ %li.tabs__tabs-list__tab#tab-projects
22
+ %a{ href: '#tab-content-projects', onclick: 'selectTab(event, "projects")' }
23
+ = _('Projects')
24
+ %span.badge= entity.projects_count
25
+ - if entity.respond_to?(:uploads)
26
+ %li.tabs__tabs-list__tab#tab-uploads
27
+ %a{ href: '#tab-content-uploads', onclick: 'selectTab(event, "uploads")' }
28
+ = _('Uploads')
29
+ %span.badge= entity.uploads_count
30
+
31
+ - if entity.respond_to?(:albums)
32
+ %section.tabs__tab-content.albums-list#tab-content-albums
33
+ .tabs__tab-content__title
34
+ %h2= format _('Last %<amount>i albums:'), amount: Elabs.max_related_items
35
+ .actions= related_content_show_all_link entity.albums_count, entity_nested_resource_url(entity, :albums)
36
+
37
+ - entity.albums.each do |a|
38
+ = render 'elabs/layouts/content_card', entity: a
39
+ - if entity.albums_count.zero?
40
+ = render 'elabs/layouts/empty'
41
+
42
+ - if entity.respond_to?(:articles)
43
+ %section.tabs__tab-content.articles-list#tab-content-articles
44
+ .tabs__tab-content__title
45
+ %h2= format _('Last %<amount>i articles:'), amount: Elabs.max_related_items
46
+ .actions= related_content_show_all_link entity.articles_count, entity_nested_resource_url(entity, :articles)
47
+
48
+ - articles.each do |a|
49
+ = render 'elabs/layouts/content_card', entity: a
50
+ - if entity.articles_count.zero?
51
+ = render 'elabs/layouts/empty'
52
+
53
+
54
+ - if entity.respond_to?(:notes)
55
+ %section.tabs__tab-content.notes-list#tab-content-notes
56
+ .tabs__tab-content__title
57
+ %h2= format _('Last %<amount>i notes:'), amount: Elabs.max_related_items
58
+ .actions= related_content_show_all_link entity.notes_count, entity_nested_resource_url(entity, :notes)
59
+
60
+ - notes.each do |n|
61
+ = render 'elabs/layouts/content_card', entity: n
62
+ - if entity.notes_count.zero?
63
+ = render 'elabs/layouts/empty'
64
+
65
+ - if entity.respond_to?(:projects)
66
+ %section.tabs__tab-content.projects-list#tab-content-projects
67
+ .tabs__tab-content__title
68
+ %h2= format _('Last %<amount>i projects:'), amount: Elabs.max_related_items
69
+ .actions= related_content_show_all_link entity.projects_count, entity_nested_resource_url(entity, :projects)
70
+
71
+ - projects.each do |p|
72
+ = render 'elabs/layouts/content_card', entity: p
73
+ - if entity.projects_count.zero?
74
+ = render 'elabs/layouts/empty'
75
+
76
+ - if entity.respond_to?(:uploads)
77
+ %section.tabs__tab-content.uploads-list#tab-content-uploads
78
+ .tabs__tab-content__title
79
+ %h2= format _('Last %<amount>i uploads:'), amount: Elabs.max_related_items
80
+ .actions= related_content_show_all_link entity.uploads_count, entity_nested_resource_url(entity, :uploads)
81
+
82
+ - uploads.each do |u|
83
+ = render 'elabs/layouts/content_card', entity: u
84
+ - if entity.uploads_count.zero?
85
+ = render 'elabs/layouts/empty'
86
+
87
+ :javascript
88
+ initializeTabs ()
89
+ selectTab('#{first_type_with_content(entity)}')
@@ -0,0 +1,41 @@
1
+ - entity_type = entity.class.table_name.singularize
2
+
3
+ - if !show_item? entity
4
+ = render 'elabs/layouts/hidden_entry', entity: entity
5
+ - else
6
+ %div{ class: "#{entity_type} #{entity_type}-card" }
7
+ %header
8
+ .header
9
+ %h3.title{ lang: entity.language.iso639_1 }
10
+ = content_type_icon_from_entity entity, %w[fw]
11
+ = link_to entity.title_to_display, entity
12
+ .subtitle= format(_('by %<name>s'), name: link_to(entity.user.display_name, entity.user)).html_safe
13
+
14
+ %ul.information
15
+ %li
16
+ = icon('language', ['fw'])
17
+ %strong= _('Language:')
18
+ = link_to entity.language.name, entity.language
19
+ %li
20
+ = icon('license', ['fw'])
21
+ %strong= _('License:')
22
+ = link_to entity.license do
23
+ = license_icon entity.license
24
+ = entity.license.name
25
+ %li
26
+ = icon('info', ['fw'])
27
+ %strong= _('SFW:')
28
+ = boolean_icon_tag entity.sfw, 'is-sfw', 'is-nsfw'
29
+ - if entity.respond_to? :visible_projects
30
+ %li= render 'elabs/layouts/content_classifiers_lists/projects', projects: entity.visible_projects
31
+ - if entity.respond_to? :tags
32
+ %li= render 'elabs/layouts/content_classifiers_lists/tags', tags: entity.tags
33
+ - if entity.respond_to? :visible_albums
34
+ %li= render 'elabs/layouts/content_classifiers_lists/albums', albums: entity.visible_albums
35
+
36
+ - if entity.short_text_to_display.present?
37
+ %article{ lang: entity.language.iso639_1 }= render_entity_content entity, :short_text_to_display, false
38
+ - if entity.class.name == 'Elabs::Album'
39
+ = render 'elabs/albums/card_content', album: entity
40
+ - if entity.class.name == 'Elabs::Upload'
41
+ = render 'elabs/uploads/thumbnail', upload: entity