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.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +89 -0
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +7 -2
  5. data/README.md +24 -17
  6. data/ROADMAP.md +8 -7
  7. data/app/assets/javascripts/elabs/application.js.erb +42 -0
  8. data/app/assets/javascripts/elabs/forms.js +10 -0
  9. data/app/assets/javascripts/elabs/helpers-markdown.js +11 -33
  10. data/app/assets/javascripts/elabs/helpers.js +28 -0
  11. data/app/assets/javascripts/elabs/hljs.js +4 -0
  12. data/app/assets/stylesheets/elabs/_colors.scss +5 -0
  13. data/app/assets/stylesheets/elabs/_fixes.scss +6 -0
  14. data/app/assets/stylesheets/elabs/_icons.scss +4 -0
  15. data/app/assets/stylesheets/elabs/app/_acts.scss +11 -0
  16. data/app/assets/stylesheets/elabs/app/_buttons.scss +8 -0
  17. data/app/assets/stylesheets/elabs/app/_comments.scss +10 -1
  18. data/app/assets/stylesheets/elabs/app/_content.scss +15 -0
  19. data/app/assets/stylesheets/elabs/app/_content_statuses.scss +32 -0
  20. data/app/assets/stylesheets/elabs/app/_forms.scss +5 -0
  21. data/app/assets/stylesheets/elabs/app/_helpers.scss +10 -0
  22. data/app/assets/stylesheets/elabs/app/_layout.scss +4 -0
  23. data/app/assets/stylesheets/elabs/app/_modals.scss +4 -0
  24. data/app/assets/stylesheets/elabs/app/_tables.scss +31 -0
  25. data/app/assets/stylesheets/elabs/app/_typo.scss +14 -0
  26. data/app/assets/stylesheets/elabs/app/_users.scss +14 -6
  27. data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +8 -1
  28. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +1 -26
  29. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +11 -1
  30. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +26 -0
  31. data/app/assets/stylesheets/elabs/app/mixins/_content-inline.scss +7 -0
  32. data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +88 -0
  33. data/app/assets/stylesheets/elabs/lib/_hljs.scss +5 -0
  34. data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +11 -11
  35. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +10 -2
  36. data/app/assets/stylesheets/elabs/style.scss +11 -1
  37. data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
  38. data/app/controllers/elabs/admin/admin_content_application_controller.rb +2 -2
  39. data/app/controllers/elabs/admin/languages_controller.rb +1 -1
  40. data/app/controllers/elabs/admin/licenses_controller.rb +1 -1
  41. data/app/controllers/elabs/admin/tags_controller.rb +1 -1
  42. data/app/controllers/elabs/admin/users_controller.rb +1 -1
  43. data/app/controllers/elabs/albums_controller.rb +1 -1
  44. data/app/controllers/elabs/articles_controller.rb +1 -1
  45. data/app/controllers/elabs/content_application_controller.rb +2 -1
  46. data/app/controllers/elabs/elabs_public_controller.rb +28 -8
  47. data/app/controllers/elabs/languages_controller.rb +1 -1
  48. data/app/controllers/elabs/licenses_controller.rb +1 -1
  49. data/app/controllers/elabs/member/albums_controller.rb +1 -1
  50. data/app/controllers/elabs/member/articles_controller.rb +1 -1
  51. data/app/controllers/elabs/member/markdown_previewer_controller.rb +11 -0
  52. data/app/controllers/elabs/member/member_content_application_controller.rb +2 -2
  53. data/app/controllers/elabs/member/notes_controller.rb +1 -1
  54. data/app/controllers/elabs/member/projects_controller.rb +1 -1
  55. data/app/controllers/elabs/member/uploads_controller.rb +1 -1
  56. data/app/controllers/elabs/notes_controller.rb +1 -1
  57. data/app/controllers/elabs/projects_controller.rb +1 -1
  58. data/app/controllers/elabs/tags_controller.rb +1 -6
  59. data/app/controllers/elabs/uploads_controller.rb +1 -1
  60. data/app/controllers/elabs/users_controller.rb +1 -1
  61. data/app/helpers/elabs/acts_helper.rb +2 -2
  62. data/app/helpers/elabs/application_helper.rb +30 -3
  63. data/app/helpers/elabs/content_helper.rb +9 -3
  64. data/app/helpers/elabs/content_renderer_helper.rb +118 -8
  65. data/app/helpers/elabs/rss_helper.rb +9 -0
  66. data/app/helpers/elabs/thumbnails_helper.rb +24 -19
  67. data/app/helpers/elabs/time_helper.rb +7 -1
  68. data/app/models/elabs/album.rb +2 -0
  69. data/app/models/elabs/application_content_record.rb +3 -0
  70. data/app/models/elabs/article.rb +2 -0
  71. data/app/models/elabs/concerns/actable_entity.rb +17 -2
  72. data/app/models/elabs/concerns/content_entity.rb +2 -2
  73. data/app/models/elabs/concerns/sluggable.rb +40 -0
  74. data/app/models/elabs/language.rb +8 -0
  75. data/app/models/elabs/license.rb +5 -0
  76. data/app/models/elabs/note.rb +2 -0
  77. data/app/models/elabs/project.rb +3 -0
  78. data/app/models/elabs/tag.rb +5 -0
  79. data/app/models/elabs/upload.rb +2 -0
  80. data/app/models/elabs/user.rb +10 -2
  81. data/app/views/elabs/acts/_act.rss.builder +22 -0
  82. data/app/views/elabs/acts/index.html.haml +5 -1
  83. data/app/views/elabs/acts/index.rss.builder +15 -0
  84. data/app/views/elabs/admin/albums/index.html.haml +4 -4
  85. data/app/views/elabs/admin/articles/index.html.haml +4 -4
  86. data/app/views/elabs/admin/languages/_form.html.haml +2 -1
  87. data/app/views/elabs/admin/licenses/_form.html.haml +2 -1
  88. data/app/views/elabs/admin/notes/index.html.haml +5 -5
  89. data/app/views/elabs/admin/projects/index.html.haml +4 -4
  90. data/app/views/elabs/admin/reports/index.html.haml +2 -2
  91. data/app/views/elabs/admin/tags/_form.html.haml +2 -1
  92. data/app/views/elabs/admin/uploads/index.html.haml +4 -4
  93. data/app/views/elabs/admin/users/index.html.haml +3 -3
  94. data/app/views/elabs/admin/users/show.html.haml +2 -2
  95. data/app/views/elabs/albums/_album.html.haml +1 -1
  96. data/app/views/elabs/albums/_album.rss.builder +7 -0
  97. data/app/views/elabs/albums/_album_inline.html.haml +8 -0
  98. data/app/views/elabs/albums/index.rss.builder +14 -0
  99. data/app/views/elabs/albums/show.html.haml +3 -3
  100. data/app/views/elabs/articles/_article.html.haml +1 -1
  101. data/app/views/elabs/articles/_article.rss.builder +7 -0
  102. data/app/views/elabs/articles/_article_inline.html.haml +8 -0
  103. data/app/views/elabs/articles/index.rss.builder +14 -0
  104. data/app/views/elabs/articles/show.html.haml +4 -4
  105. data/app/views/elabs/comments/_comments.html.haml +4 -3
  106. data/app/views/elabs/comments/_form.html.haml +18 -6
  107. data/app/views/elabs/languages/_associations.html.haml +15 -5
  108. data/app/views/elabs/layouts/_footer.html.haml +8 -1
  109. data/app/views/elabs/layouts/_hidden_entry.html.haml +4 -4
  110. data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -4
  111. data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +6 -0
  112. data/app/views/elabs/layouts/_shortcode_infinite_loop.html.haml +2 -0
  113. data/app/views/elabs/layouts/_shortcode_infinite_loop_inline.html.haml +2 -0
  114. data/app/views/elabs/layouts/_shortcode_missing_content.html.haml +2 -0
  115. data/app/views/elabs/layouts/_shortcode_missing_content_inline.html.haml +2 -0
  116. data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +2 -0
  117. data/app/views/elabs/layouts/admin_application.html.haml +2 -2
  118. data/app/views/elabs/layouts/application.html.haml +11 -3
  119. data/app/views/elabs/layouts/member_application.html.haml +5 -2
  120. data/app/views/elabs/layouts/widgets/_github_repo_card.html.haml +12 -0
  121. data/app/views/elabs/layouts/widgets/_github_repo_inline.html.haml +8 -0
  122. data/app/views/elabs/layouts/widgets/_github_user_card.html.haml +7 -0
  123. data/app/views/elabs/layouts/widgets/_gitlab_group_card.html.haml +11 -0
  124. data/app/views/elabs/layouts/widgets/_gitlab_repo_card.html.haml +12 -0
  125. data/app/views/elabs/layouts/widgets/_gitlab_repo_inline.html.haml +8 -0
  126. data/app/views/elabs/layouts/widgets/_gitlab_user_card.html.haml +11 -0
  127. data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +5 -0
  128. data/app/views/elabs/layouts/widgets/vue/_github_repo_card_vue.html.haml +72 -0
  129. data/app/views/elabs/layouts/widgets/vue/_github_user_card_vue.html.haml +64 -0
  130. data/app/views/elabs/layouts/widgets/vue/_gitlab_group_card_vue.html.haml +64 -0
  131. data/app/views/elabs/layouts/widgets/vue/_gitlab_repo_card_vue.html.haml +69 -0
  132. data/app/views/elabs/layouts/widgets/vue/_gitlab_user_card_vue.html.haml +99 -0
  133. data/app/views/elabs/licenses/_associations.html.haml +15 -5
  134. data/app/views/elabs/licenses/show.json.jbuilder +1 -1
  135. data/app/views/elabs/member/albums/_form.html.haml +12 -1
  136. data/app/views/elabs/member/albums/index.html.haml +4 -4
  137. data/app/views/elabs/member/articles/_form.html.haml +12 -1
  138. data/app/views/elabs/member/articles/index.html.haml +4 -4
  139. data/app/views/elabs/member/markdown_previewer/preview.json.jbuilder +2 -0
  140. data/app/views/elabs/member/notes/_form.html.haml +12 -1
  141. data/app/views/elabs/member/notes/index.html.haml +4 -4
  142. data/app/views/elabs/member/notifications/index.html.haml +1 -1
  143. data/app/views/elabs/member/preferences/_form.html.haml +2 -1
  144. data/app/views/elabs/member/projects/_form.html.haml +18 -2
  145. data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
  146. data/app/views/elabs/member/projects/index.html.haml +4 -4
  147. data/app/views/elabs/member/uploads/_form.html.haml +12 -1
  148. data/app/views/elabs/member/uploads/index.html.haml +6 -9
  149. data/app/views/elabs/member/users/_form.html.haml +2 -1
  150. data/app/views/elabs/notes/_note.html.haml +2 -2
  151. data/app/views/elabs/notes/_note.rss.builder +7 -0
  152. data/app/views/elabs/notes/_note_inline.haml +8 -0
  153. data/app/views/elabs/notes/index.rss.builder +14 -0
  154. data/app/views/elabs/notes/show.html.haml +3 -3
  155. data/app/views/elabs/projects/_associations.html.haml +12 -4
  156. data/app/views/elabs/projects/_project.html.haml +1 -1
  157. data/app/views/elabs/projects/_project.json.jbuilder +2 -0
  158. data/app/views/elabs/projects/_project.rss.builder +7 -0
  159. data/app/views/elabs/projects/_project_inline.html.haml +9 -0
  160. data/app/views/elabs/projects/index.rss.builder +14 -0
  161. data/app/views/elabs/projects/show.html.haml +20 -9
  162. data/app/views/elabs/reports/_form.html.haml +2 -1
  163. data/app/views/elabs/tags/_associations.html.haml +15 -5
  164. data/app/views/elabs/tags/index.html.haml +2 -0
  165. data/app/views/elabs/uploads/_preview.html.haml +1 -6
  166. data/app/views/elabs/uploads/_upload.rss.builder +7 -0
  167. data/app/views/elabs/uploads/_upload_inline.html.haml +8 -0
  168. data/app/views/elabs/uploads/index.rss.builder +14 -0
  169. data/app/views/elabs/uploads/show.html.haml +7 -8
  170. data/app/views/elabs/users/_associations.html.haml +15 -5
  171. data/app/views/elabs/users/_user.html.haml +24 -18
  172. data/app/views/elabs/users/_user_inline.html.haml +7 -0
  173. data/app/views/elabs/users/show.html.haml +2 -2
  174. data/config/brakeman.ignore +13 -111
  175. data/config/locales/en.yml +6 -0
  176. data/config/locales/fr.yml +6 -0
  177. data/config/routes.rb +30 -28
  178. data/db/migrate/20180917133442_add_urls_to_projects.rb +6 -0
  179. data/db/migrate/20181005105642_add_reason_to_acts.rb +5 -0
  180. data/db/migrate/20181006073541_add_slugs.rb +39 -0
  181. data/docs/migrating.md +51 -0
  182. data/docs/setup.md +1 -0
  183. data/lib/elabs.rb +5 -0
  184. data/lib/elabs/version.rb +1 -1
  185. data/lib/generators/elabs/install_generator.rb +1 -0
  186. data/lib/generators/elabs/views_generator.rb +0 -1
  187. data/lib/generators/templates/elabs.rb +4 -0
  188. data/lib/generators/templates/user_model.rb +6 -0
  189. data/locale/app.pot +129 -9
  190. data/locale/en/app.edit.po +127 -7
  191. data/locale/en/app.po +127 -7
  192. data/locale/fr/app.edit.po +130 -10
  193. data/locale/fr/app.po +129 -9
  194. metadata +59 -5
  195. data/app/assets/javascripts/elabs/application.js +0 -27
  196. data/app/assets/stylesheets/elabs/app/_nsfw.scss +0 -5
  197. data/lib/assets/javascripts/markdown-it-8.4.2.min.js +0 -1
