decidim-blogs 0.27.10 → 0.28.0.rc4

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/blogs/content_blocks/highlighted_posts/content.erb +17 -0
  3. data/app/cells/decidim/blogs/content_blocks/highlighted_posts_cell.rb +52 -0
  4. data/app/cells/decidim/blogs/post_activity_cell.rb +1 -4
  5. data/app/cells/decidim/blogs/post_cell.rb +9 -2
  6. data/app/cells/decidim/blogs/post_g_cell.rb +31 -0
  7. data/app/cells/decidim/blogs/post_l_cell.rb +35 -0
  8. data/app/cells/decidim/blogs/post_metadata_cell.rb +29 -0
  9. data/app/cells/decidim/blogs/post_metadata_g_cell.rb +14 -0
  10. data/app/cells/decidim/blogs/post_s_cell.rb +15 -0
  11. data/app/commands/decidim/blogs/admin/create_post.rb +1 -0
  12. data/app/commands/decidim/blogs/admin/update_post.rb +10 -1
  13. data/app/controllers/decidim/blogs/admin/posts_controller.rb +2 -2
  14. data/app/controllers/decidim/blogs/posts_controller.rb +16 -4
  15. data/app/forms/decidim/blogs/admin/post_form.rb +2 -1
  16. data/app/helpers/decidim/blogs/admin/posts_helper.rb +11 -1
  17. data/app/helpers/decidim/blogs/application_helper.rb +4 -0
  18. data/app/helpers/decidim/blogs/posts_helper.rb +2 -4
  19. data/app/models/decidim/blogs/post.rb +14 -3
  20. data/app/packs/entrypoints/decidim_blogs.js +3 -0
  21. data/app/packs/stylesheets/blogs.scss +53 -0
  22. data/app/presenters/decidim/blogs/admin_log/post_presenter.rb +2 -2
  23. data/app/views/decidim/blogs/admin/posts/_form.html.erb +19 -13
  24. data/app/views/decidim/blogs/admin/posts/edit.html.erb +16 -6
  25. data/app/views/decidim/blogs/admin/posts/index.html.erb +60 -52
  26. data/app/views/decidim/blogs/admin/posts/new.html.erb +17 -6
  27. data/app/views/decidim/blogs/posts/_actions.html.erb +18 -0
  28. data/app/views/decidim/blogs/posts/index.html.erb +22 -9
  29. data/app/views/decidim/blogs/posts/show.html.erb +37 -47
  30. data/config/locales/ar.yml +2 -20
  31. data/config/locales/bg.yml +0 -86
  32. data/config/locales/ca.yml +16 -18
  33. data/config/locales/cs.yml +17 -17
  34. data/config/locales/de.yml +15 -17
  35. data/config/locales/el.yml +7 -18
  36. data/config/locales/en.yml +15 -17
  37. data/config/locales/es-MX.yml +15 -17
  38. data/config/locales/es-PY.yml +15 -17
  39. data/config/locales/es.yml +15 -17
  40. data/config/locales/eu.yml +16 -18
  41. data/config/locales/fi-plain.yml +15 -17
  42. data/config/locales/fi.yml +15 -17
  43. data/config/locales/fr-CA.yml +15 -17
  44. data/config/locales/fr.yml +15 -17
  45. data/config/locales/ga-IE.yml +0 -12
  46. data/config/locales/gl.yml +0 -21
  47. data/config/locales/hu.yml +15 -23
  48. data/config/locales/id-ID.yml +0 -19
  49. data/config/locales/is-IS.yml +0 -13
  50. data/config/locales/it.yml +0 -24
  51. data/config/locales/ja.yml +14 -17
  52. data/config/locales/ko.yml +0 -38
  53. data/config/locales/lb.yml +0 -24
  54. data/config/locales/lt.yml +12 -18
  55. data/config/locales/lv.yml +0 -21
  56. data/config/locales/nl.yml +0 -21
  57. data/config/locales/no.yml +0 -21
  58. data/config/locales/pl.yml +0 -42
  59. data/config/locales/pt-BR.yml +12 -27
  60. data/config/locales/pt.yml +0 -24
  61. data/config/locales/ro-RO.yml +7 -18
  62. data/config/locales/ru.yml +12 -18
  63. data/config/locales/sk.yml +0 -21
  64. data/config/locales/sq-AL.yml +0 -79
  65. data/config/locales/sr-CS.yml +0 -5
  66. data/config/locales/sv.yml +6 -29
  67. data/config/locales/tr-TR.yml +0 -21
  68. data/config/locales/uk.yml +0 -17
  69. data/config/locales/zh-CN.yml +0 -21
  70. data/config/locales/zh-TW.yml +3 -14
  71. data/db/migrate/20220812122940_add_published_at_to_decidim_blogs_posts.rb +17 -0
  72. data/lib/decidim/api/blogs_type.rb +14 -2
  73. data/lib/decidim/api/post_type.rb +1 -0
  74. data/lib/decidim/blogs/admin_engine.rb +2 -2
  75. data/lib/decidim/blogs/component.rb +4 -60
  76. data/lib/decidim/blogs/engine.rb +16 -1
  77. data/lib/decidim/blogs/seeds.rb +76 -0
  78. data/lib/decidim/blogs/test/factories.rb +9 -19
  79. data/lib/decidim/blogs/version.rb +1 -1
  80. metadata +39 -30
  81. data/app/cells/decidim/blogs/post_m/footer.erb +0 -5
  82. data/app/cells/decidim/blogs/post_m_cell.rb +0 -21
  83. data/app/views/decidim/blogs/posts/_datetime.html.erb +0 -1
  84. data/app/views/decidim/blogs/posts/_posts.html.erb +0 -24
  85. data/app/views/decidim/blogs/posts/_sidebar_blog.html.erb +0 -21
  86. data/config/locales/he-IL.yml +0 -1
  87. data/decidim-blogs.gemspec +0 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 17890b8befb35b79d9eabbae4e4d6c1a2b9f0388e8c42c1d73a5ac2e710e5fdf
