decidim-feeds 1.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 (77) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +39 -0
  4. data/Rakefile +9 -0
  5. data/app/cells/decidim/feeds/content_blocks/feeds_settings_form/show.erb +3 -0
  6. data/app/cells/decidim/feeds/content_blocks/feeds_settings_form_cell.rb +23 -0
  7. data/app/cells/decidim/feeds/feed_cell.rb +24 -0
  8. data/app/cells/decidim/feeds/feed_dropdown_metadata_cell.rb +19 -0
  9. data/app/cells/decidim/feeds/feed_g_cell.rb +33 -0
  10. data/app/cells/decidim/feeds/feed_metadata_g_cell.rb +25 -0
  11. data/app/cells/decidim/feeds/feed_s_cell.rb +13 -0
  12. data/app/commands/decidim/feeds/admin/create_feed.rb +90 -0
  13. data/app/commands/decidim/feeds/admin/update_feed.rb +85 -0
  14. data/app/commands/decidim/feeds/create_feed.rb +90 -0
  15. data/app/commands/decidim/feeds/update_feed.rb +73 -0
  16. data/app/constraints/decidim/feeds/current_component.rb +28 -0
  17. data/app/constraints/decidim/feeds/current_feed.rb +43 -0
  18. data/app/controllers/concerns/decidim/feeds/feed_breadcrumb.rb +36 -0
  19. data/app/controllers/decidim/feeds/admin/application_controller.rb +26 -0
  20. data/app/controllers/decidim/feeds/admin/components_controller.rb +14 -0
  21. data/app/controllers/decidim/feeds/admin/concerns/feed_admin.rb +51 -0
  22. data/app/controllers/decidim/feeds/admin/feeds_controller.rb +92 -0
  23. data/app/controllers/decidim/feeds/application_controller.rb +37 -0
  24. data/app/controllers/decidim/feeds/feeds_controller.rb +137 -0
  25. data/app/forms/decidim/feeds/admin/feed_form.rb +102 -0
  26. data/app/forms/decidim/feeds/feed_form.rb +70 -0
  27. data/app/helpers/decidim/feeds/admin/feeds_admin_menu_helper.rb +10 -0
  28. data/app/helpers/decidim/feeds/application_helper.rb +16 -0
  29. data/app/helpers/decidim/feeds/feeds_helper.rb +38 -0
  30. data/app/models/decidim/feeds/application_record.rb +10 -0
  31. data/app/models/decidim/feeds/feed.rb +113 -0
  32. data/app/packs/entrypoints/decidim_feeds.js +5 -0
  33. data/app/packs/entrypoints/decidim_feeds.scss +1 -0
  34. data/app/packs/images/decidim/feeds/decidim_feeds.svg +1 -0
  35. data/app/packs/images/decidim/feeds/icon.svg +1 -0
  36. data/app/packs/src/decidim/feeds/feeds.js +0 -0
  37. data/app/packs/stylesheets/decidim/feeds/_variables.scss +10 -0
  38. data/app/packs/stylesheets/decidim/feeds/feeds.scss +3 -0
  39. data/app/permissions/decidim/feeds/permissions.rb +53 -0
  40. data/app/presenters/decidim/feeds/admin_log/feed_presenter.rb +46 -0
  41. data/app/queries/decidim/feeds/admin/admin_users.rb +60 -0
  42. data/app/queries/decidim/feeds/organization_feeds.rb +16 -0
  43. data/app/views/decidim/feeds/admin/feeds/_form.html.erb +66 -0
  44. data/app/views/decidim/feeds/admin/feeds/edit.html.erb +20 -0
  45. data/app/views/decidim/feeds/admin/feeds/index.html.erb +65 -0
  46. data/app/views/decidim/feeds/admin/feeds/new.html.erb +20 -0
  47. data/app/views/decidim/feeds/feeds/_form.html.erb +18 -0
  48. data/app/views/decidim/feeds/feeds/edit.html.erb +10 -0
  49. data/app/views/decidim/feeds/feeds/index.html.erb +5 -0
  50. data/app/views/decidim/feeds/feeds/new.html.erb +20 -0
  51. data/app/views/decidim/feeds/feeds/show.html.erb +33 -0
  52. data/app/views/layouts/decidim/admin/_manage_feeds.html.erb +11 -0
  53. data/app/views/layouts/decidim/admin/feed.html.erb +17 -0
  54. data/app/views/layouts/decidim/admin/feeds.html.erb +17 -0
  55. data/app/views/layouts/decidim/feed.html.erb +18 -0
  56. data/config/assets.rb +9 -0
  57. data/config/i18n-tasks.yml +10 -0
  58. data/config/locales/bs.yml +75 -0
  59. data/config/locales/de.yml +77 -0
  60. data/config/locales/en.yml +75 -0
  61. data/config/locales/hr.yml +75 -0
  62. data/config/locales/it.yml +75 -0
  63. data/config/locales/sr.yml +75 -0
  64. data/config/locales/tr.yml +75 -0
  65. data/lib/decidim/api/feed_type.rb +30 -0
  66. data/lib/decidim/feeds/admin.rb +10 -0
  67. data/lib/decidim/feeds/admin_engine.rb +81 -0
  68. data/lib/decidim/feeds/api.rb +9 -0
  69. data/lib/decidim/feeds/content_blocks/content_blocks_homepage.rb +19 -0
  70. data/lib/decidim/feeds/engine.rb +83 -0
  71. data/lib/decidim/feeds/menu.rb +106 -0
  72. data/lib/decidim/feeds/participatory_space.rb +52 -0
  73. data/lib/decidim/feeds/seeds.rb +47 -0
  74. data/lib/decidim/feeds/test/factories.rb +17 -0
  75. data/lib/decidim/feeds/version.rb +9 -0
  76. data/lib/decidim/feeds.rb +13 -0
  77. metadata +142 -0
