decidim-reporting_proposals 0.2.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.json +1 -0
- data/.github/workflows/lint.yml +3 -2
- data/.github/workflows/test_integration.yml +7 -3
- data/.github/workflows/test_unit.yml +7 -3
- data/.rubocop-disabled.yml +11 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_rails.yml +3 -0
- data/.rubocop_ruby.yml +24 -10
- data/.ruby-version +1 -1
- data/.simplecov +2 -2
- data/Gemfile +1 -0
- data/Gemfile.lock +400 -336
- data/README.md +110 -18
- data/Rakefile +2 -0
- data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +24 -0
- data/app/commands/concerns/decidim/admin/hide_resource_override.rb +34 -0
- data/app/commands/concerns/decidim/proposals/admin/answer_proposal_override.rb +41 -0
- data/app/commands/concerns/decidim/proposals/admin/assign_proposals_to_valuator_override.rb +30 -0
- data/app/commands/concerns/decidim/proposals/publish_proposal_override.rb +72 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +17 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +17 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +34 -0
- data/app/commands/concerns/decidim/reporting_proposals/close_meeting_override.rb +15 -0
- data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +15 -0
- data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +18 -0
- data/app/commands/concerns/decidim/templates/admin/copy_questionnaire_template_override.rb +32 -0
- data/app/commands/concerns/decidim/templates/admin/create_questionnaire_template_override.rb +32 -0
- data/app/commands/decidim/reporting_proposals/admin/update_proposal_note.rb +1 -1
- data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +2 -0
- data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +35 -0
- data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +48 -0
- data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +52 -0
- data/app/controllers/concerns/decidim/proposals/admin/valuation_assignments_controller_override.rb +35 -0
- data/app/controllers/concerns/decidim/reporting_proposals/admin/needs_header_snippets.rb +5 -7
- data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +5 -5
- data/app/controllers/concerns/decidim/templates/admin/application_controller_override.rb +20 -0
- data/app/controllers/decidim/reporting_proposals/admin/proposal_notes_controller.rb +4 -5
- data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +179 -0
- data/app/events/concerns/decidim/proposals/publish_proposal_event_override.rb +35 -0
- data/app/forms/concerns/decidim/reporting_proposals/close_meeting_form_override.rb +28 -0
- data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +10 -11
- data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -4
- data/app/forms/concerns/decidim/reporting_proposals/map_included_proposals_for_form_override.rb +28 -0
- data/app/forms/concerns/decidim/reporting_proposals/map_related_proposals_for_form_override.rb +28 -0
- data/app/forms/decidim/templates/admin/proposal_answer_template_form.rb +21 -0
- data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +4 -4
- data/app/helpers/concerns/decidim/reporting_proposals/resource_helper_override.rb +25 -0
- data/app/mailers/concerns/decidim/admin/hidden_resource_mailer.rb +28 -0
- data/app/mailers/concerns/decidim/proposals/admin/notification_answer_proposal_mailer.rb +25 -0
- data/app/mailers/concerns/decidim/proposals/admin/proposals_valuator_mailer.rb +30 -0
- data/app/mailers/concerns/decidim/proposals/notification_publish_proposal_mailer.rb +23 -0
- data/app/mailers/concerns/decidim/reported_mailer_override.rb +16 -0
- data/app/models/concerns/decidim/reporting_proposals/participatory_space_role_config/valuator_override.rb +4 -1
- data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +3 -3
- data/app/overrides/decidim/proposals/admin/proposals/show/add_address.html.erb.deface +3 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +19 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/remove_photos.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +37 -0
- data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +9 -9
- data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +0 -1
- data/app/overrides/decidim/reported_mailer/report/add_link_to_admin.html.erb.deface +5 -0
- data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +1 -1
- data/app/packs/entrypoints/decidim_templates_admin.js +1 -0
- data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +37 -39
- data/app/packs/src/decidim/templates/admin/proposal_answer_template_chooser.js +27 -0
- data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +8 -8
- data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +5 -5
- data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +36 -5
- data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +3 -3
- data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +5 -5
- data/app/presenters/concerns/decidim/resource_locator_presenter_override.rb +38 -0
- data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -1
- data/app/resources/concerns/decidim/resource_manifest_override.rb +14 -0
- data/app/validators/concerns/decidim/reporting_proposals/component_validator_override.rb +2 -2
- data/app/views/decidim/admin/hidden_resource_mailer/notify_mail.html.erb +12 -0
- data/app/views/decidim/proposals/admin/notification_answer_proposal_mailer/notify_proposal_author.html.erb +7 -0
- data/app/views/decidim/proposals/admin/proposals/_address.html.erb +13 -0
- data/app/views/decidim/proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +17 -0
- data/app/views/decidim/proposals/notification_publish_proposal_mailer/notify_proposal_author.html.erb +7 -0
- data/app/views/decidim/proposals/proposals/index.js.erb +19 -0
- data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +9 -21
- data/app/views/decidim/templates/admin/proposal_answer_templates/_form.html.erb +34 -0
- data/app/views/decidim/templates/admin/proposal_answer_templates/_template_chooser.html.erb +16 -0
- data/app/views/decidim/templates/admin/proposal_answer_templates/edit.html.erb +3 -0
- data/app/views/decidim/templates/admin/proposal_answer_templates/index.html.erb +52 -0
- data/app/views/decidim/templates/admin/proposal_answer_templates/new.html.erb +6 -0
- data/babel.config.json +25 -0
- data/config/assets.rb +2 -1
- data/config/i18n-tasks.yml +3 -0
- data/config/locales/ca.yml +81 -7
- data/config/locales/de.yml +77 -3
- data/config/locales/en.yml +89 -0
- data/config/locales/es.yml +328 -254
- data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +8 -0
- data/db/migrate/20230404104741_migrate_templatable.rb +13 -0
- data/decidim-reporting_proposals.gemspec +7 -1
- data/lib/decidim/reporting_proposals/admin_engine.rb +16 -1
- data/lib/decidim/reporting_proposals/component.rb +0 -9
- data/lib/decidim/reporting_proposals/config.rb +10 -5
- data/lib/decidim/reporting_proposals/engine.rb +62 -1
- data/lib/decidim/reporting_proposals/test/factories.rb +10 -0
- data/lib/decidim/reporting_proposals/version.rb +3 -8
- data/package-lock.json +161 -142
- data/package.json +4 -163
- metadata +187 -29
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportingProposals
|
5
|
+
module ResourceHelperOverride
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
def linked_resources_for(resource, type, link_name)
|
10
|
+
linked_resources = resource.linked_resources(type, link_name).group_by { |linked_resource| linked_resource.class.name }
|
11
|
+
linked_resources.merge!(resource.linked_resources(:reporting_proposals, link_name).group_by { |linked_resource| linked_resource.class.name }) if type == :proposals
|
12
|
+
|
13
|
+
safe_join(linked_resources.map do |klass, resources|
|
14
|
+
resource_manifest = klass.constantize.resource_manifest
|
15
|
+
content_tag(:div, class: "section") do
|
16
|
+
i18n_name = "#{resource.class.name.demodulize.underscore}_#{resource_manifest.name}"
|
17
|
+
content_tag(:h3, I18n.t(i18n_name, scope: "decidim.resource_links.#{link_name}"), class: "section-heading") +
|
18
|
+
render(partial: resource_manifest.template, locals: { resources: resources })
|
19
|
+
end
|
20
|
+
end)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Admin
|
5
|
+
# A custom mailer to mail Decidim users
|
6
|
+
# that they have been hidden
|
7
|
+
class HiddenResourceMailer < Decidim::ApplicationMailer
|
8
|
+
include Decidim::TranslationsHelper
|
9
|
+
include Decidim::SanitizeHelper
|
10
|
+
include Decidim::ApplicationHelper
|
11
|
+
include Decidim::TranslatableAttributes
|
12
|
+
|
13
|
+
helper Decidim::ResourceHelper
|
14
|
+
helper Decidim::TranslationsHelper
|
15
|
+
helper Decidim::ApplicationHelper
|
16
|
+
|
17
|
+
def notify_mail(resource, resource_authors, reason)
|
18
|
+
@resource_authors = resource_authors
|
19
|
+
@organization = resource.organization
|
20
|
+
@resource = resource
|
21
|
+
@reason = reason
|
22
|
+
|
23
|
+
mail(to: resource_authors.pluck(:email).uniq,
|
24
|
+
subject: I18n.t("decidim.admin.hidden_resource_mailer.notify_mail.subject"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
module Admin
|
6
|
+
class NotificationAnswerProposalMailer < Decidim::ApplicationMailer
|
7
|
+
include Decidim::TranslationsHelper
|
8
|
+
include Decidim::SanitizeHelper
|
9
|
+
|
10
|
+
helper Decidim::ResourceHelper
|
11
|
+
helper Decidim::TranslationsHelper
|
12
|
+
|
13
|
+
def notify_proposal_author(proposal, recipient)
|
14
|
+
@proposal = proposal
|
15
|
+
@organization = proposal.organization
|
16
|
+
@recipient = recipient
|
17
|
+
|
18
|
+
with_user(recipient) do
|
19
|
+
mail(to: recipient.email, subject: t("subject", scope: "decidim.reporting_proposals.admin.notification_answer_proposal_mailer.notify_proposal_author"))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
module Admin
|
6
|
+
class ProposalsValuatorMailer < Decidim::ApplicationMailer
|
7
|
+
include Decidim::TranslationsHelper
|
8
|
+
include Decidim::SanitizeHelper
|
9
|
+
include Decidim::ApplicationHelper
|
10
|
+
include Decidim::TranslatableAttributes
|
11
|
+
|
12
|
+
helper Decidim::ResourceHelper
|
13
|
+
helper Decidim::TranslationsHelper
|
14
|
+
helper Decidim::ApplicationHelper
|
15
|
+
|
16
|
+
def notify_proposals_valuator(user, admin, proposals)
|
17
|
+
@valuator_user = user
|
18
|
+
@admin = admin
|
19
|
+
@proposals = proposals
|
20
|
+
@organization = user.organization
|
21
|
+
|
22
|
+
with_user(user) do
|
23
|
+
mail to: "#{user.name} <#{user.email}>",
|
24
|
+
subject: t("subject", scope: "decidim.proposals.admin.proposals_valuator_mailer.notify_proposals_valuator")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Proposals
|
5
|
+
class NotificationPublishProposalMailer < Decidim::ApplicationMailer
|
6
|
+
include Decidim::TranslationsHelper
|
7
|
+
include Decidim::SanitizeHelper
|
8
|
+
|
9
|
+
helper Decidim::ResourceHelper
|
10
|
+
helper Decidim::TranslationsHelper
|
11
|
+
|
12
|
+
def notify_proposal_author(proposal, recipient)
|
13
|
+
@proposal = proposal
|
14
|
+
@organization = proposal.organization
|
15
|
+
@recipient = recipient
|
16
|
+
|
17
|
+
with_user(recipient) do
|
18
|
+
mail(to: recipient.email, subject: t("subject", scope: "decidim.reporting_proposals.notification_publish_proposal_mailer.notify_proposal_author"))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportedMailerOverride
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
helper Decidim::ComponentPathHelper
|
9
|
+
helper_method :resource_admin_url
|
10
|
+
|
11
|
+
def resource_admin_url
|
12
|
+
@resource_admin_url ||= Decidim::ResourceLocatorPresenter.new(@reportable).admin_url
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -7,8 +7,11 @@ module Decidim
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
+
# it is important to ensure that the aliased method name is unique in case of other modules are doing the same
|
11
|
+
alias_method :decidim_reporting_proposals_original_accepted_components, :accepted_components
|
12
|
+
|
10
13
|
def accepted_components
|
11
|
-
[:
|
14
|
+
decidim_reporting_proposals_original_accepted_components + [:reporting_proposals]
|
12
15
|
end
|
13
16
|
end
|
14
17
|
end
|
data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface
CHANGED
@@ -4,6 +4,6 @@
|
|
4
4
|
<% if count.zero? %>
|
5
5
|
0
|
6
6
|
<% else %>
|
7
|
-
|
8
|
-
|
9
|
-
<% end %>
|
7
|
+
<%= proposal.valuation_assignments.first&.valuator_role&.user&.name %>
|
8
|
+
<%= "(+#{(count - 1)})" if count > 1 %>
|
9
|
+
<% end %>
|
data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
<!-- insert_after "erb[loud]:contains('current_or_new_conversation_path_with(presented_author)')" -->
|
2
2
|
|
3
|
-
<%= render partial: "decidim/proposals/admin/proposals/send_email_button", locals: { presented_author: presented_author }%>
|
3
|
+
<%= render partial: "decidim/proposals/admin/proposals/send_email_button", locals: { presented_author: presented_author } %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<!-- insert_after "#valuators" -->
|
2
|
+
|
3
|
+
<% if allowed_to? :assign_to_valuator, :proposals %>
|
4
|
+
<div id="js-assign-proposal-to-valuator-actions" class="js-bulk-action-form form-single-proposal"
|
5
|
+
style="max-width:400px">
|
6
|
+
<%= form_tag(valuation_assignment_path, method: :post, id: "js-form-assign-proposal-to-valuator",
|
7
|
+
class: "flex--lc flex-gap--1") do %>
|
8
|
+
<div class="checkboxes hide">
|
9
|
+
<%= check_box_tag "proposal_ids[]", proposal.id, true,
|
10
|
+
class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<%= bulk_valuators_select(current_participatory_space, t("decidim.proposals.admin.proposals.index.assign_to_valuator")) %>
|
14
|
+
<%= submit_tag(t("decidim.proposals.admin.proposals.index.assign_to_valuator_button"),
|
15
|
+
id: "js-submit-assign-proposal-to-valuator",
|
16
|
+
class: "button small button--simple float-left") %>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
<!-- replace '.gallery__container.photos_container' -->
|
2
|
+
|
3
|
+
<% if Decidim::ReportingProposals.use_camera_button.include?(current_component.manifest_name.to_sym) %>
|
4
|
+
<fieldset class="gallery__container photos_container">
|
5
|
+
<% if @form.photos.any? %>
|
6
|
+
<% @form.photos.each do |photo| %>
|
7
|
+
<div class="callout gallery__item" id="attachment_<%= photo.id %>" data-closable>
|
8
|
+
<%= image_tag photo.thumbnail_url, class: "thumbnail", alt: photo.file.filename %>
|
9
|
+
<%= form.hidden_field :photos, multiple: true, value: photo.id, id: "photo-#{photo.id}" %>
|
10
|
+
<button class="close-button"
|
11
|
+
aria-label="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
12
|
+
title="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
13
|
+
type="button"
|
14
|
+
data-close>
|
15
|
+
<span aria-hidden="true">×</span>
|
16
|
+
</button>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
<div class="field row column">
|
21
|
+
<%= form.file_field :add_photos, multiple: false, label: t("image", scope: "decidim.reporting_proposals.proposals.form") %>
|
22
|
+
</div>
|
23
|
+
</fieldset>
|
24
|
+
<% else %>
|
25
|
+
<fieldset class="gallery__container photos_container">
|
26
|
+
<legend><%= t("gallery_legend", scope: "decidim.proposals.proposals.edit") %></legend>
|
27
|
+
<div class="row column">
|
28
|
+
<%= form.attachment :photos,
|
29
|
+
multiple: false,
|
30
|
+
label: t("decidim.proposals.proposals.edit.add_image"),
|
31
|
+
button_label: t("decidim.proposals.proposals.edit.add_image"),
|
32
|
+
button_edit_label: t("decidim.proposals.proposals.edit.edit_image"),
|
33
|
+
help_i18n_scope: "decidim.forms.file_help.image",
|
34
|
+
extension_allowlist: Decidim::OrganizationSettings.for(current_organization).upload_allowed_file_extensions_image %>
|
35
|
+
</div>
|
36
|
+
</fieldset>
|
37
|
+
<% end %>
|
data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<!-- insert_before ".card__header" -->
|
2
2
|
|
3
3
|
<% if geocoding_comparison? %>
|
4
|
-
|
4
|
+
<span class="label secondary float-right"><%= icon("location") %> <%= t("away", scope: "decidim.reporting_proposals.proposals.compare.geocoding", meters: distance(1000 * @proposal.distance_from([proposal.latitude, proposal.longitude], :km))) %></span>
|
5
5
|
<% end %>
|
@@ -1,14 +1,14 @@
|
|
1
1
|
<!-- replace ".section-heading" -->
|
2
2
|
|
3
3
|
<% if geocoding_comparison? && action_name == "compare" %>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
<h2 class="section-heading">
|
5
|
+
<%= t("title", scope: "decidim.reporting_proposals.proposals.compare.geocoding") %>
|
6
|
+
<%= "(#{@similar_proposals.count})" if @similar_proposals.present? %>
|
7
|
+
</h2>
|
8
|
+
<p><%= t("description", scope: "decidim.reporting_proposals.proposals.compare.geocoding", meters: distance) %></p>
|
9
9
|
<% else %>
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
<h2 class="section-heading">
|
11
|
+
<%= proposal_wizard_step_title action_name %>
|
12
|
+
<%= "(#{@similar_proposals.count})" if @similar_proposals.present? %>
|
13
|
+
</h2>
|
14
14
|
<% end %>
|
data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
<!-- replace "erb[loud]:contains('button small button--sc show-for-medium')" -->
|
2
2
|
|
3
|
-
<%= link_to(cta_text, step_cta_url(participatory_process), class: "button small button--sc") %>
|
3
|
+
<%= link_to(cta_text, step_cta_url(participatory_process), class: "button small button--sc") %>
|
@@ -0,0 +1 @@
|
|
1
|
+
import "src/decidim/templates/admin/proposal_answer_template_chooser";
|
@@ -1,49 +1,47 @@
|
|
1
1
|
$(() => {
|
2
|
-
$
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
const $labelInput = $("label[for='proposal_add_photos']")
|
2
|
+
const $input = $("#proposal_add_photos");
|
3
|
+
const $inputField = $input.closest(".row.column");
|
4
|
+
const $button = $inputField.find("button:first");
|
5
|
+
const $checkbox = $inputField.find("input:checkbox[name$='[has_no_image]']");
|
6
|
+
const $formError = $inputField.find("span.form-error")
|
7
|
+
const $labelInput = $("label[for='proposal_add_photos']")
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
const removeErrors = () => {
|
10
|
+
$input.removeClass("is-invalid-input");
|
11
|
+
$formError.removeClass("is-visible");
|
12
|
+
$labelInput.removeClass("is-invalid-label");
|
13
|
+
};
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
}
|
15
|
+
const toggleInput = () => {
|
16
|
+
if ($checkbox[0].checked) {
|
17
|
+
removeErrors();
|
18
|
+
$input.prop("disabled", true);
|
19
|
+
$button.prop("disabled", true);
|
20
|
+
} else {
|
21
|
+
$input.prop("disabled", false);
|
22
|
+
$button.prop("disabled", false);
|
25
23
|
}
|
24
|
+
}
|
26
25
|
|
27
|
-
|
26
|
+
$input.attr("accept", "image/*");
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
$button.on("click", () => {
|
29
|
+
console.log("click button")
|
30
|
+
$input.attr("capture", "camera");
|
31
|
+
$input.click();
|
32
|
+
$input.removeAttr("capture", "camera");
|
33
|
+
});
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
});
|
35
|
+
$input.on("click", () => {
|
36
|
+
console.log("click", $input);
|
37
|
+
$input.one("blur", () => {
|
38
|
+
console.log("blur", $input);
|
39
|
+
removeErrors();
|
42
40
|
});
|
43
|
-
|
44
|
-
if ($checkbox.length > 0) {
|
45
|
-
$checkbox.on("change", toggleInput);
|
46
|
-
toggleInput();
|
47
|
-
}
|
48
41
|
});
|
42
|
+
|
43
|
+
if ($checkbox.length > 0) {
|
44
|
+
$checkbox.on("change", toggleInput);
|
45
|
+
toggleInput();
|
46
|
+
}
|
49
47
|
});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$(() => {
|
2
|
+
$("#proposal_answer_template_chooser").change(() => {
|
3
|
+
const $dropDown = $("#proposal_answer_template_chooser");
|
4
|
+
$dropDown.next("#template-error").remove();
|
5
|
+
if ($dropDown.val() === "") {
|
6
|
+
return;
|
7
|
+
}
|
8
|
+
$.getJSON($dropDown.data("url"), {
|
9
|
+
id: $dropDown.val(),
|
10
|
+
/* eslint camelcase: [0] */
|
11
|
+
proposal_id: $dropDown.data("proposal")
|
12
|
+
}).done((data) => {
|
13
|
+
$(`#proposal_answer_internal_state_${data.state}`).trigger("click");
|
14
|
+
|
15
|
+
const $editors = $dropDown.parent().parent().find(".editor-container");
|
16
|
+
$editors.each((index, element) => {
|
17
|
+
const localElement = $(element);
|
18
|
+
const $locale = localElement.siblings("input[type=hidden]").attr("id").replace("proposal_answer_answer_", "");
|
19
|
+
const editor = Quill.find(element);
|
20
|
+
const delta = editor.clipboard.convert(data.template[$locale]);
|
21
|
+
editor.setContents(delta);
|
22
|
+
});
|
23
|
+
}).fail((err) => {
|
24
|
+
$dropDown.after(`<p id="template-error" class="text-alert">${err.responseJSON.msg || err.responseJSON.error || err.responseJSON}</p>`);
|
25
|
+
});
|
26
|
+
});
|
27
|
+
});
|
@@ -1,20 +1,20 @@
|
|
1
|
-
.input-group.has-tribute
|
1
|
+
.input-group.has-tribute{
|
2
2
|
position: relative;
|
3
3
|
|
4
|
-
.tribute-container
|
4
|
+
.tribute-container{
|
5
5
|
margin-top: 2.3rem;
|
6
6
|
}
|
7
7
|
}
|
8
8
|
|
9
|
-
.user-device-location
|
10
|
-
button
|
9
|
+
.user-device-location{
|
10
|
+
button{
|
11
11
|
max-height: 3rem;
|
12
12
|
|
13
|
-
&.loading-spinner
|
13
|
+
&.loading-spinner{
|
14
14
|
position: relative;
|
15
15
|
margin: 0 !important;
|
16
16
|
|
17
|
-
&::before
|
17
|
+
&::before{
|
18
18
|
position: absolute;
|
19
19
|
top: 6px;
|
20
20
|
left: 12px;
|
@@ -22,12 +22,12 @@
|
|
22
22
|
}
|
23
23
|
}
|
24
24
|
|
25
|
-
@media only screen and (max-width: 596px)
|
25
|
+
@media only screen and (max-width: 596px){
|
26
26
|
display: block !important;
|
27
27
|
margin-top: 1rem;
|
28
28
|
margin-bottom: -.5rem;
|
29
29
|
|
30
|
-
button
|
30
|
+
button{
|
31
31
|
border-radius: 4px !important;
|
32
32
|
}
|
33
33
|
}
|
@@ -1,26 +1,26 @@
|
|
1
|
-
.table__title-block
|
1
|
+
.table__title-block{
|
2
2
|
display: flex;
|
3
3
|
align-items: flex-start;
|
4
4
|
}
|
5
5
|
|
6
|
-
.table__title-icon
|
6
|
+
.table__title-icon{
|
7
7
|
width: 20px;
|
8
8
|
padding: 3px;
|
9
9
|
margin-right: 5px;
|
10
10
|
float: left;
|
11
11
|
}
|
12
12
|
|
13
|
-
.table__list-title
|
13
|
+
.table__list-title{
|
14
14
|
display: flex;
|
15
15
|
flex-direction: column;
|
16
16
|
align-items: start;
|
17
17
|
}
|
18
18
|
|
19
|
-
.table__list-title a
|
19
|
+
.table__list-title a{
|
20
20
|
text-align: start;
|
21
21
|
}
|
22
22
|
|
23
|
-
.help-text-overdue
|
23
|
+
.help-text-overdue{
|
24
24
|
font-style: italic;
|
25
25
|
font-size: .8125rem;
|
26
26
|
text-align: start;
|
@@ -1,11 +1,11 @@
|
|
1
1
|
.global-settings,
|
2
|
-
.step-settings
|
3
|
-
.readonly_container
|
2
|
+
.step-settings{
|
3
|
+
.readonly_container{
|
4
4
|
display: none;
|
5
5
|
}
|
6
6
|
}
|
7
7
|
|
8
|
-
.proposal-photo.gallery__item
|
8
|
+
.proposal-photo.gallery__item{
|
9
9
|
position: relative;
|
10
10
|
margin: 0 0 1rem;
|
11
11
|
border: 1px solid rgba(0, 0, 0, .2);
|
@@ -14,11 +14,11 @@
|
|
14
14
|
color: #202734;
|
15
15
|
}
|
16
16
|
|
17
|
-
.proposal-photo .thumbnail
|
17
|
+
.proposal-photo .thumbnail{
|
18
18
|
margin-bottom: 0;
|
19
19
|
}
|
20
20
|
|
21
|
-
.delete-proposal__button
|
21
|
+
.delete-proposal__button{
|
22
22
|
position: absolute;
|
23
23
|
right: 0;
|
24
24
|
top: 7px;
|
@@ -29,3 +29,34 @@
|
|
29
29
|
border-radius: 50%;
|
30
30
|
text-align: center;
|
31
31
|
}
|
32
|
+
|
33
|
+
//Variables
|
34
|
+
|
35
|
+
/* Card address */
|
36
|
+
.address{
|
37
|
+
display: flex;
|
38
|
+
padding: 1rem;
|
39
|
+
}
|
40
|
+
|
41
|
+
.address--alone{
|
42
|
+
flex-grow: 1;
|
43
|
+
}
|
44
|
+
|
45
|
+
.address__info{
|
46
|
+
display: flex;
|
47
|
+
flex-grow: 1;
|
48
|
+
}
|
49
|
+
|
50
|
+
.address__icon{
|
51
|
+
float: left;
|
52
|
+
display: flex;
|
53
|
+
align-self: center;
|
54
|
+
fill: var(--primary);
|
55
|
+
}
|
56
|
+
|
57
|
+
.address__details{
|
58
|
+
float: left;
|
59
|
+
max-width: 100%; //IE10 bug fix
|
60
|
+
padding-left: .5em;
|
61
|
+
align-self: center;
|
62
|
+
}
|
@@ -1,19 +1,19 @@
|
|
1
|
-
button.user-device-camera
|
1
|
+
button.user-device-camera{
|
2
2
|
border-radius: 4px !important;
|
3
3
|
max-height: 3rem;
|
4
4
|
}
|
5
5
|
|
6
|
-
.has_no_image
|
6
|
+
.has_no_image{
|
7
7
|
margin-top: -1rem;
|
8
8
|
text-align: right;
|
9
9
|
}
|
10
10
|
|
11
|
-
@media only screen and (max-width: 596px)
|
12
|
-
.gallery__container .input-group .input-group-button
|
11
|
+
@media only screen and (max-width: 596px){
|
12
|
+
.gallery__container .input-group .input-group-button{
|
13
13
|
display: block;
|
14
14
|
}
|
15
15
|
|
16
|
-
.has_no_image
|
16
|
+
.has_no_image{
|
17
17
|
margin-top: -.5rem;
|
18
18
|
}
|
19
19
|
}
|