elabs 3.0.0 → 4.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +89 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +7 -2
- data/README.md +24 -17
- data/ROADMAP.md +8 -7
- data/app/assets/javascripts/elabs/application.js.erb +42 -0
- data/app/assets/javascripts/elabs/forms.js +10 -0
- data/app/assets/javascripts/elabs/helpers-markdown.js +11 -33
- data/app/assets/javascripts/elabs/helpers.js +28 -0
- data/app/assets/javascripts/elabs/hljs.js +4 -0
- data/app/assets/stylesheets/elabs/_colors.scss +5 -0
- data/app/assets/stylesheets/elabs/_fixes.scss +6 -0
- data/app/assets/stylesheets/elabs/_icons.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_acts.scss +11 -0
- data/app/assets/stylesheets/elabs/app/_buttons.scss +8 -0
- data/app/assets/stylesheets/elabs/app/_comments.scss +10 -1
- data/app/assets/stylesheets/elabs/app/_content.scss +15 -0
- data/app/assets/stylesheets/elabs/app/_content_statuses.scss +32 -0
- data/app/assets/stylesheets/elabs/app/_forms.scss +5 -0
- data/app/assets/stylesheets/elabs/app/_helpers.scss +10 -0
- data/app/assets/stylesheets/elabs/app/_layout.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_modals.scss +4 -0
- data/app/assets/stylesheets/elabs/app/_tables.scss +31 -0
- data/app/assets/stylesheets/elabs/app/_typo.scss +14 -0
- data/app/assets/stylesheets/elabs/app/_users.scss +14 -6
- data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +8 -1
- data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +1 -26
- data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +11 -1
- data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +26 -0
- data/app/assets/stylesheets/elabs/app/mixins/_content-inline.scss +7 -0
- data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +88 -0
- data/app/assets/stylesheets/elabs/lib/_hljs.scss +5 -0
- data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +11 -11
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +10 -2
- data/app/assets/stylesheets/elabs/style.scss +11 -1
- data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
- data/app/controllers/elabs/admin/admin_content_application_controller.rb +2 -2
- data/app/controllers/elabs/admin/languages_controller.rb +1 -1
- data/app/controllers/elabs/admin/licenses_controller.rb +1 -1
- data/app/controllers/elabs/admin/tags_controller.rb +1 -1
- data/app/controllers/elabs/admin/users_controller.rb +1 -1
- data/app/controllers/elabs/albums_controller.rb +1 -1
- data/app/controllers/elabs/articles_controller.rb +1 -1
- data/app/controllers/elabs/content_application_controller.rb +2 -1
- data/app/controllers/elabs/elabs_public_controller.rb +28 -8
- data/app/controllers/elabs/languages_controller.rb +1 -1
- data/app/controllers/elabs/licenses_controller.rb +1 -1
- data/app/controllers/elabs/member/albums_controller.rb +1 -1
- data/app/controllers/elabs/member/articles_controller.rb +1 -1
- data/app/controllers/elabs/member/markdown_previewer_controller.rb +11 -0
- data/app/controllers/elabs/member/member_content_application_controller.rb +2 -2
- data/app/controllers/elabs/member/notes_controller.rb +1 -1
- data/app/controllers/elabs/member/projects_controller.rb +1 -1
- data/app/controllers/elabs/member/uploads_controller.rb +1 -1
- data/app/controllers/elabs/notes_controller.rb +1 -1
- data/app/controllers/elabs/projects_controller.rb +1 -1
- data/app/controllers/elabs/tags_controller.rb +1 -6
- data/app/controllers/elabs/uploads_controller.rb +1 -1
- data/app/controllers/elabs/users_controller.rb +1 -1
- data/app/helpers/elabs/acts_helper.rb +2 -2
- data/app/helpers/elabs/application_helper.rb +30 -3
- data/app/helpers/elabs/content_helper.rb +9 -3
- data/app/helpers/elabs/content_renderer_helper.rb +118 -8
- data/app/helpers/elabs/rss_helper.rb +9 -0
- data/app/helpers/elabs/thumbnails_helper.rb +24 -19
- data/app/helpers/elabs/time_helper.rb +7 -1
- data/app/models/elabs/album.rb +2 -0
- data/app/models/elabs/application_content_record.rb +3 -0
- data/app/models/elabs/article.rb +2 -0
- data/app/models/elabs/concerns/actable_entity.rb +17 -2
- data/app/models/elabs/concerns/content_entity.rb +2 -2
- data/app/models/elabs/concerns/sluggable.rb +40 -0
- data/app/models/elabs/language.rb +8 -0
- data/app/models/elabs/license.rb +5 -0
- data/app/models/elabs/note.rb +2 -0
- data/app/models/elabs/project.rb +3 -0
- data/app/models/elabs/tag.rb +5 -0
- data/app/models/elabs/upload.rb +2 -0
- data/app/models/elabs/user.rb +10 -2
- data/app/views/elabs/acts/_act.rss.builder +22 -0
- data/app/views/elabs/acts/index.html.haml +5 -1
- data/app/views/elabs/acts/index.rss.builder +15 -0
- data/app/views/elabs/admin/albums/index.html.haml +4 -4
- data/app/views/elabs/admin/articles/index.html.haml +4 -4
- data/app/views/elabs/admin/languages/_form.html.haml +2 -1
- data/app/views/elabs/admin/licenses/_form.html.haml +2 -1
- data/app/views/elabs/admin/notes/index.html.haml +5 -5
- data/app/views/elabs/admin/projects/index.html.haml +4 -4
- data/app/views/elabs/admin/reports/index.html.haml +2 -2
- data/app/views/elabs/admin/tags/_form.html.haml +2 -1
- data/app/views/elabs/admin/uploads/index.html.haml +4 -4
- data/app/views/elabs/admin/users/index.html.haml +3 -3
- data/app/views/elabs/admin/users/show.html.haml +2 -2
- data/app/views/elabs/albums/_album.html.haml +1 -1
- data/app/views/elabs/albums/_album.rss.builder +7 -0
- data/app/views/elabs/albums/_album_inline.html.haml +8 -0
- data/app/views/elabs/albums/index.rss.builder +14 -0
- data/app/views/elabs/albums/show.html.haml +3 -3
- data/app/views/elabs/articles/_article.html.haml +1 -1
- data/app/views/elabs/articles/_article.rss.builder +7 -0
- data/app/views/elabs/articles/_article_inline.html.haml +8 -0
- data/app/views/elabs/articles/index.rss.builder +14 -0
- data/app/views/elabs/articles/show.html.haml +4 -4
- data/app/views/elabs/comments/_comments.html.haml +4 -3
- data/app/views/elabs/comments/_form.html.haml +18 -6
- data/app/views/elabs/languages/_associations.html.haml +15 -5
- data/app/views/elabs/layouts/_footer.html.haml +8 -1
- data/app/views/elabs/layouts/_hidden_entry.html.haml +4 -4
- data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -4
- data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +6 -0
- data/app/views/elabs/layouts/_shortcode_infinite_loop.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_infinite_loop_inline.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_missing_content.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_missing_content_inline.html.haml +2 -0
- data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +2 -0
- data/app/views/elabs/layouts/admin_application.html.haml +2 -2
- data/app/views/elabs/layouts/application.html.haml +11 -3
- data/app/views/elabs/layouts/member_application.html.haml +5 -2
- data/app/views/elabs/layouts/widgets/_github_repo_card.html.haml +12 -0
- data/app/views/elabs/layouts/widgets/_github_repo_inline.html.haml +8 -0
- data/app/views/elabs/layouts/widgets/_github_user_card.html.haml +7 -0
- data/app/views/elabs/layouts/widgets/_gitlab_group_card.html.haml +11 -0
- data/app/views/elabs/layouts/widgets/_gitlab_repo_card.html.haml +12 -0
- data/app/views/elabs/layouts/widgets/_gitlab_repo_inline.html.haml +8 -0
- data/app/views/elabs/layouts/widgets/_gitlab_user_card.html.haml +11 -0
- data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +5 -0
- data/app/views/elabs/layouts/widgets/vue/_github_repo_card_vue.html.haml +72 -0
- data/app/views/elabs/layouts/widgets/vue/_github_user_card_vue.html.haml +64 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_group_card_vue.html.haml +64 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_repo_card_vue.html.haml +69 -0
- data/app/views/elabs/layouts/widgets/vue/_gitlab_user_card_vue.html.haml +99 -0
- data/app/views/elabs/licenses/_associations.html.haml +15 -5
- data/app/views/elabs/licenses/show.json.jbuilder +1 -1
- data/app/views/elabs/member/albums/_form.html.haml +12 -1
- data/app/views/elabs/member/albums/index.html.haml +4 -4
- data/app/views/elabs/member/articles/_form.html.haml +12 -1
- data/app/views/elabs/member/articles/index.html.haml +4 -4
- data/app/views/elabs/member/markdown_previewer/preview.json.jbuilder +2 -0
- data/app/views/elabs/member/notes/_form.html.haml +12 -1
- data/app/views/elabs/member/notes/index.html.haml +4 -4
- data/app/views/elabs/member/notifications/index.html.haml +1 -1
- data/app/views/elabs/member/preferences/_form.html.haml +2 -1
- data/app/views/elabs/member/projects/_form.html.haml +18 -2
- data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
- data/app/views/elabs/member/projects/index.html.haml +4 -4
- data/app/views/elabs/member/uploads/_form.html.haml +12 -1
- data/app/views/elabs/member/uploads/index.html.haml +6 -9
- data/app/views/elabs/member/users/_form.html.haml +2 -1
- data/app/views/elabs/notes/_note.html.haml +2 -2
- data/app/views/elabs/notes/_note.rss.builder +7 -0
- data/app/views/elabs/notes/_note_inline.haml +8 -0
- data/app/views/elabs/notes/index.rss.builder +14 -0
- data/app/views/elabs/notes/show.html.haml +3 -3
- data/app/views/elabs/projects/_associations.html.haml +12 -4
- data/app/views/elabs/projects/_project.html.haml +1 -1
- data/app/views/elabs/projects/_project.json.jbuilder +2 -0
- data/app/views/elabs/projects/_project.rss.builder +7 -0
- data/app/views/elabs/projects/_project_inline.html.haml +9 -0
- data/app/views/elabs/projects/index.rss.builder +14 -0
- data/app/views/elabs/projects/show.html.haml +20 -9
- data/app/views/elabs/reports/_form.html.haml +2 -1
- data/app/views/elabs/tags/_associations.html.haml +15 -5
- data/app/views/elabs/tags/index.html.haml +2 -0
- data/app/views/elabs/uploads/_preview.html.haml +1 -6
- data/app/views/elabs/uploads/_upload.rss.builder +7 -0
- data/app/views/elabs/uploads/_upload_inline.html.haml +8 -0
- data/app/views/elabs/uploads/index.rss.builder +14 -0
- data/app/views/elabs/uploads/show.html.haml +7 -8
- data/app/views/elabs/users/_associations.html.haml +15 -5
- data/app/views/elabs/users/_user.html.haml +24 -18
- data/app/views/elabs/users/_user_inline.html.haml +7 -0
- data/app/views/elabs/users/show.html.haml +2 -2
- data/config/brakeman.ignore +13 -111
- data/config/locales/en.yml +6 -0
- data/config/locales/fr.yml +6 -0
- data/config/routes.rb +30 -28
- data/db/migrate/20180917133442_add_urls_to_projects.rb +6 -0
- data/db/migrate/20181005105642_add_reason_to_acts.rb +5 -0
- data/db/migrate/20181006073541_add_slugs.rb +39 -0
- data/docs/migrating.md +51 -0
- data/docs/setup.md +1 -0
- data/lib/elabs.rb +5 -0
- data/lib/elabs/version.rb +1 -1
- data/lib/generators/elabs/install_generator.rb +1 -0
- data/lib/generators/elabs/views_generator.rb +0 -1
- data/lib/generators/templates/elabs.rb +4 -0
- data/lib/generators/templates/user_model.rb +6 -0
- data/locale/app.pot +129 -9
- data/locale/en/app.edit.po +127 -7
- data/locale/en/app.po +127 -7
- data/locale/fr/app.edit.po +130 -10
- data/locale/fr/app.po +129 -9
- metadata +59 -5
- data/app/assets/javascripts/elabs/application.js +0 -27
- data/app/assets/stylesheets/elabs/app/_nsfw.scss +0 -5
- data/lib/assets/javascripts/markdown-it-8.4.2.min.js +0 -1
|
@@ -127,7 +127,7 @@ readers do not read off random characters that represent icons */
|
|
|
127
127
|
//.#{$fa-css-prefix}-broom:before { content: fa-content($fa-var-broom); }
|
|
128
128
|
//.#{$fa-css-prefix}-brush:before { content: fa-content($fa-var-brush); }
|
|
129
129
|
//.#{$fa-css-prefix}-btc:before { content: fa-content($fa-var-btc); }
|
|
130
|
-
|
|
130
|
+
.#{$fa-css-prefix}-bug:before { content: fa-content($fa-var-bug); }
|
|
131
131
|
//.#{$fa-css-prefix}-building:before { content: fa-content($fa-var-building); }
|
|
132
132
|
//.#{$fa-css-prefix}-bullhorn:before { content: fa-content($fa-var-bullhorn); }
|
|
133
133
|
//.#{$fa-css-prefix}-bullseye:before { content: fa-content($fa-var-bullseye); }
|
|
@@ -214,8 +214,8 @@ readers do not read off random characters that represent icons */
|
|
|
214
214
|
//.#{$fa-css-prefix}-cloudsmith:before { content: fa-content($fa-var-cloudsmith); }
|
|
215
215
|
//.#{$fa-css-prefix}-cloudversify:before { content: fa-content($fa-var-cloudversify); }
|
|
216
216
|
//.#{$fa-css-prefix}-cocktail:before { content: fa-content($fa-var-cocktail); }
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
.#{$fa-css-prefix}-code:before { content: fa-content($fa-var-code); }
|
|
218
|
+
.#{$fa-css-prefix}-code-branch:before { content: fa-content($fa-var-code-branch); }
|
|
219
219
|
//.#{$fa-css-prefix}-codepen:before { content: fa-content($fa-var-codepen); }
|
|
220
220
|
//.#{$fa-css-prefix}-codiepie:before { content: fa-content($fa-var-codiepie); }
|
|
221
221
|
//.#{$fa-css-prefix}-coffee:before { content: fa-content($fa-var-coffee); }
|
|
@@ -333,7 +333,7 @@ readers do not read off random characters that represent icons */
|
|
|
333
333
|
//.#{$fa-css-prefix}-euro-sign:before { content: fa-content($fa-var-euro-sign); }
|
|
334
334
|
//.#{$fa-css-prefix}-exchange-alt:before { content: fa-content($fa-var-exchange-alt); }
|
|
335
335
|
.#{$fa-css-prefix}-exclamation:before { content: fa-content($fa-var-exclamation); }
|
|
336
|
-
|
|
336
|
+
.#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); }
|
|
337
337
|
//.#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); }
|
|
338
338
|
//.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); }
|
|
339
339
|
//.#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }
|
|
@@ -414,7 +414,7 @@ readers do not read off random characters that represent icons */
|
|
|
414
414
|
//.#{$fa-css-prefix}-free-code-camp:before { content: fa-content($fa-var-free-code-camp); }
|
|
415
415
|
//.#{$fa-css-prefix}-freebsd:before { content: fa-content($fa-var-freebsd); }
|
|
416
416
|
//.#{$fa-css-prefix}-frog:before { content: fa-content($fa-var-frog); }
|
|
417
|
-
|
|
417
|
+
.#{$fa-css-prefix}-frown:before { content: fa-content($fa-var-frown); }
|
|
418
418
|
//.#{$fa-css-prefix}-frown-open:before { content: fa-content($fa-var-frown-open); }
|
|
419
419
|
//.#{$fa-css-prefix}-fulcrum:before { content: fa-content($fa-var-fulcrum); }
|
|
420
420
|
//.#{$fa-css-prefix}-futbol:before { content: fa-content($fa-var-futbol); }
|
|
@@ -431,11 +431,11 @@ readers do not read off random characters that represent icons */
|
|
|
431
431
|
//.#{$fa-css-prefix}-gift:before { content: fa-content($fa-var-gift); }
|
|
432
432
|
//.#{$fa-css-prefix}-git:before { content: fa-content($fa-var-git); }
|
|
433
433
|
//.#{$fa-css-prefix}-git-square:before { content: fa-content($fa-var-git-square); }
|
|
434
|
-
|
|
434
|
+
.#{$fa-css-prefix}-github:before { content: fa-content($fa-var-github); }
|
|
435
435
|
//.#{$fa-css-prefix}-github-alt:before { content: fa-content($fa-var-github-alt); }
|
|
436
436
|
//.#{$fa-css-prefix}-github-square:before { content: fa-content($fa-var-github-square); }
|
|
437
437
|
//.#{$fa-css-prefix}-gitkraken:before { content: fa-content($fa-var-gitkraken); }
|
|
438
|
-
|
|
438
|
+
.#{$fa-css-prefix}-gitlab:before { content: fa-content($fa-var-gitlab); }
|
|
439
439
|
//.#{$fa-css-prefix}-gitter:before { content: fa-content($fa-var-gitter); }
|
|
440
440
|
//.#{$fa-css-prefix}-glass-martini:before { content: fa-content($fa-var-glass-martini); }
|
|
441
441
|
//.#{$fa-css-prefix}-glass-martini-alt:before { content: fa-content($fa-var-glass-martini-alt); }
|
|
@@ -541,7 +541,7 @@ readers do not read off random characters that represent icons */
|
|
|
541
541
|
//.#{$fa-css-prefix}-inbox:before { content: fa-content($fa-var-inbox); }
|
|
542
542
|
//.#{$fa-css-prefix}-indent:before { content: fa-content($fa-var-indent); }
|
|
543
543
|
//.#{$fa-css-prefix}-industry:before { content: fa-content($fa-var-industry); }
|
|
544
|
-
|
|
544
|
+
.#{$fa-css-prefix}-infinity:before { content: fa-content($fa-var-infinity); }
|
|
545
545
|
.#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); }
|
|
546
546
|
//.#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); }
|
|
547
547
|
//.#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); }/* stylelint-disable */
|
|
@@ -805,7 +805,7 @@ readers do not read off random characters that represent icons */
|
|
|
805
805
|
//.#{$fa-css-prefix}-rocket:before { content: fa-content($fa-var-rocket); }
|
|
806
806
|
//.#{$fa-css-prefix}-rocketchat:before { content: fa-content($fa-var-rocketchat); }
|
|
807
807
|
//.#{$fa-css-prefix}-rockrms:before { content: fa-content($fa-var-rockrms); }
|
|
808
|
-
|
|
808
|
+
.#{$fa-css-prefix}-rss:before { content: fa-content($fa-var-rss); }
|
|
809
809
|
//.#{$fa-css-prefix}-rss-square:before { content: fa-content($fa-var-rss-square); }
|
|
810
810
|
//.#{$fa-css-prefix}-ruble-sign:before { content: fa-content($fa-var-ruble-sign); }
|
|
811
811
|
//.#{$fa-css-prefix}-ruler:before { content: fa-content($fa-var-ruler); }
|
|
@@ -887,7 +887,7 @@ readers do not read off random characters that represent icons */
|
|
|
887
887
|
//.#{$fa-css-prefix}-spa:before { content: fa-content($fa-var-spa); }
|
|
888
888
|
//.#{$fa-css-prefix}-space-shuttle:before { content: fa-content($fa-var-space-shuttle); }
|
|
889
889
|
//.#{$fa-css-prefix}-speakap:before { content: fa-content($fa-var-speakap); }
|
|
890
|
-
|
|
890
|
+
.#{$fa-css-prefix}-spinner:before { content: fa-content($fa-var-spinner); }
|
|
891
891
|
//.#{$fa-css-prefix}-splotch:before { content: fa-content($fa-var-splotch); }
|
|
892
892
|
//.#{$fa-css-prefix}-spotify:before { content: fa-content($fa-var-spotify); }
|
|
893
893
|
//.#{$fa-css-prefix}-spray-can:before { content: fa-content($fa-var-spray-can); }
|
|
@@ -897,7 +897,7 @@ readers do not read off random characters that represent icons */
|
|
|
897
897
|
//.#{$fa-css-prefix}-stack-exchange:before { content: fa-content($fa-var-stack-exchange); }
|
|
898
898
|
//.#{$fa-css-prefix}-stack-overflow:before { content: fa-content($fa-var-stack-overflow); }
|
|
899
899
|
//.#{$fa-css-prefix}-stamp:before { content: fa-content($fa-var-stamp); }
|
|
900
|
-
|
|
900
|
+
.#{$fa-css-prefix}-star:before { content: fa-content($fa-var-star); }
|
|
901
901
|
//.#{$fa-css-prefix}-star-half:before { content: fa-content($fa-var-star-half); }
|
|
902
902
|
//.#{$fa-css-prefix}-star-half-alt:before { content: fa-content($fa-var-star-half-alt); }
|
|
903
903
|
//.#{$fa-css-prefix}-staylinked:before { content: fa-content($fa-var-staylinked); }
|
|
@@ -27,6 +27,14 @@ $font-family-monospace : consolas, courier, monospace; // font for code and samp
|
|
|
27
27
|
$font-size-base : 1.6rem !default;
|
|
28
28
|
|
|
29
29
|
$font-sizes: (
|
|
30
|
+
smaller: (
|
|
31
|
+
mobile : 1rem,
|
|
32
|
+
desktop : 1.2rem
|
|
33
|
+
),
|
|
34
|
+
small: (
|
|
35
|
+
mobile : 1.2rem,
|
|
36
|
+
desktop : 1.4rem
|
|
37
|
+
),
|
|
30
38
|
base: (
|
|
31
39
|
mobile : 1.4rem,
|
|
32
40
|
desktop : $font-size-base
|
|
@@ -200,8 +208,8 @@ $variants-list: (
|
|
|
200
208
|
(show, $color-primary, $white, none),
|
|
201
209
|
(edit, $color-primary, $white, none),
|
|
202
210
|
(success, $color-success, $white, none),
|
|
203
|
-
(info, $color-info, $
|
|
204
|
-
(notice, $color-info, $
|
|
211
|
+
(info, $color-info, $white, none),
|
|
212
|
+
(notice, $color-info, $white, none),
|
|
205
213
|
(warning, $color-warning, $black, none),
|
|
206
214
|
(lock, $color-warning, $black, none),
|
|
207
215
|
(danger, $color-danger, $white, none),
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
@import 'app/mixins/classifier-card';
|
|
9
9
|
@import 'app/mixins/content-card';
|
|
10
10
|
@import 'app/mixins/content-full';
|
|
11
|
+
@import 'app/mixins/content-inline';
|
|
11
12
|
@import 'app/mixins/icon';
|
|
12
13
|
|
|
13
14
|
/* ------------------
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
@import 'app/buttons';
|
|
42
43
|
@import 'app/comments';
|
|
43
44
|
@import 'app/content';
|
|
45
|
+
@import 'app/content_statuses';
|
|
44
46
|
@import 'app/content_uploads';
|
|
45
47
|
@import 'app/empty';
|
|
46
48
|
@import 'app/errors';
|
|
@@ -52,13 +54,17 @@
|
|
|
52
54
|
@import 'app/link-to-top';
|
|
53
55
|
@import 'app/medias';
|
|
54
56
|
@import 'app/modals';
|
|
55
|
-
@import 'app/nsfw';
|
|
56
57
|
@import 'app/pagination';
|
|
58
|
+
@import 'app/tables';
|
|
57
59
|
@import 'app/tabs';
|
|
58
60
|
@import 'app/tags';
|
|
59
61
|
@import 'app/toolbars';
|
|
62
|
+
@import 'app/typo';
|
|
60
63
|
@import 'app/users';
|
|
61
64
|
|
|
65
|
+
// Widgets
|
|
66
|
+
@import 'app/widgets/git-cards';
|
|
67
|
+
|
|
62
68
|
// Admin zone
|
|
63
69
|
@import 'app/admin-members/forms';
|
|
64
70
|
@import 'app/admin-members/indexes';
|
|
@@ -71,3 +77,7 @@
|
|
|
71
77
|
|
|
72
78
|
// Overrides
|
|
73
79
|
@import 'lib/codemirror';
|
|
80
|
+
@import 'lib/hljs';
|
|
81
|
+
|
|
82
|
+
// Fixes
|
|
83
|
+
@import 'fixes';
|
|
@@ -12,7 +12,7 @@ module Elabs
|
|
|
12
12
|
|
|
13
13
|
def authenticate_admin!
|
|
14
14
|
authenticate_user!
|
|
15
|
-
redirect_to user_url(current_user
|
|
15
|
+
redirect_to user_url(current_user), status: :unauthorized unless current_user.admin?
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -47,8 +47,8 @@ module Elabs
|
|
|
47
47
|
|
|
48
48
|
# Use callbacks to share common setup or constraints between actions.
|
|
49
49
|
def set_entity
|
|
50
|
-
|
|
51
|
-
@entity = self.class::MODEL.
|
|
50
|
+
slug = params[:slug] || params["#{self.class::SINGULAR_NAME}_slug"]
|
|
51
|
+
@entity = self.class::MODEL.find_by_slug(slug)
|
|
52
52
|
create_instance_variable self.class::SINGULAR_NAME
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -65,7 +65,7 @@ module Elabs
|
|
|
65
65
|
|
|
66
66
|
# Use callbacks to share common setup or constraints between actions.
|
|
67
67
|
def set_language
|
|
68
|
-
@language = Language.
|
|
68
|
+
@language = Language.find_by_iso639_1(params[:iso639_1])
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
@@ -65,7 +65,7 @@ module Elabs
|
|
|
65
65
|
|
|
66
66
|
# Use callbacks to share common setup or constraints between actions.
|
|
67
67
|
def set_license
|
|
68
|
-
@license = License.
|
|
68
|
+
@license = License.find_by_slug(params[:slug])
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
@@ -44,7 +44,7 @@ module Elabs
|
|
|
44
44
|
|
|
45
45
|
# Use callbacks to share common setup or constraints between actions.
|
|
46
46
|
def set_tag
|
|
47
|
-
@tag = Tag.
|
|
47
|
+
@tag = Tag.find_by_slug(params[:slug])
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
@@ -31,7 +31,7 @@ module Elabs
|
|
|
31
31
|
|
|
32
32
|
# Use callbacks to share common setup or constraints between actions.
|
|
33
33
|
def set_admin_user
|
|
34
|
-
@user = User.
|
|
34
|
+
@user = User.find_by_username(params[:username])
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
@@ -19,7 +19,7 @@ module Elabs
|
|
|
19
19
|
|
|
20
20
|
# Use callbacks to share common setup or constraints between actions.
|
|
21
21
|
def set_album
|
|
22
|
-
@album = Album.find_publicly_visible(params[:
|
|
22
|
+
@album = Album.find_publicly_visible(params[:slug])
|
|
23
23
|
@album_uploads = @album.uploads.for_relation
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -36,7 +36,8 @@ module Elabs
|
|
|
36
36
|
def build_comment
|
|
37
37
|
@comment = Comment.new(comment_params)
|
|
38
38
|
params.each do |key, value|
|
|
39
|
-
|
|
39
|
+
# find the content by slug if needed
|
|
40
|
+
@comment.content_id = find_related_id_by_slug(key.chomp('_slug'), 'slug', value) if %w[album_slug article_slug note_slug project_slug upload_slug].include? key
|
|
40
41
|
end
|
|
41
42
|
@comment.content_type = params[:controller].classify
|
|
42
43
|
@comment.user = current_user if user_signed_in?
|
|
@@ -25,11 +25,12 @@ module Elabs
|
|
|
25
25
|
|
|
26
26
|
params.each do |p|
|
|
27
27
|
# No need to do this with "album_id" as there is no action requiring it (as for a /albums/xxx/uploads)
|
|
28
|
-
next unless %w[
|
|
28
|
+
next unless %w[tag_slug project_slug].include? p[0]
|
|
29
29
|
|
|
30
|
-
foreign_table = p[0].chomp('
|
|
30
|
+
foreign_table = p[0].chomp('_slug').pluralize.to_sym
|
|
31
31
|
orm_request = orm_request.joins(foreign_table)
|
|
32
|
-
|
|
32
|
+
id = find_related_id_by_slug(p[0].chomp('_slug'), 'slug', p[1])
|
|
33
|
+
where_clauses[foreign_table] = { id: id }
|
|
33
34
|
next
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -37,11 +38,14 @@ module Elabs
|
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def build_request_where(orm_request)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
nested_resource_fields = extract_nested_resource_fields_from_params
|
|
42
|
+
|
|
43
|
+
# Find nested resources filters in request params
|
|
44
|
+
nested_resource_fields.each do |field, details|
|
|
45
|
+
nested_param_value = params[field]
|
|
46
|
+
# Find Id from slug
|
|
47
|
+
id = find_related_id_by_slug(details[:type], details[:slug_field], nested_param_value)
|
|
48
|
+
orm_request = orm_request.where("#{details[:type]}_id" => id)
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
orm_request
|
|
@@ -76,5 +80,21 @@ module Elabs
|
|
|
76
80
|
end
|
|
77
81
|
orm_request
|
|
78
82
|
end
|
|
83
|
+
|
|
84
|
+
def find_related_id_by_slug(type, slug_field, slug_value)
|
|
85
|
+
"Elabs::#{type.classify}".constantize.select(:id).find_by(slug_field => slug_value).id
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def extract_nested_resource_fields_from_params
|
|
89
|
+
slug_parameters = {}
|
|
90
|
+
self.class::ALLOWED_NESTED_FROM.each do |n|
|
|
91
|
+
model = "Elabs::#{n.classify}".constantize
|
|
92
|
+
slug_field = model.const_defined?(:SLUG_FIELD) ? model::SLUG_FIELD : :id
|
|
93
|
+
slug_parameters["#{n}_#{slug_field}"] = { type: n, slug_field: slug_field }
|
|
94
|
+
end
|
|
95
|
+
# Remove HABTM possible nesting as they are handled in another place
|
|
96
|
+
# and slug fields that are not present in params
|
|
97
|
+
slug_parameters.reject { |field| %w[tag_slug project_slug].include?(field) || !params.include?(field) }
|
|
98
|
+
end
|
|
79
99
|
end
|
|
80
100
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Elabs
|
|
2
2
|
module Member
|
|
3
3
|
class AlbumsController < MemberContentApplicationController
|
|
4
|
-
ALLOWED_FIELDS = %i[name description sfw published hidden_in_history language_id license_id tags_list].freeze
|
|
4
|
+
ALLOWED_FIELDS = %i[name description sfw published hidden_in_history language_id license_id tags_list minor_update update_description].freeze
|
|
5
5
|
ALLOWED_RELATIONS = { project_ids: [], upload_ids: [] }.freeze
|
|
6
6
|
MODEL = Album
|
|
7
7
|
PLURAL_NAME = 'albums'.freeze
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Elabs
|
|
2
2
|
module Member
|
|
3
3
|
class ArticlesController < MemberContentApplicationController
|
|
4
|
-
ALLOWED_FIELDS = %i[title excerpt content sfw published published_at hidden_in_history license_id language_id tags_list].freeze
|
|
4
|
+
ALLOWED_FIELDS = %i[title excerpt content sfw published published_at hidden_in_history license_id language_id tags_list minor_update update_description].freeze
|
|
5
5
|
ALLOWED_RELATIONS = { project_ids: [] }.freeze
|
|
6
6
|
MODEL = Article
|
|
7
7
|
PLURAL_NAME = 'articles'.freeze
|
|
@@ -97,8 +97,8 @@ module Elabs
|
|
|
97
97
|
|
|
98
98
|
# Use callbacks to share common setup or constraints between actions.
|
|
99
99
|
def set_entity
|
|
100
|
-
|
|
101
|
-
@entity = self.class::MODEL.by_member(current_user.id).
|
|
100
|
+
slug = params[:slug] || params["#{self.class::SINGULAR_NAME}_slug"]
|
|
101
|
+
@entity = self.class::MODEL.by_member(current_user.id).find_by_slug(slug)
|
|
102
102
|
create_instance_variable self.class::SINGULAR_NAME
|
|
103
103
|
end
|
|
104
104
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Elabs
|
|
2
2
|
module Member
|
|
3
3
|
class NotesController < MemberContentApplicationController
|
|
4
|
-
ALLOWED_FIELDS = %i[content sfw hidden_in_history published license_id language_id tags_list].freeze
|
|
4
|
+
ALLOWED_FIELDS = %i[content sfw hidden_in_history published license_id language_id tags_list minor_update update_description].freeze
|
|
5
5
|
ALLOWED_RELATIONS = { project_ids: [] }.freeze
|
|
6
6
|
MODEL = Note
|
|
7
7
|
PLURAL_NAME = 'notes'.freeze
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Elabs
|
|
2
2
|
module Member
|
|
3
3
|
class ProjectsController < MemberContentApplicationController
|
|
4
|
-
ALLOWED_FIELDS = %i[name short_description description main_url sfw published hidden_in_history license_id language_id tags_list].freeze
|
|
4
|
+
ALLOWED_FIELDS = %i[name short_description description main_url sources_url docs_url sfw published hidden_in_history license_id language_id tags_list minor_update update_description].freeze
|
|
5
5
|
ALLOWED_RELATIONS = {}.freeze
|
|
6
6
|
MODEL = Project
|
|
7
7
|
PLURAL_NAME = 'projects'.freeze
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Elabs
|
|
2
2
|
module Member
|
|
3
3
|
class UploadsController < MemberContentApplicationController
|
|
4
|
-
ALLOWED_FIELDS = %i[title description sfw published hidden_in_history language_id license_id file tags_list].freeze
|
|
4
|
+
ALLOWED_FIELDS = %i[title description sfw published hidden_in_history language_id license_id file tags_list minor_update update_description].freeze
|
|
5
5
|
ALLOWED_RELATIONS = { album_ids: [], project_ids: [] }.freeze
|
|
6
6
|
MODEL = Upload
|
|
7
7
|
PLURAL_NAME = 'uploads'.freeze
|
|
@@ -25,12 +25,7 @@ module Elabs
|
|
|
25
25
|
|
|
26
26
|
# Use callbacks to share common setup or constraints between actions.
|
|
27
27
|
def set_tag
|
|
28
|
-
@tag = Tag.
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Never trust parameters from the scary internet, only allow the white list through.
|
|
32
|
-
def tag_params
|
|
33
|
-
params.require(:tag).permit(:name)
|
|
28
|
+
@tag = Tag.find_by_slug(params[:slug])
|
|
34
29
|
end
|
|
35
30
|
end
|
|
36
31
|
end
|
|
@@ -25,7 +25,7 @@ module Elabs
|
|
|
25
25
|
|
|
26
26
|
# Use callbacks to share common setup or constraints between actions.
|
|
27
27
|
def set_user
|
|
28
|
-
@user = User.
|
|
28
|
+
@user = User.find_by_username(params[:username])
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
# Never trust parameters from the scary internet, only allow the white list through.
|