decidim-reporting_proposals 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +3 -3
  3. data/.github/workflows/test_integration.yml +19 -5
  4. data/.github/workflows/test_unit.yml +19 -5
  5. data/.gitignore +2 -0
  6. data/.rubocop.yml +1 -3
  7. data/.rubocop_ruby.yml +1 -2
  8. data/.ruby-version +1 -1
  9. data/.simplecov +14 -9
  10. data/Gemfile +6 -5
  11. data/Gemfile.lock +382 -400
  12. data/README.md +14 -9
  13. data/Rakefile +0 -2
  14. data/app/cells/concerns/decidim/reporting_proposals/linked_resources_for_cell_override.rb +23 -0
  15. data/app/cells/decidim/reporting_proposals/edit_note_modal/show.erb +22 -19
  16. data/app/commands/concerns/decidim/{proposals → reporting_proposals}/admin/answer_proposal_override.rb +2 -2
  17. data/app/commands/concerns/decidim/{proposals → reporting_proposals}/admin/assign_proposals_to_valuator_override.rb +1 -1
  18. data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +1 -1
  19. data/app/commands/concerns/decidim/reporting_proposals/admin/update_proposal_answer_template_override.rb +26 -0
  20. data/app/commands/concerns/decidim/{proposals → reporting_proposals}/publish_proposal_override.rb +2 -2
  21. data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +1 -1
  22. data/app/commands/decidim/reporting_proposals/update_reporting_proposal.rb +38 -0
  23. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +31 -0
  24. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answers_controller_override.rb +1 -1
  25. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposals_controller_override.rb +3 -1
  26. data/app/controllers/concerns/decidim/reporting_proposals/admin/valuation_assignments_controller_override.rb +57 -0
  27. data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +0 -1
  28. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +39 -0
  29. data/app/controllers/decidim/reporting_proposals/admin/proposals_controller.rb +4 -4
  30. data/app/controllers/decidim/reporting_proposals/geolocation_controller.rb +1 -1
  31. data/app/events/concerns/decidim/{proposals → reporting_proposals}/publish_proposal_event_override.rb +1 -1
  32. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +9 -16
  33. data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -5
  34. data/app/forms/decidim/reporting_proposals/admin/proposal_photo_form.rb +1 -5
  35. data/app/forms/decidim/reporting_proposals/proposal_form.rb +2 -0
  36. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +7 -30
  37. data/app/helpers/concerns/decidim/reporting_proposals/resource_helper_override.rb +1 -1
  38. data/app/mailers/concerns/decidim/reporting_proposals/admin/hidden_resource_mailer.rb +30 -0
  39. data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/admin/notification_answer_proposal_mailer.rb +1 -1
  40. data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/admin/proposals_valuator_mailer.rb +2 -2
  41. data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/notification_publish_proposal_mailer.rb +1 -1
  42. data/app/mailers/concerns/decidim/reporting_proposals/reported_mailer_override.rb +18 -0
  43. data/app/overrides/decidim/proposals/admin/proposals/show/add_address.html.erb.deface +1 -1
  44. data/app/overrides/decidim/proposals/admin/proposals/show/add_photo_management.html.erb.deface +1 -1
  45. data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
  46. data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +16 -10
  47. data/app/overrides/decidim/proposals/proposals/_wizard_header/add_description.html.erb.deface +5 -0
  48. data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +5 -6
  49. data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +5 -0
  50. data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +10 -0
  51. data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +1 -1
  52. data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +2 -2
  53. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_javascript.html.erb.deface +3 -3
  54. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +6 -1
  55. data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +2 -2
  56. data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +1 -0
  57. data/app/overrides/decidim/proposals/proposals/new/remove_title.html.erb.deface +1 -1
  58. data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +2 -2
  59. data/app/overrides/decidim/proposals/proposals/preview/add_css.html.erb.deface +5 -0
  60. data/app/overrides/decidim/proposals/proposals/show/add_additional_button.html.erb.deface +1 -1
  61. data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
  62. data/app/packs/src/decidim/reporting_proposals/proposal_extra_validations.js +12 -13
  63. data/app/packs/src/decidim/reporting_proposals/proposals/add_proposal.js +45 -41
  64. data/app/packs/src/decidim/reporting_proposals/reverse_geocoding.js +0 -2
  65. data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +7 -7
  66. data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +9 -26
  67. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -6
  68. data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +44 -30
  69. data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +9 -4
  70. data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +21 -13
  71. data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +73 -0
  72. data/app/permissions/decidim/templates/admin/permissions.rb +51 -0
  73. data/app/presenters/concerns/decidim/reporting_proposals/resource_locator_presenter_override.rb +40 -0
  74. data/app/resources/concerns/decidim/reporting_proposals/resource_manifest_override.rb +16 -0
  75. data/app/serializers/decidim/reporting_proposals/proposal_serializer_override.rb +4 -4
  76. data/app/views/decidim/proposals/admin/proposal_notes/_editing_note.html.erb +3 -3
  77. data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes_body.html.erb +1 -1
  78. data/app/views/decidim/proposals/admin/proposals/_address.html.erb +11 -10
  79. data/app/views/decidim/proposals/admin/proposals/_send_email_button.html.erb +6 -4
  80. data/app/views/decidim/proposals/proposals/_additional_button.html.erb +1 -1
  81. data/app/views/decidim/proposals/proposals/index.js.erb +0 -2
  82. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -3
  83. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_gallery.html.erb +3 -4
  84. data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +15 -11
  85. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +7 -11
  86. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_title.html.erb +2 -2
  87. data/app/views/decidim/reporting_proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +17 -0
  88. data/app/views/decidim/reporting_proposals/proposals/_additional_button_for_show.html.erb +5 -2
  89. data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +26 -0
  90. data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +7 -5
  91. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +61 -86
  92. data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +1 -1
  93. data/bin/dev +5 -0
  94. data/bin/{webpack-dev-server → shakapacker} +1 -1
  95. data/bin/shakapacker-dev-server +6 -0
  96. data/config/assets.rb +1 -3
  97. data/config/locales/ca.yml +0 -2
  98. data/config/locales/en.yml +22 -48
  99. data/decidim-reporting_proposals.gemspec +1 -2
  100. data/lib/decidim/reporting_proposals/admin_engine.rb +4 -0
  101. data/lib/decidim/reporting_proposals/component.rb +26 -26
  102. data/lib/decidim/reporting_proposals/engine.rb +18 -12
  103. data/lib/decidim/reporting_proposals/test/factories.rb +2 -12
  104. data/lib/decidim/reporting_proposals/version.rb +3 -4
  105. data/lib/tasks/reporting_proposals_upgrade.rake +5 -0
  106. data/package-lock.json +4072 -5101
  107. data/package.json +12 -7
  108. metadata +73 -105
  109. data/app/commands/concerns/decidim/admin/hide_resource_override.rb +0 -34
  110. data/app/commands/concerns/decidim/templates/admin/copy_questionnaire_template_override.rb +0 -32
  111. data/app/commands/concerns/decidim/templates/admin/create_questionnaire_template_override.rb +0 -32
  112. data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +0 -35
  113. data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +0 -48
  114. data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +0 -52
  115. data/app/controllers/concerns/decidim/proposals/admin/valuation_assignments_controller_override.rb +0 -35
  116. data/app/controllers/concerns/decidim/templates/admin/application_controller_override.rb +0 -20
  117. data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +0 -183
  118. data/app/forms/decidim/templates/admin/proposal_answer_template_form.rb +0 -21
  119. data/app/mailers/concerns/decidim/admin/hidden_resource_mailer.rb +0 -28
  120. data/app/mailers/concerns/decidim/reported_mailer_override.rb +0 -16
  121. data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +0 -5
  122. data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +0 -37
  123. data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +0 -5
  124. data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +0 -5
  125. data/app/overrides/decidim/proposals/proposals/edit_draft/add_user_group.html.erb.deface +0 -3
  126. data/app/packs/entrypoints/decidim_reporting_proposals_js_validations.js +0 -1
  127. data/app/packs/entrypoints/decidim_templates_admin.js +0 -1
  128. data/app/packs/src/decidim/templates/admin/proposal_answer_template_chooser.js +0 -27
  129. data/app/permissions/decidim/templates/admin/extra_permissions.rb +0 -37
  130. data/app/presenters/concerns/decidim/resource_locator_presenter_override.rb +0 -38
  131. data/app/resources/concerns/decidim/resource_manifest_override.rb +0 -14
  132. data/app/views/decidim/proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +0 -17
  133. data/app/views/decidim/templates/admin/proposal_answer_templates/_form.html.erb +0 -34
  134. data/app/views/decidim/templates/admin/proposal_answer_templates/_template_chooser.html.erb +0 -16
  135. data/app/views/decidim/templates/admin/proposal_answer_templates/edit.html.erb +0 -3
  136. data/app/views/decidim/templates/admin/proposal_answer_templates/index.html.erb +0 -52
  137. data/app/views/decidim/templates/admin/proposal_answer_templates/new.html.erb +0 -6
  138. data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +0 -8
  139. data/db/migrate/20230404104741_migrate_templatable.rb +0 -13
  140. /data/app/views/decidim/{admin → reporting_proposals/admin}/hidden_resource_mailer/notify_mail.html.erb +0 -0
  141. /data/app/views/decidim/{proposals → reporting_proposals}/admin/notification_answer_proposal_mailer/notify_proposal_author.html.erb +0 -0
  142. /data/app/views/decidim/{proposals → reporting_proposals}/notification_publish_proposal_mailer/notify_proposal_author.html.erb +0 -0