4
- data.tar.gz: c0e42272a5c633c9bc23835bfe97ea78421592244d38dd9f96e941d8b4c36e3b
3
+ metadata.gz: c2330f24d70eca14e552dcf053957b8df8b1564de2a265a9b57648b89b079a3e
4
+ data.tar.gz: 8b5128b4c3f8a6f2b27b613e6796b5782a93d9d81dd26c2d97ab24e9fbfd4285
5
5
  SHA512:
6
- metadata.gz: ba2888668c1332abdc94b465b1085855fe9f8423758d83db5ad441fa84c601f91358d24ae79f54e6dfa7a20c56c77219430aeee139a40838ff761a88ec8ed75a
7
- data.tar.gz: b625f3565a3bdbf61c264347d05da8e321653c73e282a6a631a08e8dfe8b78b4b4d4b40d642e62c579bdfd26fdcd0a510a5dda87d48695ce7f4603df82c45631
6
+ metadata.gz: 2f848ffdda0e612316006c3ef8990b16a61cb536fac4dec1d484cc60e65526c827dbca9ca1bde5254a91aa95c563153b8bd3ce013c8f9a2678b108982fa0f461
7
+ data.tar.gz: 26c7b99f72dc7e3813a86da7c8e94d4a33a4e7beddd65743d1f6f74f5d78578d9d2c937f4e220e80a95445619cad8718565111459063911e7f1103d89dcbf479
@@ -0,0 +1,17 @@
1
+ <div class="content-block__title">
2
+ <h2 class="h2 decorator"><%= single_component ? translated_attribute(single_component.name) : t("name", scope: "decidim.components.blogs") %></h2>
3
+ <div class="label text-lg"><%= posts_count %></div>
4
+ <% if single_component %>
5
+ <%= link_to decidim_blogs.root_path, class: "button button__sm button__text-secondary" do %>
6
+ <span><%= t("decidim.blogs.content_blocks.highlighted_posts.see_all") %></span>
7
+ <%= icon "arrow-right-line" %>
8
+ <% end %>
9
+ <% end %>
10
+ </div>
11
+
12
+ <span class="content-block__span"><%= t("decidim.blogs.content_blocks.highlighted_posts.last_published") %></span>
13
+ <div class="participatory-space__block-grid">
14
+ <% posts_to_render.each do |post| %>
15
+ <%= cell "decidim/blogs/post_g", post %>
16
+ <% end %>
17
+ </div>
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ module ContentBlocks
6
+ class HighlightedPostsCell < Decidim::ContentBlocks::HighlightedElementsCell
7
+ include Decidim::ComponentPathHelper
8
+ include Decidim::CardHelper
9
+
10
+ def show
11
+ render unless posts_count.zero?
12
+ end
13
+
14
+ private
15
+
16
+ def posts
17
+ @posts ||= Decidim::Blogs::Post.published.where(component: published_components).created_at_desc
18
+ end
19
+
20
+ def decidim_blogs
21
+ return unless single_component
22
+
23
+ Decidim::EngineRouter.main_proxy(single_component)
24
+ end
25
+
26
+ def single_component
27
+ @single_component ||= published_components.one? ? published_components.first : nil
28
+ end
29
+
30
+ def posts_to_render
31
+ @posts_to_render ||= posts.includes([:author, :component]).limit(limit)
32
+ end
33
+
34
+ def posts_count
35
+ @posts_count ||= posts.size
36
+ end
37
+
38
+ def cache_hash
39
+ hash = []
40
+ hash << "decidim/blogs/content_blocks/highlighted_posts"
41
+ hash << posts.cache_key_with_version
42
+ hash << I18n.locale.to_s
43
+ hash.join(Decidim.cache_key_separator)
44
+ end
45
+
46
+ def limit
47
+ 3
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -5,10 +5,7 @@ module Decidim
5
5
  # A cell to display when a post has been created.
