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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.json +1 -0
  3. data/.github/workflows/lint.yml +3 -2
  4. data/.github/workflows/test_integration.yml +7 -3
  5. data/.github/workflows/test_unit.yml +7 -3
  6. data/.rubocop-disabled.yml +11 -0
  7. data/.rubocop.yml +1 -0
  8. data/.rubocop_rails.yml +3 -0
  9. data/.rubocop_ruby.yml +24 -10
  10. data/.ruby-version +1 -1
  11. data/.simplecov +2 -2
  12. data/Gemfile +1 -0
  13. data/Gemfile.lock +400 -336
  14. data/README.md +110 -18
  15. data/Rakefile +2 -0
  16. data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +24 -0
  17. data/app/commands/concerns/decidim/admin/hide_resource_override.rb +34 -0
  18. data/app/commands/concerns/decidim/proposals/admin/answer_proposal_override.rb +41 -0
  19. data/app/commands/concerns/decidim/proposals/admin/assign_proposals_to_valuator_override.rb +30 -0
  20. data/app/commands/concerns/decidim/proposals/publish_proposal_override.rb +72 -0
  21. data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +17 -0
  22. data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +17 -0
  23. data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +34 -0
  24. data/app/commands/concerns/decidim/reporting_proposals/close_meeting_override.rb +15 -0
  25. data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +15 -0
  26. data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +18 -0
  27. data/app/commands/concerns/decidim/templates/admin/copy_questionnaire_template_override.rb +32 -0
  28. data/app/commands/concerns/decidim/templates/admin/create_questionnaire_template_override.rb +32 -0
  29. data/app/commands/decidim/reporting_proposals/admin/update_proposal_note.rb +1 -1
  30. data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +2 -0
  31. data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +35 -0
  32. data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +48 -0
  33. data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +52 -0
  34. data/app/controllers/concerns/decidim/proposals/admin/valuation_assignments_controller_override.rb +35 -0
  35. data/app/controllers/concerns/decidim/reporting_proposals/admin/needs_header_snippets.rb +5 -7
  36. data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +1 -1
  37. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +5 -5
  38. data/app/controllers/concerns/decidim/templates/admin/application_controller_override.rb +20 -0
  39. data/app/controllers/decidim/reporting_proposals/admin/proposal_notes_controller.rb +4 -5
  40. data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +179 -0
  41. data/app/events/concerns/decidim/proposals/publish_proposal_event_override.rb +35 -0
  42. data/app/forms/concerns/decidim/reporting_proposals/close_meeting_form_override.rb +28 -0
  43. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +10 -11
  44. data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -4
  45. data/app/forms/concerns/decidim/reporting_proposals/map_included_proposals_for_form_override.rb +28 -0
  46. data/app/forms/concerns/decidim/reporting_proposals/map_related_proposals_for_form_override.rb +28 -0
  47. data/app/forms/decidim/templates/admin/proposal_answer_template_form.rb +21 -0
  48. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +4 -4
  49. data/app/helpers/concerns/decidim/reporting_proposals/resource_helper_override.rb +25 -0
  50. data/app/mailers/concerns/decidim/admin/hidden_resource_mailer.rb +28 -0
  51. data/app/mailers/concerns/decidim/proposals/admin/notification_answer_proposal_mailer.rb +25 -0
  52. data/app/mailers/concerns/decidim/proposals/admin/proposals_valuator_mailer.rb +30 -0
  53. data/app/mailers/concerns/decidim/proposals/notification_publish_proposal_mailer.rb +23 -0
  54. data/app/mailers/concerns/decidim/reported_mailer_override.rb +16 -0
  55. data/app/models/concerns/decidim/reporting_proposals/participatory_space_role_config/valuator_override.rb +4 -1
  56. data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +5 -0
  57. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +3 -3
  58. data/app/overrides/decidim/proposals/admin/proposals/show/add_address.html.erb.deface +3 -0
  59. data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
  60. data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +19 -0
  61. data/app/overrides/decidim/proposals/admin/proposals/show/remove_photos.html.erb.deface +0 -1
  62. data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +37 -0
  63. data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +1 -1
  64. data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +9 -9
  65. data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +5 -0
  66. data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +0 -1
  67. data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +5 -0
  68. data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +5 -0
  69. data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +0 -1
  70. data/app/overrides/decidim/reported_mailer/report/add_link_to_admin.html.erb.deface +5 -0
  71. data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +1 -1
  72. data/app/packs/entrypoints/decidim_templates_admin.js +1 -0
  73. data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +37 -39
  74. data/app/packs/src/decidim/templates/admin/proposal_answer_template_chooser.js +27 -0
  75. data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +8 -8
  76. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +5 -5
  77. data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +36 -5
  78. data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +3 -3
  79. data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +5 -5
  80. data/app/presenters/concerns/decidim/resource_locator_presenter_override.rb +38 -0
  81. data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -1
  82. data/app/resources/concerns/decidim/resource_manifest_override.rb +14 -0
  83. data/app/validators/concerns/decidim/reporting_proposals/component_validator_override.rb +2 -2
  84. data/app/views/decidim/admin/hidden_resource_mailer/notify_mail.html.erb +12 -0
  85. data/app/views/decidim/proposals/admin/notification_answer_proposal_mailer/notify_proposal_author.html.erb +7 -0
  86. data/app/views/decidim/proposals/admin/proposals/_address.html.erb +13 -0
  87. data/app/views/decidim/proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +17 -0
  88. data/app/views/decidim/proposals/notification_publish_proposal_mailer/notify_proposal_author.html.erb +7 -0
  89. data/app/views/decidim/proposals/proposals/index.js.erb +19 -0
  90. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +9 -21
  91. data/app/views/decidim/templates/admin/proposal_answer_templates/_form.html.erb +34 -0
  92. data/app/views/decidim/templates/admin/proposal_answer_templates/_template_chooser.html.erb +16 -0
  93. data/app/views/decidim/templates/admin/proposal_answer_templates/edit.html.erb +3 -0
  94. data/app/views/decidim/templates/admin/proposal_answer_templates/index.html.erb +52 -0
  95. data/app/views/decidim/templates/admin/proposal_answer_templates/new.html.erb +6 -0
  96. data/babel.config.json +25 -0
  97. data/config/assets.rb +2 -1
  98. data/config/i18n-tasks.yml +3 -0
  99. data/config/locales/ca.yml +81 -7
  100. data/config/locales/de.yml +77 -3
  101. data/config/locales/en.yml +89 -0
  102. data/config/locales/es.yml +328 -254
  103. data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +8 -0
  104. data/db/migrate/20230404104741_migrate_templatable.rb +13 -0
  105. data/decidim-reporting_proposals.gemspec +7 -1
  106. data/lib/decidim/reporting_proposals/admin_engine.rb +16 -1
  107. data/lib/decidim/reporting_proposals/component.rb +0 -9
  108. data/lib/decidim/reporting_proposals/config.rb +10 -5
  109. data/lib/decidim/reporting_proposals/engine.rb +62 -1
  110. data/lib/decidim/reporting_proposals/test/factories.rb +10 -0
  111. data/lib/decidim/reporting_proposals/version.rb +3 -8
  112. data/package-lock.json +161 -142
  113. data/package.json +4 -163
  114. 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