@@ -7,34 +7,12 @@ module Decidim
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- def proposal_wizard_stepper(current_step)
11
- steps = %(
12
- #{proposal_wizard_stepper_step(Proposals::ProposalsController::STEP1, current_step)}
13
- #{proposal_wizard_stepper_step(Proposals::ProposalsController::STEP2, current_step)}
14
- )
15
- steps = %(#{steps} #{proposal_wizard_stepper_step(Proposals::ProposalsController::STEP3, current_step)}) unless reporting_proposals_component?
16
- steps = %(#{steps} #{proposal_wizard_stepper_step(Proposals::ProposalsController::STEP4, current_step)})
17
-
18
- content_tag :ol, class: "wizard__steps" do
19
- steps.html_safe
20
- end
10
+ def proposal_wizard_steps
11
+ steps = [Proposals::ProposalsController::STEP1, Proposals::ProposalsController::STEP2]
12
+ steps << Proposals::ProposalsController::STEP3 unless reporting_proposals_component?
13
+ steps << Proposals::ProposalsController::STEP4
21
14
  end
22
15
 
23
- def proposal_wizard_current_step_of(step)
24
- current_step_num = proposal_wizard_step_number(step)
25
- current_step_num = 3 if current_step_num == 4 && reporting_proposals_component?
26
- see_steps = content_tag(:span, class: "hide-for-large") do
27
- concat " ("
28
- concat content_tag :a, t(:"decidim.proposals.proposals.wizard_steps.see_steps"), "data-toggle": "steps"
29
- concat ")"
30
- end
31
- content_tag :span, class: "text-small" do
32
- concat t(:"decidim.proposals.proposals.wizard_steps.step_of", current_step_num: current_step_num, total_steps: total_steps)
33
- concat see_steps
34
- end
35
- end
36
-
37
- # rubocop:disable Rails/HelperInstanceVariable:
38
16
  def distance(meters = nil)
39
17
  meters = @proposal.component.settings.geocoding_comparison_radius.to_f if meters.nil?
40
18
 
@@ -46,15 +24,14 @@ module Decidim
46
24
  private
47
25
 
48
26
  def total_steps
49
- reporting_proposals_component? ? 3 : 4
27
+ proposal_wizard_steps.count
50
28
  end
51
29
 
52
30
  def reporting_proposals_component?
53
- return unless @form&.component&.manifest_name
31
+ return unless current_component&.manifest_name
54
32
 
55
- @form.component.manifest_name == "reporting_proposals"
33
+ current_component.manifest_name == "reporting_proposals"
56
34
  end
57
- # rubocop:enable Rails/HelperInstanceVariable:
58
35
  end
59
36
  end
60
37
  end
@@ -15,7 +15,7 @@ module Decidim
15
15
  content_tag(:div, class: "section") do
16
16
  i18n_name = "#{resource.class.name.demodulize.underscore}_#{resource_manifest.name}"
17
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 })
18
+ render(partial: resource_manifest.template, locals: { resources: })
19
19
  end