6
6
  class PostActivityCell < ActivityCell
7
7
  def title
8
- I18n.t(
9
- "decidim.blogs.last_activity.new_post_at_html",
10
- link: participatory_space_link
11
- )
8
+ I18n.t("decidim.blogs.last_activity.new_post")
12
9
  end
13
10
  end
14
11
  end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Blogs
5
5
  # This cell renders the card for an instance of a Post
6
- # the default size is the Medium Card (:m)
6
+ # the default size is the List Card (:l)
7
7
  class PostCell < Decidim::ViewModel
8
8
  def show
9
9
  cell card_size, model, options
@@ -12,7 +12,14 @@ module Decidim
12
12
  private
13
13
 
14
14
  def card_size
15
- "decidim/blogs/post_m"
15
+ case @options[:size]
16
+ when :s
17
+ "decidim/blogs/post_s"
18
+ when :g
19
+ "decidim/blogs/post_g"
20
+ else
21
+ "decidim/blogs/post_l"
22
+ end
16
23
  end
17
24
  end
18
25
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ # This cell renders the Grid (:g) post card
6
+ # for a given instance of a Post
7
+ class PostGCell < Decidim::CardGCell
8
+ delegate :photo, to: :model
9
+
10
+ private
11
+
12
+ def has_image?
13
+ resource_image_path.present?
14
+ end
15
+
16
+ def show_description?
17
+ true
18
+ end
19
+
20
+ def metadata_cell
21
+ "decidim/blogs/post_metadata_g"
22
+ end
23
+
24
+ def resource_image_path
25
+ return if photo.blank?
26
+
27
+ photo.url
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ # This cell renders the List (:l) post card
6
+ # for a given instance of a Post
7
+ class PostLCell < Decidim::CardLCell
8
+ delegate :photo, to: :model
9
+
10
+ private
11
+
12
+ def has_image?
13
+ true
14
+ end
15
+
16
+ def has_description?
17
+ true
18
+ end
19
+
20
+ def description_length
21
+ 500
22
+ end
23
+
24
+ def metadata_cell
25
+ "decidim/blogs/post_metadata"
26
+ end
27
+
28
+ def resource_image_path
29
+ return if photo.blank?
30
+
31
+ photo.url
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ # This cell renders metadata for an instance of a Proposal
6
+ class PostMetadataCell < Decidim::CardMetadataCell
7
+ def initialize(*)
8
+ super
9
+
10
+ @items.prepend(*post_items)
11
+ end
12
+
13
+ private
14
+
15
+ def post_items
16
+ [author_item, creation_date, comments_count_item, endorsements_count_item]
17
+ end
18
+
19
+ def creation_date
20
+ date_at = model.try(:published_at) || model.try(:created_at)
21
+
22
+ {
23
+ text: l(date_at.to_date, format: :decidim_short_with_month_name_short),
24
+ icon: "calendar-todo-line"
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ # This cell renders metadata for an instance of a Post
6
+ class PostMetadataGCell < PostMetadataCell
7
+ private
8
+
9
+ def post_items
10
+ [author_item, comments_count_item]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Blogs
5
+ # This cell renders the Search (:s) post card
6
+ # for a given instance of a Post
7
+ class PostSCell < Decidim::CardSCell
8
+ private
9
+
10
+ def metadata_cell
11
+ "decidim/blogs/post_metadata"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -31,6 +31,7 @@ module Decidim
31
31
  attributes = {
32
32
  title: @form.title,
33
33
  body: @form.body,
34
+ published_at: @form.published_at,
34
35
  component: @form.current_component,
35
36
  author: @form.author
36
37
  }
@@ -37,10 +37,19 @@ module Decidim
37
37
  Decidim.traceability.update!(
38
38
  post,
39
39
  @user,
40
+ attributes
41
+ )
42
+ end
43
+
44
+ def attributes
45
+ {
40
46
  title: form.title,
41
47
  body: form.body,
48
+ published_at: form.published_at,
42
49
  author: form.author
43
- )
50
+ }.reject do |attribute, value|
51
+ value.blank? && attribute == :published_at
52
+ end
44
53
  end