- [:proposals, :reporting_proposals]
14
+ decidim_reporting_proposals_original_accepted_components + [:reporting_proposals]
12
15
  end
13
16
  end
14
17
  end
@@ -0,0 +1,5 @@
1
+ <!-- insert_top ".card-section" -->
2
+
3
+ <% if defined?(Decidim::Templates) %>
4
+ <%= render "decidim/templates/admin/proposal_answer_templates/template_chooser", form: f %>
5
+ <% end %>
@@ -4,6 +4,6 @@
4
4
  <% if count.zero? %>
5
5
  0
6
6
  <% else %>
7
- <%= proposal.valuation_assignments.first&.valuator_role&.user&.name %>
8
- <%= "(+#{(count - 1)})" if count > 1 %>
9
- <% end %>
7
+ <%= proposal.valuation_assignments.first&.valuator_role&.user&.name %>
8
+ <%= "(+#{(count - 1)})" if count > 1 %>
9
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <!-- insert_after ".row.column[3]" -->
2
+
3
+ <%= render partial: "decidim/proposals/admin/proposals/address", locals: { component_settings: component_settings, proposal: proposal } %>
@@ -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 %>
@@ -1,4 +1,3 @@
1
1
  <!-- replace "erb[silent]:contains('if proposal.photos.any?')" -->