20
20
  end)
21
21
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ReportingProposals
5
+ module Admin
6
+ # A custom mailer to mail Decidim users
7
+ # that they have been hidden
8
+ class HiddenResourceMailer < Decidim::ApplicationMailer
9
+ include Decidim::TranslationsHelper
10
+ include Decidim::SanitizeHelper
11
+ include Decidim::ApplicationHelper
12
+ include Decidim::TranslatableAttributes
13
+
14
+ helper Decidim::ResourceHelper
15
+ helper Decidim::TranslationsHelper
16
+ helper Decidim::ApplicationHelper
17
+
18
+ def notify_mail(resource, resource_authors, reason)
19
+ @resource_authors = resource_authors
20
+ @organization = resource.organization
21
+ @resource = resource
22
+ @reason = reason
23
+
24
+ mail(to: resource_authors.pluck(:email).uniq,
25
+ subject: I18n.t("decidim.admin.hidden_resource_mailer.notify_mail.subject"))
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- module Proposals
4
+ module ReportingProposals
5
5
  module Admin
6
6
  class NotificationAnswerProposalMailer < Decidim::ApplicationMailer
7
7
  include Decidim::TranslationsHelper
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- module Proposals
4
+ module ReportingProposals
5
5
  module Admin
6
6
  class ProposalsValuatorMailer < Decidim::ApplicationMailer
