elabs 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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;