elabs 2.0.0.pre

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 (404) hide show
  1. checksums.yaml +7 -0
  2. data/.eslintrc.yml +26 -0
  3. data/.gitignore +49 -0
  4. data/.gitlab-ci.yml +93 -0
  5. data/.haml-lint.yml +4 -0
  6. data/.node-version +1 -0
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +59 -0
  9. data/.ruby-version +1 -0
  10. data/.simplecov +5 -0
  11. data/.stylelintrc.yml +218 -0
  12. data/CHANGELOG.md +273 -0
  13. data/CODE_OF_CONDUCT.md +78 -0
  14. data/Gemfile +75 -0
  15. data/Gemfile.lock +376 -0
  16. data/LICENSE +21 -0
  17. data/LICENSES.md +6 -0
  18. data/README.md +41 -0
  19. data/ROADMAP.md +61 -0
  20. data/Rakefile +32 -0
  21. data/app/assets/config/elabs_manifest.js +3 -0
  22. data/app/assets/images/elabs/preview_placeholder.png +0 -0
  23. data/app/assets/images/elabs/preview_placeholder_nsfw.png +0 -0
  24. data/app/assets/javascripts/elabs/application.js +27 -0
  25. data/app/assets/javascripts/elabs/helpers-codemirror.js +29 -0
  26. data/app/assets/javascripts/elabs/helpers-markdown.js +42 -0
  27. data/app/assets/javascripts/elabs/helpers.js +17 -0
  28. data/app/assets/javascripts/elabs/modals.js +19 -0
  29. data/app/assets/javascripts/elabs/tabs.js +32 -0
  30. data/app/assets/stylesheets/elabs/_colors.scss +345 -0
  31. data/app/assets/stylesheets/elabs/_icons.scss +9 -0
  32. data/app/assets/stylesheets/elabs/_variables.scss +13 -0
  33. data/app/assets/stylesheets/elabs/app/_acts.scss +58 -0
  34. data/app/assets/stylesheets/elabs/app/_alerts.scss +3 -0
  35. data/app/assets/stylesheets/elabs/app/_buttons.scss +21 -0
  36. data/app/assets/stylesheets/elabs/app/_comments.scss +1 -0
  37. data/app/assets/stylesheets/elabs/app/_content.scss +10 -0
  38. data/app/assets/stylesheets/elabs/app/_content_uploads.scss +39 -0
  39. data/app/assets/stylesheets/elabs/app/_empty.scss +19 -0
  40. data/app/assets/stylesheets/elabs/app/_errors.scss +9 -0
  41. data/app/assets/stylesheets/elabs/app/_filter_links.scss +27 -0
  42. data/app/assets/stylesheets/elabs/app/_forms.scss +69 -0
  43. data/app/assets/stylesheets/elabs/app/_helpers.scss +3 -0
  44. data/app/assets/stylesheets/elabs/app/_languages.scss +6 -0
  45. data/app/assets/stylesheets/elabs/app/_layout.scss +194 -0
  46. data/app/assets/stylesheets/elabs/app/_licenses.scss +6 -0
  47. data/app/assets/stylesheets/elabs/app/_link-to-top.scss +8 -0
  48. data/app/assets/stylesheets/elabs/app/_medias.scss +12 -0
  49. data/app/assets/stylesheets/elabs/app/_modals.scss +53 -0
  50. data/app/assets/stylesheets/elabs/app/_nsfw.scss +5 -0
  51. data/app/assets/stylesheets/elabs/app/_pagination.scss +16 -0
  52. data/app/assets/stylesheets/elabs/app/_tabs.scss +54 -0
  53. data/app/assets/stylesheets/elabs/app/_tags.scss +6 -0
  54. data/app/assets/stylesheets/elabs/app/_toolbars.scss +3 -0
  55. data/app/assets/stylesheets/elabs/app/_users.scss +6 -0
  56. data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +6 -0
  57. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +70 -0
  58. data/app/assets/stylesheets/elabs/app/admin-members/_layout.scss +17 -0
  59. data/app/assets/stylesheets/elabs/app/areas/_devise.scss +31 -0
  60. data/app/assets/stylesheets/elabs/app/components/_cards.scss +16 -0
  61. data/app/assets/stylesheets/elabs/app/components/_container.scss +4 -0
  62. data/app/assets/stylesheets/elabs/app/mixins/_classifier-card.scss +16 -0
  63. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +58 -0
  64. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +39 -0
  65. data/app/assets/stylesheets/elabs/app/mixins/_icon.scss +9 -0
  66. data/app/assets/stylesheets/elabs/application.css +14 -0
  67. data/app/assets/stylesheets/elabs/lib/_codemirror.scss +26 -0
  68. data/app/assets/stylesheets/elabs/lib/fontawesome/_fontawesome.scss +38 -0
  69. data/app/assets/stylesheets/elabs/lib/fontawesome/_fonts.scss +42 -0
  70. data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +1118 -0
  71. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +230 -0
  72. data/app/assets/stylesheets/elabs/lib/knacss/_knacss.scss +59 -0
  73. data/app/assets/stylesheets/elabs/style.scss +72 -0
  74. data/app/controllers/elabs/acts_controller.rb +12 -0
  75. data/app/controllers/elabs/admin/admin_application_controller.rb +19 -0
  76. data/app/controllers/elabs/admin/admin_content_application_controller.rb +66 -0
  77. data/app/controllers/elabs/admin/albums_controller.rb +10 -0
  78. data/app/controllers/elabs/admin/articles_controller.rb +10 -0
  79. data/app/controllers/elabs/admin/languages_controller.rb +77 -0
  80. data/app/controllers/elabs/admin/licenses_controller.rb +77 -0
  81. data/app/controllers/elabs/admin/notes_controller.rb +10 -0
  82. data/app/controllers/elabs/admin/projects_controller.rb +10 -0
  83. data/app/controllers/elabs/admin/reports_controller.rb +34 -0
  84. data/app/controllers/elabs/admin/tags_controller.rb +56 -0
  85. data/app/controllers/elabs/admin/uploads_controller.rb +10 -0
  86. data/app/controllers/elabs/admin/users_controller.rb +43 -0
  87. data/app/controllers/elabs/albums_controller.rb +26 -0
  88. data/app/controllers/elabs/articles_controller.rb +25 -0
  89. data/app/controllers/elabs/auth/callbacks_controller.rb +38 -0
  90. data/app/controllers/elabs/auth/confirmations_controller.rb +43 -0
  91. data/app/controllers/elabs/auth/passwords_controller.rb +47 -0
  92. data/app/controllers/elabs/auth/registrations_controller.rb +70 -0
  93. data/app/controllers/elabs/auth/sessions_controller.rb +36 -0
  94. data/app/controllers/elabs/auth/unlocks_controller.rb +38 -0
  95. data/app/controllers/elabs/concerns/elabs_controller.rb +18 -0
  96. data/app/controllers/elabs/concerns/localizable.rb +11 -0
  97. data/app/controllers/elabs/concerns/reportable.rb +17 -0
  98. data/app/controllers/elabs/content_application_controller.rb +45 -0
  99. data/app/controllers/elabs/elabs_application_controller.rb +95 -0
  100. data/app/controllers/elabs/languages_controller.rb +36 -0
  101. data/app/controllers/elabs/licenses_controller.rb +31 -0
  102. data/app/controllers/elabs/member/albums_controller.rb +11 -0
  103. data/app/controllers/elabs/member/articles_controller.rb +11 -0
  104. data/app/controllers/elabs/member/member_application_controller.rb +12 -0
  105. data/app/controllers/elabs/member/member_content_application_controller.rb +128 -0
  106. data/app/controllers/elabs/member/notes_controller.rb +11 -0
  107. data/app/controllers/elabs/member/preferences_controller.rb +36 -0
  108. data/app/controllers/elabs/member/projects_controller.rb +11 -0
  109. data/app/controllers/elabs/member/uploads_controller.rb +11 -0
  110. data/app/controllers/elabs/member/users_controller.rb +28 -0
  111. data/app/controllers/elabs/notes_controller.rb +25 -0
  112. data/app/controllers/elabs/projects_controller.rb +30 -0
  113. data/app/controllers/elabs/reports_controller.rb +36 -0
  114. data/app/controllers/elabs/tags_controller.rb +36 -0
  115. data/app/controllers/elabs/uploads_controller.rb +24 -0
  116. data/app/controllers/elabs/users_controller.rb +36 -0
  117. data/app/helpers/elabs/acts_helper.rb +22 -0
  118. data/app/helpers/elabs/admin_content_helper.rb +54 -0
  119. data/app/helpers/elabs/application_helper.rb +54 -0
  120. data/app/helpers/elabs/content_filters_helper.rb +97 -0
  121. data/app/helpers/elabs/content_renderer_helper.rb +13 -0
  122. data/app/helpers/elabs/member_content_helper.rb +47 -0
  123. data/app/helpers/elabs/thumbnails_helper.rb +28 -0
  124. data/app/helpers/elabs/time_helper.rb +19 -0
  125. data/app/helpers/elabs/uploads_helper.rb +19 -0
  126. data/app/jobs/elabs/application_job.rb +4 -0
  127. data/app/mailers/elabs/application_mailer.rb +6 -0
  128. data/app/models/elabs/act.rb +7 -0
  129. data/app/models/elabs/album.rb +24 -0
  130. data/app/models/elabs/albums_tag.rb +21 -0
  131. data/app/models/elabs/albums_upload.rb +21 -0
  132. data/app/models/elabs/application_content_record.rb +10 -0
  133. data/app/models/elabs/application_record.rb +5 -0
  134. data/app/models/elabs/article.rb +23 -0
  135. data/app/models/elabs/articles_tag.rb +21 -0
  136. data/app/models/elabs/comment.rb +12 -0
  137. data/app/models/elabs/concerns/actable_entity.rb +52 -0
  138. data/app/models/elabs/concerns/content_entity.rb +70 -0
  139. data/app/models/elabs/concerns/countable_entity.rb +81 -0
  140. data/app/models/elabs/concerns/taggable.rb +33 -0
  141. data/app/models/elabs/language.rb +17 -0
  142. data/app/models/elabs/license.rb +15 -0
  143. data/app/models/elabs/note.rb +21 -0
  144. data/app/models/elabs/notes_tag.rb +21 -0
  145. data/app/models/elabs/preference.rb +9 -0
  146. data/app/models/elabs/project.rb +25 -0
  147. data/app/models/elabs/projects_album.rb +21 -0
  148. data/app/models/elabs/projects_article.rb +21 -0
  149. data/app/models/elabs/projects_note.rb +21 -0
  150. data/app/models/elabs/projects_tag.rb +21 -0
  151. data/app/models/elabs/projects_upload.rb +21 -0
  152. data/app/models/elabs/report.rb +11 -0
  153. data/app/models/elabs/tag.rb +18 -0
  154. data/app/models/elabs/upload.rb +28 -0
  155. data/app/models/elabs/uploads_tag.rb +21 -0
  156. data/app/models/elabs/user.rb +30 -0
  157. data/app/validators/elabs/associated_author_validator.rb +11 -0
  158. data/app/views/elabs/acts/_act.json.jbuilder +2 -0
  159. data/app/views/elabs/acts/_filters.html.haml +3 -0
  160. data/app/views/elabs/acts/index.html.haml +27 -0
  161. data/app/views/elabs/acts/index.json.jbuilder +1 -0
  162. data/app/views/elabs/admin/albums/_album.json.jbuilder +2 -0
  163. data/app/views/elabs/admin/albums/index.html.haml +43 -0
  164. data/app/views/elabs/admin/albums/index.json.jbuilder +1 -0
  165. data/app/views/elabs/admin/articles/_article.json.jbuilder +2 -0
  166. data/app/views/elabs/admin/articles/index.html.haml +41 -0
  167. data/app/views/elabs/admin/articles/index.json.jbuilder +1 -0
  168. data/app/views/elabs/admin/languages/_form.html.haml +18 -0
  169. data/app/views/elabs/admin/languages/_language.json.jbuilder +2 -0
  170. data/app/views/elabs/admin/languages/edit.html.haml +6 -0
  171. data/app/views/elabs/admin/languages/index.html.haml +34 -0
  172. data/app/views/elabs/admin/languages/index.json.jbuilder +1 -0
  173. data/app/views/elabs/admin/languages/new.html.haml +3 -0
  174. data/app/views/elabs/admin/licenses/_form.html.haml +25 -0
  175. data/app/views/elabs/admin/licenses/_license.json.jbuilder +2 -0
  176. data/app/views/elabs/admin/licenses/edit.html.haml +6 -0
  177. data/app/views/elabs/admin/licenses/index.html.haml +42 -0
  178. data/app/views/elabs/admin/licenses/index.json.jbuilder +1 -0
  179. data/app/views/elabs/admin/licenses/new.html.haml +3 -0
  180. data/app/views/elabs/admin/notes/_note.json.jbuilder +2 -0
  181. data/app/views/elabs/admin/notes/index.html.haml +40 -0
  182. data/app/views/elabs/admin/notes/index.json.jbuilder +1 -0
  183. data/app/views/elabs/admin/projects/_project.json.jbuilder +2 -0
  184. data/app/views/elabs/admin/projects/index.html.haml +45 -0
  185. data/app/views/elabs/admin/projects/index.json.jbuilder +1 -0
  186. data/app/views/elabs/admin/reports/index.html.haml +27 -0
  187. data/app/views/elabs/admin/reports/index.json.jbuilder +1 -0
  188. data/app/views/elabs/admin/tags/_form.html.haml +17 -0
  189. data/app/views/elabs/admin/tags/_tag.json.jbuilder +2 -0
  190. data/app/views/elabs/admin/tags/edit.html.haml +6 -0
  191. data/app/views/elabs/admin/tags/index.html.haml +27 -0
  192. data/app/views/elabs/admin/tags/index.json.jbuilder +1 -0
  193. data/app/views/elabs/admin/uploads/_upload.json.jbuilder +2 -0
  194. data/app/views/elabs/admin/uploads/index.html.haml +45 -0
  195. data/app/views/elabs/admin/uploads/index.json.jbuilder +1 -0
  196. data/app/views/elabs/admin/users/_admin_user.json.jbuilder +2 -0
  197. data/app/views/elabs/admin/users/index.html.haml +33 -0
  198. data/app/views/elabs/admin/users/index.json.jbuilder +1 -0
  199. data/app/views/elabs/admin/users/show.html.haml +26 -0
  200. data/app/views/elabs/admin/users/show.json.jbuilder +1 -0
  201. data/app/views/elabs/albums/_album.html.haml +38 -0
  202. data/app/views/elabs/albums/_album.json.jbuilder +2 -0
  203. data/app/views/elabs/albums/_filters.html.haml +8 -0
  204. data/app/views/elabs/albums/index.html.haml +9 -0
  205. data/app/views/elabs/albums/index.json.jbuilder +1 -0
  206. data/app/views/elabs/albums/show.html.haml +60 -0
  207. data/app/views/elabs/albums/show.json.jbuilder +1 -0
  208. data/app/views/elabs/articles/_article.html.haml +30 -0
  209. data/app/views/elabs/articles/_article.json.jbuilder +2 -0
  210. data/app/views/elabs/articles/_filters.html.haml +8 -0
  211. data/app/views/elabs/articles/index.html.haml +9 -0
  212. data/app/views/elabs/articles/index.json.jbuilder +1 -0
  213. data/app/views/elabs/articles/show.html.haml +45 -0
  214. data/app/views/elabs/articles/show.json.jbuilder +1 -0
  215. data/app/views/elabs/auth/confirmations/new.html.haml +26 -0
  216. data/app/views/elabs/auth/passwords/edit.html.haml +31 -0
  217. data/app/views/elabs/auth/passwords/new.html.haml +23 -0
  218. data/app/views/elabs/auth/registrations/edit.html.haml +48 -0
  219. data/app/views/elabs/auth/registrations/new.html.haml +34 -0
  220. data/app/views/elabs/auth/sessions/_new.html.haml +15 -0
  221. data/app/views/elabs/auth/sessions/new.html.haml +8 -0
  222. data/app/views/elabs/auth/shared/_links.html.haml +16 -0
  223. data/app/views/elabs/auth/unlocks/new.html.haml +23 -0
  224. data/app/views/elabs/comments/_comment.json.jbuilder +2 -0
  225. data/app/views/elabs/comments/_comments.html.haml +21 -0
  226. data/app/views/elabs/comments/_form.html.haml +31 -0
  227. data/app/views/elabs/languages/_associations.html.haml +51 -0
  228. data/app/views/elabs/languages/_filters.html.haml +6 -0
  229. data/app/views/elabs/languages/_language.json.jbuilder +2 -0
  230. data/app/views/elabs/languages/index.html.haml +33 -0
  231. data/app/views/elabs/languages/index.json.jbuilder +1 -0
  232. data/app/views/elabs/languages/show.html.haml +38 -0
  233. data/app/views/elabs/languages/show.json.jbuilder +1 -0
  234. data/app/views/elabs/layouts/_empty.html.haml +3 -0
  235. data/app/views/elabs/layouts/_footer.html.haml +6 -0
  236. data/app/views/elabs/layouts/_hidden_entry.html.haml +6 -0
  237. data/app/views/elabs/layouts/_hidden_entry_full.html.haml +6 -0
  238. data/app/views/elabs/layouts/_language_menu.html.haml +2 -0
  239. data/app/views/elabs/layouts/_menu.html.haml +72 -0
  240. data/app/views/elabs/layouts/admin_application.html.haml +21 -0
  241. data/app/views/elabs/layouts/application.html.haml +37 -0
  242. data/app/views/elabs/layouts/lists/_albums.html.haml +10 -0
  243. data/app/views/elabs/layouts/lists/_projects.html.haml +10 -0
  244. data/app/views/elabs/layouts/lists/_tags.html.haml +9 -0
  245. data/app/views/elabs/layouts/mailer.html.haml +8 -0
  246. data/app/views/elabs/layouts/mailer.text.haml +1 -0
  247. data/app/views/elabs/layouts/member_application.html.haml +21 -0
  248. data/app/views/elabs/licenses/_associations.html.haml +51 -0
  249. data/app/views/elabs/licenses/_filters.html.haml +3 -0
  250. data/app/views/elabs/licenses/_license.json.jbuilder +2 -0
  251. data/app/views/elabs/licenses/index.html.haml +27 -0
  252. data/app/views/elabs/licenses/index.json.jbuilder +1 -0
  253. data/app/views/elabs/licenses/show.html.haml +44 -0
  254. data/app/views/elabs/licenses/show.json.jbuilder +1 -0
  255. data/app/views/elabs/member/albums/_album.json.jbuilder +2 -0
  256. data/app/views/elabs/member/albums/_form.html.haml +64 -0
  257. data/app/views/elabs/member/albums/edit.html.haml +6 -0
  258. data/app/views/elabs/member/albums/index.html.haml +49 -0
  259. data/app/views/elabs/member/albums/index.json.jbuilder +1 -0
  260. data/app/views/elabs/member/albums/new.html.haml +3 -0
  261. data/app/views/elabs/member/articles/_article.json.jbuilder +2 -0
  262. data/app/views/elabs/member/articles/_form.html.haml +70 -0
  263. data/app/views/elabs/member/articles/edit.html.haml +6 -0
  264. data/app/views/elabs/member/articles/index.html.haml +47 -0
  265. data/app/views/elabs/member/articles/index.json.jbuilder +1 -0
  266. data/app/views/elabs/member/articles/new.html.haml +3 -0
  267. data/app/views/elabs/member/layouts/_empty.html.haml +4 -0
  268. data/app/views/elabs/member/layouts/_markdown-preview.html.haml +8 -0
  269. data/app/views/elabs/member/notes/_form.html.haml +54 -0
  270. data/app/views/elabs/member/notes/_note.json.jbuilder +2 -0
  271. data/app/views/elabs/member/notes/edit.html.haml +6 -0
  272. data/app/views/elabs/member/notes/index.html.haml +47 -0
  273. data/app/views/elabs/member/notes/index.json.jbuilder +1 -0
  274. data/app/views/elabs/member/notes/new.html.haml +3 -0
  275. data/app/views/elabs/member/preferences/_form.html.haml +20 -0
  276. data/app/views/elabs/member/preferences/edit.html.haml +3 -0
  277. data/app/views/elabs/member/projects/_form.html.haml +71 -0
  278. data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
  279. data/app/views/elabs/member/projects/edit.html.haml +6 -0
  280. data/app/views/elabs/member/projects/index.html.haml +53 -0
  281. data/app/views/elabs/member/projects/index.json.jbuilder +1 -0
  282. data/app/views/elabs/member/projects/new.html.haml +3 -0
  283. data/app/views/elabs/member/uploads/_form.html.haml +67 -0
  284. data/app/views/elabs/member/uploads/_upload.json.jbuilder +2 -0
  285. data/app/views/elabs/member/uploads/edit.html.haml +6 -0
  286. data/app/views/elabs/member/uploads/index.html.haml +61 -0
  287. data/app/views/elabs/member/uploads/index.json.jbuilder +1 -0
  288. data/app/views/elabs/member/uploads/new.html.haml +3 -0
  289. data/app/views/elabs/member/users/_form.html.haml +38 -0
  290. data/app/views/elabs/notes/_filters.html.haml +7 -0
  291. data/app/views/elabs/notes/_note.html.haml +31 -0
  292. data/app/views/elabs/notes/_note.json.jbuilder +2 -0
  293. data/app/views/elabs/notes/index.html.haml +9 -0
  294. data/app/views/elabs/notes/index.json.jbuilder +1 -0
  295. data/app/views/elabs/notes/show.html.haml +44 -0
  296. data/app/views/elabs/notes/show.json.jbuilder +1 -0
  297. data/app/views/elabs/projects/_associations.html.haml +46 -0
  298. data/app/views/elabs/projects/_filters.html.haml +8 -0
  299. data/app/views/elabs/projects/_project.html.haml +29 -0
  300. data/app/views/elabs/projects/index.html.haml +9 -0
  301. data/app/views/elabs/projects/index.json.jbuilder +1 -0
  302. data/app/views/elabs/projects/show.html.haml +71 -0
  303. data/app/views/elabs/projects/show.json.jbuilder +1 -0
  304. data/app/views/elabs/reports/_form.html.haml +29 -0
  305. data/app/views/elabs/tags/_associations.html.haml +51 -0
  306. data/app/views/elabs/tags/_filters.html.haml +3 -0
  307. data/app/views/elabs/tags/_tag.json.jbuilder +2 -0
  308. data/app/views/elabs/tags/index.html.haml +26 -0
  309. data/app/views/elabs/tags/index.json.jbuilder +1 -0
  310. data/app/views/elabs/tags/show.html.haml +34 -0
  311. data/app/views/elabs/tags/show.json.jbuilder +1 -0
  312. data/app/views/elabs/uploads/_filters.html.haml +7 -0
  313. data/app/views/elabs/uploads/_player.html.haml +10 -0
  314. data/app/views/elabs/uploads/_preview.html.haml +17 -0
  315. data/app/views/elabs/uploads/_upload.html.haml +41 -0
  316. data/app/views/elabs/uploads/_upload.json.jbuilder +2 -0
  317. data/app/views/elabs/uploads/index.html.haml +9 -0
  318. data/app/views/elabs/uploads/index.json.jbuilder +1 -0
  319. data/app/views/elabs/uploads/show.html.haml +58 -0
  320. data/app/views/elabs/uploads/show.json.jbuilder +1 -0
  321. data/app/views/elabs/users/_associations.html.haml +51 -0
  322. data/app/views/elabs/users/_filters.html.haml +4 -0
  323. data/app/views/elabs/users/_user.html.haml +31 -0
  324. data/app/views/elabs/users/_user.json.jbuilder +2 -0
  325. data/app/views/elabs/users/index.html.haml +7 -0
  326. data/app/views/elabs/users/index.json.jbuilder +1 -0
  327. data/app/views/elabs/users/show.html.haml +48 -0
  328. data/app/views/elabs/users/show.json.jbuilder +1 -0
  329. data/bin/rails +14 -0
  330. data/config.ru +5 -0
  331. data/config/brakeman.ignore +124 -0
  332. data/config/brakeman.yml +3 -0
  333. data/config/cucumber.yml +9 -0
  334. data/config/routes.rb +116 -0
  335. data/db/migrate/20180813000000_devise_update_users.rb +15 -0
  336. data/db/migrate/20180813000001_create_languages.rb +16 -0
  337. data/db/migrate/20180813000002_create_tags.rb +14 -0
  338. data/db/migrate/20180813000004_create_licenses.rb +17 -0
  339. data/db/migrate/20180813000005_create_reports.rb +15 -0
  340. data/db/migrate/20180813000006_create_comments.rb +15 -0
  341. data/db/migrate/20180813000007_create_acts.rb +10 -0
  342. data/db/migrate/20180813000008_create_preferences.rb +13 -0
  343. data/db/migrate/20180813000009_create_active_storage_tables.active_storage.rb +26 -0
  344. data/db/migrate/20180813000010_create_albums.rb +23 -0
  345. data/db/migrate/20180813000011_create_articles.rb +23 -0
  346. data/db/migrate/20180813000012_create_notes.rb +21 -0
  347. data/db/migrate/20180813000013_create_uploads.rb +26 -0
  348. data/db/migrate/20180813000014_create_projects.rb +44 -0
  349. data/db/seeds.rb +10 -0
  350. data/db/seeds_development.rb +21 -0
  351. data/db/seeds_production.rb +0 -0
  352. data/docs/contributing.md +52 -0
  353. data/docs/cucumber_terms.md +9 -0
  354. data/docs/migrating.md +4 -0
  355. data/docs/overriding.md +20 -0
  356. data/docs/setup.md +136 -0
  357. data/docs/tips.md +13 -0
  358. data/elabs.gemspec +25 -0
  359. data/lib/assets/javascripts/README-highlight.js.md +39 -0
  360. data/lib/assets/javascripts/codemirror-5.39.2/addon/mode/overlay.js +90 -0
  361. data/lib/assets/javascripts/codemirror-5.39.2/lib/codemirror.js +9684 -0
  362. data/lib/assets/javascripts/codemirror-5.39.2/mode/clike/clike.js +834 -0
  363. data/lib/assets/javascripts/codemirror-5.39.2/mode/css/css.js +832 -0
  364. data/lib/assets/javascripts/codemirror-5.39.2/mode/gfm/gfm.js +129 -0
  365. data/lib/assets/javascripts/codemirror-5.39.2/mode/htmlmixed/htmlmixed.js +152 -0
  366. data/lib/assets/javascripts/codemirror-5.39.2/mode/javascript/javascript.js +896 -0
  367. data/lib/assets/javascripts/codemirror-5.39.2/mode/markdown/markdown.js +882 -0
  368. data/lib/assets/javascripts/codemirror-5.39.2/mode/meta.js +217 -0
  369. data/lib/assets/javascripts/codemirror-5.39.2/mode/xml/xml.js +402 -0
  370. data/lib/assets/javascripts/highlight.js-9.12.0/highlight.pack.js +2 -0
  371. data/lib/assets/javascripts/markdown-it-8.4.2.min.js +1 -0
  372. data/lib/assets/stylesheets/codemirror-5.39.2/lib/codemirror.css +346 -0
  373. data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-dark.css +38 -0
  374. data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-light.css +38 -0
  375. data/lib/assets/stylesheets/highlight.js-9.12.0/styles/atelier-sulphurpool-light.css +69 -0
  376. data/lib/elabs.rb +41 -0
  377. data/lib/elabs/engine.rb +5 -0
  378. data/lib/elabs/version.rb +3 -0
  379. data/lib/generators/elabs/assets_generator.rb +36 -0
  380. data/lib/generators/elabs/devise_views_generator.rb +24 -0
  381. data/lib/generators/elabs/install_generator.rb +26 -0
  382. data/lib/generators/elabs/required_assets_generator.rb +26 -0
  383. data/lib/generators/elabs/views_generator.rb +25 -0
  384. data/lib/generators/templates/elabs.rb +25 -0
  385. data/lib/generators/templates/fast_gettext.rb +3 -0
  386. data/lib/tasks/.keep +0 -0
  387. data/lib/tasks/cucumber.rake +75 -0
  388. data/lib/tasks/elabs_tasks.rake +4 -0
  389. data/lib/tasks/factory_bot.rake +14 -0
  390. data/lib/tasks/wipe.rake +31 -0
  391. data/locale/app.pot +1124 -0
  392. data/locale/devise_strings.rb +88 -0
  393. data/locale/en/app.edit.po +1123 -0
  394. data/locale/en/app.po +1123 -0
  395. data/locale/en/app.po.time_stamp +0 -0
  396. data/locale/fr/app.edit.po +1126 -0
  397. data/locale/fr/app.po +1125 -0
  398. data/locale/fr/app.po.time_stamp +0 -0
  399. data/locale/model_attributes.rb +85 -0
  400. data/package.json +22 -0
  401. data/script/cucumber +10 -0
  402. data/tmp/pids/.keep +0 -0
  403. data/yarn.lock +2759 -0
  404. metadata +463 -0
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Experiments Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,6 @@
1
+ # Additional license information:
2
+
3
+ - `Woody.jpg`, located in `spec/fixtures/files` is under
4
+ [CreativeCommons by-nc-sa 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/),
5
+ and was created by Manuel Tancoigne
6
+
@@ -0,0 +1,41 @@
1
+ # README
2
+ Rails engine adding CMS features to publish content related to projects.
3
+ An online version can be tested on http://next.experimentslabs.com
4
+ ## Features
5
+
6
+ Manage various content types:
7
+ - Articles
8
+ - Notes
9
+ - Files
10
+ - Albums (files collections)
11
+ - Projects (may have everything above attached to them)
12
+
13
+ Classify content:
14
+ - Tags
15
+ - Language
16
+ - Licenses
17
+
18
+ Generic features:
19
+ - Comments (only visible to author)
20
+ - Safe/not safe for work content flags
21
+ - Content reporting
22
+ - Site structure translations
23
+
24
+ Features wishlist: check the [roadmap](ROADMAP.md#wonderland) to see
25
+ what's coming.
26
+
27
+ ## Known issues:
28
+ JSON views are not created yet. They exists but were created using
29
+ scaffolding and never touched again.
30
+
31
+ ## Documentation:
32
+ - [Setup guide](docs/setup.md)
33
+ - [Sample app](https://gitlab.com/experimentslabs/sample_app)
34
+ - [How to override the app](docs/overriding.md)
35
+ - [How to contribute](docs/contributing.md)
36
+ - [Migration guide](docs/migrating.md)
37
+ - [Cucumber: terms used in features](docs/cucumber_terms.md)
38
+ - [Roadmap](ROADMAP.md): incoming changes
39
+ - [Changelog](CHANGELOG.md): last validated changes
40
+ - [Issue tracker](https://gitlab.com/experimentslabs/engine_elabs/issues)
41
+ - [Discussion place: Gitter](https://gitter.im/Experiments-Labs/Lobby)
@@ -0,0 +1,61 @@
1
+ # Roadmap
2
+ All the future changes will be documented here.
3
+
4
+ ## [Issues]
5
+ See the [issues](https://gitlab.com/experimentslabs/website/website/issues) for a list.
6
+
7
+ ## [Next] - Already done
8
+ ### Added
9
+ - Generators to make views/assets override easy
10
+ - Generator to copy needed files and initializer
11
+ - Two controller concerns to easily extend your custom controllers:
12
+ - "ElabsController", used to load Elabs layout and some helpers
13
+ - "Reportable", to prepare an empty report when using elabs layout
14
+
15
+ ### Changed
16
+ - The app is now an engine.
17
+
18
+ ### Improved
19
+ - New documentation
20
+ - Various improvements:
21
+ - Acts strings for notices are now in the "acts" helper
22
+
23
+ ### Removed
24
+
25
+ ### Fixed
26
+ - Translations of acts notices are now fixed
27
+
28
+ ## Planned
29
+
30
+ Note that the elements in this list may change during development; it' a
31
+ general idea of what will be done next.
32
+ - [2.0.0 (currently working on)] - Make an engine
33
+ - [1.1.0] - JSON views for everything
34
+ - [2.2.0] - Notifications
35
+ - [2.3.0] - Urls table to attach urls to content, share favorites
36
+ - [2.4.0] - Teams to attach user and distant people to projects
37
+ - [2.5.0] - Projects: commits aggregation
38
+ - [2.6.0] - Users: service status aggregation without storage for now
39
+ - [2.7.0] - Raw content for everything
40
+
41
+ ## Wonderland
42
+ - ~~Rails engine~~ (since 2.0.0)
43
+ - Avatars for authors
44
+ - Support for custom fields ?
45
+ - Move HTML helpers to decorators (https://github.com/drapergem/draper)
46
+ AND/OR use a better templating system, as [Cells](http://trailblazer.to/gems/cells/)
47
+ - Export raw content (markdown, files)
48
+ - Content translations (community made)
49
+ - Teams (people with common projects)
50
+ - Projects users
51
+ - Sharing across instances
52
+ - Urls management (lists of URLs, favorites, sources,...)
53
+ - Content: code snippets
54
+ - Content references (reference others work in your own work)
55
+ - Better license support (i.e.: html tags for creative commons license)
56
+ - Widgets (to add custom content in created content)
57
+ - Data aggregation from various VCS providers
58
+ - Data aggregation for users profiles from various providers
59
+ - An API ?
60
+ - Sharing things across Elabs instances?
61
+ - ...
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Elabs'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ load 'rails/tasks/statistics.rake'
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'test'
28
+ t.pattern = 'test/**/*_test.rb'
29
+ t.verbose = false
30
+ end
31
+
32
+ task default: :test
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images/elabs
2
+ //= link_directory ../javascripts/elabs .js
3
+ //= link_directory ../stylesheets/elabs .css
@@ -0,0 +1,27 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require activestorage
15
+ //= require codemirror-5.39.2/lib/codemirror.js
16
+ //= require codemirror-5.39.2/addon/mode/overlay.js
17
+ //= require codemirror-5.39.2/mode/xml/xml.js
18
+ //= require codemirror-5.39.2/mode/markdown/markdown.js
19
+ //= require codemirror-5.39.2/mode/javascript/javascript.js
20
+ //= require codemirror-5.39.2/mode/css/css.js
21
+ //= require codemirror-5.39.2/mode/htmlmixed/htmlmixed.js
22
+ //= require codemirror-5.39.2/mode/clike/clike.js
23
+ //= require codemirror-5.39.2/mode/meta.js
24
+ //= require codemirror-5.39.2/mode/gfm/gfm.js
25
+ //= require highlight.js-9.12.0/highlight.pack.js
26
+ //= require markdown-it-8.4.2.min.js
27
+ //= require_tree .
@@ -0,0 +1,29 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ function initializeCodeMirrorIn (element) {
3
+ return CodeMirror.fromTextArea(element, {
4
+ lineNumbers: true,
5
+ mode: {
6
+ name: 'gfm',
7
+ tokenTypeOverrides: {
8
+ emoji: 'emoji'
9
+ }
10
+ },
11
+ theme: 'base16-light'
12
+ })
13
+ }
14
+
15
+ // eslint-disable-next-line no-unused-vars
16
+ function limitCMToLength (cm, change) {
17
+ var maxLength = cm.getOption('maxLength')
18
+ if (maxLength && change.update) {
19
+ var str = change.text.join('\n')
20
+ var delta = str.length - (cm.indexFromPos(change.to) - cm.indexFromPos(change.from))
21
+ if (delta <= 0) { return true }
22
+ delta = cm.getValue().length + delta - maxLength
23
+ if (delta > 0) {
24
+ str = str.substr(0, str.length - delta)
25
+ change.update(change.from, change.to, str.split('\n'))
26
+ }
27
+ }
28
+ return true
29
+ }
@@ -0,0 +1,42 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ function createMDPreviewer (cmInstance) {
3
+ var md = window.markdownit()
4
+
5
+ return function (event) {
6
+ event.preventDefault()
7
+
8
+ document.getElementById('content-description-preview').innerHTML = md.render(cmInstance.getValue())
9
+
10
+ openModal('content-preview-modal')
11
+ }
12
+ }
13
+
14
+ /*
15
+ * @author Wladimir Palant
16
+ * @source https://stackoverflow.com/questions/1912501/unescape-html-entities-in-javascript/34064434#34064434
17
+ */
18
+ function htmlDecode (input) {
19
+ if (typeof DOMParser !== 'function') { return input }
20
+ var doc = new DOMParser().parseFromString(input, 'text/html')
21
+ return doc.documentElement.textContent
22
+ }
23
+
24
+ // eslint-disable-next-line no-unused-vars
25
+ function renderMdFromId (areaId) {
26
+ var md = window.markdownit({
27
+ highlight: function (str, lang) {
28
+ // Unescape some chars
29
+ str = htmlDecode(str)
30
+ if (lang && hljs.getLanguage(lang)) {
31
+ try {
32
+ return hljs.highlight(lang, str).value
33
+ } catch (__) {}
34
+ }
35
+
36
+ return '' // use external default escaping
37
+ }
38
+ })
39
+ var value = document.getElementById('raw-' + areaId).innerHTML
40
+
41
+ document.getElementById('markdown-' + areaId).innerHTML = md.render(value)
42
+ }
@@ -0,0 +1,17 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ function removeClass (element, className) {
3
+ if (element.classList) {
4
+ element.classList.remove(className)
5
+ } else {
6
+ element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ')
7
+ }
8
+ }
9
+
10
+ // eslint-disable-next-line no-unused-vars
11
+ function addClass (element, className) {
12
+ if (element.classList) {
13
+ element.classList.add(className)
14
+ } else {
15
+ element.className += ' ' + className
16
+ }
17
+ }
@@ -0,0 +1,19 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ function openModal (e, id) {
3
+ if (!id) {
4
+ id = e
5
+ } else {
6
+ e.preventDefault()
7
+ }
8
+ addClass(document.getElementById(id), 'modal--visible')
9
+ }
10
+
11
+ // eslint-disable-next-line no-unused-vars
12
+ function closeModal (e, id) {
13
+ if (!id) {
14
+ id = e
15
+ } else {
16
+ e.preventDefault()
17
+ }
18
+ removeClass(document.getElementById(id), 'modal--visible')
19
+ }
@@ -0,0 +1,32 @@
1
+ // eslint-disable-next-line no-unused-vars
2
+ function selectTab (event, tab) {
3
+ if (tab) {
4
+ event.preventDefault()
5
+ } else {
6
+ tab = event
7
+ }
8
+
9
+ var i
10
+ var tabs = document.getElementsByClassName('tabs__tabs-list__tab active')
11
+ var tabsContent = document.getElementsByClassName('tabs__tab-content active')
12
+
13
+ for (i = 0; i < tabs.length; i++) {
14
+ removeClass(tabs[i], 'active')
15
+ }
16
+
17
+ for (i = 0; i < tabsContent.length; i++) {
18
+ removeClass(tabsContent[i], 'active')
19
+ }
20
+ addClass(document.getElementById('tab-content-' + tab), 'active')
21
+ addClass(document.getElementById('tab-' + tab), 'active')
22
+ }
23
+
24
+ // eslint-disable-next-line no-unused-vars
25
+ function initializeTabs () {
26
+ var i
27
+ var tabs = document.getElementsByClassName('tabs__tab-content')
28
+
29
+ for (i = 0; i < tabs.length; i++) {
30
+ addClass(tabs[i], 'tab--initialized')
31
+ }
32
+ }
@@ -0,0 +1,345 @@
1
+ // Inspired by https://github.com/nilskaspersson/Google-Material-UI-Color-Palette/
2
+
3
+ // Reds
4
+ $color-red-50: #ffebee;
5
+ $color-red-100: #ffcdd2;
6
+ $color-red-200: #ef9a9a;
7
+ $color-red-300: #e57373;
8
+ $color-red-400: #ef5350;
9
+ $color-red-500: #f44336;
10
+ $color-red-600: #e53935;
11
+ $color-red-700: #d32f2f;
12
+ $color-red-800: #c62828;
13
+ $color-red-900: #b71c1c;
14
+ $color-red-a100: #ff8a80;
15
+ $color-red-a200: #ff5252;
16
+ $color-red-a400: #ff1744;
17
+ $color-red-a700: #d50000;
18
+
19
+ // Pinks
20
+ $color-pink-50: #fce4ec;
21
+ $color-pink-100: #f8bbd0;
22
+ $color-pink-200: #f48fb1;
23
+ $color-pink-300: #f06292;
24
+ $color-pink-400: #ec407a;
25
+ $color-pink-500: #e91e63;
26
+ $color-pink-600: #d81b60;
27
+ $color-pink-700: #c2185b;
28
+ $color-pink-800: #ad1457;
29
+ $color-pink-900: #880e4f;
30
+ $color-pink-a100: #ff80ab;
31
+ $color-pink-a200: #ff4081;
32
+ $color-pink-a400: #f50057;
33
+ $color-pink-a700: #c51162;
34
+
35
+ // Purples
36
+ $color-purple-50: #f3e5f5;
37
+ $color-purple-100: #e1bee7;
38
+ $color-purple-200: #ce93d8;
39
+ $color-purple-300: #ba68c8;
40
+ $color-purple-400: #ab47bc;
41
+ $color-purple-500: #9c27b0;
42
+ $color-purple-600: #8e24aa;
43
+ $color-purple-700: #7b1fa2;
44
+ $color-purple-800: #6a1b9a;
45
+ $color-purple-900: #4a148c;
46
+ $color-purple-a100: #ea80fc;
47
+ $color-purple-a200: #e040fb;
48
+ $color-purple-a400: #d500f9;
49
+ $color-purple-a700: #aa00ff;
50
+
51
+ // Deep-purples
52
+ $color-deep-purple-50: #ede7f6;
53
+ $color-deep-purple-100: #d1c4e9;
54
+ $color-deep-purple-200: #b39ddb;
55
+ $color-deep-purple-300: #9575cd;
56
+ $color-deep-purple-400: #7e57c2;
57
+ $color-deep-purple-500: #673ab7;
58
+ $color-deep-purple-600: #5e35b1;
59
+ $color-deep-purple-700: #512da8;
60
+ $color-deep-purple-800: #4527a0;
61
+ $color-deep-purple-900: #311b92;
62
+ $color-deep-purple-a100: #b388ff;
63
+ $color-deep-purple-a200: #7c4dff;
64
+ $color-deep-purple-a400: #651fff;
65
+ $color-deep-purple-a700: #6200ea;
66
+
67
+ // Indigos
68
+ $color-indigo-50: #e8eaf6;
69
+ $color-indigo-100: #c5cae9;
70
+ $color-indigo-200: #9fa8da;
71
+ $color-indigo-300: #7986cb;
72
+ $color-indigo-400: #5c6bc0;
73
+ $color-indigo-500: #3f51b5;
74
+ $color-indigo-600: #3949ab;
75
+ $color-indigo-700: #303f9f;
76
+ $color-indigo-800: #283593;
77
+ $color-indigo-900: #1a237e;
78
+ $color-indigo-a100: #8c9eff;
79
+ $color-indigo-a200: #536dfe;
80
+ $color-indigo-a400: #3d5afe;
81
+ $color-indigo-a700: #304ffe;
82
+
83
+ // Blues
84
+ $color-blue-50: #e3f2fd;
85
+ $color-blue-100: #bbdefb;
86
+ $color-blue-200: #90caf9;
87
+ $color-blue-300: #64b5f6;
88
+ $color-blue-400: #42a5f5;
89
+ $color-blue-500: #2196f3;
90
+ $color-blue-600: #1e88e5;
91
+ $color-blue-700: #1976d2;
92
+ $color-blue-800: #1565c0;
93
+ $color-blue-900: #0d47a1;
94
+ $color-blue-a100: #82b1ff;
95
+ $color-blue-a200: #448aff;
96
+ $color-blue-a400: #2979ff;
97
+ $color-blue-a700: #2962ff;
98
+
99
+ // Light blues
100
+ $color-light-blue-50: #e1f5fe;
101
+ $color-light-blue-100: #b3e5fc;
102
+ $color-light-blue-200: #81d4fa;
103
+ $color-light-blue-300: #4fc3f7;
104
+ $color-light-blue-400: #29b6f6;
105
+ $color-light-blue-500: #03a9f4;
106
+ $color-light-blue-600: #039be5;
107
+ $color-light-blue-700: #0288d1;
108
+ $color-light-blue-800: #0277bd;
109
+ $color-light-blue-900: #01579b;
110
+ $color-light-blue-a100: #80d8ff;
111
+ $color-light-blue-a200: #40c4ff;
112
+ $color-light-blue-a400: #00b0ff;
113
+ $color-light-blue-a700: #0091ea;
114
+
115
+ // Cyan
116
+ $color-cyan-50: #e0f7fa;
117
+ $color-cyan-100: #b2ebf2;
118
+ $color-cyan-200: #80deea;
119
+ $color-cyan-300: #4dd0e1;
120
+ $color-cyan-400: #26c6da;
121
+ $color-cyan-500: #00bcd4;
122
+ $color-cyan-600: #00acc1;
123
+ $color-cyan-700: #0097a7;
124
+ $color-cyan-800: #00838f;
125
+ $color-cyan-900: #006064;
126
+ $color-cyan-a100: #84ffff;
127
+ $color-cyan-a200: #18ffff;
128
+ $color-cyan-a400: #00e5ff;
129
+ $color-cyan-a700: #00b8d4;
130
+
131
+ // Teals
132
+ $color-teal-50: #e0f2f1;
133
+ $color-teal-100: #b2dfdb;
134
+ $color-teal-200: #80cbc4;
135
+ $color-teal-300: #4db6ac;
136
+ $color-teal-400: #26a69a;
137
+ $color-teal-500: #009688;
138
+ $color-teal-600: #00897b;
139
+ $color-teal-700: #00796b;
140
+ $color-teal-800: #00695c;
141
+ $color-teal-900: #004d40;
142
+ $color-teal-a100: #a7ffeb;
143
+ $color-teal-a200: #64ffda;
144
+ $color-teal-a400: #1de9b6;
145
+ $color-teal-a700: #00bfa5;
146
+
147
+ // Greens
148
+ $color-green-50: #e8f5e9;
149
+ $color-green-100: #c8e6c9;
150
+ $color-green-200: #a5d6a7;
151
+ $color-green-300: #81c784;
152
+ $color-green-400: #66bb6a;
153
+ $color-green-500: #4caf50;
154
+ $color-green-600: #43a047;
155
+ $color-green-700: #388e3c;
156
+ $color-green-800: #2e7d32;
157
+ $color-green-900: #1b5e20;
158
+ $color-green-a100: #b9f6ca;
159
+ $color-green-a200: #69f0ae;
160
+ $color-green-a400: #00e676;
161
+ $color-green-a700: #00c853;
162
+
163
+ // Light-greens
164
+ $color-light-green-50: #f1f8e9;
165
+ $color-light-green-100: #dcedc8;
166
+ $color-light-green-200: #c5e1a5;
167
+ $color-light-green-300: #aed581;
168
+ $color-light-green-400: #9ccc65;
169
+ $color-light-green-500: #8bc34a;
170
+ $color-light-green-600: #7cb342;
171
+ $color-light-green-700: #689f38;
172
+ $color-light-green-800: #558b2f;
173
+ $color-light-green-900: #33691e;
174
+ $color-light-green-a100: #ccff90;
175
+ $color-light-green-a200: #b2ff59;
176
+ $color-light-green-a400: #76ff03;
177
+ $color-light-green-a700: #64dd17;
178
+
179
+ // Limes
180
+ $color-lime-50: #f9fbe7;
181
+ $color-lime-100: #f0f4c3;
182
+ $color-lime-200: #e6ee9c;
183
+ $color-lime-300: #dce775;
184
+ $color-lime-400: #d4e157;
185
+ $color-lime-500: #cddc39;
186
+ $color-lime-600: #c0ca33;
187
+ $color-lime-700: #afb42b;
188
+ $color-lime-800: #9e9d24;
189
+ $color-lime-900: #827717;
190
+ $color-lime-a100: #f4ff81;
191
+ $color-lime-a200: #eeff41;
192
+ $color-lime-a400: #c6ff00;
193
+ $color-lime-a700: #aeea00;
194
+
195
+ // Yellows
196
+ $color-yellow-50: #fffde7;
197
+ $color-yellow-100: #fff9c4;
198
+ $color-yellow-200: #fff59d;
199
+ $color-yellow-300: #fff176;
200
+ $color-yellow-400: #ffee58;
201
+ $color-yellow-500: #ffeb3b;
202
+ $color-yellow-600: #fdd835;
203
+ $color-yellow-700: #fbc02d;
204
+ $color-yellow-800: #f9a825;
205
+ $color-yellow-900: #f57f17;
206
+ $color-yellow-a100: #ffff8d;
207
+ $color-yellow-a200: #ffff00;
208
+ $color-yellow-a400: #ffea00;
209
+ $color-yellow-a700: #ffd600;
210
+
211
+ // Ambers
212
+ $color-amber-50: #fff8e1;
213
+ $color-amber-100: #ffecb3;
214
+ $color-amber-200: #ffe082;
215
+ $color-amber-300: #ffd54f;
216
+ $color-amber-400: #ffca28;
217
+ $color-amber-500: #ffc107;
218
+ $color-amber-600: #ffb300;
219
+ $color-amber-700: #ffa000;
220
+ $color-amber-800: #ff8f00;
221
+ $color-amber-900: #ff6f00;
222
+ $color-amber-a100: #ffe57f;
223
+ $color-amber-a200: #ffd740;
224
+ $color-amber-a400: #ffc400;
225
+ $color-amber-a700: #ffab00;
226
+
227
+ // Oranges
228
+ $color-orange-50: #fff3e0;
229
+ $color-orange-100: #ffe0b2;
230
+ $color-orange-200: #ffcc80;
231
+ $color-orange-300: #ffb74d;
232
+ $color-orange-400: #ffa726;
233
+ $color-orange-500: #ff9800;
234
+ $color-orange-600: #fb8c00;
235
+ $color-orange-700: #f57c00;
236
+ $color-orange-800: #ef6c00;
237
+ $color-orange-900: #e65100;
238
+ $color-orange-a100: #ffd180;
239
+ $color-orange-a200: #ffab40;
240
+ $color-orange-a400: #ff9100;
241
+ $color-orange-a700: #ff6d00;
242
+
243
+ // Deep oranges
244
+ $color-deep-orange-50: #fbe9e7;
245
+ $color-deep-orange-100: #ffccbc;
246
+ $color-deep-orange-200: #ffab91;
247
+ $color-deep-orange-300: #ff8a65;
248
+ $color-deep-orange-400: #ff7043;
249
+ $color-deep-orange-500: #ff5722;
250
+ $color-deep-orange-600: #f4511e;
251
+ $color-deep-orange-700: #e64a19;
252
+ $color-deep-orange-800: #d84315;
253
+ $color-deep-orange-900: #bf360c;
254
+ $color-deep-orange-a100: #ff9e80;
255
+ $color-deep-orange-a200: #ff6e40;
256
+ $color-deep-orange-a400: #ff3d00;
257
+ $color-deep-orange-a700: #dd2c00;
258
+
259
+ // Browns
260
+ $color-brown-50: #efebe9;
261
+ $color-brown-100: #d7ccc8;
262
+ $color-brown-200: #bcaaa4;
263
+ $color-brown-300: #a1887f;
264
+ $color-brown-400: #8d6e63;
265
+ $color-brown-500: #795548;
266
+ $color-brown-600: #6d4c41;
267
+ $color-brown-700: #5d4037;
268
+ $color-brown-800: #4e342e;
269
+ $color-brown-900: #3e2723;
270
+
271
+ // Greys
272
+ $color-grey-50: #fafafa;
273
+ $color-grey-100: #f5f5f5;
274
+ $color-grey-200: #eeeeee;
275
+ $color-grey-300: #e0e0e0;
276
+ $color-grey-400: #bdbdbd;
277
+ $color-grey-500: #9e9e9e;
278
+ $color-grey-600: #757575;
279
+ $color-grey-700: #616161;
280
+ $color-grey-800: #424242;
281
+ $color-grey-900: #212121;
282
+
283
+ // Blue-greys
284
+ $color-blue-grey-50: #eceff1;
285
+ $color-blue-grey-100: #cfd8dc;
286
+ $color-blue-grey-200: #b0bec5;
287
+ $color-blue-grey-300: #90a4ae;
288
+ $color-blue-grey-400: #78909c;
289
+ $color-blue-grey-500: #607d8b;
290
+ $color-blue-grey-600: #546e7a;
291
+ $color-blue-grey-700: #455a64;
292
+ $color-blue-grey-800: #37474f;
293
+ $color-blue-grey-900: #263238;
294
+ $color-blue-grey-1000: #11171a;
295
+
296
+ // Basic colors
297
+ $color-white: #ffffff;
298
+ $color-black: #000000;
299
+
300
+ // Semantic colors:
301
+ $color-brand: #f6bb42;
302
+ $color-danger: $color-red-500;
303
+ $color-ghost: transparent;
304
+ $color-info: $color-blue-300;
305
+ $color-muted: $color-grey-200;
306
+ $color-primary: $color-blue-500;
307
+ $color-success: $color-green-500;
308
+ $color-warning: $color-orange-500;
309
+
310
+ // Foreground/background colors
311
+ $color-base: $color-grey-600;
312
+ $color-background-base: $color-grey-200;
313
+ $color-inverse: $color-grey-100;
314
+ $color-background-inverse: $color-orange-300;
315
+
316
+ // Information messages
317
+ $color-error-background: $color-red-500;
318
+ $color-error: $color-white;
319
+
320
+ // Borders
321
+ $color-borders: transparentize($color-base, .8);
322
+
323
+ // Forms
324
+ $forms-color: $color-grey-800;
325
+
326
+ // Links
327
+ $link-color: $color-grey-800;
328
+ $link-color-hover: $color-grey-600;
329
+
330
+ // User content colors
331
+ $el-content-album-bg: $color-white;
332
+ $el-content-article-bg: $color-white;
333
+ $el-content-note-bg: $color-white;
334
+ $el-content-project-bg: $color-white;
335
+ $el-content-upload-bg: $color-white;
336
+
337
+ // Classifiers
338
+ $el-language-bg: $color-green-100;
339
+ $el-license-bg: $color-orange-200;
340
+ $el-tag-bg: $color-blue-100;
341
+ $el-user-bg: $color-blue-grey-100;
342
+
343
+ // NSFW notices
344
+ $color-nsfw: $color-grey-400;
345
+ $color-nsfw-background: $color-grey-300;