7
7
  include Decidim::TranslationsHelper
@@ -21,7 +21,7 @@ module Decidim
21
21
 
22
22
  with_user(user) do
23
23
  mail to: "#{user.name} <#{user.email}>",
24
- subject: t("subject", scope: "decidim.proposals.admin.proposals_valuator_mailer.notify_proposals_valuator")
24
+ subject: t("subject", scope: "decidim.reporting_proposals.admin.proposals_valuator_mailer.notify_proposals_valuator")
25
25
  end
26
26
  end
27
27
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- module Proposals
4
+ module ReportingProposals
5
5
  class NotificationPublishProposalMailer < Decidim::ApplicationMailer
6
6
  include Decidim::TranslationsHelper
7
7
  include Decidim::SanitizeHelper
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ReportingProposals
5
+ module ReportedMailerOverride
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ helper Decidim::ComponentPathHelper
10
+ helper_method :resource_admin_url
11
+
12
+ def resource_admin_url
13
+ @resource_admin_url ||= Decidim::ResourceLocatorPresenter.new(@reportable).admin_url
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
- <!-- insert_after ".row.column[3]" -->
1
+ <!-- insert_after ".component__show-text" -->
2
2
 
3
3
  <%= render partial: "decidim/proposals/admin/proposals/address", locals: { component_settings: component_settings, proposal: proposal } %>
@@ -1,3 +1,3 @@
1
- <!-- insert_after "erb[silent]:contains('if proposal.valuators.any?')" -->
1
+ <!-- insert_before "erb[silent]:contains('if proposal.photos.any?')" -->
2
2
 
3
3
  <%= render partial: "decidim/reporting_proposals/admin/proposals/photos" %>
@@ -1,3 +1,3 @@
1
- <!-- insert_after "erb[loud]:contains('current_or_new_conversation_path_with(presented_author)')" -->
1
+ <!-- insert_after ".component__show_nav-author-title" -->
2
2
 
3
3
  <%= render partial: "decidim/proposals/admin/proposals/send_email_button", locals: { presented_author: presented_author } %>
@@ -1,19 +1,25 @@
1
1
  <!-- insert_after "#valuators" -->
2
2
 
3
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"
4
+ <div id="js-assign-proposal-to-valuator-actions" class="js-bulk-action-form form-single-proposal my-4"
5
5
  style="max-width:400px">
6
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>
7
+ class: "form form-defaults") do %>
8
+ <div class="form__wrapper">
9
+ <div class="card">
10
+ <div class="flex items-center">
11
+ <div class="checkboxes hide">
12
+ <%= check_box_tag "proposal_ids[]", proposal.id, true,
13
+ class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
14
+ </div>
12
15
 
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") %>
16
+ <%= bulk_valuators_select(current_participatory_space, t("decidim.proposals.admin.proposals.index.assign_to_valuator")) %>
17
+ <%= submit_tag(t("decidim.proposals.admin.proposals.index.assign_to_valuator_button"),
18
+ id: "js-submit-assign-proposal-to-valuator",
19
+ class: "button button__sm button__secondary ml-2") %>
20
+ </div>
21
+ </div>
22
+ </div>
17
23
  <% end %>
