decidim-pages 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +24 -0
- data/Rakefile +2 -0
- data/app/commands/decidim/pages/admin/update_page.rb +39 -0
- data/app/commands/decidim/pages/create_page.rb +21 -0
- data/app/commands/decidim/pages/destroy_page.rb +17 -0
- data/app/controllers/decidim/pages/admin/application_controller.rb +13 -0
- data/app/controllers/decidim/pages/admin/pages_controller.rb +35 -0
- data/app/controllers/decidim/pages/application_controller.rb +16 -0
- data/app/forms/decidim/pages/admin/page_form.rb +17 -0
- data/app/helpers/decidim/pages/application_helper.rb +10 -0
- data/app/models/decidim/pages/application_record.rb +9 -0
- data/app/models/decidim/pages/page.rb +12 -0
- data/app/views/decidim/pages/admin/pages/_form.html.erb +5 -0
- data/app/views/decidim/pages/admin/pages/edit.html.erb +9 -0
- data/app/views/decidim/pages/application/show.html.erb +16 -0
- data/config/i18n-tasks.yml +4 -0
- data/config/locales/ca.yml +19 -0
- data/config/locales/en.yml +20 -0
- data/config/locales/es.yml +19 -0
- data/db/migrate/20161116121353_create_decidim_pages.rb +11 -0
- data/db/migrate/20161214150429_add_commentable_to_pages.rb +5 -0
- data/lib/decidim/pages.rb +12 -0
- data/lib/decidim/pages/admin.rb +9 -0
- data/lib/decidim/pages/admin_engine.rb +21 -0
- data/lib/decidim/pages/engine.rb +15 -0
- data/lib/decidim/pages/feature.rb +41 -0
- data/lib/tasks/decidim/pages_tasks.rake +1 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ab78619392592e129e5832c0a779ef5283722b6a
|
4
|
+
data.tar.gz: 32f49164085f41b9f788ff173ddb1b1f1339726f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cabddfa8a9fc6812b2bc7f41580bb2e01d5fc48307fb56f959295667bf4dd5cd04ac412606284151dc2db15c31a95088ea89e80719d42b1c6ff9a52fbc254778
|
7
|
+
data.tar.gz: 7553a56a6e9268c7f2bf87fd009b3a46b3edd99d905762deda8abb6443200ce4e978fa78fb0fc9777c43af179f92d59d17d40bb0489432c465c49b5d62026623
|
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Decidim::Pages
|
2
|
+
|
3
|
+
The Pages module adds static page capabilities to any participatory process. It basically provides an interface to include arbitrary HTML content to any step.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
Pages will be available as a Feature for a Participatory Process.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'decidim-pages'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
```bash
|
17
|
+
$ bundle
|
18
|
+
```
|
19
|
+
|
20
|
+
## Contributing
|
21
|
+
See [Decidim](https://github.com/AjuntamentdeBarcelona/decidim).
|
22
|
+
|
23
|
+
## License
|
24
|
+
See [Decidim](https://github.com/AjuntamentdeBarcelona/decidim).
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
module Admin
|
5
|
+
# This command is executed when the user changes a Page from the admin
|
6
|
+
# panel.
|
7
|
+
class UpdatePage < Rectify::Command
|
8
|
+
# Initializes a UpdatePage Command.
|
9
|
+
#
|
10
|
+
# form - The form from which to get the data.
|
11
|
+
# page - The current instance of the page to be updated.
|
12
|
+
def initialize(form, page)
|
13
|
+
@form = form
|
14
|
+
@page = page
|
15
|
+
end
|
16
|
+
|
17
|
+
# Updates the page if valid.
|
18
|
+
#
|
19
|
+
# Broadcasts :ok if successful, :invalid otherwise.
|
20
|
+
def call
|
21
|
+
return broadcast(:invalid) if @form.invalid?
|
22
|
+
|
23
|
+
update_page
|
24
|
+
broadcast(:ok)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def update_page
|
30
|
+
@page.update_attributes!(
|
31
|
+
title: @form.title,
|
32
|
+
body: @form.body,
|
33
|
+
commentable: @form.commentable
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
# Command that gets called whenever a feature's page has to be created. It
|
5
|
+
# usually happens as a callback when the feature itself is created.
|
6
|
+
class CreatePage < Rectify::Command
|
7
|
+
def initialize(feature)
|
8
|
+
@feature = feature
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
@page = Page.new(
|
13
|
+
title: @feature.name,
|
14
|
+
feature: @feature
|
15
|
+
)
|
16
|
+
|
17
|
+
@page.save ? broadcast(:ok) : broadcast(:invalid)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
# Command that gets called when the page of this feature needs to be
|
5
|
+
# destroyed. It usually happens as a callback when the feature is removed.
|
6
|
+
class DestroyPage < Rectify::Command
|
7
|
+
def initialize(feature)
|
8
|
+
@feature = feature
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
Page.where(feature: @feature).destroy_all
|
13
|
+
broadcast(:ok)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Pages
|
5
|
+
module Admin
|
6
|
+
# Base controller for the administration of this module. It inherits from
|
7
|
+
# Decidim's admin base controller in order to inherit the layout and other
|
8
|
+
# convenience methods relevant to a this component.
|
9
|
+
class ApplicationController < Decidim::Admin::Features::BaseController
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
module Admin
|
5
|
+
# This controller allows the user to update a Page.
|
6
|
+
class PagesController < Admin::ApplicationController
|
7
|
+
def edit
|
8
|
+
@form = form(Admin::PageForm).from_model(page)
|
9
|
+
end
|
10
|
+
|
11
|
+
def update
|
12
|
+
@form = form(Admin::PageForm).from_params(params)
|
13
|
+
|
14
|
+
Admin::UpdatePage.call(@form, page) do
|
15
|
+
on(:ok) do
|
16
|
+
flash[:notice] = I18n.t("pages.update.success", scope: "decidim.pages.admin")
|
17
|
+
redirect_to parent_path
|
18
|
+
end
|
19
|
+
|
20
|
+
on(:invalid) do
|
21
|
+
flash.now[:alert] = I18n.t("pages.update.invalid", scope: "decidim.pages.admin")
|
22
|
+
render action: "edit"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def page
|
30
|
+
@page ||= Pages::Page.find_by(feature: current_feature)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Pages
|
5
|
+
# This controller is the abstract class from which all other controllers of
|
6
|
+
# this engine inherit.
|
7
|
+
#
|
8
|
+
# Note that it inherits from `Decidim::Features::Basecontroller`, which
|
9
|
+
# override its layout and provide all kinds of useful methods.
|
10
|
+
class ApplicationController < Decidim::Features::BaseController
|
11
|
+
def show
|
12
|
+
@page = Page.find_by(feature: current_feature)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
module Admin
|
5
|
+
# This class holds a Form to update pages from Decidim's admin panel.
|
6
|
+
class PageForm < Decidim::Form
|
7
|
+
include TranslatableAttributes
|
8
|
+
|
9
|
+
translatable_attribute :title, String
|
10
|
+
translatable_attribute :body, String
|
11
|
+
attribute :commentable, Boolean
|
12
|
+
|
13
|
+
validates :title, translatable_presence: true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
# The data store for a Page in the Decidim::Pages component. It stores a
|
5
|
+
# title, description and any other useful information to render a custom page.
|
6
|
+
class Page < Pages::ApplicationRecord
|
7
|
+
validates :title, :feature, presence: true
|
8
|
+
belongs_to :feature, foreign_key: "decidim_feature_id", class_name: Decidim::Feature
|
9
|
+
has_one :organization, through: :feature
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<%= form.translated :text_field, :title, autofocus: true, label: t("models.components.title", scope: "decidim.pages.admin") %>
|
3
|
+
<%= form.translated :editor, :body, toolbar: :full, lines: 30, label: t("models.components.body", scope: "decidim.pages.admin") %>
|
4
|
+
<%= form.check_box :commentable, label: t("models.components.commentable", scope: "decidim.pages.admin") %>
|
5
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% content_for(:title, translated_attribute(@page.title)) %>
|
2
|
+
<div class="row column">
|
3
|
+
<div class="row">
|
4
|
+
<div class="columns medium-7 mediumlarge-8">
|
5
|
+
<div class="section">
|
6
|
+
<%== translated_attribute @page.body %>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<%= content_for :expanded do %>
|
13
|
+
<% if @page.commentable? %>
|
14
|
+
<%= comments_for @page, arguable: true %>
|
15
|
+
<% end %>
|
16
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
ca:
|
2
|
+
decidim:
|
3
|
+
features:
|
4
|
+
pages:
|
5
|
+
name: Pàgina
|
6
|
+
pages:
|
7
|
+
admin:
|
8
|
+
models:
|
9
|
+
components:
|
10
|
+
body: Cos
|
11
|
+
commentable: Habilitar comentaris per a aquesta pàgina
|
12
|
+
title: Títol
|
13
|
+
pages:
|
14
|
+
edit:
|
15
|
+
save: Desa la pàgina
|
16
|
+
title: Editar pàgina
|
17
|
+
update:
|
18
|
+
invalid: Hi ha hagut errors en desar la pàgina.
|
19
|
+
success: Pàgina guardada correctament.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
decidim:
|
4
|
+
features:
|
5
|
+
pages:
|
6
|
+
name: Page
|
7
|
+
pages:
|
8
|
+
admin:
|
9
|
+
models:
|
10
|
+
components:
|
11
|
+
body: Body
|
12
|
+
commentable: Enable comments for this page
|
13
|
+
title: Title
|
14
|
+
pages:
|
15
|
+
edit:
|
16
|
+
save: Save page
|
17
|
+
title: Edit page
|
18
|
+
update:
|
19
|
+
invalid: There's been errors when saving the page.
|
20
|
+
success: Page saved successfully.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
es:
|
2
|
+
decidim:
|
3
|
+
features:
|
4
|
+
pages:
|
5
|
+
name: Página
|
6
|
+
pages:
|
7
|
+
admin:
|
8
|
+
models:
|
9
|
+
components:
|
10
|
+
body: Cuerpo
|
11
|
+
commentable: Habilitar comentarios para esta página
|
12
|
+
title: Título
|
13
|
+
pages:
|
14
|
+
edit:
|
15
|
+
save: Guardar página
|
16
|
+
title: Editar página
|
17
|
+
update:
|
18
|
+
invalid: Ha habido errores al guardar la página.
|
19
|
+
success: Página guardada correctamente.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "decidim/pages/admin"
|
3
|
+
require "decidim/pages/engine"
|
4
|
+
require "decidim/pages/admin_engine"
|
5
|
+
require "decidim/pages/feature"
|
6
|
+
|
7
|
+
module Decidim
|
8
|
+
# This namespace holds the logic of the `Pages` component. This component
|
9
|
+
# allows the admins to create a custom page for a participatory process.
|
10
|
+
module Pages
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
# This is the admin interface for `decidim-pages`. It lets you edit and
|
5
|
+
# configure the page associated to a participatory process.
|
6
|
+
class AdminEngine < ::Rails::Engine
|
7
|
+
isolate_namespace Decidim::Pages::Admin
|
8
|
+
|
9
|
+
paths["db/migrate"] = nil
|
10
|
+
|
11
|
+
routes do
|
12
|
+
post "/", to: "pages#update", as: :page
|
13
|
+
root to: "pages#edit"
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_seed
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Pages
|
4
|
+
# This is the engine that runs on the public interface of `decidim-pages`.
|
5
|
+
# It mostly handles rendering the created page associated to a participatory
|
6
|
+
# process.
|
7
|
+
class Engine < ::Rails::Engine
|
8
|
+
isolate_namespace Decidim::Pages
|
9
|
+
|
10
|
+
routes do
|
11
|
+
root to: "application#show"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "decidim/features/namer"
|
4
|
+
|
5
|
+
Decidim.register_feature(:pages) do |feature|
|
6
|
+
feature.engine = Decidim::Pages::Engine
|
7
|
+
feature.admin_engine = Decidim::Pages::AdminEngine
|
8
|
+
|
9
|
+
feature.on(:create) do |instance|
|
10
|
+
Decidim::Pages::CreatePage.call(instance) do
|
11
|
+
on(:invalid) { raise "Can't create page" }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
feature.on(:destroy) do |instance|
|
16
|
+
Decidim::Pages::DestroyPage.call(instance) do
|
17
|
+
on(:error) { raise "Can't destroy page" }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
feature.seeds do
|
22
|
+
Decidim::ParticipatoryProcess.all.each do |process|
|
23
|
+
next unless process.steps.any?
|
24
|
+
|
25
|
+
feature = Decidim::Feature.create!(
|
26
|
+
name: Decidim::Features::Namer.new(process.organization.available_locales, :pages).i18n_name,
|
27
|
+
manifest_name: :pages,
|
28
|
+
participatory_process: process
|
29
|
+
)
|
30
|
+
|
31
|
+
Decidim::Pages::Page.create!(
|
32
|
+
feature: feature,
|
33
|
+
title: Decidim::Faker::Localized.sentence(2),
|
34
|
+
body: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
35
|
+
Decidim::Faker::Localized.paragraph(3)
|
36
|
+
end,
|
37
|
+
commentable: true
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# frozen_string_literal: true
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-pages
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Josep Jaume Rey Peroy
|
8
|
+
- Marc Riera Casals
|
9
|
+
- Oriol Gual Oliva
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2016-12-21 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: decidim-core
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.0.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 0.0.1
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: decidim-comments
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.0.1
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.0.1
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rectify
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.8.0
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.8.0
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: decidim-dev
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.0.1
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.0.1
|
71
|
+
description: A pages component for decidim's participatory processes.
|
72
|
+
email:
|
73
|
+
- josepjaume@gmail.com
|
74
|
+
- mrc2407@gmail.com
|
75
|
+
- oriolgual@gmail.com
|
76
|
+
executables: []
|
77
|
+
extensions: []
|
78
|
+
extra_rdoc_files: []
|
79
|
+
files:
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- app/commands/decidim/pages/admin/update_page.rb
|
83
|
+
- app/commands/decidim/pages/create_page.rb
|
84
|
+
- app/commands/decidim/pages/destroy_page.rb
|
85
|
+
- app/controllers/decidim/pages/admin/application_controller.rb
|
86
|
+
- app/controllers/decidim/pages/admin/pages_controller.rb
|
87
|
+
- app/controllers/decidim/pages/application_controller.rb
|
88
|
+
- app/forms/decidim/pages/admin/page_form.rb
|
89
|
+
- app/helpers/decidim/pages/application_helper.rb
|
90
|
+
- app/models/decidim/pages/application_record.rb
|
91
|
+
- app/models/decidim/pages/page.rb
|
92
|
+
- app/views/decidim/pages/admin/pages/_form.html.erb
|
93
|
+
- app/views/decidim/pages/admin/pages/edit.html.erb
|
94
|
+
- app/views/decidim/pages/application/show.html.erb
|
95
|
+
- config/i18n-tasks.yml
|
96
|
+
- config/locales/ca.yml
|
97
|
+
- config/locales/en.yml
|
98
|
+
- config/locales/es.yml
|
99
|
+
- db/migrate/20161116121353_create_decidim_pages.rb
|
100
|
+
- db/migrate/20161214150429_add_commentable_to_pages.rb
|
101
|
+
- lib/decidim/pages.rb
|
102
|
+
- lib/decidim/pages/admin.rb
|
103
|
+
- lib/decidim/pages/admin_engine.rb
|
104
|
+
- lib/decidim/pages/engine.rb
|
105
|
+
- lib/decidim/pages/feature.rb
|
106
|
+
- lib/tasks/decidim/pages_tasks.rake
|
107
|
+
homepage: https://github.com/AjuntamentdeBarcelona/decidim
|
108
|
+
licenses:
|
109
|
+
- AGPLv3
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 2.3.1
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.5.2
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: A pages component for decidim's participatory processes.
|
131
|
+
test_files: []
|