45
54
  end
46
55
  end
@@ -15,7 +15,7 @@ module Decidim
15
15
 
16
16
  def create
17
17
  enforce_permission_to :create, :blogpost
18
- @form = form(PostForm).from_params(params, current_component: current_component)
18
+ @form = form(PostForm).from_params(params, current_component:)
19
19
 
20
20
  CreatePost.call(@form, current_user) do
21
21
  on(:ok) do
@@ -37,7 +37,7 @@ module Decidim
37
37
 
38
38
  def update
39
39
  enforce_permission_to :update, :blogpost, blogpost: post
40
- @form = form(PostForm).from_params(params, current_component: current_component)
40
+ @form = form(PostForm).from_params(params, current_component:)
41
41
 
42
42
  UpdatePost.call(@form, post, current_user) do
43
43
  on(:ok) do
@@ -5,25 +5,37 @@ module Decidim
5
5
  # Exposes the blog resource so users can view them
6
6
  class PostsController < Decidim::Blogs::ApplicationController
7
7
  include Flaggable
8
+ include Paginable
9
+ include Decidim::IconHelper
8
10
 
9
- helper_method :posts, :post, :paginate_posts, :posts_most_commented
11
+ helper_method :posts, :post, :post_presenter, :paginate_posts, :posts_most_commented, :tabs, :panels
10
12
 
11
13
  def index; end
12
14
 
13
- def show; end
15
+ def show
16
+ raise ActionController::RoutingError, "Not Found" unless post
17
+ end
14
18
 
15
19
  private
16
20
 
17
21
  def paginate_posts
18
- @paginate_posts ||= posts.created_at_desc.page(params[:page]).per(4)
22
+ @paginate_posts ||= paginate(posts.created_at_desc)
19
23
  end
20
24
 
21
25
  def post
22
26
  @post ||= posts.find(params[:id])
23
27
  end
24
28
 
29
+ def post_presenter
30
+ @post_presenter ||= Decidim::Blogs::PostPresenter.new(post)
31
+ end
32
+
25
33
  def posts
26
- @posts ||= Post.where(component: current_component)
34
+ @posts ||= if current_user&.admin?
35
+ Post.where(component: current_component)
36
+ else
37
+ Post.published.where(component: current_component)
38
+ end
27
39
  end
28
40
 
29
41
  # PROVISIONAL if we implement counter cache
@@ -11,6 +11,7 @@ module Decidim
11
11
  translatable_attribute :body, String
12
12
 
13
13
  attribute :decidim_author_id, Integer
14
+ attribute :published_at, Decidim::Attributes::TimeWithZone
14
15
 
15
16
  validates :title, translatable_presence: true
16
17
  validates :body, translatable_presence: true
@@ -43,7 +44,7 @@ module Decidim
43
44
  end
44
45
 
45
46
  def post
46
- @post ||= Post.find_by(id: id)
47
+ @post ||= Post.find_by(id:)
47
48
  end
48
49
 
49
50
  def user_groups
