decidim-feeds 1.0.0 → 2.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/README.md +7 -5
- data/app/commands/decidim/feeds/create_feed.rb +15 -4
- data/app/commands/decidim/feeds/update_feed.rb +9 -1
- data/app/controllers/concerns/decidim/feeds/feed_breadcrumb.rb +21 -21
- data/app/controllers/decidim/feeds/feeds_controller.rb +4 -2
- data/app/forms/decidim/feeds/feed_form.rb +18 -0
- data/app/helpers/decidim/feeds/feeds_helper.rb +8 -8
- data/app/models/decidim/feeds/feed.rb +13 -12
- data/app/packs/src/decidim/feeds/feeds.js +97 -0
- data/app/packs/stylesheets/decidim/feeds/feeds.scss +4 -0
- data/app/views/decidim/feeds/feeds/_form.html.erb +26 -14
- data/app/views/decidim/feeds/feeds/_menu-popup.html.erb +42 -0
- data/app/views/decidim/feeds/feeds/_show.html.erb +36 -0
- data/app/views/decidim/feeds/feeds/_sidebar.html.erb +12 -0
- data/app/views/decidim/feeds/feeds/edit.html.erb +25 -8
- data/app/views/decidim/feeds/feeds/index.html.erb +39 -5
- data/app/views/decidim/feeds/feeds/new.html.erb +27 -16
- data/app/views/decidim/feeds/feeds/show.html.erb +33 -32
- data/config/locales/bs.yml +23 -2
- data/config/locales/de.yml +27 -6
- data/config/locales/en.yml +23 -2
- data/config/locales/hr.yml +23 -2
- data/config/locales/it.yml +23 -2
- data/config/locales/sr.yml +24 -3
- data/config/locales/tr.yml +23 -2
- data/lib/decidim/feeds/engine.rb +5 -0
- data/lib/decidim/feeds/seeds.rb +2 -2
- data/lib/decidim/feeds/version.rb +2 -2
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a515b5ec8dbef4369e412ae903c9c72b7d671a5a25a09f5f95718fb6b2dd6012
|
4
|
+
data.tar.gz: b0933807864abe877a8a3795d8a278fbc0b230d21b3f0fc1615ddb0ad7d84e4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdb366b1c176ae440c62c65865d6243529c13e33d36ac07e2ad4fa6ffbd581ec37c44c46e82cab184c7c944800e56a3a47ea77fd44250fd325b0e27147fccb93
|
7
|
+
data.tar.gz: 0102cc47bcbcf8b3014d3345f4eb46e01834c53ac6500d816ec045716840c73cd26a2586ac6d4106ac99e7049585dbf0b77346cf493424116f09345a83f95e8e
|
data/README.md
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
# Decidim::Feeds participatory space
|
1
|
+
# Decidim::Feeds participatory space
|
2
2
|
|
3
3
|
This Feeds module adds a simple Feeds Participatory Space to hold a feed component.
|
4
4
|
|
5
|
-
**The module is currently in development and not yet ready.**
|
6
|
-
|
7
5
|
## Usage
|
8
6
|
|
9
|
-
Feeds will be available as a Participatory Space.
|
7
|
+
Feeds will be available as a Participatory Space. This space is very simple and currently just a container for posts.
|
8
|
+
|
9
|
+
Find more information about posts in the README of the [posts module](https://github.com/DecidimAustria/decidim-module-posts)
|
10
|
+
|
11
|
+
It is planned to allow users to create groups for their posts and the groups will be implemented as individual feeds. So users should be able to create new feeds including a posts and meetings component. This is currently partly implemented but not finished.
|
10
12
|
|
11
13
|
## Installation
|
12
14
|
|
13
15
|
Add this line to your application's Gemfile:
|
14
16
|
|
15
17
|
```ruby
|
16
|
-
gem "decidim-feeds"
|
18
|
+
gem "decidim-feeds"
|
17
19
|
```
|
18
20
|
|
19
21
|
And then execute:
|
@@ -5,12 +5,12 @@ module Decidim
|
|
5
5
|
# A command with all the business logic when creating a new participatory
|
6
6
|
# feed in the system.
|
7
7
|
class CreateFeed < Decidim::Command
|
8
|
+
include ::Decidim::MultipleAttachmentsMethods
|
8
9
|
# Public: Initializes the command.
|
9
10
|
#
|
10
11
|
# form - A form object with the params.
|
11
12
|
def initialize(form)
|
12
13
|
@form = form
|
13
|
-
@author = author
|
14
14
|
end
|
15
15
|
|
16
16
|
# Executes the command. Broadcasts these events:
|
@@ -22,6 +22,11 @@ module Decidim
|
|
22
22
|
def call
|
23
23
|
return broadcast(:invalid) if form.invalid?
|
24
24
|
|
25
|
+
if process_attachments?
|
26
|
+
build_attachments
|
27
|
+
return broadcast(:invalid) if attachments_invalid?
|
28
|
+
end
|
29
|
+
|
25
30
|
if feed.persisted?
|
26
31
|
# link_participatory_processes(feed)
|
27
32
|
# Decidim::ContentBlocksCreator.new(feed).create_default!
|
@@ -47,9 +52,9 @@ module Decidim
|
|
47
52
|
Feed,
|
48
53
|
form.current_user,
|
49
54
|
organization: form.current_organization,
|
50
|
-
title:
|
51
|
-
slug: form.title.parameterize,
|
52
|
-
created_by: form.current_user
|
55
|
+
title: form.title,
|
56
|
+
slug: form.title[I18n.locale.to_s].parameterize,
|
57
|
+
created_by: form.current_user # TODO: created_by is a string, that makes no sense
|
53
58
|
)
|
54
59
|
end
|
55
60
|
|
@@ -85,6 +90,12 @@ module Decidim
|
|
85
90
|
# def link_participatory_processes(feed)
|
86
91
|
# feed.link_participatory_space_resources(participatory_processes(feed), "included_participatory_processes")
|
87
92
|
# end
|
93
|
+
|
94
|
+
def first_attachment_weight
|
95
|
+
return 1 if feed.documents.count.zero?
|
96
|
+
|
97
|
+
feed.documents.count
|
98
|
+
end
|
88
99
|
end
|
89
100
|
end
|
90
101
|
end
|
@@ -5,7 +5,7 @@ module Decidim
|
|
5
5
|
# A command with all the business logic when creating a new participatory
|
6
6
|
# feed in the system.
|
7
7
|
class UpdateFeed < Decidim::Command
|
8
|
-
include ::Decidim::
|
8
|
+
include ::Decidim::MultipleAttachmentsMethods
|
9
9
|
|
10
10
|
# Public: Initializes the command.
|
11
11
|
#
|
@@ -14,6 +14,7 @@ module Decidim
|
|
14
14
|
def initialize(feed, form)
|
15
15
|
@feed = feed
|
16
16
|
@form = form
|
17
|
+
@attached_to = feed
|
17
18
|
end
|
18
19
|
|
19
20
|
# Executes the command. Broadcasts these events:
|
@@ -25,8 +26,15 @@ module Decidim
|
|
25
26
|
def call
|
26
27
|
return broadcast(:invalid) if form.invalid?
|
27
28
|
|
29
|
+
if process_attachments?
|
30
|
+
build_attachments
|
31
|
+
return broadcast(:invalid) if attachments_invalid?
|
32
|
+
end
|
33
|
+
|
28
34
|
update_feed
|
29
35
|
# link_participatory_processes(@feed)
|
36
|
+
document_cleanup!(include_all_attachments: true)
|
37
|
+
create_attachments if process_attachments?
|
30
38
|
|
31
39
|
if @feed.valid?
|
32
40
|
broadcast(:ok, @feed)
|
@@ -6,31 +6,31 @@ module Decidim
|
|
6
6
|
module FeedBreadcrumb
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
|
-
private
|
9
|
+
# private
|
10
10
|
|
11
|
-
def current_participatory_space_breadcrumb_item
|
12
|
-
|
11
|
+
# def current_participatory_space_breadcrumb_item
|
12
|
+
# return {} if current_participatory_space.blank?
|
13
13
|
|
14
|
-
|
14
|
+
# dropdown_cell = current_participatory_space_manifest.breadcrumb_cell
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
# items = current_participatory_space.ancestors.map do |participatory_space|
|
17
|
+
# {
|
18
|
+
# label: participatory_space.title,
|
19
|
+
# url: Decidim::ResourceLocatorPresenter.new(participatory_space).path,
|
20
|
+
# active: false,
|
21
|
+
# dropdown_cell:,
|
22
|
+
# resource: participatory_space
|
23
|
+
# }
|
24
|
+
# end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
26
|
+
# items << {
|
27
|
+
# label: current_participatory_space.title,
|
28
|
+
# url: Decidim::ResourceLocatorPresenter.new(current_participatory_space).path,
|
29
|
+
# active: true,
|
30
|
+
# dropdown_cell:,
|
31
|
+
# resource: current_participatory_space
|
32
|
+
# }
|
33
|
+
# end
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -5,10 +5,10 @@ module Decidim
|
|
5
5
|
# A controller that holds the logic to show Feeds in a public layout.
|
6
6
|
class FeedsController < Decidim::Feeds::ApplicationController
|
7
7
|
include ParticipatorySpaceContext
|
8
|
-
include FeedBreadcrumb
|
8
|
+
# include FeedBreadcrumb
|
9
9
|
include FormFactory
|
10
10
|
|
11
|
-
participatory_space_layout only: :show
|
11
|
+
#participatory_space_layout only: :show
|
12
12
|
|
13
13
|
include FilterResource
|
14
14
|
include Paginable
|
@@ -25,6 +25,8 @@ module Decidim
|
|
25
25
|
def show
|
26
26
|
enforce_permission_to :read, :feed, feed: current_participatory_space
|
27
27
|
|
28
|
+
@feed = current_feed
|
29
|
+
|
28
30
|
@posts_component = current_feed.components.find_by(manifest_name: "posts")
|
29
31
|
|
30
32
|
if @posts_component.nil?
|
@@ -7,12 +7,14 @@ module Decidim
|
|
7
7
|
#
|
8
8
|
class FeedForm < Form
|
9
9
|
include TranslatableAttributes
|
10
|
+
include AttachmentAttributes
|
10
11
|
|
11
12
|
mimic :feed
|
12
13
|
|
13
14
|
translatable_attribute :title, String
|
14
15
|
|
15
16
|
attribute :created_by, String
|
17
|
+
attribute :attachment, AttachmentForm
|
16
18
|
|
17
19
|
# attribute :participatory_processes_ids, Array[Integer]
|
18
20
|
# attribute :included_at, Decidim::Attributes::LocalizedDate
|
@@ -24,6 +26,8 @@ module Decidim
|
|
24
26
|
|
25
27
|
# validate :same_type_organization, if: ->(form) { form.decidim_feeds_type_id }
|
26
28
|
|
29
|
+
attachments_attribute :documents
|
30
|
+
|
27
31
|
validates :title, translatable_presence: true
|
28
32
|
|
29
33
|
# validates :banner_image, passthru: { to: Decidim::Feed }
|
@@ -48,6 +52,20 @@ module Decidim
|
|
48
52
|
# &.sort_by { |arr| arr[0] }
|
49
53
|
# end
|
50
54
|
|
55
|
+
def map_model(model)
|
56
|
+
self.title = model.title # translated_attribute(model.title)
|
57
|
+
# self.slug = model.slug
|
58
|
+
self.documents = model.attachments
|
59
|
+
end
|
60
|
+
|
61
|
+
def has_attachments?
|
62
|
+
feed.has_attachments? && errors[:documents].empty? && documents.present?
|
63
|
+
end
|
64
|
+
|
65
|
+
def has_error_in_attachments?
|
66
|
+
errors[:documents].present?
|
67
|
+
end
|
68
|
+
|
51
69
|
private
|
52
70
|
|
53
71
|
# def organization_participatory_processes
|
@@ -17,14 +17,14 @@ module Decidim
|
|
17
17
|
components = participatory_space.components.published.or(Decidim::Component.where(id: try(:current_component)))
|
18
18
|
|
19
19
|
[
|
20
|
-
*(if participatory_space.members.not_ceased.any?
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
# *(if participatory_space.members.not_ceased.any?
|
21
|
+
# [{
|
22
|
+
# name: t("feed_member_menu_item", scope: "layouts.decidim.feed_navigation"),
|
23
|
+
# url: decidim_feeds.feed_feed_members_path(participatory_space),
|
24
|
+
# active: is_active_link?(decidim_feeds.feed_feed_members_path(participatory_space), :inclusive)
|
25
|
+
# }]
|
26
|
+
# end
|
27
|
+
# )
|
28
28
|
] + components.map do |component|
|
29
29
|
{
|
30
30
|
name: decidim_escape_translated(component.name),
|
@@ -12,7 +12,7 @@ module Decidim
|
|
12
12
|
include Decidim::HasAttachments
|
13
13
|
# include Decidim::HasAttachmentCollections
|
14
14
|
# include Decidim::Publicable
|
15
|
-
|
15
|
+
include Decidim::ScopableParticipatorySpace
|
16
16
|
# include Decidim::Followable
|
17
17
|
# include Decidim::HasReference
|
18
18
|
# include Decidim::HasPrivateUsers
|
@@ -41,17 +41,18 @@ module Decidim
|
|
41
41
|
validates :slug, uniqueness: { scope: :organization }
|
42
42
|
validates :slug, presence: true, format: { with: Decidim::Feeds::Feed.slug_format }
|
43
43
|
|
44
|
-
searchable_fields(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
44
|
+
searchable_fields(
|
45
|
+
{
|
46
|
+
# scope_id: :decidim_scope_id,
|
47
|
+
participatory_space: :itself,
|
48
|
+
A: :title,
|
49
|
+
# B: :subtitle,
|
50
|
+
# C: :short_description,
|
51
|
+
# D: :description,
|
52
|
+
datetime: :created_at
|
53
|
+
},
|
54
|
+
index_on_create: true,
|
55
|
+
index_on_update: true
|
55
56
|
)
|
56
57
|
|
57
58
|
# Overwriting existing method Decidim::HasPrivateUsers.public_spaces
|
@@ -0,0 +1,97 @@
|
|
1
|
+
document.addEventListener('DOMContentLoaded', function () {
|
2
|
+
console.log('feeds.js has loaded');
|
3
|
+
|
4
|
+
const button = document.querySelector('.feeds_popup_btn');
|
5
|
+
const popup = document.getElementById('feeds_popup');
|
6
|
+
|
7
|
+
if (button && popup) {
|
8
|
+
const isTouchDevice = 'ontouchstart' in document.documentElement;
|
9
|
+
let hideTimeout; // Reference for debounce or timeout management
|
10
|
+
|
11
|
+
// Utility to toggle the popup's visibility
|
12
|
+
const showPopup = function (e) {
|
13
|
+
e.preventDefault();
|
14
|
+
const btn_icon = button.querySelector('.icon');
|
15
|
+
if (!btn_icon) {
|
16
|
+
console.error('Button icon not found for positioning');
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
|
20
|
+
const rect = btn_icon.getBoundingClientRect();
|
21
|
+
popup.style.left = `${rect.left - 36}px`;
|
22
|
+
popup.classList.remove('hidden');
|
23
|
+
button.setAttribute('aria-expanded', 'true');
|
24
|
+
};
|
25
|
+
|
26
|
+
const hidePopup = function () {
|
27
|
+
popup.classList.add('hidden');
|
28
|
+
button.setAttribute('aria-expanded', 'false');
|
29
|
+
button.focus(); // Return focus to the button
|
30
|
+
};
|
31
|
+
|
32
|
+
// Debounce utility to handle rapid mouse events
|
33
|
+
const debounce = (callback, delay) => {
|
34
|
+
clearTimeout(hideTimeout);
|
35
|
+
hideTimeout = setTimeout(callback, delay);
|
36
|
+
};
|
37
|
+
|
38
|
+
if (isTouchDevice) {
|
39
|
+
button.addEventListener('touchstart', function (e) {
|
40
|
+
if (!popup.classList.contains('hidden')) {
|
41
|
+
hidePopup();
|
42
|
+
} else {
|
43
|
+
showPopup(e);
|
44
|
+
}
|
45
|
+
e.preventDefault();
|
46
|
+
});
|
47
|
+
} else {
|
48
|
+
// Prevent default click behavior
|
49
|
+
button.addEventListener('click', function (e) {
|
50
|
+
e.preventDefault();
|
51
|
+
});
|
52
|
+
|
53
|
+
// Show popup on mouseenter
|
54
|
+
button.addEventListener('mouseenter', showPopup);
|
55
|
+
|
56
|
+
// Hide popup on mouseleave with debounce
|
57
|
+
button.addEventListener('mouseleave', function () {
|
58
|
+
debounce(() => {
|
59
|
+
if (!popup.matches(':hover')) {
|
60
|
+
hidePopup();
|
61
|
+
}
|
62
|
+
}, 150);
|
63
|
+
});
|
64
|
+
|
65
|
+
// Hide popup when mouse leaves popup area
|
66
|
+
popup.addEventListener('mouseleave', hidePopup);
|
67
|
+
|
68
|
+
// Clear hide timeout if re-entering popup
|
69
|
+
popup.addEventListener('mouseenter', function () {
|
70
|
+
clearTimeout(hideTimeout);
|
71
|
+
});
|
72
|
+
|
73
|
+
// Add keyboard support for Enter and Escape
|
74
|
+
button.addEventListener('keydown', function (e) {
|
75
|
+
if (e.key === 'Enter') {
|
76
|
+
// Toggle popup visibility on Enter
|
77
|
+
if (!popup.classList.contains('hidden')) {
|
78
|
+
hidePopup();
|
79
|
+
} else {
|
80
|
+
showPopup(e);
|
81
|
+
// Focus the first focusable element in the popup for accessibility
|
82
|
+
const firstFocusable = popup.querySelector(
|
83
|
+
'a, button, input, [tabindex="0"]'
|
84
|
+
);
|
85
|
+
if (firstFocusable) firstFocusable.focus();
|
86
|
+
}
|
87
|
+
}
|
88
|
+
});
|
89
|
+
|
90
|
+
document.addEventListener('keydown', function (e) {
|
91
|
+
if (e.key === 'Escape' && !popup.classList.contains('hidden')) {
|
92
|
+
hidePopup();
|
93
|
+
}
|
94
|
+
});
|
95
|
+
}
|
96
|
+
}
|
97
|
+
});
|
@@ -1,18 +1,30 @@
|
|
1
1
|
<div class="form__wrapper">
|
2
|
-
<div
|
3
|
-
<div class="
|
4
|
-
|
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>
|
2
|
+
<div id="panel-title" class="card-section">
|
3
|
+
<div class="row column">
|
4
|
+
<%= form.translated_one_locale :text_field, :title, current_locale, autofocus: true, aria: { label: :title } %>
|
16
5
|
</div>
|
17
6
|
</div>
|
7
|
+
|
8
|
+
<%= form.upload :documents,
|
9
|
+
titled: true,
|
10
|
+
label: false,
|
11
|
+
button_label: t("add_logo", scope: "decidim.feeds.feeds.form"),
|
12
|
+
button_edit_label: I18n.t("replace_logo", scope: "decidim.feeds.feeds.form"),
|
13
|
+
multiple: true,
|
14
|
+
# modal_only: false,
|
15
|
+
# show_current: true,
|
16
|
+
#label: false,
|
17
|
+
# id: field_id,
|
18
|
+
# disabled:,
|
19
|
+
# attribute:,
|
20
|
+
# resource_name: @object_name,
|
21
|
+
# resource_class: options[:resource_class]&.to_s || resource_class(attribute),
|
22
|
+
# show_current: true,
|
23
|
+
# max_file_size:,
|
24
|
+
# help: help_messages,
|
25
|
+
# label: label_for(attribute),
|
26
|
+
# button_label:,
|
27
|
+
# button_edit_label: I18n.t("decidim.forms.upload.labels.replace"),
|
28
|
+
button_class: "button button__sm button__transparent-primary w-full",
|
29
|
+
required: false %>
|
18
30
|
</div>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<div id="feeds_popup" class="feeds_popup flex gap-2 fixed bottom-[5.5rem] left-4 z-[1000] hidden">
|
2
|
+
<div class="flex flex-col rounded-2xl shadow px-2 py-4 bg-white">
|
3
|
+
<nav aria-label="<%= t("decidim.feeds.feeds.menu.title") %>">
|
4
|
+
<ul class="flex flex-col gap-4 min-w-[80px]">
|
5
|
+
<li class="flex flex-col items-center gap-1">
|
6
|
+
<%= link_to decidim_feeds.feeds_path, class:'flex flex-col items-center' do %>
|
7
|
+
<%= icon "group-2-line", class: 'w-[24px] h-auto' %>
|
8
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.menu.all") %></span>
|
9
|
+
<% end %>
|
10
|
+
</li>
|
11
|
+
<li class="flex flex-col items-center gap-1">
|
12
|
+
<%= link_to decidim_feeds.new_feed_path, class:'flex flex-col items-center' do %>
|
13
|
+
<%= icon "add-circle-line", class: 'w-[24px] h-auto' %>
|
14
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.menu.new") %></span>
|
15
|
+
<% end %>
|
16
|
+
</li>
|
17
|
+
<li class="flex flex-col items-center gap-1">
|
18
|
+
<%= link_to decidim_feeds.new_feed_path, class:'flex flex-col items-center' do %>
|
19
|
+
<%= icon "settings-3-line", class: 'w-[24px] h-auto' %>
|
20
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.menu.manage") %></span>
|
21
|
+
<% end %>
|
22
|
+
</li>
|
23
|
+
</ul>
|
24
|
+
</nav>
|
25
|
+
</div>
|
26
|
+
<div class="flex flex-col gap-2 rounded-2xl shadow px-2 py-4 bg-white">
|
27
|
+
<span class="text-sm font-bold text-center max-w-[80px]">
|
28
|
+
<%= t("decidim.feeds.feeds.menu.myGroups") %>
|
29
|
+
</span>
|
30
|
+
<nav aria-label="<%= t("decidim.feeds.feeds.menu.myGroups") %>">
|
31
|
+
<ul class="flex flex-col gap-4">
|
32
|
+
<li class="flex flex-col items-center gap-1">
|
33
|
+
<%= link_to '/', class:'flex flex-col items-center' do %>
|
34
|
+
<%= icon "group-2-line", class: 'w-[48px] h-auto' %>
|
35
|
+
<span class="text-sm text-center sr-only">NAME</span>
|
36
|
+
<% end %>
|
37
|
+
</li>
|
38
|
+
</ul>
|
39
|
+
</nav>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
<%= append_javascript_pack_tag "decidim_feeds" %>
|
@@ -0,0 +1,36 @@
|
|
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
|
+
|
10
|
+
<%
|
11
|
+
edit_link(
|
12
|
+
resource_locator(current_participatory_space).edit,
|
13
|
+
:update,
|
14
|
+
:feed,
|
15
|
+
feed: current_participatory_space
|
16
|
+
)
|
17
|
+
%>
|
18
|
+
|
19
|
+
|
20
|
+
<%= link_to t(".show_posts"), decidim_feed_posts_path(current_participatory_space, @posts_component) %>
|
21
|
+
<%= link_to t(".edit"), edit_feed_path(@current_feed) %>
|
22
|
+
|
23
|
+
<div class="participatory-space__container">
|
24
|
+
|
25
|
+
<%= participatory_space_floating_help %>
|
26
|
+
|
27
|
+
<% active_content_blocks.each do |content_block| %>
|
28
|
+
<% next unless content_block.manifest %>
|
29
|
+
<%= cell content_block.manifest.cell, content_block %>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<section class="participatory-space__block-reference">
|
35
|
+
<%= resource_reference(current_participatory_space) %>
|
36
|
+
</section>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<aside class="!relative !top-0 !bottom-0 !right-0">
|
2
|
+
<nav>
|
3
|
+
<ul class="flex flex-col gap-4">
|
4
|
+
<li class="flex flex-col items-center gap-1">
|
5
|
+
<%= link_to decidim_feeds.new_feed_path, class:'flex flex-col items-center' do %>
|
6
|
+
<%= icon "add-circle-line", class: 'w-[24px] h-auto' %>
|
7
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.index.new_feed") %></span>
|
8
|
+
<% end %>
|
9
|
+
</li>
|
10
|
+
</ul>
|
11
|
+
</nav>
|
12
|
+
</aside>
|
@@ -1,10 +1,27 @@
|
|
1
|
-
<
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<main class="feeds__main w-full xl:max-w-screen-xl 2xl:max-w-screen-2xl mx-auto p-4 lg:p-16">
|
2
|
+
<div class="feeds__container grow min-h-[calc(100vh-72px)]">
|
3
|
+
<div class="feeds__body flex-grow flex flex-wrap gap-4 items-start">
|
4
|
+
<div class="card__grid-home w-full lg:grid-cols-8 xl:grid-cols-12 gap-6">
|
5
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
6
|
+
<%= link_to decidim_feeds.feeds_path, class:'flex items-center gap-1' do %>
|
7
|
+
<%= icon "arrow-left-circle-line", class: 'w-[24px] h-auto' %>
|
8
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.nav.back") %></span>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
12
|
+
<h1 class="text-xl font-bold mb-2 uppercase">
|
13
|
+
<%= t "feeds.edit.title", scope: "decidim.feeds" %>
|
14
|
+
</h1>
|
15
|
+
<%= decidim_form_for(@form, html: { class: "form form-defaults edit_feed feed_form_admin" }) do |f| %>
|
16
|
+
<%= render partial: "form", object: f %>
|
17
|
+
<div class="item__edit-sticky">
|
18
|
+
<div class="item__edit-sticky-container">
|
19
|
+
<%= f.submit t("feeds.edit.update", scope: "decidim.feeds"), class: "button button__sm button__secondary" %>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
7
24
|
</div>
|
8
25
|
</div>
|
9
|
-
|
10
|
-
</
|
26
|
+
</div>
|
27
|
+
</main>
|
@@ -1,5 +1,39 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<main class="feeds__main flex w-full xl:max-w-screen-xl 2xl:max-w-screen-2xl mx-auto p-4 lg:p-16 lg:flex-row lg:gap-4 lg:justify-between">
|
2
|
+
<div class="feeds__container grow min-h-[calc(100vh-72px)]">
|
3
|
+
<div class="feeds__body flex-grow flex flex-wrap gap-4 items-start">
|
4
|
+
<div class="card__grid-home w-full lg:grid-cols-8 xl:grid-cols-12 gap-6">
|
5
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
6
|
+
<h1 class="text-xl mb-2 uppercase"><%= t("decidim.feeds.feeds.index.all_feeds") %></h1>
|
7
|
+
<ul class="flex gap-2 flex-wrap">
|
8
|
+
<% @feeds.each do |feed| %>
|
9
|
+
<li>
|
10
|
+
<%= link_to feed, class:'flex flex-col items-center' do %>
|
11
|
+
<% if feed.attachments.any? %>
|
12
|
+
<%= image_tag feed.attachments.first.file.url, class: 'w-[48px] h-auto' %>
|
13
|
+
<% else %>
|
14
|
+
<%= icon "group-2-line", class: 'w-[48px] h-auto' %>
|
15
|
+
<% end %>
|
16
|
+
<span class="text-sm text-center"><%=translated_attribute(feed.title)%></span>
|
17
|
+
<% end %>
|
18
|
+
</li>
|
19
|
+
<% end %>
|
20
|
+
</ul>
|
21
|
+
</div>
|
22
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
23
|
+
<h2 class="text-xl font-bold mb-2 uppercase"><%= t("decidim.feeds.feeds.index.my_feeds") %></h2>
|
24
|
+
<ul class="flex gap-2 flex-wrap">
|
25
|
+
<% @feeds.each do |feed| %>
|
26
|
+
<li>
|
27
|
+
<%= link_to feed, class:'flex flex-col items-center' do %>
|
28
|
+
<%= icon "group-2-line", class: 'w-[48px] h-auto' %>
|
29
|
+
<span class="text-sm text-center"><%=translated_attribute(feed.title)%></span>
|
30
|
+
<% end %>
|
31
|
+
</li>
|
32
|
+
<% end %>
|
33
|
+
</ul>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
<%= render partial: "decidim/feeds/feeds/sidebar" %>
|
39
|
+
</main>
|
@@ -1,20 +1,31 @@
|
|
1
1
|
<% add_decidim_page_title(t("feeds.new.title", scope: "decidim.feeds")) %>
|
2
|
-
|
3
|
-
<div class="
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
2
|
+
<main class="feeds__main w-full xl:max-w-screen-xl 2xl:max-w-screen-2xl mx-auto p-4 lg:p-16">
|
3
|
+
<div class="feeds__container grow min-h-[calc(100vh-72px)]">
|
4
|
+
<div class="feeds__body flex-grow flex flex-wrap gap-4 items-start">
|
5
|
+
<div class="card__grid-home w-full lg:grid-cols-8 xl:grid-cols-12 gap-6">
|
6
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
7
|
+
<%= link_to decidim_feeds.feeds_path, class:'flex items-center gap-1' do %>
|
8
|
+
<%= icon "arrow-left-circle-line", class: 'w-[24px] h-auto' %>
|
9
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.nav.back") %></span>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
12
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
13
|
+
<h1 class="text-xl font-bold mb-2 uppercase">
|
14
|
+
<%= t "feeds.new.title", scope: "decidim.feeds" %>
|
15
|
+
</h1>
|
16
|
+
<%= decidim_form_for(@form, html: { class: "form-defaults form new_feed feed_form" }) do |f| %>
|
17
|
+
<%= render partial: "form", object: f %>
|
18
|
+
<div class="item__edit-sticky">
|
19
|
+
<div class="item__edit-sticky-container">
|
20
|
+
<%= f.submit class: "button button__sm button__secondary" do %>
|
21
|
+
<%= t("feeds.new.create", scope: "decidim.feeds") %>
|
22
|
+
<%= icon "arrow-right-line", class: '' %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
<% end %>
|
16
27
|
</div>
|
17
28
|
</div>
|
18
|
-
|
29
|
+
</div>
|
19
30
|
</div>
|
20
|
-
</
|
31
|
+
</main>
|
@@ -1,33 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<% add_decidim_page_title(t("feeds.edit.update", scope: "decidim.feeds")) %>
|
2
|
+
<main class="feeds__main flex w-full xl:max-w-screen-xl 2xl:max-w-screen-2xl mx-auto p-4 lg:p-16 lg:flex-row lg:gap-4 lg:justify-between">
|
3
|
+
<div class="grow min-h-[calc(100vh-72px)]">
|
4
|
+
<div class="feeds__body flex-grow flex flex-wrap gap-4 items-start">
|
5
|
+
<div class="card__grid-home w-full lg:grid-cols-8 xl:grid-cols-12 gap-6">
|
6
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
7
|
+
<%= link_to decidim_feeds.feeds_path, class:'flex items-center gap-1' do %>
|
8
|
+
<%= icon "arrow-left-circle-line", class: 'w-[24px] h-auto' %>
|
9
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.nav.back") %></span>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
12
|
+
<div class="p-2 gap-4 md:col-start-1 md:col-end-4 lg:col-start-2 lg:col-end-8 xl:col-start-2 xl:col-end-10">
|
13
|
+
<div class="flex justify-between pb-4">
|
14
|
+
<%= link_to decidim_feed_posts_path(current_participatory_space, @posts_component) do %>
|
15
|
+
<h1 class="mb-2 flex gap-4 align-baseline">
|
16
|
+
<%= icon "group-2-line", class: 'w-[48px] h-auto' %>
|
17
|
+
<span class="text-xl font-bold uppercase"><%= translated_attribute @feed.title %></span>
|
18
|
+
</h1>
|
19
|
+
<% end %>
|
20
|
+
<%= link_to decidim_feeds.edit_feed_path(@feed), class:'flex flex-col items-center' do %>
|
21
|
+
<%= icon "settings-3-line", class: 'w-[24px] h-auto' %>
|
22
|
+
<span class="text-sm text-center"><%= t("decidim.feeds.feeds.menu.edit") %></span>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
<p class="text-pretty py-4">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sapien ornare vitae amet.</p>
|
26
|
+
<div class="flex gap-4 py-4">
|
27
|
+
<%= link_to t(".show_posts"), decidim_feed_posts_path(current_participatory_space, @posts_component), class: "button button__sm button__transparent-primary self-end" %>
|
28
|
+
</div>
|
7
29
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</main>
|
data/config/locales/bs.yml
CHANGED
@@ -3,8 +3,19 @@ bs:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Nazad
|
8
|
+
menu:
|
9
|
+
title: Upravljanje Feedovima
|
10
|
+
all: Sve
|
11
|
+
new: Novo
|
12
|
+
manage: Upravljaj
|
13
|
+
edit: Uredi
|
14
|
+
myGroups: Moje Grupe
|
6
15
|
index:
|
7
16
|
new_feed: Novi Feed
|
17
|
+
all_feeds: Svi Feedovi
|
18
|
+
my_feeds: Moji Feedovi
|
8
19
|
show:
|
9
20
|
show_posts: Prikazi postove
|
10
21
|
edit: Uredi
|
@@ -14,18 +25,28 @@ bs:
|
|
14
25
|
create: Kreiraj Feed
|
15
26
|
edit:
|
16
27
|
update: Ažuriraj Feed
|
28
|
+
title: Uredi Feed
|
17
29
|
form:
|
18
30
|
title: Naslov
|
31
|
+
add_logo: Dodaj Logo
|
32
|
+
replace_logo: Zamijeni Logo
|
19
33
|
create:
|
20
34
|
error: Kreiranje feeda nije uspjelo
|
21
35
|
success: Feed uspješno kreiran
|
22
36
|
update:
|
23
37
|
success: Feed uspješno ažuriran
|
24
38
|
error: Ažuriranje feeda nije uspjelo
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Pretraga
|
42
|
+
name: Ime
|
43
|
+
interest: Interes
|
44
|
+
block: Stube / Zgrada / Kvart
|
45
|
+
noUser: Nema korisnika
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Za Feeds UI, potrebna vam je stranica s URL slugom "info"'
|
29
50
|
new_info_page_button: Kreiraj novu info stranicu
|
30
51
|
form:
|
31
52
|
title: Naslov
|
@@ -37,7 +58,7 @@ bs:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} odgovora'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Prijavi
|
data/config/locales/de.yml
CHANGED
@@ -3,29 +3,50 @@ de:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Zurück
|
8
|
+
menu:
|
9
|
+
title: Gruppenverwaltung
|
10
|
+
all: Alle
|
11
|
+
new: Neue
|
12
|
+
manage: Verwalten
|
13
|
+
edit: Bearbeiten
|
14
|
+
myGroups: Meine Gruppen
|
6
15
|
index:
|
7
|
-
new_feed:
|
16
|
+
new_feed: Neue Gruppe
|
17
|
+
all_feeds: Alle Gruppen
|
18
|
+
my_feeds: Meine Gruppen
|
8
19
|
show:
|
9
20
|
show_posts: Beiträge anzeigen
|
10
21
|
edit: Bearbeiten
|
11
22
|
posts_component_not_found: Beitragskomponente nicht gefunden
|
12
23
|
new:
|
13
|
-
title:
|
14
|
-
create:
|
24
|
+
title: Neue Gruppe
|
25
|
+
create: Gruppe erstellen
|
15
26
|
edit:
|
16
|
-
update:
|
27
|
+
update: Gruppe aktualisieren
|
28
|
+
title: Gruppe bearbeiten
|
17
29
|
form:
|
18
30
|
title: Titel
|
31
|
+
add_logo: Logo hinzufügen
|
32
|
+
replace_logo: Logo ersetzen
|
19
33
|
create:
|
20
34
|
error: Feed-Erstellung fehlgeschlagen
|
21
35
|
success: Feed erfolgreich erstellt
|
22
36
|
update:
|
23
37
|
success: Feed erfolgreich aktualisiert
|
24
38
|
error: Feed-Aktualisierung fehlgeschlagen
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Suche
|
42
|
+
name: Name
|
43
|
+
interest: Interesse
|
44
|
+
block: Stiege / Gebäude / Bezirk
|
45
|
+
noUser: Keine Benutzer gefunden
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Für die Feeds UI benötigen sie eine Seite mit dem URL Slug "info"'
|
29
50
|
new_info_page_button: Neue Info-Seite erstellen
|
30
51
|
form:
|
31
52
|
title: Titel
|
@@ -37,7 +58,7 @@ de:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} Antworten'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Melden
|
data/config/locales/en.yml
CHANGED
@@ -3,8 +3,19 @@ en:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Back
|
8
|
+
menu:
|
9
|
+
title: Groups Management
|
10
|
+
all: All
|
11
|
+
new: New
|
12
|
+
manage: Manage
|
13
|
+
edit: Edit
|
14
|
+
myGroups: My Groups
|
6
15
|
index:
|
7
16
|
new_feed: New Feed
|
17
|
+
all_feeds: All Feeds
|
18
|
+
my_feeds: My Feeds
|
8
19
|
show:
|
9
20
|
show_posts: Show posts
|
10
21
|
edit: Edit
|
@@ -14,18 +25,28 @@ en:
|
|
14
25
|
create: Create Feed
|
15
26
|
edit:
|
16
27
|
update: Update Feed
|
28
|
+
title: Edit Feed
|
17
29
|
form:
|
18
30
|
title: Title
|
31
|
+
add_logo: Add Logo
|
32
|
+
replace_logo: Replace Logo
|
19
33
|
create:
|
20
34
|
error: Feed creation failed
|
21
35
|
success: Feed created successfully
|
22
36
|
update:
|
23
37
|
success: Feed updated successfully
|
24
38
|
error: Feed update failed
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Search
|
42
|
+
name: Name
|
43
|
+
interest: Interest
|
44
|
+
block: Staircase / Building / District
|
45
|
+
noUser: No users found
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'For the Feeds UI, you need a page with the URL slug "info"'
|
29
50
|
new_info_page_button: Create new info page
|
30
51
|
form:
|
31
52
|
title: Title
|
@@ -37,7 +58,7 @@ en:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} responses'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Report
|
data/config/locales/hr.yml
CHANGED
@@ -3,8 +3,19 @@ hr:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Nazad
|
8
|
+
menu:
|
9
|
+
title: Upravljanje Feedovima
|
10
|
+
all: Sve
|
11
|
+
new: Novo
|
12
|
+
manage: Upravljaj
|
13
|
+
edit: Uredi
|
14
|
+
myGroups: Moje Grupe
|
6
15
|
index:
|
7
16
|
new_feed: Novi Feed
|
17
|
+
all_feeds: Svi Feedovi
|
18
|
+
my_feeds: Moji Feedovi
|
8
19
|
show:
|
9
20
|
show_posts: Prikazi postove
|
10
21
|
edit: Uredi
|
@@ -14,18 +25,28 @@ hr:
|
|
14
25
|
create: Kreiraj Feed
|
15
26
|
edit:
|
16
27
|
update: Ažuriraj Feed
|
28
|
+
title: Uredi Feed
|
17
29
|
form:
|
18
30
|
title: Naslov
|
31
|
+
add_logo: Dodaj Logo
|
32
|
+
replace_logo: Zamijeni Logo
|
19
33
|
create:
|
20
34
|
error: Kreiranje feeda nije uspjelo
|
21
35
|
success: Feed uspješno kreiran
|
22
36
|
update:
|
23
37
|
success: Feed uspješno ažuriran
|
24
38
|
error: Ažuriranje feeda nije uspjelo
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Pretraga
|
42
|
+
name: Ime
|
43
|
+
interest: Interes
|
44
|
+
block: Stube / Zgrada / Kvart
|
45
|
+
noUser: Nema korisnika
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Za Feeds UI, potrebna vam je stranica s URL slugom "info"'
|
29
50
|
new_info_page_button: Kreiraj novu info stranicu
|
30
51
|
form:
|
31
52
|
title: Naslov
|
@@ -37,7 +58,7 @@ hr:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} odgovora'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Prijavi
|
data/config/locales/it.yml
CHANGED
@@ -3,8 +3,19 @@ it:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Indietro
|
8
|
+
menu:
|
9
|
+
title: Gestione dei gruppi
|
10
|
+
all: Tutti
|
11
|
+
new: Nuovo
|
12
|
+
manage: Gestisci
|
13
|
+
edit: Modifica
|
14
|
+
myGroups: I miei gruppi
|
6
15
|
index:
|
7
16
|
new_feed: Nuovo feed
|
17
|
+
all_feeds: Tutti i feed
|
18
|
+
my_feeds: I miei feed
|
8
19
|
show:
|
9
20
|
show_posts: Mostra post
|
10
21
|
edit: Modifica
|
@@ -14,18 +25,28 @@ it:
|
|
14
25
|
create: Crea feed
|
15
26
|
edit:
|
16
27
|
update: Aggiorna feed
|
28
|
+
title: Modifica feed
|
17
29
|
form:
|
18
30
|
title: Titolo
|
31
|
+
add_logo: Aggiungi Logo
|
32
|
+
replace_logo: Sostituisci Logo
|
19
33
|
create:
|
20
34
|
error: Creazione del feed fallita
|
21
35
|
success: Feed creato con successo
|
22
36
|
update:
|
23
37
|
success: Feed aggiornato con successo
|
24
38
|
error: Aggiornamento del feed fallito
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Cerca
|
42
|
+
name: Nome
|
43
|
+
interest: Interesse
|
44
|
+
block: Scala / Edificio / Quartiere
|
45
|
+
noUser: Nessun utente trovato
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Per l''interfaccia utente dei feed, è necessaria una pagina con lo slug URL "info"'
|
29
50
|
new_info_page_button: Crea nuova pagina di informazioni
|
30
51
|
form:
|
31
52
|
title: Titolo
|
@@ -37,7 +58,7 @@ it:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} risposte'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Segnala
|
data/config/locales/sr.yml
CHANGED
@@ -3,8 +3,19 @@ sr:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Nazad
|
8
|
+
menu:
|
9
|
+
title: Upravljanje Feedovima
|
10
|
+
all: Sve
|
11
|
+
new: Novo
|
12
|
+
manage: Upravljaj
|
13
|
+
edit: Uredi
|
14
|
+
myGroups: Moje Grupe
|
6
15
|
index:
|
7
16
|
new_feed: Novi Feed
|
17
|
+
all_feeds: Svi Feedovi
|
18
|
+
my_feeds: Moji Feedovi
|
8
19
|
show:
|
9
20
|
show_posts: Prikazi postove
|
10
21
|
edit: Uredi
|
@@ -14,18 +25,28 @@ sr:
|
|
14
25
|
create: Kreiraj Feed
|
15
26
|
edit:
|
16
27
|
update: Ažuriraj Feed
|
28
|
+
title: Uredi Feed
|
17
29
|
form:
|
18
30
|
title: Naslov
|
31
|
+
add_logo: Dodaj Logo
|
32
|
+
replace_logo: Zamijeni Logo
|
19
33
|
create:
|
20
34
|
error: Kreiranje feeda nije uspelo
|
21
35
|
success: Feed uspešno kreiran
|
22
36
|
update:
|
23
37
|
success: Feed uspešno ažuriran
|
24
38
|
error: Ažuriranje feeda nije uspelo
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Pretraga
|
42
|
+
name: Ime
|
43
|
+
interest: Interes
|
44
|
+
block: Stube / Zgrada / Kvart
|
45
|
+
noUser: Nema korisnika
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Za Feeds UI, potrebna vam je stranica s URL slugom "info"'
|
29
50
|
new_info_page_button: Kreiraj novu info stranicu
|
30
51
|
form:
|
31
52
|
title: Naslov
|
@@ -37,7 +58,7 @@ sr:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} odgovora'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Prijavi
|
@@ -72,4 +93,4 @@ sr:
|
|
72
93
|
fields:
|
73
94
|
title: Naslov
|
74
95
|
created_at: Kreirano
|
75
|
-
actions: Akcije
|
96
|
+
actions: Akcije
|
data/config/locales/tr.yml
CHANGED
@@ -3,8 +3,19 @@ tr:
|
|
3
3
|
decidim:
|
4
4
|
feeds:
|
5
5
|
feeds:
|
6
|
+
nav:
|
7
|
+
back: Geri
|
8
|
+
menu:
|
9
|
+
title: Feed Yönetimi
|
10
|
+
all: Tümü
|
11
|
+
new: Yeni
|
12
|
+
manage: Yönet
|
13
|
+
edit: Düzenle
|
14
|
+
myGroups: Gruplarım
|
6
15
|
index:
|
7
16
|
new_feed: Yeni Feed
|
17
|
+
all_feeds: Tüm Feedler
|
18
|
+
my_feeds: Benim Feedlerim
|
8
19
|
show:
|
9
20
|
show_posts: Gönderileri Göster
|
10
21
|
edit: Düzenle
|
@@ -14,18 +25,28 @@ tr:
|
|
14
25
|
create: Feed Oluştur
|
15
26
|
edit:
|
16
27
|
update: Feed'i Güncelle
|
28
|
+
title: Feed'i Düzenle
|
17
29
|
form:
|
18
30
|
title: Başlık
|
31
|
+
add_logo: Logo Ekle
|
32
|
+
replace_logo: Logo Değiştir
|
19
33
|
create:
|
20
34
|
error: Feed oluşturma başarısız oldu
|
21
35
|
success: Feed başarıyla oluşturuldu
|
22
36
|
update:
|
23
37
|
success: Feed başarıyla güncellendi
|
24
38
|
error: Feed güncelleme başarısız oldu
|
39
|
+
user:
|
40
|
+
filter:
|
41
|
+
title: Ara
|
42
|
+
name: İsim
|
43
|
+
interest: İlgi
|
44
|
+
block: Merdiven / Bina / Mahalle
|
45
|
+
noUser: Kullanıcı bulunamadı
|
25
46
|
admin:
|
26
47
|
feeds:
|
27
48
|
index:
|
28
|
-
new_info_page_info:
|
49
|
+
new_info_page_info: 'Feeds UI için "info" URL slug''ına sahip bir sayfaya ihtiyacınız var'
|
29
50
|
new_info_page_button: Yeni bilgi sayfası oluştur
|
30
51
|
form:
|
31
52
|
title: Başlık
|
@@ -37,7 +58,7 @@ tr:
|
|
37
58
|
feeds:
|
38
59
|
name: Feed
|
39
60
|
survey:
|
40
|
-
participated:
|
61
|
+
participated: '%{count} yanıt'
|
41
62
|
shared:
|
42
63
|
flag_modal:
|
43
64
|
report: Rapor Et
|
data/lib/decidim/feeds/engine.rb
CHANGED
@@ -76,6 +76,11 @@ module Decidim
|
|
76
76
|
Decidim.icons.register(name: "translate", icon: "translate", category: "editor", description: "", engine: :feeds)
|
77
77
|
Decidim.icons.register(name: "file-2-line", icon: "file-2-line", category: "editor", description: "", engine: :feeds)
|
78
78
|
Decidim.icons.register(name: "dislike", icon: "heart-fill", description: "Dislike", category: "action", engine: :feeds)
|
79
|
+
Decidim.icons.register(name: "settings-3-line", icon: "settings-3-line", description: "", category: "action", engine: :feeds)
|
80
|
+
Decidim.icons.register(name: "add-circle-line", icon: "add-circle-line", description: "", category: "action", engine: :feeds)
|
81
|
+
Decidim.icons.register(name: "arrow-left-circle-line", icon: "arrow-left-circle-line", description: "", category: "action", engine: :feeds)
|
82
|
+
Decidim.icons.register(name: "user-unfollow-line", icon: "user-unfollow-line", description: "", category: "action", engine: :feeds)
|
83
|
+
Decidim.icons.register(name: "admin-line", icon: "admin-line", description: "", category: "action", engine: :feeds)
|
79
84
|
end
|
80
85
|
|
81
86
|
end
|
data/lib/decidim/feeds/seeds.rb
CHANGED
@@ -10,9 +10,9 @@ module Decidim
|
|
10
10
|
|
11
11
|
feed = create_feed!
|
12
12
|
|
13
|
-
seed_components_manifests!(participatory_space:
|
13
|
+
seed_components_manifests!(participatory_space: feed)
|
14
14
|
|
15
|
-
# Decidim::ContentBlocksCreator.new(
|
15
|
+
# Decidim::ContentBlocksCreator.new(feed).create_default!
|
16
16
|
end
|
17
17
|
|
18
18
|
# def create_content_block!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-feeds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Rusa
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2025-05-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: decidim-core
|
@@ -17,20 +17,20 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.
|
20
|
+
version: 0.29.0
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '0.
|
23
|
+
version: '0.30'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 0.
|
30
|
+
version: 0.29.0
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.30'
|
34
34
|
description: A new participatory space for Decidim that is ideal for decidim-posts.
|
35
35
|
email:
|
36
36
|
- alex@rusa.at
|
@@ -85,6 +85,9 @@ files:
|
|
85
85
|
- app/views/decidim/feeds/admin/feeds/index.html.erb
|
86
86
|
- app/views/decidim/feeds/admin/feeds/new.html.erb
|
87
87
|
- app/views/decidim/feeds/feeds/_form.html.erb
|
88
|
+
- app/views/decidim/feeds/feeds/_menu-popup.html.erb
|
89
|
+
- app/views/decidim/feeds/feeds/_show.html.erb
|
90
|
+
- app/views/decidim/feeds/feeds/_sidebar.html.erb
|
88
91
|
- app/views/decidim/feeds/feeds/edit.html.erb
|
89
92
|
- app/views/decidim/feeds/feeds/index.html.erb
|
90
93
|
- app/views/decidim/feeds/feeds/new.html.erb
|