@@ -1,10 +1,15 @@
1
1
  module Elabs
2
2
  class License < ApplicationRecord
3
3
  self.table_name = 'licenses'
4
+ include Elabs::Concerns::Sluggable
5
+
6
+ SLUGGABLE_FIELD = :name
7
+ SLUG_FIELD = :slug
4
8
 
5
9
  validates :name, presence: true
6
10
  validates :url, presence: true
7
11
  validates :icon, presence: true
12
+ validates :slug, presence: true, uniqueness: true
8
13
 
9
14
  has_many :albums
10
15
  has_many :articles
@@ -2,11 +2,13 @@ module Elabs
2
2
  class Note < ApplicationContentRecord
3
3
  self.table_name = 'notes'
4
4
 
5
+ SLUGGABLE_FIELD = :created_at
5
6
  ADDITIONAL_HABTM_COUNTER_CACHES = [
6
7
  %w[projects notes]
7
8
  ].freeze
8
9
 
9
10
  validates :content, presence: true
11
+ validates :slug, presence: true, uniqueness: true
10
12
  validates_with AssociatedAuthorValidator, relations: %w[project]
11
13
 
12
14
  belongs_to :user
@@ -2,9 +2,12 @@ module Elabs
2
2
  class Project < ApplicationContentRecord