@@ -7,6 +7,7 @@ module Decidim
7
7
  module PostsHelper
8
8
  include Decidim::ApplicationHelper
9
9
  include SanitizeHelper
10
+ include PaginateHelper
10
11
 
11
12
  # Public: truncates the post body
12
13
  #
@@ -16,7 +17,7 @@ module Decidim
16
17
  # Returns the post's body truncated.
17
18
  def post_description_admin(post, max_length = 100)
18
19
  body = translated_attribute(post.body)
19
- CGI.unescapeHTML html_truncate(body, max_length: max_length)
20
+ CGI.unescapeHTML html_truncate(body, max_length:)
20
21
  end
21
22
 
22
23
  def post_author_select_field(form, name, _options = {})
@@ -33,6 +34,15 @@ module Decidim
33
34
 
34
35
  form.select(name, select_options)
35
36
  end
37
+
38
+ def publish_data(published_at)
39
+ data = {}
40
+ if published_at > Time.current
41
+ data[:icon] = icon("time-line", aria_label: t("decidim.blogs.admin.posts.index.not_published_yet"), role: "img")
42
+ data[:popup] = t("decidim.blogs.admin.posts.index.not_published_yet")
43
+ end
44
+ data
45
+ end
36
46
  end
37
47
  end
38
48
  end
@@ -11,6 +11,10 @@ module Decidim
11
11
  include ::Decidim::EndorsableHelper
12
12
  include ::Decidim::FollowableHelper
13
13
  include Decidim::Comments::CommentsHelper
14
+
15
+ def component_name
16
+ (defined?(current_component) && translated_attribute(current_component&.name).presence) || t("decidim.components.blogs.name")
17
+ end
14
18
  end
15
19
  end
16
20
  end
@@ -14,11 +14,9 @@ module Decidim
14
14
  # max_length - a number to limit the length of the body
15
15
  #
16
16
  # Returns the post's body truncated.
17
- def post_description(post, max_length = 600)
18
- link = post_path(post)
17
+ def post_description(post, max_length = 300)
19
18
  body = translated_attribute(post.body)
20
- tail = "... <br/> #{link_to(t("read_more", scope: "decidim.blogs"), link)}".html_safe
21
- CGI.unescapeHTML html_truncate(body, max_length: max_length, tail: tail)
19
+ CGI.unescapeHTML html_truncate(body, max_length:)
22
20
  end
23
21
  end
24
22
  end
@@ -26,6 +26,7 @@ module Decidim
26
26
  validates :title, presence: true
27
27
 
28
28
  scope :created_at_desc, -> { order(arel_table[:created_at].desc) }
29
+ scope :published, -> { where("published_at <= ?", Time.current) }
29
30
 