18
24
  </div>
19
25
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_after "erb[loud]:contains('wizard_steps(@step)')" -->
2
+
3
+ <% if geocoding_comparison? && action_name == "compare" %>
4
+ <p><%= t("description", scope: "decidim.reporting_proposals.proposals.compare.geocoding", meters: distance) %></p>
5
+ <% end %>
@@ -1,14 +1,13 @@
1
- <!-- replace ".section-heading" -->
1
+ <!-- replace ".title-decorator" -->
2
2
 
3
3
  <% if geocoding_comparison? && action_name == "compare" %>
4
- <h2 class="section-heading">
4
+ <h1 class="title-decorator my-12">
5
5
  <%= t("title", scope: "decidim.reporting_proposals.proposals.compare.geocoding") %>
6
6
  <%= "(#{@similar_proposals.count})" if @similar_proposals.present? %>
7
- </h2>
8
- <p><%= t("description", scope: "decidim.reporting_proposals.proposals.compare.geocoding", meters: distance) %></p>
7
+ </h1>
9
8
  <% else %>
10
- <h2 class="section-heading">
9
+ <h1 class="title-decorator my-12">
11
10
  <%= proposal_wizard_step_title action_name %>
12
11
  <%= "(#{@similar_proposals.count})" if @similar_proposals.present? %>
13
- </h2>
12
+ </h1>
14
13
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_after "erb[silent]:contains('append_stylesheet_pack_tag')" -->
2
+
3
+ <% if reporting_proposal? %>
4
+ <% append_stylesheet_pack_tag "decidim_reporting_proposals" %>
5
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <!-- replace "erb[loud]:contains('card_for @proposal')" -->
2
+
3
+ <% if geocoding_comparison? %>
4
+ <div class="compare-by-distance mb-6">
5
+ <span class="label secondary float-right"><%= icon("map-pin-line") %> <%= t("away", scope: "decidim.reporting_proposals.proposals.compare.geocoding", meters: distance(1000 * @proposal.distance_from([proposal.latitude, proposal.longitude], :km))) %></span>
6
+ <%= card_for proposal %>
7
+ </div>
8
+ <% else %>
9
+ <%= card_for proposal %>
10
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  <!-- insert_before "erb[silent]:contains(':js_content')" -->
2
2
 
3
3
  <% if reporting_proposal? %>
4
- <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
4
+ <%= append_stylesheet_pack_tag "decidim_reporting_proposals" %>
5
5
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <!-- replace "erb[loud]:contains('javascript_pack_tag')" -->
2
2
 
3
3
  <% if reporting_proposal? %>
4
- <%= javascript_pack_tag "decidim_reporting_proposals" %>
4
+ <%= prepend_javascript_pack_tag "decidim_reporting_proposals" %>
5
5
  <% else %>
6
- <%= javascript_pack_tag "decidim_proposals" %>
6
+ <%= prepend_javascript_pack_tag "decidim_proposals" %>
7
7
  <% end %>
@@ -1,8 +1,8 @@
1
1
  <!-- replace "erb[loud]:contains('javascript_pack_tag')" -->
2
2
 
3
3
  <% if reporting_proposal? %>
4
- <%= javascript_pack_tag "decidim_reporting_proposals" %>
5
- <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
4
+ <%= prepend_javascript_pack_tag "decidim_reporting_proposals" %>
5
+ <%= append_stylesheet_pack_tag "decidim_reporting_proposals" %>
6
6
  <% else %>
7
- <%= javascript_pack_tag "decidim_proposals" %>
7
+ <%= prepend_javascript_pack_tag "decidim_proposals" %>
8
8
  <% end %>
@@ -1,3 +1,8 @@
1
1
  <!-- replace "erb[loud]:contains('edit_form_fields')" -->
2
2
 