3
3
  self.table_name = 'projects'
4
4
 
5
+ SLUGGABLE_FIELD = :name
6
+
5
7
  validates :name, presence: true
6
8
  validates :short_description, presence: true
7
9
  validates :description, presence: true
10
+ validates :slug, presence: true, uniqueness: true
8
11
  validates_with AssociatedAuthorValidator, relations: %w[album article note upload]
9
12
 
10
13
  belongs_to :user
@@ -1,8 +1,13 @@
1
1
  module Elabs
2
2
  class Tag < ApplicationRecord
3
3
  self.table_name = 'tags'
4
+ include Elabs::Concerns::Sluggable
5
+
6
+ SLUGGABLE_FIELD = :name
7
+ SLUG_FIELD = :slug
4
8
 
5
9
  validates :name, presence: true
10
+ validates :slug, presence: true, uniqueness: true
6
11
 
7
12
  has_many :albums_tags
8
13
  has_many :articles_tags
@@ -2,6 +2,7 @@ module Elabs
2
2
  class Upload < ApplicationContentRecord
3
3
  self.table_name = 'uploads'
4
4
 
5
+ SLUGGABLE_FIELD = :title
5
6
  ADDITIONAL_HABTM_COUNTER_CACHES = [
6
7
  %w[albums uploads],
7
8
  %w[projects uploads]
@@ -10,6 +11,7 @@ module Elabs
10
11
  validates :title, presence: true
11
12
  validates :description, presence: true
12
13
  validates :file_attachment, presence: true
14
+ validates :slug, presence: true, uniqueness: true
13
15
  validates_with AssociatedAuthorValidator, relations: %w[album project]
14
16
 
15
17
  belongs_to :user
@@ -1,6 +1,10 @@
1
1
  module Elabs
2
2
  class User < ApplicationRecord
3
3
  self.table_name = 'users'
4
+ include Elabs::Concerns::Sluggable
5
+
6
+ SLUGGABLE_FIELD = nil
7
+ SLUG_FIELD = :username
4
8
 
5
9
  validates :username, presence: true, uniqueness: true
6
10
  validates :role, presence: false
@@ -25,6 +29,10 @@ module Elabs
25
29
 
26
30
  scope :admins, -> { where(role: 'admin') }
27
31
 
32
+ after_create do
33
+ Preference.create! user: self, show_nsfw: false
34
+ end
35
+
28
36
  def admin?
29
37
  role == 'admin'
30
38
  end
@@ -33,8 +41,8 @@ module Elabs
33
41
  real_name.present? ? real_name : "@#{username}"
34
42
  end
35
43
 
36
- after_create do
37
- Preference.create! user: self, show_nsfw: false
44
+ def to_param
45
+ username
38
46
  end
39
47
 
40
48
  private
@@ -0,0 +1,22 @@
1
+ if act.event == 'publish'
2
+ case act.content_type
3
+ when 'Elabs::Album'
4
+ render 'elabs/albums/album', album: act.content, builder: builder
5
+ when 'Elabs::Article'
6
+ render 'elabs/articles/article', article: act.content, builder: builder
7
+ when 'Elabs::Note'
8
+ render 'elabs/notes/note', note: act.content, builder: builder
9
+ when 'Elabs::Project'
10
+ render 'elabs/projects/project', project: act.content, builder: builder
11
+ when 'Elabs::Upload'
12
+ render 'elabs/uploads/upload', upload: act.content, builder: builder
13
+ end
14
+ else
15
+ builder.item do
16
+ builder.title act_notice_string(act, false)
17
+ builder.description act_notice_string(act)
18
+ builder.pubDate act.created_at.to_s(:rfc822)
19
+ builder.link url_for act.content
20
+ builder.guid url_for act.content
21
+ end
22
+ end
@@ -20,7 +20,11 @@
20
20
  - when 'Elabs::Upload'
21
21
  = render 'elabs/uploads/upload', upload: act.content
22
22
  - else
23
- %div{ class: "act-action act-action--#{act.event}" }= act_notice_string act
23
+ %div{ class: "act-action act-action--#{act.event}" }
24
+ = act_notice_string act
25
+ - if act.reason.present?
26
+ &mdash;
27
+ %q= act.reason
24
28
 
25
29
  - previous_date = act.created_at
26
30
 
@@ -0,0 +1,15 @@
1
+ xml.instruct! :xml, version: '1.0'
2
+ xml.rss version: '2.0' do
3
+ xml.channel do
4
+ xml.title "#{Elabs.site_name} - activity"
5
+ xml.description "Last #{params['show_nsfw'] == 'false' ? 'SFW' : ''} activity from #{Elabs.site_name}"
6
+ xml.link activities_url
7
+
8
+ @acts.each do |act|
9
+ next if params['show_nsfw'] == 'false' && !act.content.sfw
10
+ next if params['only_creations'] == 'true' && !act.event != 'publish'
11
+
12
+ render 'act', act: act, builder: xml
13
+ end
14
+ end
15
+ end
@@ -21,11 +21,11 @@
21
21
  - @albums.each do |album|
22
22
  %tr.album
23
23
  %td= album.name
24
- %td.is-icon= boolean_icon_tag album.sfw
25
- %td.is-icon= boolean_icon_tag album.published
26
- %td.is-icon= boolean_icon_tag album.locked, 'lock', 'unlock'
24
+ %td.is-icon= colored_good_or_bad_icon_tag album.sfw
25
+ %td.is-icon= colored_good_or_bad_icon_tag album.published
26
+ %td.is-icon= colored_good_or_bad_icon_tag album.locked, 'lock', 'unlock', true
27
27
  %td.is-icon= boolean_icon_tag album.hidden_in_history
28
- %td= short_date album.published_at
28
+ %td= medium_datetime album.published_at
29
29
  %td= album.user.username
30
30
  %td= album.license.name
31
31
  %td= album.language.name
@@ -20,11 +20,11 @@
20
20
  - @articles.each do |article|
21
21
  %tr.article
22
22
  %td= article.title
23
- %td.is-icon= boolean_icon_tag article.sfw
24
- %td.is-icon= boolean_icon_tag article.published
25
- %td.is-icon= boolean_icon_tag article.locked, 'lock', 'unlock'
23
+ %td.is-icon= colored_good_or_bad_icon_tag article.sfw
24
+ %td.is-icon= colored_good_or_bad_icon_tag article.published
25
+ %td.is-icon= colored_good_or_bad_icon_tag article.locked, 'lock', 'unlock', true
26
26
  %td.is-icon= boolean_icon_tag article.hidden_in_history
27
- %td= short_date article.published_at
27
+ %td= medium_datetime article.published_at
28
28
  %td= article.user.username
29
29
  %td= article.license.name
30
30
  %td= article.language.name
@@ -15,4 +15,5 @@
15
15
  .field-input= f.text_field :name
16
16
 
17
17
  .actions
18
- = f.submit _('Save'), class: 'btn btn--save'
18
+ .actions-buttons
19
+ = f.submit _('Save'), class: 'btn btn--save'
@@ -22,4 +22,5 @@
22
22
  .field-input= f.text_field :icon
23
23
 
24
24
  .actions
25
- = f.submit _('Save'), class: 'btn btn--save'
25
+ .actions-buttons
26
+ = f.submit _('Save'), class: 'btn btn--save'
@@ -20,11 +20,11 @@
20
20
  - @notes.each do |note|
21
21
  %tr.note
22
22
  %td= note.content[0...100]
23
- %td.is-icon= boolean_icon_tag note.sfw
24
- %td.is-icon= boolean_icon_tag note.published
25
- %td.is-icon= boolean_icon_tag note.locked
26
- %td.is-icon= boolean_icon_tag note.hidden_in_history
27
- %td= short_date note.published_at
23
+ %td.is-icon= colored_good_or_bad_icon_tag note.sfw
24
+ %td.is-icon= colored_good_or_bad_icon_tag note.published
25
+ %td.is-icon= colored_good_or_bad_icon_tag note.locked, 'lock', 'unlock', true
26
+ %td.is-icon= boolean_icon_tag value: note.hidden_in_history
27
+ %td= medium_datetime note.published_at
28
28
  %td= note.user.username
29
29
  %td= note.license.name
30
30
  %td= note.language.name
@@ -23,11 +23,11 @@
23
23
  - @projects.each do |project|
24
24
  %tr.project
25
25
  %td= project.name
26
- %td.is-icon= boolean_icon_tag project.sfw
27
- %td.is-icon= boolean_icon_tag project.published
28
- %td.is-icon= boolean_icon_tag project.locked, 'lock', 'unlock'
26
+ %td.is-icon= colored_good_or_bad_icon_tag project.sfw
27
+ %td.is-icon= colored_good_or_bad_icon_tag project.published
28
+ %td.is-icon= colored_good_or_bad_icon_tag project.locked, 'lock', 'unlock', true
29
29
  %td.is-icon= boolean_icon_tag project.hidden_in_history
30
- %td= short_date project.published_at
30
+ %td= medium_datetime project.published_at
31
31
  %td= project.user.username
32
32
  %td= project.license.name
33
33
  %td= project.language.name
@@ -18,8 +18,8 @@
18
18
  %td= report.name
19
19
  %td= report.email
20
20
  %td= report.user&.username
21
- %td.is-icon= boolean_icon_tag report.allow_contact
22
- %td= short_date report.created_at
21
+ %td.is-icon= colored_good_or_bad_icon_tag report.allow_contact
22
+ %td= medium_datetime report.created_at
23
23
  %td= link_to report.url, report.url, target: '_blank'
24
24
  %td= report.reason
25
25
  %td.actions
@@ -14,4 +14,5 @@
14
14
  .field-input= f.text_field :name
15
15
 
16
16
  .actions
17
- = f.submit _('Save'), class: 'btn btn--save'
17
+ .actions-buttons
18
+ = f.submit _('Save'), class: 'btn btn--save'
@@ -21,11 +21,11 @@
21
21
  - @uploads.each do |upload|
22
22
  %tr.upload
23
23
  %td= upload.title
24
- %td.is-icon= boolean_icon_tag upload.sfw
25
- %td.is-icon= boolean_icon_tag upload.published
26
- %td.is-icon= boolean_icon_tag upload.locked, 'lock', 'unlock'
24
+ %td.is-icon= colored_good_or_bad_icon_tag upload.sfw
25
+ %td.is-icon= colored_good_or_bad_icon_tag upload.published
26
+ %td.is-icon= colored_good_or_bad_icon_tag upload.locked, 'lock', 'unlock', true
27
27
  %td.is-icon= boolean_icon_tag upload.hidden_in_history
28
- %td= short_date upload.published_at
28
+ %td= medium_datetime upload.published_at
29
29
  %td= upload.user.username
30
30
  %td= upload.license.name
31
31
  %td= upload.language.name
@@ -20,9 +20,9 @@
20
20
  %tr.user
21
21
  %td= user.username
22
22
  %td= user.role
23
- %td= short_date user.created_at
24
- %td.is-icon= boolean_icon_tag user.confirmed_at.present?
25
- %td.is-icon= boolean_icon_tag user.reset_password_sent_at.present?
23
+ %td= medium_datetime user.created_at
24
+ %td.is-icon= colored_good_or_bad_icon_tag user.confirmed_at.present?
25
+ %td.is-icon= colored_good_or_bad_icon_tag user.reset_password_sent_at.present?
26
26
  %td.is-counter= user.albums_count
27
27
  %td.is-counter= user.articles_count
28
28
  %td.is-counter= user.notes_count
@@ -20,7 +20,7 @@
20
20
  = @user.real_name
21
21
  %li
22
22
  %strong= _('Subscription date:')
23
- = short_date @user.created_at
23
+ = medium_datetime @user.created_at
24
24
 
25
25
  %dt= _('Bio')
26
- = markdown(@user.biography || '')
26
+ = render_entity_content @user, :biography
@@ -27,7 +27,7 @@
27
27
  %li= render 'elabs/layouts/lists/projects', projects: album.projects
28
28
  %li= render 'elabs/layouts/lists/tags', tags: album.tags
29
29
  %article{ lang: album.language.iso639_1 }
30
- = markdown album.description
30
+ = render_entity_content album, :description, false
31
31
  .content__relations
32
32
  = render 'elabs/layouts/empty' if album.uploads.length.zero?
33
33
  .uploads-list
@@ -0,0 +1,7 @@
1
+ builder.item do
2
+ builder.title rss_title(album, 'name')
3
+ builder.description album.description
4
+ builder.pubDate album.published_at.to_s(:rfc822)
5
+ builder.link album_url(album)
6
+ builder.guid album_url(album)
7
+ end
@@ -0,0 +1,8 @@
1
+ - if !show_item? album
2
+ = render 'elabs/layouts/hidden_entry_inline', entity: album
3
+ - else
4
+ %span.album.album--inline
5
+ = icon 'book', ['fw']
6
+ = link_to album.name, album, lang: album.language.iso639_1
7
+ - if album.language.iso639_1 != locale
8
+ (#{album.language.iso639_1})
@@ -0,0 +1,14 @@
1
+ xml.instruct! :xml, version: '1.0'
2
+ xml.rss version: '2.0' do
3
+ xml.channel do
4
+ xml.title "#{Elabs.site_name} - albums"
5
+ xml.description "Last #{params['show_nsfw'] == 'false' ? 'SFW' : ''} albums from #{Elabs.site_name}"
6
+ xml.link albums_url
7
+
8
+ @albums.each do |album|
9
+ next if params['show_nsfw'] == 'false' && !album.sfw
10
+
11
+ render 'album', builder: xml, album: album
12
+ end
13
+ end
14
+ end
@@ -14,12 +14,12 @@
14
14
  %li
15
15
  = icon('calendar-check', ['fw'])
16
16
  %strong= _('Published at:')
17
- = short_date @album.published_at
17
+ = medium_datetime @album.published_at
18
18
 
19
19
  %li
20
20
  = icon('calendar', ['fw'])
21
21
  %strong= _('Updated at:')
22
- = short_date @album.updated_at
22
+ = medium_datetime @album.updated_at
23
23
 
24
24
  %li.separator
25
25
  = icon('info', ['fw'])
@@ -46,7 +46,7 @@
46
46
 
47
47
  .content
48
48
  %article{ lang: @album.language.iso639_1 }
49
- = markdown @album.description
49
+ = render_entity_content @album, :description
50
50
 
51
51
  .content__relations
52
52
  = render 'elabs/layouts/empty' if @album.uploads.length.zero?
@@ -27,4 +27,4 @@
27
27
  %li= render 'elabs/layouts/lists/projects', projects: article.projects
28
28
  %li= render 'elabs/layouts/lists/tags', tags: article.tags
29
29
 
30
- %article{ lang: article.language.iso639_1 }= markdown article.excerpt
30
+ %article{ lang: article.language.iso639_1 }= render_entity_content article, :excerpt, false
@@ -0,0 +1,7 @@
1
+ builder.item do
2
+ builder.title rss_title(article, 'title')
3
+ builder.description "#{article.excerpt}\n#{article.content}"
4
+ builder.pubDate article.published_at.to_s(:rfc822)
5
+ builder.link article_url(article)
6
+ builder.guid article_url(article)
7
+ end
@@ -0,0 +1,8 @@
1
+ - if !show_item? article
2
+ = render 'elabs/layouts/hidden_entry_inline', entity: article
3
+ - else
4
+ %span.article.article--inline
5
+ = icon 'font', ['fw']
6
+ = link_to article.title, article, lang: article.language.iso639_1
7
+ - if article.language.iso639_1 != locale
8
+ (#{article.language.iso639_1})
@@ -0,0 +1,14 @@
1
+ xml.instruct! :xml, version: '1.0'
2
+ xml.rss version: '2.0' do
3
+ xml.channel do
4
+ xml.title "#{Elabs.site_name} - articles"
5
+ xml.description "Last #{params['show_nsfw'] == 'false' ? 'SFW' : ''} articles from #{Elabs.site_name}"
6
+ xml.link articles_url
7
+
8
+ @articles.each do |article|
9
+ next if params['show_nsfw'] == 'false' && !article.sfw
10
+
11
+ render 'article', builder: xml, article: article
12
+ end
13
+ end
14
+ end
@@ -13,11 +13,11 @@
13
13
  %li
14
14
  = icon('calendar-check', ['fw'])
15
15
  %strong= _('Published at:')
16
- = short_date @article.published_at
16
+ = medium_datetime @article.published_at
17
17
  %li
18
18
  = icon('calendar', ['fw'])
19
19
  %strong= _('Updated at:')
20
- = short_date @article.updated_at
20
+ = medium_datetime @article.updated_at
21
21
  %li.separator
22
22
  = icon('info', ['fw'])
23
23
  %strong= _('SFW:')
@@ -36,8 +36,8 @@
36
36
 
37
37
  .content
38
38
  %article{ lang: @article.language.iso639_1 }
39
- = markdown @article.excerpt
40
- = markdown @article.content
39
+ = render_entity_content @article, :excerpt
40
+ = render_entity_content @article, :content
41
41
 
42
42
  = render 'elabs/comments/comments',
43
43
  entity: @article,
@@ -1,3 +1,5 @@
1
+ = render 'elabs/comments/form', url: url, new_comment: new_comment
2
+
1
3
  %section.comments-list
2
4
  - if user_is_author_of entity
3
5
  %h2= _('Comments')
@@ -15,7 +17,6 @@
15
17
  %li
16
18
  = icon('calendar', ['fw'])
17
19
  %strong= _('Posted on:')
18
- = short_date comment.created_at
19
- %article= markdown comment.comment
20
+ = medium_datetime comment.created_at
21
+ %article= render_entity_content comment, :comment, false
20
22
 
21
- = render 'elabs/comments/form', url: url, new_comment: new_comment