File without changes
@@ -0,0 +1,10 @@
1
+ :root {
2
+ --dg-color-white: 255 255 255;
3
+ --dg-color-black: 60 57 52;
4
+ --dg-color-post: 229 57 144;
5
+ --dg-color-help: 1 114 187;
6
+ --dg-color-sharecare: 36 166 32;
7
+ --dg-color-host: 219 15 16;
8
+ --dg-color-survey: 50 49 143;
9
+ --dg-color-calendar: 253 182 32;
10
+ }
@@ -0,0 +1,3 @@
1
+ /* css for decidim_feeds */
2
+
3
+ @import '_variables.scss';
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Feeds
5
+ class Permissions < Decidim::DefaultPermissions
6
+ def permissions
7
+ return permission_action unless user
8
+
9
+ case permission_action.subject
10
+ when :feed
11
+ case permission_action.action
12
+ when :read
13
+ allow! if user.present?
14
+ when :create
15
+ allow! if user.present? # TODO: maybe add a max number of feeds per user
16
+ when :update
17
+ allow! if can_update?
18
+ when :list
19
+ allow! if user.present?
20
+ end
21
+ when :feed_list
22
+ case permission_action.action
23
+ when :read
24
+ allow! if user.admin?
25
+ end
26
+ when :participatory_space
27
+ case permission_action.action
28
+ when :read
29
+ allow! if user.present?
30
+ end
31
+ when :component
32
+ case permission_action.action
33
+ when :read
34
+ allow! if user.present?
35
+ end
36
+ end
37
+
38
+ permission_action
39
+ end
40
+
41
+ private
42
+
43
+ def can_access?
44
+ user.present?
45
+ end
46
+
47
+ def can_update?
48
+ # TODO: allow feed admins to update
49
+ user.admin? || user == resource.created_by
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Feeds
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::Feeds::Feed`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you should not need to call this class
10
+ # directly, but here is an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # FeedPresenter.new(action_log, view_helpers).present
15
+ class FeedPresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def diff_fields_mapping
19
+ {
20
+ published_at: :date,
21
+ slug: :default,
22
+ title: :i18n,
23
+ created_by: :string
24
+ }
25
+ end
26
+
27
+ def i18n_labels_scope
28
+ "activemodel.attributes.feed"
29
+ end
30
+
31
+ def action_string
32
+ case action
33
+ when "create", "update"
34
+ "decidim.admin_log.feed.#{action}"
35
+ else
36
+ super
37
+ end
38
+ end
39
+
40
+ def diff_actions
41
+ super
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Feeds
5
+ module Admin
6
+ # A class used to find the admins for an feed or an organization feeds.
7
+ class AdminUsers < Decidim::Query
8
+ # Syntactic sugar to initialize the class and return the queried objects.
9
+ #
10
+ # feed - an feed that needs to find its feed admins
11
+ def self.for(feed)
12
+ new(feed).query
13
+ end
14
+
15
+ # Syntactic sugar to initialize the class and return the queried objects.
16
+ #
17
+ # organization - an organization that needs to find its feed admins
18
+ def self.for_organization(organization)
19
+ new(nil, organization).query
20
+ end
21
+
22
+ # Initializes the class.
23
+ #
24
+ # feed - an feed that needs to find its feed admins
25
+ # organization - an organization that needs to find its feed admins
26
+ def initialize(feed, organization = nil)
27
+ @feed = feed
28
+ @organization = feed&.organization || organization
29
+ end
30
+
31
+ # Finds organization admins and the users with role admin for the given feed.
32
+ #
33
+ # Returns an ActiveRecord::Relation.
34
+ def query
35
+ organization.admins.or(feeds_user_admins)
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :feed, :organization
41
+
42
+ def feeds_user_admins
43
+ # Decidim::User.where(
44
+ # id: Decidim::FeedUserRole.where(feed: feeds, role: :admin)
45
+ # .select(:decidim_user_id)
46
+ # )
47
+ Decidim::User.where(admin: true)
48
+ end
49
+
50
+ def feeds
51
+ if feed
52
+ [feed]
53
+ else
54
+ Decidim::Feed.where(organization:)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Feeds
5
+ # This query class filters all feeds given an organization.
6
+ class OrganizationFeeds < Decidim::Query
7
+ def initialize(organization)
8
+ @organization = organization
9
+ end
10
+
11
+ def query
12
+ Decidim::Feeds::Feed.where(organization: @organization)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,66 @@
1
+ <div class="form__wrapper">
2
+ <div class="card" data-component="accordion" id="accordion-title">
3
+ <div class="card-divider">
4
+ <button class="card-divider-button" data-open="true" data-controls="panel-title" type="button">
5
+ <%= icon "arrow-right-s-line" %>
6
+ <h2 class="card-title" id="title">
7
+ <%= t("title", scope: "decidim.feeds.admin.feeds.form") %>
8
+ </h2>
9
+ </button>
10
+ </div>
11
+
12
+ <div id="panel-title" class="card-section">
13
+ <div class="row column">
14
+ <%= form.translated :text_field, :title, autofocus: true, aria: { label: :title } %>
15
+ </div>
16
+
17
+ <div class="row">
18
+ <div class="columns slug">
19
+ <%= form.text_field :slug, help_text: t(".slug_help_html", url: decidim_form_slug_url(:feeds, form.object.slug)) %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="card" data-component="accordion" id="accordion-sponsor_logos">
26
+ <div class="card-divider">
27
+ <button class="card-divider-button" data-open="true" data-controls="panel-sponsor_logos" type="button">
28
+ <%= icon "arrow-right-s-line" %>
29
+ <h2 class="card-title" id="sponsor_logos">
30
+ <%= t("sponsor_logos", scope: "decidim.feeds.admin.feeds.form") %>
31
+ </h2>
32
+ </button>
33
+ </div>
34
+
35
+ <div id="panel-sponsor_logos" class="card-section">
36
+ <div class="row column">
37
+ <div class="">
38
+ <%= form.upload :documents,
39
+ titled: true,
40
+ label: false,
41
+ button_label: t("add_sponsor_logo", scope: "decidim.feeds.admin.feeds.form"),
42
+ button_edit_label: I18n.t("replace_sponsor_logo", scope: "decidim.feeds.admin.feeds.form"),
43
+ multiple: true,
44
+ # modal_only: false,
45
+ # show_current: true,
46
+ #label: false,
47
+ # id: field_id,
48
+ # disabled:,
49
+ # attribute:,
50
+ # resource_name: @object_name,
51
+ # resource_class: options[:resource_class]&.to_s || resource_class(attribute),
52
+ # show_current: true,
53
+ # max_file_size:,
54
+ # help: help_messages,
55
+ # label: label_for(attribute),
56
+ # button_label:,
57
+ # button_edit_label: I18n.t("decidim.forms.upload.labels.replace"),
58
+ button_class: "button button__sm button__transparent-primary w-full",
59
+ required: false %>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+
66
+ <%#= append_javascript_pack_tag "decidim_feeds_admin" %>
@@ -0,0 +1,20 @@
1
+ <% add_decidim_page_title(t("info", scope: "decidim.admin.menu.feeds_submenu")) %>
2
+ <div class="item_show__header">
3
+ <h1 class="item_show__header-title">
4
+ <%= t("info", scope: "decidim.admin.menu.feeds_submenu") %>
5
+ </h1>
6
+ </div>
7
+
8
+ <div class="item__edit item__edit-1col">
9
+ <div class="item__edit-form">
10
+ <%= decidim_form_for(@form, html: { class: "form form-defaults edit_feed feed_form_admin" }) do |f| %>
11
+ <%= render partial: "form", object: f %>
12
+ <div class="item__edit-sticky">
13
+ <div class="item__edit-sticky-container">
14
+ <%= f.submit t("feeds.edit.update", scope: "decidim.admin"), class: "button button__sm button__secondary" %>
15
+ </div>
16
+ </div>
17
+ <% end %>
18
+
19
+ </div>
20
+ </div>
@@ -0,0 +1,65 @@
1
+ <% add_decidim_page_title(t("feeds", scope: "decidim.admin.titles")) %>
2
+
3
+ <% if defined?(Decidim::FeedsUi) && Decidim::StaticPage.find_by(slug: "info").blank? %>
4
+ <%= cell("decidim/announcement", t(".new_info_page_info"), callout_class: "warning") %>
5
+ <div class="mb-8">
6
+ <%= link_to t(".new_info_page_button"), decidim_admin.new_static_page_path, class: "text-xl button button__sm button__text-secondary" %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <div class="card" id="feeds">
11
+ <div class="table-scroll">
12
+ <table class="table-list">
13
+ <thead>
14
+ <tr>
15
+ <th>
16
+ <%= t("models.feed.fields.title", scope: "decidim.admin") %>
17
+ </th>
18
+ <th>
19
+ <%= t("models.feed.fields.created_at", scope: "decidim.admin") %>
20
+ </th>
21
+ <th>
22
+ <%= t("models.feed.fields.actions", scope: "decidim.admin") %>
23
+ </th>
24
+ </tr>
25
+ </thead>
26
+ <tbody>
27
+ <% @feeds.each do |feed| %>
28
+ <% next unless allowed_to? :list, :feed, feed: feed %>
29
+ <tr>
30
+ <td>
31
+ <% if allowed_to? :update, :feed, feed: feed %>
32
+ <%= link_to translated_attribute(feed.title), edit_feed_path(feed) %>
33
+ <% else %>
34
+ <%= translated_attribute(feed.title) %>
35
+ <% end %>
36
+ </td>
37
+ <td class="table-list__date">
38
+ <%= l(feed.created_at, format: :short) %>
39
+ </td>
40
+ <td class="table-list__actions">
41
+ <% if allowed_to? :update, :feed, feed: feed %>
42
+ <%= icon_link_to "pencil-line", edit_feed_path(feed), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
43
+ <% else %>
44
+ <span class="action-space icon"></span>
45
+ <% end %>
46
+ <span class="action-space icon"></span>
47
+ <% if allowed_to? :preview, :feed, feed: feed %>
48
+ <%= icon_link_to "eye-line", decidim_feeds.feed_path(feed), t("actions.preview", scope: "decidim.admin"), class: "action-icon--preview", target: "_blank", data: { "external-link": false } %>
49
+ <% else %>
50
+ <span class="action-space icon"></span>
51
+ <% end %>
52
+
53
+ <% if allowed_to? :read, :moderation, feed: feed %>
54
+ <%= icon_link_to "flag-line", moderations_path(feed), t("actions.moderate", scope: "decidim.admin"), class: "action-icon--moderate" %>
55
+ <% else %>
56
+ <span class="action-space icon"></span>
57
+ <% end %>
58
+ </td>
59
+ </tr>
60
+ <% end %>
61
+ </tbody>
62
+ </table>
63
+ </div>
64
+ <%#= decidim_paginate @feeds %>
65
+ </div>
@@ -0,0 +1,20 @@
1
+ <% add_decidim_page_title(t("feeds.new.title", scope: "decidim.admin")) %>
2
+
3
+ <div class="item_show__header">
4
+ <h1 class="item_show__header-title">
5
+ <%= t "feeds.new.title", scope: "decidim.admin" %>
6
+ </h1>
7
+ </div>
8
+
9
+ <div class="item__edit item__edit-1col">
10
+ <div class="item__edit-form">
11
+ <%= decidim_form_for(@form, html: { class: "form-defaults form new_feed feed_form_admin" }) do |f| %>
12
+ <%= render partial: "form", object: f %>
13
+ <div class="item__edit-sticky">
14
+ <div class="item__edit-sticky-container">
15
+ <%= f.submit t("feeds.new.create", scope: "decidim.admin"), class: "button button__sm button__secondary" %>
16
+ </div>
17
+ </div>
18
+ <% end %>
19
+ </div>
20
+ </div>
@@ -0,0 +1,18 @@
1
+ <div class="form__wrapper">
2
+ <div class="card" data-component="accordion" id="accordion-title">
3
+ <div class="card-divider">
4
+ <button class="card-divider-button" data-open="true" data-controls="panel-title" type="button">
5
+ <%= icon "arrow-right-s-line" %>
6
+ <h2 class="card-title" id="title">
7
+ <%= t("title", scope: "decidim.feeds.feeds.form") %>
8
+ </h2>
9
+ </button>
10
+ </div>
11
+
12
+ <div id="panel-title" class="card-section">
13
+ <div class="row column">
14
+ <%= form.text_field :title, autofocus: true, aria: { label: :title } %>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
@@ -0,0 +1,10 @@
1
+ <div>
2
+ <%= decidim_form_for(@form, html: { class: "form form-defaults edit_feed feed_form_admin" }) do |f| %>
3
+ <%= render partial: "form", object: f %>
4
+ <div class="item__edit-sticky">
5
+ <div class="item__edit-sticky-container">
6
+ <%= f.submit t("feeds.edit.update", scope: "decidim.feeds"), class: "button button__sm button__secondary" %>
7
+ </div>
8
+ </div>
9
+ <% end %>
10
+ </div>
@@ -0,0 +1,5 @@
1
+ <% @feeds.each do |feed| %>
2
+ <%= link_to translated_attribute(feed.title), feed %>
3
+ <% end %>
4
+
5
+ <%= link_to t(".new_feed"), new_feed_path %>
@@ -0,0 +1,20 @@
1
+ <% add_decidim_page_title(t("feeds.new.title", scope: "decidim.feeds")) %>
2
+
3
+ <div class="item_show__header">
4
+ <h1 class="item_show__header-title">
5
+ <%= t "feeds.new.title", scope: "decidim.feeds" %>
6
+ </h1>
7
+ </div>
8
+
9
+ <div class="item__edit item__edit-1col">
10
+ <div class="item__edit-form">
11
+ <%= decidim_form_for(@form, html: { class: "form-defaults form new_feed feed_form" }) do |f| %>
12
+ <%= render partial: "form", object: f %>
13
+ <div class="item__edit-sticky">
14
+ <div class="item__edit-sticky-container">
15
+ <%= f.submit t("feeds.new.create", scope: "decidim.feeds"), class: "button button__sm button__secondary" %>
16
+ </div>
17
+ </div>
18
+ <% end %>
19
+ </div>
20
+ </div>
@@ -0,0 +1,33 @@
1
+ <%# add_decidim_meta_tags({
2
+ image_url: current_participatory_space.attached_uploader(:hero_image).path,
3
+ description: translated_attribute(current_participatory_space.short_description),
4
+ url: feed_url(current_participatory_space),
5
+ twitter_handler: current_organization.twitter_handler
6
+ }) %>
7
+
8
+ <%
9
+ edit_link(
10
+ resource_locator(current_participatory_space).edit,
11
+ :update,
12
+ :feed,
13
+ feed: current_participatory_space
14
+ )
15
+ %>
16
+
17
+ <%= link_to t(".show_posts"), decidim_feed_posts_path(current_participatory_space, @posts_component) %>
18
+ <%= link_to t(".edit"), edit_feed_path(@current_feed) %>
19
+
20
+ <div class="participatory-space__container">
21
+
22
+ <%= participatory_space_floating_help %>
23
+
24
+ <% active_content_blocks.each do |content_block| %>
25
+ <% next unless content_block.manifest %>
26
+ <%= cell content_block.manifest.cell, content_block %>
27
+ <% end %>
28
+
29
+ </div>
30
+
31
+ <section class="participatory-space__block-reference">
32
+ <%= resource_reference(current_participatory_space) %>
33
+ </section>
@@ -0,0 +1,11 @@
1
+ <div class="inline-block relative">
2
+ <%= button_tag data: { component: "dropdown", target: "feeds-dropdown-menu-settings" }, class: "dropdown__trigger button button__transparent" do %>
3
+ <span>
4
+ <%= t("menu.manage", scope: "decidim.admin") %>
5
+ </span>
6
+ <%= icon "arrow-down-s-line" %>
7
+ <% end %>
8
+ <div id="feeds-dropdown-menu-settings" class="process-title-content-dropdown" aria-hidden="true">
9
+ <%= dropdown_menu(:admin_feeds_menu).render %>
10
+ </div>
11
+ </div>
@@ -0,0 +1,17 @@
1
+ <% add_secondary_root_menu(:admin_feed_menu) %>
2
+
3
+ <% add_decidim_page_title(translated_attribute(current_participatory_space.title)) %>
4
+ <% content_for :breadcrumb_context_menu do %>
5
+ <div class="process-title-content-breadcrumb-container-right">
6
+ <%= link_to decidim_feeds.feed_path(current_participatory_space), class: "button button__sm button__transparent process-title-content-breadcrumb-container-right-link", target: "_blank", data: { "external-link": false } do %>
7
+ <%= icon "eye-line" %>
8
+ <span>
9
+ <%= t("see_feed", scope: "decidim.admin.menu.feeds_submenu") %>
10
+ </span>
11
+ <% end %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "layouts/decidim/admin/application" do %>
16
+ <%= yield %>
17
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <% content_for :breadcrumb_context_menu do %>
2
+ <div class="process-title-content-breadcrumb-container-right">
3
+ <% if allowed_to? :create, :feed %>
4
+ <%= link_to new_feed_path, class: "button button__sm button__transparent process-title-content-breadcrumb-container-right-link" do %>
5
+ <%= icon "add-line", class: "w-4 h-4" %>
6
+ <span>
7
+ <%= t("actions.new_feed", scope: "decidim.admin") %>
8
+ </span>
9
+ <% end %>
10
+ <% end %>
11
+ <%= render partial: "layouts/decidim/admin/manage_feeds" %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "layouts/decidim/admin/application" do %>
16
+ <%= yield %>
17
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% add_decidim_page_title(translated_attribute(current_component.name)) if try(:current_component) %>
2
+ <% add_decidim_page_title(translated_attribute(current_participatory_space.title)) %>
3
+ <%# add_decidim_meta_tags(
4
+ image_url: current_participatory_space.attached_uploader(:banner_image).path,
5
+ description: translated_attribute(current_participatory_space.short_description)
6
+ ) %>
7
+
8
+ <%#= append_javascript_pack_tag "decidim_feeds" %>
9
+
10
+ <%= render partial: "layouts/decidim/header/follow_space_menu_bar_button", locals: { participatory_space: current_participatory_space } %>
11
+
12
+ <%= render "layouts/decidim/application" do %>
13
+ <main>
14
+ <%= yield %>
15
+ </main>
16
+ <% end %>
17
+
18
+ <%# provide :meta_image_url, current_participatory_space.attached_uploader(:banner_image).path %>
data/config/assets.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ base_path = File.expand_path("..", __dir__)
4
+
5
+ Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Webpacker.register_entrypoints(
7
+ decidim_feeds: "#{base_path}/app/packs/entrypoints/decidim_feeds.js"
8
+ )
9
+ Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/feeds/feeds")
@@ -0,0 +1,10 @@
1
+ ---
2
+
3
+ base_locale: en
4
+ locales: [en]
5
+
6
+ ignore_unused:
7
+ - "decidim.components.posts.name"
8
+
9
+ ignore_missing:
10
+ - decidim.participatory_processes.scopes.global
@@ -0,0 +1,75 @@
1
+ ---
2
+ bs:
3
+ decidim:
4
+ feeds:
5
+ feeds:
6
+ index:
7
+ new_feed: Novi Feed
8
+ show:
9
+ show_posts: Prikazi postove
10
+ edit: Uredi
11
+ posts_component_not_found: Postovi nisu pronađeni
12
+ new:
13
+ title: Novi Feed
14
+ create: Kreiraj Feed
15
+ edit:
16
+ update: Ažuriraj Feed
17
+ form:
18
+ title: Naslov
19
+ create:
20
+ error: Kreiranje feeda nije uspjelo
21
+ success: Feed uspješno kreiran
22
+ update:
23
+ success: Feed uspješno ažuriran
24
+ error: Ažuriranje feeda nije uspjelo
25
+ admin:
26
+ feeds:
27
+ index:
28
+ new_info_page_info: "Za Feeds UI, potrebna vam je stranica s URL slugom \"info\""
29
+ new_info_page_button: Kreiraj novu info stranicu
30
+ form:
31
+ title: Naslov
32
+ slug_help_html: 'URL slugovi se koriste za generisanje URL-ova koji upućuju na ovaj feed. Prihvata samo slova, brojeve i crtice, i mora početi slovom. Primjer: %{url}'
33
+ sponsor_logos: Sponsor Logos
34
+ add_sponsor_logo: Dodaj Sponsor Logo
35
+ replace_sponsor_logo: Zamijeni Sponsor Logo
36
+ content_blocks:
37
+ feeds:
38
+ name: Feed
39
+ survey:
40
+ participated: "%{count} odgovora"
41
+ shared:
42
+ flag_modal:
43
+ report: Prijavi
44
+ admin:
45
+ feeds:
46
+ new:
47
+ title: Novi Feed
48
+ create: Kreiraj Feed
49
+ create:
50
+ success: Feed uspješno kreiran
51
+ invalid: Kreiranje feeda nije uspjelo
52
+ error: Kreiranje feeda nije uspjelo
53
+ edit:
54
+ title: Uredi Feed
55
+ update: Ažuriraj Feed
56
+ update:
57
+ success: Feed uspješno ažuriran
58
+ invalid: Ažuriranje feeda nije uspjelo
59
+ menu:
60
+ feeds: Feedovi
61
+ feeds_submenu:
62
+ components: Komponente
63
+ info: O ovom feedu
64
+ moderations: Moderacije
65
+ see_feed: Pogledaj feed
66
+ titles:
67
+ feeds: Feedovi
68
+ actions:
69
+ new_feed: Novi Feed
70
+ models:
71
+ feed:
72
+ fields:
73
+ title: Naslov
74
+ created_at: Kreirano
75
+ actions: Akcije