3
- <%= render "decidim/#{reporting_proposal? ? 'reporting_proposals/proposals/reporting_proposal_fields' : 'proposals/proposals/edit_form_fields'}", form: form %>
3
+ <% if reporting_proposal? %>
4
+ <%= render "decidim/reporting_proposals/proposals/reporting_proposal_fields", form: form %>
5
+ <%= render "decidim/reporting_proposals/proposals/user_group", form: form %>
6
+ <% else %>
7
+ <%= render "decidim/proposals/proposals/edit_form_fields", form: form %>
8
+ <% end %>
@@ -1,5 +1,5 @@
1
- <!-- insert_before "erb[silent]:contains(':js_content')" -->
1
+ <!-- insert_after "erb[loud]:contains('append_stylesheet_pack_tag')" -->
2
2
 
3
3
  <% if reporting_proposal? %>
4
- <%= stylesheet_pack_tag "decidim_reporting_proposals" %>
4
+ <% append_stylesheet_pack_tag "decidim_reporting_proposals" %>
5
5
  <% end %>
@@ -0,0 +1 @@
1
+ <!-- remove "erb[loud]:contains('text_editor_for_proposal_body(form)')" -->
@@ -1 +1 @@
1
- <!-- remove ".hashtags__container" -->
1
+ <!-- remove "erb[loud]:contains(':title')" -->
@@ -1,7 +1,7 @@
1
1
  <!-- replace "erb[loud]:contains('javascript_pack_tag')" -->
2
2
 
3
3
  <% if reporting_proposal? %>
4
- <%= javascript_pack_tag "decidim_reporting_proposals" %>
4
+ <% append_javascript_pack_tag "decidim_reporting_proposals" %>
5
5
  <% else %>
6
- <%= javascript_pack_tag "decidim_proposals" %>
6
+ <% append_javascript_pack_tag "decidim_proposals" %>
7
7
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_after "erb[silent]:contains('append_stylesheet_pack_tag')" -->
2
+
3
+ <% if reporting_proposal? %>
4
+ <% append_stylesheet_pack_tag "decidim_reporting_proposals" %>
5
+ <% end %>
@@ -1,3 +1,3 @@
1
- <!-- insert_bottom ".m-bottom" -->
1
+ <!-- insert_before "erb[loud]:contains('proposal_aside')" -->
2
2
 
3
3
  <%= render partial: "decidim/reporting_proposals/proposals/additional_button_for_show" %>
@@ -1,5 +1,6 @@
1
1
  import "src/decidim/proposals/utils"
2
2
  import "src/decidim/reporting_proposals/proposals/add_proposal"
3
+ import "src/decidim/reporting_proposals/proposal_extra_validations"
3
4
  import "stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss";
4
5
 
5
6
  // Images