30
31
  searchable_fields({
31
32
  participatory_space: { component: :participatory_space },
@@ -36,12 +37,22 @@ module Decidim
36
37
  index_on_create: true,
37
38
  index_on_update: ->(post) { post.visible? })
38
39
 
40
+ class << self
41
+ def all_timestamp_attributes_in_model
42
+ super + ["published_at"]
43
+ end
44
+
45
+ def log_presenter_class_for(_log)
46
+ Decidim::Blogs::AdminLog::PostPresenter
47
+ end
48
+ end
49
+
39
50
  def visible?
40
- participatory_space.try(:visible?) && component.try(:published?)
51
+ participatory_space.try(:visible?) && component.try(:published?) && published?
41
52
  end
42
53
 
43
- def self.log_presenter_class_for(_log)
44
- Decidim::Blogs::AdminLog::PostPresenter
54
+ def published?
55
+ published_at <= Time.current
45
56
  end
46
57
 
47
58
  # Public: Overrides the `comments_have_alignment?` Commentable concern method.
@@ -1,2 +1,5 @@
1
1
  // Images
2
2
  require.context("../images", true)
3
+
4
+ // CSS
5
+ import "stylesheets/blogs.scss"
@@ -0,0 +1,53 @@
1
+ .blog {
2
+ &__image {
3
+ @apply grow rounded overflow-hidden mb-8 aspect-[3];
4
+
5
+ img {
6
+ @apply w-full h-full object-cover;
7
+ }
8
+ }
9
+
10
+ &__actions {
11
+ @apply flex flex-col md:flex-row justify-between items-center gap-10;
12
+
13
+ &-left {
14
+ @apply flex items-center gap-2;
15
+ }
16
+
17
+ &-right {
18
+ @apply flex items-center gap-4;
19
+
20
+ button {
21
+ @apply flex items-center gap-1;
22
+ }
23
+ }
24
+
25
+ .is-active span:last-child {
26
+ @apply text-white bg-secondary border-secondary;
27
+ }
28
+ }
29
+
30
+ &__endorsers {
31
+ @apply space-y-3;
32
+
33
+ &-text {
34
+ @apply text-sm text-gray-2;
35
+ }
36
+
37
+ &-grid {
38
+ @apply flex flex-wrap gap-y-3;
39
+ }
40
+
41
+ &-button {
42
+ @apply block ml-auto text-right text-xs text-secondary cursor-pointer;
43
+ }
44
+ }
45
+
46
+ &__section {
47
+ @apply mt-16 first-of-type:mt-0 last:mb-16 md:last:mb-36 xl:max-w-[75%] space-y-10;
48
+
49
+ p {
50
+ @apply mt-4 text-gray-2 text-md;
51
+ }
52
+ }
53
+ }
@@ -6,8 +6,8 @@ module Decidim
6
6
  # This class holds the logic to present a `Decidim::Blogs::Post`
7
7
  # for the `AdminLog` log.
8
8
  #
9
- # Usage should be automatic and you shouldn't need to call this class
10
- # directly, but here's an example:
9
+ # Usage should be automatic and you should not need to call this class
10
+ # directly, but here is an example:
11
11
  #
12
12
  # action_log = Decidim::ActionLog.last
13
13
  # view_helpers # => this comes from the views
@@ -1,18 +1,24 @@
1
- <div class="card">
2
- <div class="card-divider">
3
- <h2 class="card-title"><%= title %></h2>
4
- </div>
5
- <div class="card-section">
6
-
7
- <div class="field">
8
- <%= post_author_select_field form, :decidim_author_id, label: t("decidim.blogs.actions.author_id") %>
1
+ <div class="form__wrapper">
2
+ <div class="card pt-4">
3
+ <div class="card-section">
4
+ <div class="row column">
5
+ <div class="field">
6
+ <%= post_author_select_field form, :decidim_author_id, label: t("decidim.blogs.actions.author_id") %>
7
+ </div>
9
8
  </div>
10
9
 
11
- <div class="row column">
12
- <%= form.translated :text_field, :title, autofocus: true %>
13
- </div>
14
- <div class="row column">
15
- <%= form.translated :editor, :body, lines: 30 %>
10
+ <div class="row column">
11
+ <%= form.translated :text_field, :title, autofocus: true, aria: { label: :title } %>
12
+ </div>
13
+ <div class="row column">
14
+ <%= form.translated :editor, :body, lines: 30, aria: { label: :body } %>
15
+ </div>
16
+ <div class="row">
17
+ <div class="columns">
18
+ <%= form.datetime_field :published_at %>
19
+ </div>
20
+ </div>
16
21
  </div>
17
22
  </div>
23
+
18
24
  </div>
@@ -1,8 +1,18 @@
1
1
  <% add_decidim_page_title(t(".title")) %>
2
- <%= decidim_form_for(@form, html: { class: "form edit_post" }) do |f| %>
3
- <%= render partial: "form", object: f, locals: { title: t(".title") } %>
4
-
5
- <div class="button--double form-general-submit">
6
- <%= f.submit t(".save") %>
2
+ <div class="item_show__header">
3
+ <h2 class="item_show__header-title">
4
+ <%= t(".title") %>
5
+ </h2>
6
+ </div>
7
+ <div class="item__edit item__edit-1col">
8
+ <div class="item__edit-form">
9
+ <%= decidim_form_for(@form, html: { class: "form-defaults form edit_post" }) do |f| %>
10
+ <%= render partial: "form", object: f %>
11
+ <div class="item__edit-sticky">
12
+ <div class="item__edit-sticky-container">
13
+ <%= f.submit t(".save"), class: "button button__sm button__secondary" %>
14
+ </div>
15
+ </div>
16
+ <% end %>
7
17
  </div>
8
- <% end %>
18
+ </div>