2
2
 
3
3
  <% if nil %>
4
-
@@ -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">&times;</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 %>
@@ -1,5 +1,5 @@
1
1
  <!-- insert_before ".card__header" -->
2
2
 
3
3
  <% if geocoding_comparison? %>
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>
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
- <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>
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
- <h2 class="section-heading">
11
- <%= proposal_wizard_step_title action_name %>
12
- <%= "(#{@similar_proposals.count})" if @similar_proposals.present? %>
13
- </h2>
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 %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "erb[silent]:contains(':js_content')" -->
2
+
3
+ <% if reporting_proposal? %>
4
+ <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
5
+ <% end %>
@@ -2,7 +2,6 @@
2
2
 
3
3
  <% if reporting_proposal? %>
4
4
  <%= javascript_pack_tag "decidim_reporting_proposals" %>
5
- <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
6
5
  <% else %>
7
6
  <%= javascript_pack_tag "decidim_proposals" %>
8
7
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "erb[silent]:contains(':js_content')" -->
2
+
3
+ <% if reporting_proposal? %>
4
+ <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
5
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_before "erb[silent]:contains(':js_content')" -->
2
+
3
+ <% if reporting_proposal? %>
4
+ <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
5
+ <% end %>
@@ -2,7 +2,6 @@
2
2
 
3
3
  <% if reporting_proposal? %>
4
4
  <%= javascript_pack_tag "decidim_reporting_proposals" %>
5
- <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
6
5
  <% else %>
7
6
  <%= javascript_pack_tag "decidim_proposals" %>
8
7
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_after ".email-instructions" -->
2
+
3
+ <% if resource_admin_url.present? %>
4
+ <p><%= link_to t("admin_resource", scope: "decidim.reported_mailer.report"), resource_admin_url, target: "_blank" %></p>
5
+ <% end %>
@@ -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
- $('input[type="file"]').each((_i, el) => {
3
- const $input = $(el);
4
- const $inputField = $input.closest(".row.column");
5
- const $button = $inputField.find("button:first");
6
- const $checkbox = $inputField.find("input:checkbox[name$='[has_no_image]']");
7
- const $formError = $inputField.find("span.form-error")
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
- const removeErrors = () => {
11
- $input.removeClass("is-invalid-input");
12
- $formError.removeClass("is-visible");
13
- $labelInput.removeClass("is-invalid-label");
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
- const toggleInput = () => {
17
- if ($checkbox[0].checked) {
18
- removeErrors();
19
- $input.prop("disabled", true);
20
- $button.prop("disabled", true);
21
- } else {
22
- $input.prop("disabled", false);
23
- $button.prop("disabled", false);
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
- $input.attr("accept", "image/*");
26
+ $input.attr("accept", "image/*");
28
27
 
29
- $button.on("click", () => {
30
- console.log("click button")
31
- $input.attr("capture", "camera");
32
- $input.click();
33
- $input.removeAttr("capture", "camera");
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
- $input.on("click", () => {
37
- console.log("click", $input);
38
- $input.one("blur", () => {
39
- console.log("blur", $input);
40
- removeErrors();
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,9 +1,9 @@
1
- .has_no_address {
1
+ .has_no_address{
2
2
  text-align: right;
3
3
  }
4
4
 
5
- .editor {
6
- .form-error {
5
+ .editor{
6
+ .form-error{
7
7
  margin: -1rem 0 1rem;
8
8
  font-size: .75rem;
9
9
  font-weight: 600;
@@ -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
  }