@@ -2,12 +2,7 @@ $(() => {
2
2
 
3
3
  const $title = $('input[name="proposal[title]"]');
4
4
  const $body = $('[name="proposal[body]"]');
5
- let quill;
6
- try {
7
- quill = window.Quill.find(document.querySelector(".editor-container"));
8
- } catch (e) {
9
- console.log("Quill not found");
10
- }
5
+ const prosemirror = document.querySelector(".ProseMirror");
11
6
  const $form = $title.closest("form");
12
7
 
13
8
  const findError = ($field, prop) => {
@@ -15,12 +10,12 @@ $(() => {
15
10
  if (!$closest.length) {
16
11
  $closest = $field.closest(".editor");
17
12
  }
18
- // console.log("findError", $closest, $field, prop);
19
13
  let search = `.form-error.${prop}`;
20
14
  if (!prop) {
21
15
  search = ".form-error"
22
16
  }
23
17
  let $error = $closest.find(search);
18
+ console.log("findError", "$closest", $closest, " $field", $field, "prop", prop, "$error", $error);
24
19
  if ($error.length === 0) {
25
20
  $error = $(`<span class="${search.replace(/\./g, " ")}"></span>`).appendTo($closest);
26
21
  }
@@ -42,7 +37,7 @@ $(() => {
42
37
  };
43
38
 
44
39
  const validate = ($field, value, options) => {
45
- // console.log("validate", $field, value, options);
40
+ console.log("validate", $field, value, options);
46
41
 
47
42
  // validate caps if needed
48
43
  const minLen = $field.attr("minlength");
@@ -64,23 +59,27 @@ $(() => {
64
59
  $title.change(() => {
65
60
  clearErrors($title, "caps");
66
61
  });
67
- if (quill) {
68
- // on change quill
69
- quill.on("text-change", () => {
62
+ if (prosemirror) {
63
+ // on change prosemirror (tiptap is not available as a global object)
64
+ prosemirror.addEventListener("focus", () => {
65
+ clearErrors($body, "caps");
66
+ });
67
+ prosemirror.addEventListener("blur", () => {
70
68
  clearErrors($body, "caps");
71
69
  clearErrors($body);
72
70
  });
73
71
  } else {
74
72
  $body.change(() => {
75
73
  clearErrors($body, "caps");
74
+ clearErrors($body);
76
75
  });
77
76
  }
78
77
  $form.on("submit", (ev) => {
79
78
  if (!validate($title, $title.val(), Decidim.ProposalRules.title)) {
80
79
  ev.preventDefault();
81
80
  }
82
- if (!validate($body, quill
83
- ? quill.getText()
81
+ if (!validate($body, prosemirror
82
+ ? prosemirror.textContent
84
83
  : $body.val(), Decidim.ProposalRules.body)) {
85
84
  ev.preventDefault();
86
85
  }
@@ -4,63 +4,67 @@ $(() => {
4
4
  const $checkbox = $("input:checkbox[name$='[has_no_address]']");
5
5
  const $hasAdressInput = $("input[name$='[has_address]']");
6
6
  const $addressInput = $("#address_input");
7
- const $addressInputField = $("input[name='proposal[address]']");
7
+ const $addressInputField = $("[data-decidim-geocoding]");
8
8
  const $map = $("#address_map");
9
9
  let latFieldName = "proposal[latitude]";
10
10
  let longFieldName = "proposal[longitude]";
11
11
  const $labelInput = $("label[for='proposal_address']");
12
12
  const $buttonLocation = $(".user-device-location button");
13
13
 
14
- $map.hide();
14
+ if ($map.length) {
15
+ if (!$addressInputField.data("coordinates")) {
16
+ $map.hide();
17
+ }
18
+ $addressInputField.on("geocoder-suggest-coordinates.decidim", () => $map.show());
15
19
 
16
- // Handle no address checkbox in reverse, mandatory by default instead of default decidim
17
- if ($checkbox.length > 0) {
18
- const toggleInput = () => {
19
- $hasAdressInput.val($checkbox[0].checked
20
- ? 0
21
- : 1);
20
+ // Handle no address checkbox in reverse, mandatory by default instead of default decidim
21
+ if ($checkbox.length > 0) {
22
+ const toggleInput = () => {
23
+ $hasAdressInput.val($checkbox[0].checked
24
+ ? 0
25
+ : 1);
22
26
 
23
- if ($checkbox[0].checked) {
24
- const $formError = $labelInput.find('span.form-error[style="display: block;"]');
27
+ if ($checkbox[0].checked) {
28
+ const $formError = $labelInput.find('span.form-error[style="display: block;"]');
25
29
 
26
- $map.hide();
27
- $addressInputField.prop("disabled", true);
28
- $addressInputField.removeClass("is-invalid-input");
29
- $labelInput.removeClass("is-invalid-label");
30
- $buttonLocation.prop("disabled", true);
31
- $buttonLocation.removeClass("loading-spinner");
32
- $formError.attr("style", "display:none;");
30
+ $map.hide();
31
+ $addressInputField.prop("disabled", true);
32
+ $addressInputField.removeClass("is-invalid-input");
33
+ $labelInput.removeClass("is-invalid-label");
34
+ $buttonLocation.prop("disabled", true);
35
+ $formError.attr("style", "display:none;");
33
36
 
34
- } else {
35
- if ($(`input[name='${latFieldName}']`).val()) {
36
- $map.show();
37
+ } else {
38
+ if ($(`input[name='${latFieldName}']`).val()) {
39
+ $map.show();
40
+ }
41
+ $addressInputField.prop("disabled", false);
42
+ $buttonLocation.prop("disabled", false);
37
43
  }
38
- $addressInputField.prop("disabled", false);
39
- $buttonLocation.prop("disabled", false);
40
44
  }
45
+ toggleInput();
46
+ $checkbox.on("change", toggleInput);
41
47
  }
42
- toggleInput();
43
- $checkbox.on("change", toggleInput);
44
- }
45
48
 
46
- if ($addressInput.length > 0) {
47
- const ctrl = $("[data-decidim-map]").data("map-controller");
48
- ctrl.setEventHandler("coordinates", (ev) => {
49
- $(`input[name='${latFieldName}']`).val(ev.lat);
50
- $(`input[name='${longFieldName}']`).val(ev.lng);
51
- });
49
+ $("[data-decidim-map]").on("ready.decidim", () => {
50
+ if ($addressInput.length <= 0) {
51
+ return;
52
+ }
53
+ const ctrl = $("[data-decidim-map]").data("map-controller");
54
+ ctrl.setEventHandler("coordinates", (ev) => {
55
+ $(`input[name='${latFieldName}']`).val(ev.lat);
56
+ $(`input[name='${longFieldName}']`).val(ev.lng);
57
+ });
52
58
 
53
- attachGeocoding($addressInputField, null, (coordinates) => {
54
- $map.show();
55
- // Remove previous marker when user updates address in address field
56
- ctrl.removeMarker();
57
- ctrl.addMarker({
58
- latitude: coordinates[0],
59
- longitude: coordinates[1],
60
- address: $addressInputField.val()
59
+ attachGeocoding($addressInputField, null, (coordinates) => {
60
+ // Remove previous marker when user updates address in address field
61
+ ctrl.removeMarker();
62
+ ctrl.addMarker({
63
+ latitude: coordinates[0],
64
+ longitude: coordinates[1],
65
+ address: $addressInputField.val()
66
+ });
61
67
  });
62
68
  });
63
69
  }
64
-
65
-
66
70
  });
@@ -9,10 +9,8 @@ $(() => {
9
9
 
10
10
  const setLocating = ($button, enable) => {
11
11
  if (enable) {
12
- $button.addClass("loading-spinner");
13
12
  $button.attr("disabled", true);
14
13
  } else {
15
- $button.removeClass("loading-spinner");
16
14
  $button.attr("disabled", false);
17
15
  }
18
16
  }
@@ -1,9 +1,8 @@
1
1
  $(() => {
2
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")
3
+ const $button = $(".camera-container .user-device-camera");
4
+ const $checkbox = $("#proposal_has_no_image");
5
+ const $formError = $(".camera-container .form-error")
7
6
  const $labelInput = $("label[for='proposal_add_photos']")
8
7
 
9
8
  const removeErrors = () => {
@@ -26,20 +25,21 @@ $(() => {
26
25
  $input.attr("accept", "image/*");
27
26
 
28
27
  $button.on("click", () => {
29
- console.log("click button")
28
+ // console.log("click button")
30
29
  $input.attr("capture", "camera");
31
30
  $input.click();
32
31
  $input.removeAttr("capture", "camera");
33
32
  });
34
33
 
35
34
  $input.on("click", () => {
36
- console.log("click", $input);
35
+ // console.log("click", $input);
37
36
  $input.one("blur", () => {
38
- console.log("blur", $input);
37
+ // console.log("blur", $input);
39
38
  removeErrors();
40
39
  });
41
40
  });
42
41
 
42
+
43
43
  if ($checkbox.length > 0) {
44
44
  $checkbox.on("change", toggleInput);
45
45
  toggleInput();
@@ -1,34 +1,17 @@
1
- .input-group.has-tribute{
2
- position: relative;
1
+ .geocoding-container {
2
+ @apply sm:flex sm:items-end;
3
3
 
4
- .tribute-container{
5
- margin-top: 2.3rem;
4
+ .autoComplete_wrapper {
5
+ @apply w-full mb-2 sm:m-0 sm:mr-2;
6
6
  }
7
- }
8
-
9
- .user-device-location{
10
- button{
11
- max-height: 3rem;
12
7
 
13
- &.loading-spinner{
14
- position: relative;
15
- margin: 0 !important;
8
+ .user-device-location {
9
+ button {
10
+ @apply whitespace-nowrap p-2 w-full sm:w-auto;
16
11
 
17
- &::before{
18
- position: absolute;
19
- top: 6px;
20
- left: 12px;
12
+ svg {
13
+ margin-right: 0.2rem;
21
14
  }
22
15
  }
23
16
  }
24
-
25
- @media only screen and (max-width: 596px){
26
- display: block !important;
27
- margin-top: 1rem;
28
- margin-bottom: -.5rem;
29
-
30
- button{
31
- border-radius: 4px !important;
32
- }
33
- }
34
17
  }