decidim-core 0.0.1.alpha9 → 0.0.1
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/Rakefile +0 -25
- data/app/assets/config/decidim_core_manifest.js +1 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_400.eot +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_400.svg +345 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_400.ttf +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_400.woff +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_400.woff2 +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_600.eot +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_600.svg +339 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_600.ttf +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_600.woff +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_600.woff2 +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_900.eot +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_900.svg +342 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_900.ttf +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_900.woff +0 -0
- data/app/assets/fonts/decidim/Source_Sans_Pro_900.woff2 +0 -0
- data/app/assets/images/decidim/default-avatar.svg +14 -0
- data/app/assets/javascripts/decidim.js.es6 +5 -5
- data/app/assets/javascripts/decidim/editor.js.es6 +46 -0
- data/app/assets/stylesheets/decidim/_variables.scss +12 -13
- data/app/assets/stylesheets/decidim/application.sass +4 -1
- data/app/assets/stylesheets/decidim/editor.sass +4 -0
- data/app/assets/stylesheets/decidim/modules/_card-grid.scss +4 -1
- data/app/assets/stylesheets/decidim/modules/_cards.scss +5 -0
- data/app/assets/stylesheets/decidim/modules/_navbar.scss +1 -0
- data/app/assets/stylesheets/decidim/modules/_process-header.scss +24 -75
- data/app/assets/stylesheets/decidim/modules/_process-nav.scss +0 -1
- data/app/assets/stylesheets/decidim/modules/_process-phase.scss +80 -0
- data/app/assets/stylesheets/decidim/utils/_fontface.scss +39 -1
- data/app/assets/stylesheets/decidim/utils/_helpers.scss +25 -0
- data/app/assets/stylesheets/decidim/utils/_keyframes.scss +21 -0
- data/app/assets/stylesheets/decidim/utils/_mixins.scss +37 -0
- data/app/assets/stylesheets/decidim/utils/_settings.scss +11 -5
- data/app/commands/decidim/authorize_user.rb +2 -2
- data/app/constraints/decidim/current_feature.rb +48 -0
- data/app/controllers/concerns/decidim/form_factory.rb +80 -0
- data/app/controllers/concerns/decidim/locale_switcher.rb +17 -10
- data/app/controllers/concerns/decidim/needs_participatory_process.rb +33 -0
- data/app/controllers/decidim/application_controller.rb +1 -1
- data/app/controllers/decidim/devise/confirmations_controller.rb +1 -1
- data/app/controllers/decidim/devise/passwords_controller.rb +1 -1
- data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
- data/app/controllers/decidim/devise/sessions_controller.rb +16 -2
- data/app/controllers/decidim/pages_controller.rb +14 -0
- data/app/controllers/decidim/participatory_processes_controller.rb +7 -0
- data/app/forms/decidim/form.rb +15 -0
- data/app/forms/translatable_presence_validator.rb +31 -0
- data/app/helpers/decidim/application_helper.rb +17 -2
- data/app/helpers/decidim/layout_helper.rb +8 -1
- data/app/helpers/decidim/localized_locales_helper.rb +43 -0
- data/app/helpers/decidim/participatory_process_helper.rb +16 -0
- data/app/helpers/decidim/translations_helper.rb +17 -0
- data/app/models/decidim/category.rb +35 -0
- data/app/models/decidim/component.rb +51 -0
- data/app/models/decidim/feature.rb +30 -0
- data/app/models/decidim/organization.rb +20 -1
- data/app/models/decidim/participatory_process.rb +43 -4
- data/app/models/decidim/participatory_process_attachment.rb +56 -0
- data/app/models/decidim/scope.rb +14 -0
- data/app/models/decidim/static_page.rb +56 -0
- data/app/models/decidim/user.rb +2 -0
- data/app/queries/decidim/organization_participatory_processes.rb +17 -0
- data/app/services/decidim/authorization_handler.rb +2 -2
- data/app/types/decidim/process_step_type.rb +24 -0
- data/app/types/decidim/process_type.rb +16 -0
- data/app/types/decidim/user_type.rb +14 -0
- data/app/uploaders/decidim/attachment_uploader.rb +70 -0
- data/app/uploaders/decidim/avatar_uploader.rb +14 -0
- data/app/uploaders/decidim/banner_image_uploader.rb +1 -1
- data/app/uploaders/decidim/hero_image_uploader.rb +1 -1
- data/app/uploaders/decidim/homepage_image_uploader.rb +11 -0
- data/app/uploaders/decidim/image_uploader.rb +46 -0
- data/app/uploaders/decidim/organization_logo_uploader.rb +9 -0
- data/app/views/decidim/devise/registrations/new.html.erb +1 -1
- data/app/views/decidim/participatory_processes/_documents.html.erb +26 -0
- data/app/views/decidim/participatory_processes/_photos.html.erb +16 -0
- data/app/views/decidim/participatory_processes/_promoted_process.html.erb +1 -1
- data/app/views/decidim/participatory_processes/show.html.erb +16 -11
- data/app/views/kaminari/decidim/_first_page.html.erb +11 -0
- data/app/views/kaminari/decidim/_gap.html.erb +8 -0
- data/app/views/kaminari/decidim/_last_page.html.erb +11 -0
- data/app/views/kaminari/decidim/_next_page.html.erb +11 -0
- data/app/views/kaminari/decidim/_page.html.erb +12 -0
- data/app/views/kaminari/decidim/_paginator.html.erb +25 -0
- data/app/views/kaminari/decidim/_prev_page.html.erb +11 -0
- data/app/views/layouts/decidim/_application.html.erb +17 -0
- data/app/views/layouts/decidim/_footer.html.erb +5 -3
- data/app/views/layouts/decidim/_header.html.erb +8 -21
- data/app/views/layouts/decidim/_language_chooser.html.erb +14 -0
- data/app/views/layouts/decidim/_logo.html.erb +17 -13
- data/app/views/layouts/decidim/_process_header.html.erb +34 -0
- data/app/views/layouts/decidim/_process_header_steps.html.erb +26 -0
- data/app/views/layouts/decidim/_user_menu.html.erb +2 -0
- data/app/views/layouts/decidim/application.html.erb +3 -0
- data/app/views/layouts/decidim/participatory_process.html.erb +15 -0
- data/app/views/pages/decidim_page.html.erb +12 -0
- data/app/views/pages/home.html.erb +106 -2
- data/config/i18n-tasks.yml +3 -1
- data/config/locales/ca.yml +40 -10
- data/config/locales/en.yml +39 -4
- data/config/locales/es.yml +44 -14
- data/config/routes.rb +14 -1
- data/db/migrate/20160919104837_create_decidim_organizations.rb +4 -0
- data/db/migrate/20161005153007_add_description_to_organizations.rb +1 -3
- data/db/migrate/20161010102356_translate_processes.rb +4 -4
- data/db/migrate/20161017085822_add_participatory_process_steps.rb +3 -3
- data/db/migrate/20161107152228_remove_not_null_on_step_position.rb +5 -0
- data/db/migrate/20161108093802_create_decidim_static_pages.rb +11 -0
- data/db/migrate/20161110092735_add_index_for_process_slug_organization.rb +8 -0
- data/db/migrate/20161110105712_create_decidim_features.rb +9 -0
- data/db/migrate/20161116115156_create_attachments.rb +18 -0
- data/db/migrate/20161123085134_add_categories.rb +10 -0
- data/db/migrate/20161130105257_create_decidim_scopes.rb +9 -0
- data/db/migrate/20161209134715_make_organization_description_optional.rb +5 -0
- data/db/migrate/20161213094244_add_avatar_to_users.rb +5 -0
- data/db/migrate/20161214152811_add_logo_to_organizations.rb +5 -0
- data/db/seeds.rb +36 -6
- data/db/seeds/Exampledocument.pdf +0 -0
- data/{app/assets/images/decidim/hero-home.jpg → db/seeds/homepage_image.jpg} +0 -0
- data/lib/decidim/core.rb +55 -2
- data/lib/decidim/core/engine.rb +16 -2
- data/lib/decidim/core/version.rb +11 -2
- data/lib/decidim/feature_manifest.rb +71 -0
- data/lib/decidim/features.rb +8 -0
- data/lib/decidim/features/base_controller.rb +32 -0
- data/lib/decidim/features/namer.rb +35 -0
- data/lib/decidim/form_builder.rb +140 -6
- data/lib/decidim/page_finder.rb +48 -0
- data/lib/decidim/query_extensions.rb +33 -0
- data/lib/decidim/translatable_attributes.rb +1 -24
- data/vendor/assets/javascripts/quill.min.js +14 -0
- data/vendor/assets/javascripts/quill.min.js.map +1 -0
- data/vendor/assets/stylesheets/quill.bubble.css +843 -0
- data/vendor/assets/stylesheets/quill.core.css +362 -0
- data/vendor/assets/stylesheets/quill.snow.css +881 -0
- metadata +164 -32
- data/LICENSE.txt +0 -619
- data/app/views/decidim/participatory_processes/_process_header_home.html.erb +0 -18
- data/app/views/pages/terms.ca.html.erb +0 -4
- data/app/views/pages/terms.en.html.erb +0 -4
- data/app/views/pages/terms.es.html.erb +0 -4
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Decidim
|
|
3
|
+
# This type represents a User.
|
|
4
|
+
UserType = GraphQL::ObjectType.define do
|
|
5
|
+
name "User"
|
|
6
|
+
description "A user"
|
|
7
|
+
|
|
8
|
+
field :name, types.String, "The user's name"
|
|
9
|
+
|
|
10
|
+
field :avatarUrl, !types.String, "The user's avatar url" do
|
|
11
|
+
resolve ->(obj, _args, _ctx) { obj.avatar.url }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
# This class deals with uploading attachments to a ParticipatoryProcess.
|
|
5
|
+
class AttachmentUploader < ApplicationUploader
|
|
6
|
+
include CarrierWave::MiniMagick
|
|
7
|
+
|
|
8
|
+
process :set_content_type_and_size_in_model
|
|
9
|
+
process :validate_dimensions
|
|
10
|
+
version :thumbnail, if: :image? do
|
|
11
|
+
process resize_to_fit: [nil, 237]
|
|
12
|
+
end
|
|
13
|
+
version :big, if: :image? do
|
|
14
|
+
process resize_to_limit: [nil, 1000]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
# CarrierWave automatically calls this method and validates the content
|
|
20
|
+
# type fo the temp file to match against any of these options.
|
|
21
|
+
def content_type_whitelist
|
|
22
|
+
[
|
|
23
|
+
%r{image\/},
|
|
24
|
+
%r{application\/vnd.oasis.opendocument},
|
|
25
|
+
%r{application\/vnd.ms-},
|
|
26
|
+
%r{application\/msword},
|
|
27
|
+
%r{application\/vnd.ms-word},
|
|
28
|
+
%r{application\/vnd.openxmlformats-officedocument},
|
|
29
|
+
%r{application\/vnd.oasis.opendocument},
|
|
30
|
+
%r{application\/pdf},
|
|
31
|
+
%r{application\/rtf}
|
|
32
|
+
]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Checks if the file is an image based on the content type. We need this so
|
|
36
|
+
# we only create different versions of the file when it's an image.
|
|
37
|
+
#
|
|
38
|
+
# new_file - The uploaded file.
|
|
39
|
+
#
|
|
40
|
+
# Returns a Boolean.
|
|
41
|
+
def image?(new_file)
|
|
42
|
+
new_file.content_type.start_with? "image"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Copies the content type and file size to the model where this is mounted.
|
|
46
|
+
#
|
|
47
|
+
# Returns nothing.
|
|
48
|
+
def set_content_type_and_size_in_model
|
|
49
|
+
model.content_type = file.content_type if file.content_type
|
|
50
|
+
model.file_size = file.size
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# A simple check to avoid DoS with maliciously crafted images, or just to
|
|
54
|
+
# avoid reckless users that upload gigapixels images.
|
|
55
|
+
#
|
|
56
|
+
# See https://hackerone.com/reports/390
|
|
57
|
+
def validate_dimensions
|
|
58
|
+
return unless image?(self)
|
|
59
|
+
|
|
60
|
+
manipulate! do |image|
|
|
61
|
+
raise CarrierWave::IntegrityError, I18n.t("carrierwave.errors.image_too_big") if image.dimensions.any? { |dimension| dimension > max_image_height_or_width }
|
|
62
|
+
image
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def max_image_height_or_width
|
|
67
|
+
8000
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Decidim
|
|
4
|
+
# This class deals with uploading avatars to a User.
|
|
5
|
+
class AvatarUploader < ImageUploader
|
|
6
|
+
include CarrierWave::MiniMagick
|
|
7
|
+
|
|
8
|
+
process :validate_dimensions
|
|
9
|
+
|
|
10
|
+
def default_url(*)
|
|
11
|
+
ActionController::Base.helpers.asset_path("decidim/default-avatar.svg")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Decidim
|
|
3
|
+
# This class deals with uploading hero images to ParticipatoryProcesses.
|
|
4
|
+
class HomepageImageUploader < ImageUploader
|
|
5
|
+
include CarrierWave::MiniMagick
|
|
6
|
+
|
|
7
|
+
version :big do
|
|
8
|
+
process resize_to_limit: [nil, 2000]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Decidim
|
|
3
|
+
# This class deals with uploading hero images to ParticipatoryProcesses.
|
|
4
|
+
class ImageUploader < ApplicationUploader
|
|
5
|
+
include CarrierWave::MiniMagick
|
|
6
|
+
|
|
7
|
+
process :validate_size, :validate_dimensions
|
|
8
|
+
|
|
9
|
+
# CarrierWave automatically calls this method and validates the content
|
|
10
|
+
# type fo the temp file to match against any of these options.
|
|
11
|
+
def content_type_whitelist
|
|
12
|
+
[
|
|
13
|
+
%r{image\/}
|
|
14
|
+
]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# A simple check to avoid DoS with maliciously crafted images, or just to
|
|
18
|
+
# avoid reckless users that upload gigapixels images.
|
|
19
|
+
#
|
|
20
|
+
# See https://hackerone.com/reports/390
|
|
21
|
+
def validate_dimensions
|
|
22
|
+
manipulate! do |image|
|
|
23
|
+
validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.dimensions.any? { |dimension| dimension > max_image_height_or_width }
|
|
24
|
+
image
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def validate_size
|
|
29
|
+
manipulate! do |image|
|
|
30
|
+
validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.size > 10.megabytes
|
|
31
|
+
image
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def max_image_height_or_width
|
|
36
|
+
8000
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def validation_error!(text)
|
|
42
|
+
model.errors.add(mounted_as, text)
|
|
43
|
+
raise CarrierWave::IntegrityError, text
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
<fieldset>
|
|
40
40
|
<div class="field">
|
|
41
|
-
<%= f.check_box :tos_agreement, label: t(".tos_agreement", link: link_to(t(".terms"), page_path(
|
|
41
|
+
<%= f.check_box :tos_agreement, label: t(".tos_agreement", link: link_to(t(".terms"), page_path("terms-and-conditions"))) %>
|
|
42
42
|
</div>
|
|
43
43
|
</fieldset>
|
|
44
44
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<% if documents.any? %>
|
|
2
|
+
<div class="section documents">
|
|
3
|
+
<h4 class="section-heading"><%= t(".related_documents") %></h4>
|
|
4
|
+
<div class="card card--list">
|
|
5
|
+
<% documents.each do |document| %>
|
|
6
|
+
<div class="card--list__item">
|
|
7
|
+
<div class="card--list__text">
|
|
8
|
+
<div>
|
|
9
|
+
<a href="<%= document.url %>" class="card__link">
|
|
10
|
+
<h6 class="card--list__heading heading6">
|
|
11
|
+
<%= translated_attribute(document.title) %> <small><%= document.file_type %> <%= number_to_human_size(document.file_size) %></small>
|
|
12
|
+
</h6>
|
|
13
|
+
<span class="text-small"><%= translated_attribute(document.description) %></span>
|
|
14
|
+
</a>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="card--list__data">
|
|
18
|
+
<%= link_to document.url, class: "card--list__data__icon" do %>
|
|
19
|
+
<%= icon "cloud-download" %>
|
|
20
|
+
<% end %>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<% end %>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<% end %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<% if photos.any? %>
|
|
2
|
+
<div class="section images">
|
|
3
|
+
<h4 class="section-heading"><%= t(".related_photos") %></h4>
|
|
4
|
+
<div class="gallery row">
|
|
5
|
+
<% photos.in_groups_of(3, false).each do |group| %>
|
|
6
|
+
<% group.each_with_index do |photo, index| %>
|
|
7
|
+
<div class="columns small-6 medium-4 <%= (index == 2 || photo == group.last ? "end" : "") %>">
|
|
8
|
+
<%= link_to photo.big_url do %>
|
|
9
|
+
<%= image_tag photo.thumbnail_url, class:"thumbnail", alt: strip_tags(translated_attribute(photo.description)) %>
|
|
10
|
+
<% end %>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<% end %>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<%= link_to participatory_process_path(promoted_process), class: "card__link" do %>
|
|
6
6
|
<h2 class="card__title"><%= translated_attribute promoted_process.title %></h2>
|
|
7
7
|
<% end %>
|
|
8
|
-
|
|
8
|
+
<%== html_truncate(translated_attribute(promoted_process.description), length: 630, separator: ' ') %>
|
|
9
9
|
<%= link_to participatory_process_path(promoted_process), class: "button secondary small hollow card__button" do %>
|
|
10
10
|
<%= t(".more_info", scope: "layouts") %>
|
|
11
11
|
<% end %>
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<div class="lead">
|
|
8
|
-
<%== translated_attribute(participatory_process.short_description) %>
|
|
9
|
-
</div>
|
|
10
|
-
<%== translated_attribute(participatory_process.description) %>
|
|
1
|
+
<div class="row column">
|
|
2
|
+
<div class="row">
|
|
3
|
+
<div class="columns medium-7 mediumlarge-8">
|
|
4
|
+
<div class="section">
|
|
5
|
+
<div class="lead">
|
|
6
|
+
<%== translated_attribute(participatory_process.short_description) %>
|
|
11
7
|
</div>
|
|
8
|
+
<%== translated_attribute(participatory_process.description) %>
|
|
12
9
|
</div>
|
|
13
10
|
</div>
|
|
14
11
|
</div>
|
|
15
|
-
</
|
|
12
|
+
</div>
|
|
13
|
+
<% if participatory_process.attachments.any? %>
|
|
14
|
+
<div class="row attachments">
|
|
15
|
+
<div class="columns large-8">
|
|
16
|
+
<%= render partial: "documents", locals: { documents: participatory_process.documents } %>
|
|
17
|
+
<%= render partial: "photos", locals: { photos: participatory_process.photos } %>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
<% end %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "First" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the first page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="first">
|
|
10
|
+
<%= link_to_unless current_page.first?, t('views.pagination.first').html_safe, url, remote: remote %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%# Non-link tag that stands for skipped pages...
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page: a page object for the currently displayed page
|
|
4
|
+
total_pages: total number of pages
|
|
5
|
+
per_page: number of items to fetch per page
|
|
6
|
+
remote: data-remote
|
|
7
|
+
-%>
|
|
8
|
+
<li class="page gap"><%= t('views.pagination.truncate').html_safe %></li>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Last" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the last page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="last">
|
|
10
|
+
<%= link_to_unless current_page.last?, t('views.pagination.last').html_safe, url, remote: remote %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Next" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the next page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="pagination-next">
|
|
10
|
+
<%= link_to_unless current_page.last?, t('views.pagination.next').html_safe, url, rel: 'next', remote: remote %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%# Link showing page number
|
|
2
|
+
- available local variables
|
|
3
|
+
page: a page object for "this" page
|
|
4
|
+
url: url to this page
|
|
5
|
+
current_page: a page object for the currently displayed page
|
|
6
|
+
total_pages: total number of pages
|
|
7
|
+
per_page: number of items to fetch per page
|
|
8
|
+
remote: data-remote
|
|
9
|
+
-%>
|
|
10
|
+
<li class="page<%= ' current' if page.current? %>">
|
|
11
|
+
<%= link_to_unless page.current?, page, url, {remote: remote, rel: page.rel} %>
|
|
12
|
+
</li>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%# The container tag
|
|
2
|
+
- available local variables
|
|
3
|
+
current_page: a page object for the currently displayed page
|
|
4
|
+
total_pages: total number of pages
|
|
5
|
+
per_page: number of items to fetch per page
|
|
6
|
+
remote: data-remote
|
|
7
|
+
paginator: the paginator that renders the pagination tags inside
|
|
8
|
+
-%>
|
|
9
|
+
<%= paginator.render do -%>
|
|
10
|
+
<ul class="pagination text-center" role="navigation" aria-label="Pagination">
|
|
11
|
+
<%= first_page_tag unless current_page.first? %>
|
|
12
|
+
<%= prev_page_tag unless current_page.first? %>
|
|
13
|
+
<% each_page do |page| -%>
|
|
14
|
+
<% if page.display_tag? -%>
|
|
15
|
+
<%= page_tag page %>
|
|
16
|
+
<% elsif !page.was_truncated? -%>
|
|
17
|
+
<%= gap_tag %>
|
|
18
|
+
<% end -%>
|
|
19
|
+
<% end -%>
|
|
20
|
+
<% unless current_page.out_of_range? %>
|
|
21
|
+
<%= next_page_tag unless current_page.last? %>
|
|
22
|
+
<%= last_page_tag unless current_page.last? %>
|
|
23
|
+
<% end %>
|
|
24
|
+
</ul>
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%# Link to the "Previous" page
|
|
2
|
+
- available local variables
|
|
3
|
+
url: url to the previous page
|
|
4
|
+
current_page: a page object for the currently displayed page
|
|
5
|
+
total_pages: total number of pages
|
|
6
|
+
per_page: number of items to fetch per page
|
|
7
|
+
remote: data-remote
|
|
8
|
+
-%>
|
|
9
|
+
<li class="pagination-previous">
|
|
10
|
+
<%= link_to_unless current_page.first?, t('views.pagination.previous').html_safe, url, rel: 'prev', remote: remote %>
|
|
11
|
+
</li>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title><%= decidim_page_title %></title>
|
|
5
|
+
<%= csrf_meta_tags %>
|
|
6
|
+
|
|
7
|
+
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
|
8
|
+
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
|
9
|
+
<%= render partial: 'layouts/decidim/meta' %>
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<body>
|
|
13
|
+
<%= render partial: 'layouts/decidim/header' %>
|
|
14
|
+
<%= yield %>
|
|
15
|
+
<%= render partial: 'layouts/decidim/footer' %>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
<div class="main-footer">
|
|
4
4
|
<div class="row">
|
|
5
5
|
<div class="medium-8 large-6 large-offset-3 column main__footer__nav">
|
|
6
|
+
<% if current_organization.static_pages.any? %>
|
|
6
7
|
<ul class="footer-nav">
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
<% current_organization.static_pages.each do |page| %>
|
|
9
|
+
<li><%= link_to translated_attribute(page.title), decidim.page_path(page) %></a></li>
|
|
10
|
+
<% end %>
|
|
10
11
|
</ul>
|
|
12
|
+
<% end %>
|
|
11
13
|
</div>
|
|
12
14
|
</div>
|
|
13
15
|
</div>
|
|
@@ -23,20 +23,7 @@
|
|
|
23
23
|
<div class="logo-wrapper">
|
|
24
24
|
<%= render partial: "layouts/decidim/logo" %>
|
|
25
25
|
</div>
|
|
26
|
-
|
|
27
|
-
<ul class="dropdown menu" data-dropdown-menu>
|
|
28
|
-
<li class="is-dropdown-submenu-parent">
|
|
29
|
-
<%= link_to t(current_locale, scope: "locales") %>
|
|
30
|
-
<% if available_locales.length > 1 %>
|
|
31
|
-
<ul class="menu is-dropdown-submenu">
|
|
32
|
-
<% available_locales.each do |locale| %>
|
|
33
|
-
<li><%= link_to t(locale, scope: "locales"), locale_path(locale: locale), method: :post%></li>
|
|
34
|
-
<% end %>
|
|
35
|
-
<% end %>
|
|
36
|
-
</ul>
|
|
37
|
-
</li>
|
|
38
|
-
</ul>
|
|
39
|
-
</div>
|
|
26
|
+
<%= render partial: "layouts/decidim/language_chooser" %>
|
|
40
27
|
<div class="hide-for-medium topbar__menu">
|
|
41
28
|
<button type="button" data-toggle="offCanvas">
|
|
42
29
|
<%= icon "menu", aria_label: t('.navigation'), role: "img" %>
|
|
@@ -46,14 +33,14 @@
|
|
|
46
33
|
<div class="topbar__dropmenu topbar__user__logged">
|
|
47
34
|
<ul class="dropdown menu" data-dropdown-menu>
|
|
48
35
|
<li class="is-dropdown-submenu-parent show-for-medium">
|
|
49
|
-
<%= link_to current_user.name, account_path %>
|
|
36
|
+
<%= link_to current_user.name, decidim.account_path %>
|
|
50
37
|
<ul class="menu is-dropdown-subeenu js-append usermenu-off-canvas">
|
|
51
|
-
|
|
38
|
+
<%= render partial: "layouts/decidim/user_menu" %>
|
|
52
39
|
</ul>
|
|
53
40
|
<span data-set="nav-login-holder" class="show-for-medium">
|
|
54
41
|
<!-- Repeated due to dropdown limitations -->
|
|
55
42
|
<ul class="menu is-dropdown-submenu js-append usermenu-off-canvas">
|
|
56
|
-
|
|
43
|
+
<%= render partial: "layouts/decidim/user_menu" %>
|
|
57
44
|
</ul>
|
|
58
45
|
</span>
|
|
59
46
|
</li>
|
|
@@ -62,8 +49,8 @@
|
|
|
62
49
|
<% else %>
|
|
63
50
|
<div class="topbar__user show-for-medium" data-set="nav-login-holder">
|
|
64
51
|
<div class="topbar__user__login js-append">
|
|
65
|
-
<%= link_to t('.sign_up'), new_user_registration_path, class: "sign-up-link" %>
|
|
66
|
-
<%= link_to t('.sign_in'), new_user_session_path, class: "sign-in-link" %>
|
|
52
|
+
<%= link_to t('.sign_up'), decidim.new_user_registration_path, class: "sign-up-link" %>
|
|
53
|
+
<%= link_to t('.sign_in'), decidim.new_user_session_path, class: "sign-in-link" %>
|
|
67
54
|
</div>
|
|
68
55
|
</div>
|
|
69
56
|
<% end %>
|
|
@@ -74,10 +61,10 @@
|
|
|
74
61
|
<div class="row">
|
|
75
62
|
<ul class="main-nav">
|
|
76
63
|
<li>
|
|
77
|
-
<%= active_link_to t("menu.home", scope: "decidim"), root_path, active: :exact, class: "main-nav__link", class_active: "main-nav__link
|
|
64
|
+
<%= active_link_to t("menu.home", scope: "decidim"), decidim.root_path, active: :exact, class: "main-nav__link", class_active: "main-nav__link--active" %>
|
|
78
65
|
</li>
|
|
79
66
|
<li>
|
|
80
|
-
<%= active_link_to t("menu.processes", scope: "decidim"), participatory_processes_path, active: :inclusive, class: "main-nav__link", class_active: "main-nav__link--active" %>
|
|
67
|
+
<%= active_link_to t("menu.processes", scope: "decidim"), decidim.participatory_processes_path, active: :inclusive, class: "main-nav__link", class_active: "main-nav__link--active" %>
|
|
81
68
|
</li>
|
|
82
69
|
</ul>
|
|
83
70
|
</div>
|