decidim-enhanced_textwork 1.0.0

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.
Files changed (441) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +64 -0
  3. data/Rakefile +3 -0
  4. data/app/cells/decidim/enhanced_textwork/amendment/show.erb +14 -0
  5. data/app/cells/decidim/enhanced_textwork/amendment_cell.rb +39 -0
  6. data/app/cells/decidim/enhanced_textwork/collaborative_draft_cell.rb +49 -0
  7. data/app/cells/decidim/enhanced_textwork/collaborative_draft_link_to_paragraph/show.erb +13 -0
  8. data/app/cells/decidim/enhanced_textwork/collaborative_draft_link_to_paragraph_cell.rb +57 -0
  9. data/app/cells/decidim/enhanced_textwork/collaborative_draft_m/footer.erb +6 -0
  10. data/app/cells/decidim/enhanced_textwork/collaborative_draft_m/tags.erb +1 -0
  11. data/app/cells/decidim/enhanced_textwork/collaborative_draft_m_cell.rb +44 -0
  12. data/app/cells/decidim/enhanced_textwork/collaborative_drafts/reported_content/show.erb +3 -0
  13. data/app/cells/decidim/enhanced_textwork/collaborative_drafts/reported_content_cell.rb +15 -0
  14. data/app/cells/decidim/enhanced_textwork/comments/show.erb +33 -0
  15. data/app/cells/decidim/enhanced_textwork/comments_cell.rb +8 -0
  16. data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs/elements.erb +5 -0
  17. data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs/heading.erb +1 -0
  18. data/app/cells/decidim/enhanced_textwork/content_blocks/highlighted_paragraphs_cell.rb +19 -0
  19. data/app/cells/decidim/enhanced_textwork/cost_report/show.erb +35 -0
  20. data/app/cells/decidim/enhanced_textwork/cost_report_cell.rb +42 -0
  21. data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs/show.erb +3 -0
  22. data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_cell.rb +25 -0
  23. data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_for_component/show.erb +19 -0
  24. data/app/cells/decidim/enhanced_textwork/highlighted_paragraphs_for_component_cell.rb +41 -0
  25. data/app/cells/decidim/enhanced_textwork/irreversible_action_modal/show.erb +27 -0
  26. data/app/cells/decidim/enhanced_textwork/irreversible_action_modal_cell.rb +80 -0
  27. data/app/cells/decidim/enhanced_textwork/paragraph_activity_cell.rb +35 -0
  28. data/app/cells/decidim/enhanced_textwork/paragraph_cell.rb +53 -0
  29. data/app/cells/decidim/enhanced_textwork/paragraph_link_to_collaborative_draft_cell.rb +26 -0
  30. data/app/cells/decidim/enhanced_textwork/paragraph_link_to_rejected_emendation/show.erb +9 -0
  31. data/app/cells/decidim/enhanced_textwork/paragraph_link_to_rejected_emendation_cell.rb +34 -0
  32. data/app/cells/decidim/enhanced_textwork/paragraph_linked_resources/show.erb +9 -0
  33. data/app/cells/decidim/enhanced_textwork/paragraph_linked_resources_cell.rb +14 -0
  34. data/app/cells/decidim/enhanced_textwork/paragraph_m/footer.erb +26 -0
  35. data/app/cells/decidim/enhanced_textwork/paragraph_m/tags.erb +1 -0
  36. data/app/cells/decidim/enhanced_textwork/paragraph_m_cell.rb +152 -0
  37. data/app/cells/decidim/enhanced_textwork/paragraph_tags/show.erb +33 -0
  38. data/app/cells/decidim/enhanced_textwork/paragraph_tags_cell.rb +35 -0
  39. data/app/cells/decidim/enhanced_textwork/paragraphs_picker/paragraphs.erb +12 -0
  40. data/app/cells/decidim/enhanced_textwork/paragraphs_picker/show.erb +14 -0
  41. data/app/cells/decidim/enhanced_textwork/paragraphs_picker_cell.rb +72 -0
  42. data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph/buttons.erb +33 -0
  43. data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph/show.erb +38 -0
  44. data/app/cells/decidim/enhanced_textwork/participatory_text_paragraph_cell.rb +104 -0
  45. data/app/cells/decidim/enhanced_textwork/reported_content/show.erb +4 -0
  46. data/app/cells/decidim/enhanced_textwork/reported_content_cell.rb +13 -0
  47. data/app/commands/decidim/enhanced_textwork/accept_access_to_collaborative_draft.rb +70 -0
  48. data/app/commands/decidim/enhanced_textwork/admin/answer_paragraph.rb +74 -0
  49. data/app/commands/decidim/enhanced_textwork/admin/assign_paragraphs_to_valuator.rb +61 -0
  50. data/app/commands/decidim/enhanced_textwork/admin/create_paragraph.rb +97 -0
  51. data/app/commands/decidim/enhanced_textwork/admin/create_paragraph_note.rb +67 -0
  52. data/app/commands/decidim/enhanced_textwork/admin/destroy_paragraph.rb +32 -0
  53. data/app/commands/decidim/enhanced_textwork/admin/discard_participatory_text.rb +40 -0
  54. data/app/commands/decidim/enhanced_textwork/admin/import_from_editor_participatory_text.rb +53 -0
  55. data/app/commands/decidim/enhanced_textwork/admin/import_paragraphs.rb +101 -0
  56. data/app/commands/decidim/enhanced_textwork/admin/import_participatory_text.rb +55 -0
  57. data/app/commands/decidim/enhanced_textwork/admin/merge_paragraphs.rb +69 -0
  58. data/app/commands/decidim/enhanced_textwork/admin/notify_paragraph_answer.rb +85 -0
  59. data/app/commands/decidim/enhanced_textwork/admin/publish_answers.rb +67 -0
  60. data/app/commands/decidim/enhanced_textwork/admin/publish_participatory_text.rb +81 -0
  61. data/app/commands/decidim/enhanced_textwork/admin/split_paragraphs.rb +67 -0
  62. data/app/commands/decidim/enhanced_textwork/admin/unassign_paragraphs_from_valuator.rb +62 -0
  63. data/app/commands/decidim/enhanced_textwork/admin/update_paragraph.rb +86 -0
  64. data/app/commands/decidim/enhanced_textwork/admin/update_paragraph_category.rb +68 -0
  65. data/app/commands/decidim/enhanced_textwork/admin/update_paragraph_scope.rb +75 -0
  66. data/app/commands/decidim/enhanced_textwork/admin/update_participatory_text.rb +68 -0
  67. data/app/commands/decidim/enhanced_textwork/create_collaborative_draft.rb +81 -0
  68. data/app/commands/decidim/enhanced_textwork/create_paragraph.rb +106 -0
  69. data/app/commands/decidim/enhanced_textwork/destroy_paragraph.rb +33 -0
  70. data/app/commands/decidim/enhanced_textwork/gallery_methods.rb +18 -0
  71. data/app/commands/decidim/enhanced_textwork/hashtags_methods.rb +36 -0
  72. data/app/commands/decidim/enhanced_textwork/publish_collaborative_draft.rb +93 -0
  73. data/app/commands/decidim/enhanced_textwork/publish_paragraph.rb +105 -0
  74. data/app/commands/decidim/enhanced_textwork/reject_access_to_collaborative_draft.rb +62 -0
  75. data/app/commands/decidim/enhanced_textwork/request_access_to_collaborative_draft.rb +49 -0
  76. data/app/commands/decidim/enhanced_textwork/unvote_paragraph.rb +65 -0
  77. data/app/commands/decidim/enhanced_textwork/update_collaborative_draft.rb +63 -0
  78. data/app/commands/decidim/enhanced_textwork/update_paragraph.rb +135 -0
  79. data/app/commands/decidim/enhanced_textwork/vote_paragraph.rb +77 -0
  80. data/app/commands/decidim/enhanced_textwork/withdraw_collaborative_draft.rb +65 -0
  81. data/app/commands/decidim/enhanced_textwork/withdraw_paragraph.rb +50 -0
  82. data/app/controllers/concerns/decidim/enhanced_textwork/admin/filterable.rb +82 -0
  83. data/app/controllers/concerns/decidim/enhanced_textwork/admin/picker.rb +21 -0
  84. data/app/controllers/concerns/decidim/enhanced_textwork/collaborative_orderable.rb +42 -0
  85. data/app/controllers/concerns/decidim/enhanced_textwork/orderable.rb +78 -0
  86. data/app/controllers/decidim/enhanced_textwork/admin/application_controller.rb +16 -0
  87. data/app/controllers/decidim/enhanced_textwork/admin/paragraph_answers_controller.rb +50 -0
  88. data/app/controllers/decidim/enhanced_textwork/admin/paragraph_notes_controller.rb +39 -0
  89. data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_controller.rb +237 -0
  90. data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_imports_controller.rb +33 -0
  91. data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_merges_controller.rb +30 -0
  92. data/app/controllers/decidim/enhanced_textwork/admin/paragraphs_splits_controller.rb +30 -0
  93. data/app/controllers/decidim/enhanced_textwork/admin/participatory_texts_controller.rb +128 -0
  94. data/app/controllers/decidim/enhanced_textwork/admin/valuation_assignments_controller.rb +58 -0
  95. data/app/controllers/decidim/enhanced_textwork/application_controller.rb +31 -0
  96. data/app/controllers/decidim/enhanced_textwork/collaborative_draft_collaborator_requests_controller.rb +53 -0
  97. data/app/controllers/decidim/enhanced_textwork/collaborative_drafts_controller.rb +161 -0
  98. data/app/controllers/decidim/enhanced_textwork/paragraph_votes_controller.rb +65 -0
  99. data/app/controllers/decidim/enhanced_textwork/paragraphs_controller.rb +316 -0
  100. data/app/controllers/decidim/enhanced_textwork/versions_controller.rb +21 -0
  101. data/app/controllers/decidim/enhanced_textwork/widgets_controller.rb +19 -0
  102. data/app/events/decidim/enhanced_textwork/accepted_paragraph_event.rb +17 -0
  103. data/app/events/decidim/enhanced_textwork/admin/paragraph_note_created_event.rb +27 -0
  104. data/app/events/decidim/enhanced_textwork/admin/update_paragraph_category_event.rb +11 -0
  105. data/app/events/decidim/enhanced_textwork/admin/update_paragraph_scope_event.rb +11 -0
  106. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_accepted_event.rb +8 -0
  107. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_rejected_event.rb +8 -0
  108. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_request_event.rb +27 -0
  109. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requested_event.rb +8 -0
  110. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requester_accepted_event.rb +8 -0
  111. data/app/events/decidim/enhanced_textwork/collaborative_draft_access_requester_rejected_event.rb +8 -0
  112. data/app/events/decidim/enhanced_textwork/collaborative_draft_withdrawn_event.rb +29 -0
  113. data/app/events/decidim/enhanced_textwork/creation_enabled_event.rb +8 -0
  114. data/app/events/decidim/enhanced_textwork/endorsing_enabled_event.rb +8 -0
  115. data/app/events/decidim/enhanced_textwork/evaluating_paragraph_event.rb +11 -0
  116. data/app/events/decidim/enhanced_textwork/paragraph_endorsed_event.rb +33 -0
  117. data/app/events/decidim/enhanced_textwork/paragraph_mentioned_event.rb +21 -0
  118. data/app/events/decidim/enhanced_textwork/publish_paragraph_event.rb +25 -0
  119. data/app/events/decidim/enhanced_textwork/rejected_paragraph_event.rb +17 -0
  120. data/app/events/decidim/enhanced_textwork/voting_enabled_event.rb +8 -0
  121. data/app/forms/decidim/enhanced_textwork/accept_access_to_collaborative_draft_form.rb +10 -0
  122. data/app/forms/decidim/enhanced_textwork/access_to_collaborative_draft_form.rb +33 -0
  123. data/app/forms/decidim/enhanced_textwork/admin/import_editor_participatory_text_form.rb +35 -0
  124. data/app/forms/decidim/enhanced_textwork/admin/import_participatory_text_form.rb +68 -0
  125. data/app/forms/decidim/enhanced_textwork/admin/paragraph_answer_form.rb +44 -0
  126. data/app/forms/decidim/enhanced_textwork/admin/paragraph_base_form.rb +137 -0
  127. data/app/forms/decidim/enhanced_textwork/admin/paragraph_form.rb +32 -0
  128. data/app/forms/decidim/enhanced_textwork/admin/paragraph_note_form.rb +16 -0
  129. data/app/forms/decidim/enhanced_textwork/admin/paragraphs_fork_form.rb +63 -0
  130. data/app/forms/decidim/enhanced_textwork/admin/paragraphs_import_form.rb +67 -0
  131. data/app/forms/decidim/enhanced_textwork/admin/paragraphs_merge_form.rb +13 -0
  132. data/app/forms/decidim/enhanced_textwork/admin/paragraphs_split_form.rb +12 -0
  133. data/app/forms/decidim/enhanced_textwork/admin/participatory_text_paragraph_form.rb +20 -0
  134. data/app/forms/decidim/enhanced_textwork/admin/preview_participatory_text_form.rb +21 -0
  135. data/app/forms/decidim/enhanced_textwork/admin/valuation_assignment_form.rb +37 -0
  136. data/app/forms/decidim/enhanced_textwork/collaborative_draft_form.rb +20 -0
  137. data/app/forms/decidim/enhanced_textwork/paragraph_form.rb +126 -0
  138. data/app/forms/decidim/enhanced_textwork/paragraph_wizard_create_step_form.rb +41 -0
  139. data/app/forms/decidim/enhanced_textwork/reject_access_to_collaborative_draft_form.rb +9 -0
  140. data/app/forms/decidim/enhanced_textwork/request_access_to_collaborative_draft_form.rb +20 -0
  141. data/app/helpers/decidim/enhanced_textwork/admin/filterable_helper.rb +17 -0
  142. data/app/helpers/decidim/enhanced_textwork/admin/paragraph_bulk_actions_helper.rb +35 -0
  143. data/app/helpers/decidim/enhanced_textwork/admin/paragraph_rankings_helper.rb +63 -0
  144. data/app/helpers/decidim/enhanced_textwork/admin/paragraphs_helper.rb +144 -0
  145. data/app/helpers/decidim/enhanced_textwork/admin/paragraphs_picker_helper.rb +30 -0
  146. data/app/helpers/decidim/enhanced_textwork/application_helper.rb +191 -0
  147. data/app/helpers/decidim/enhanced_textwork/collaborative_draft_cells_helper.rb +48 -0
  148. data/app/helpers/decidim/enhanced_textwork/collaborative_draft_helper.rb +29 -0
  149. data/app/helpers/decidim/enhanced_textwork/control_version_helper.rb +12 -0
  150. data/app/helpers/decidim/enhanced_textwork/map_helper.rb +48 -0
  151. data/app/helpers/decidim/enhanced_textwork/paragraph_cells_helper.rb +75 -0
  152. data/app/helpers/decidim/enhanced_textwork/paragraph_votes_helper.rb +103 -0
  153. data/app/helpers/decidim/enhanced_textwork/paragraph_wizard_helper.rb +140 -0
  154. data/app/helpers/decidim/enhanced_textwork/paragraphs_helper.rb +63 -0
  155. data/app/helpers/decidim/enhanced_textwork/participatory_texts_helper.rb +49 -0
  156. data/app/jobs/decidim/enhanced_textwork/notify_paragraphs_mentioned_job.rb +27 -0
  157. data/app/jobs/decidim/enhanced_textwork/settings_change_job.rb +50 -0
  158. data/app/models/decidim/enhanced_textwork/application_record.rb +10 -0
  159. data/app/models/decidim/enhanced_textwork/collaborative_draft.rb +73 -0
  160. data/app/models/decidim/enhanced_textwork/collaborative_draft_collaborator_request.rb +13 -0
  161. data/app/models/decidim/enhanced_textwork/paragraph.rb +411 -0
  162. data/app/models/decidim/enhanced_textwork/paragraph_note.rb +20 -0
  163. data/app/models/decidim/enhanced_textwork/paragraph_vote.rb +50 -0
  164. data/app/models/decidim/enhanced_textwork/participatory_text.rb +16 -0
  165. data/app/models/decidim/enhanced_textwork/valuation_assignment.rb +24 -0
  166. data/app/packs/documents/decidim/enhanced_textwork/participatory_texts/participatory_text.md +52 -0
  167. data/app/packs/documents/decidim/enhanced_textwork/participatory_texts/participatory_text.odt +0 -0
  168. data/app/packs/entrypoints/decidim_enhanced_textwork.js +17 -0
  169. data/app/packs/entrypoints/decidim_enhanced_textwork_admin.js +3 -0
  170. data/app/packs/images/decidim/enhanced_textwork/decidim_paragraphs.svg +1 -0
  171. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_accepted_paragraphs.svg +1 -0
  172. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_paragraph_votes.svg +1 -0
  173. data/app/packs/images/decidim/gamification/badges/decidim_gamification_badges_paragraphs.svg +1 -0
  174. data/app/packs/src/decidim/enhanced_textwork/add_paragraph.js +49 -0
  175. data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs.js +143 -0
  176. data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs_form.js +29 -0
  177. data/app/packs/src/decidim/enhanced_textwork/admin/paragraphs_picker.js +35 -0
  178. data/app/packs/src/decidim/enhanced_textwork/toggle_element.js +21 -0
  179. data/app/packs/src/decidim/enhanced_textwork/utils.js +11 -0
  180. data/app/packs/stylesheets/decidim/enhanced_textwork/_paragraphs.scss +208 -0
  181. data/app/packs/stylesheets/decidim/enhanced_textwork/paragraphs/_preview.scss +3 -0
  182. data/app/permissions/decidim/enhanced_textwork/admin/permissions.rb +147 -0
  183. data/app/permissions/decidim/enhanced_textwork/permissions.rb +163 -0
  184. data/app/presenters/decidim/enhanced_textwork/admin_log/paragraph_note_presenter.rb +39 -0
  185. data/app/presenters/decidim/enhanced_textwork/admin_log/paragraph_presenter.rb +51 -0
  186. data/app/presenters/decidim/enhanced_textwork/admin_log/valuation_assignment_presenter.rb +51 -0
  187. data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/paragraph_state_presenter.rb +17 -0
  188. data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/paragraph_title_body_presenter.rb +23 -0
  189. data/app/presenters/decidim/enhanced_textwork/admin_log/value_types/valuator_role_user_presenter.rb +19 -0
  190. data/app/presenters/decidim/enhanced_textwork/collaborative_draft_presenter.rb +25 -0
  191. data/app/presenters/decidim/enhanced_textwork/log/resource_presenter.rb +22 -0
  192. data/app/presenters/decidim/enhanced_textwork/log/valuation_assignment_presenter.rb +22 -0
  193. data/app/presenters/decidim/enhanced_textwork/official_author_presenter.rb +14 -0
  194. data/app/presenters/decidim/enhanced_textwork/paragraph_presenter.rb +146 -0
  195. data/app/queries/decidim/enhanced_textwork/filtered_paragraphs.rb +37 -0
  196. data/app/queries/decidim/enhanced_textwork/metrics/accepted_paragraphs_metric_manage.rb +32 -0
  197. data/app/queries/decidim/enhanced_textwork/metrics/endorsements_metric_manage.rb +58 -0
  198. data/app/queries/decidim/enhanced_textwork/metrics/paragraph_followers_metric_measure.rb +58 -0
  199. data/app/queries/decidim/enhanced_textwork/metrics/paragraph_participants_metric_measure.rb +74 -0
  200. data/app/queries/decidim/enhanced_textwork/metrics/paragraphs_metric_manage.rb +48 -0
  201. data/app/queries/decidim/enhanced_textwork/metrics/votes_metric_manage.rb +52 -0
  202. data/app/queries/decidim/enhanced_textwork/similar_paragraphs.rb +67 -0
  203. data/app/services/decidim/enhanced_textwork/collaborative_draft_search.rb +59 -0
  204. data/app/services/decidim/enhanced_textwork/diff_renderer.rb +74 -0
  205. data/app/services/decidim/enhanced_textwork/paragraph_builder.rb +132 -0
  206. data/app/services/decidim/enhanced_textwork/paragraph_search.rb +85 -0
  207. data/app/validators/paragraph_length_validator.rb +40 -0
  208. data/app/views/decidim/enhanced_textwork/admin/paragraph_answers/_form.html.erb +35 -0
  209. data/app/views/decidim/enhanced_textwork/admin/paragraph_notes/_form.html.erb +8 -0
  210. data/app/views/decidim/enhanced_textwork/admin/paragraph_notes/_paragraph_notes.html.erb +45 -0
  211. data/app/views/decidim/enhanced_textwork/admin/paragraphs/_bulk-actions.html.erb +33 -0
  212. data/app/views/decidim/enhanced_textwork/admin/paragraphs/_form.html.erb +101 -0
  213. data/app/views/decidim/enhanced_textwork/admin/paragraphs/_js-callout.html.erb +6 -0
  214. data/app/views/decidim/enhanced_textwork/admin/paragraphs/_paragraph-tr.html.erb +76 -0
  215. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_assign_to_valuator.html.erb +15 -0
  216. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_dropdown.html.erb +56 -0
  217. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_merge.html.erb +15 -0
  218. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_publish_answers.html.erb +14 -0
  219. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_recategorize.html.erb +15 -0
  220. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_scope-change.html.erb +25 -0
  221. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_split.html.erb +15 -0
  222. data/app/views/decidim/enhanced_textwork/admin/paragraphs/bulk_actions/_unassign_from_valuator.html.erb +15 -0
  223. data/app/views/decidim/enhanced_textwork/admin/paragraphs/edit.html.erb +7 -0
  224. data/app/views/decidim/enhanced_textwork/admin/paragraphs/index.html.erb +84 -0
  225. data/app/views/decidim/enhanced_textwork/admin/paragraphs/new.html.erb +7 -0
  226. data/app/views/decidim/enhanced_textwork/admin/paragraphs/publish_answers.js.erb +12 -0
  227. data/app/views/decidim/enhanced_textwork/admin/paragraphs/show.html.erb +186 -0
  228. data/app/views/decidim/enhanced_textwork/admin/paragraphs/update_category.js.erb +26 -0
  229. data/app/views/decidim/enhanced_textwork/admin/paragraphs/update_scope.js.erb +27 -0
  230. data/app/views/decidim/enhanced_textwork/admin/paragraphs_imports/new.html.erb +37 -0
  231. data/app/views/decidim/enhanced_textwork/admin/participatory_texts/_article-preview.html.erb +16 -0
  232. data/app/views/decidim/enhanced_textwork/admin/participatory_texts/_bulk-actions.html.erb +3 -0
  233. data/app/views/decidim/enhanced_textwork/admin/participatory_texts/index.html.erb +55 -0
  234. data/app/views/decidim/enhanced_textwork/admin/participatory_texts/new_editor.html.erb +39 -0
  235. data/app/views/decidim/enhanced_textwork/admin/participatory_texts/new_import.html.erb +39 -0
  236. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_accept_request_access_form.html.erb +8 -0
  237. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_collaborative_drafts.html.erb +16 -0
  238. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_collaborator_requests.html.erb +20 -0
  239. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_count.html.erb +1 -0
  240. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_edit_form_fields.html.erb +83 -0
  241. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_filters.html.erb +32 -0
  242. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_filters_small_view.html.erb +18 -0
  243. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_new_collaborative_draft_button.html.erb +11 -0
  244. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_reject_request_access_form.html.erb +10 -0
  245. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_request_access_form.html.erb +7 -0
  246. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_wizard_aside.html.erb +13 -0
  247. data/app/views/decidim/enhanced_textwork/collaborative_drafts/_wizard_header.html.erb +14 -0
  248. data/app/views/decidim/enhanced_textwork/collaborative_drafts/edit.html.erb +31 -0
  249. data/app/views/decidim/enhanced_textwork/collaborative_drafts/index.html.erb +23 -0
  250. data/app/views/decidim/enhanced_textwork/collaborative_drafts/index.js.erb +10 -0
  251. data/app/views/decidim/enhanced_textwork/collaborative_drafts/new.html.erb +24 -0
  252. data/app/views/decidim/enhanced_textwork/collaborative_drafts/show.html.erb +128 -0
  253. data/app/views/decidim/enhanced_textwork/paragraph_votes/update_buttons_and_counters.js.erb +41 -0
  254. data/app/views/decidim/enhanced_textwork/paragraphs/_count.html.erb +1 -0
  255. data/app/views/decidim/enhanced_textwork/paragraphs/_dynamic_map_instructions.html.erb +4 -0
  256. data/app/views/decidim/enhanced_textwork/paragraphs/_edit_form_fields.html.erb +115 -0
  257. data/app/views/decidim/enhanced_textwork/paragraphs/_endorsements_card_row.html.erb +0 -0
  258. data/app/views/decidim/enhanced_textwork/paragraphs/_filters.html.erb +48 -0
  259. data/app/views/decidim/enhanced_textwork/paragraphs/_filters_small_view.html.erb +18 -0
  260. data/app/views/decidim/enhanced_textwork/paragraphs/_linked_paragraphs.html.erb +34 -0
  261. data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph.html.erb +1 -0
  262. data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph_badge.html.erb +3 -0
  263. data/app/views/decidim/enhanced_textwork/paragraphs/_paragraph_similar.html.erb +22 -0
  264. data/app/views/decidim/enhanced_textwork/paragraphs/_paragraphs.html.erb +46 -0
  265. data/app/views/decidim/enhanced_textwork/paragraphs/_remaining_votes_count.html.erb +3 -0
  266. data/app/views/decidim/enhanced_textwork/paragraphs/_vote_button.html.erb +61 -0
  267. data/app/views/decidim/enhanced_textwork/paragraphs/_votes_count.html.erb +18 -0
  268. data/app/views/decidim/enhanced_textwork/paragraphs/_voting_rules.html.erb +50 -0
  269. data/app/views/decidim/enhanced_textwork/paragraphs/_wizard_aside.html.erb +20 -0
  270. data/app/views/decidim/enhanced_textwork/paragraphs/_wizard_header.html.erb +42 -0
  271. data/app/views/decidim/enhanced_textwork/paragraphs/compare.html.erb +23 -0
  272. data/app/views/decidim/enhanced_textwork/paragraphs/complete.html.erb +24 -0
  273. data/app/views/decidim/enhanced_textwork/paragraphs/edit.html.erb +31 -0
  274. data/app/views/decidim/enhanced_textwork/paragraphs/edit_draft.html.erb +26 -0
  275. data/app/views/decidim/enhanced_textwork/paragraphs/index.html.erb +56 -0
  276. data/app/views/decidim/enhanced_textwork/paragraphs/index.js.erb +10 -0
  277. data/app/views/decidim/enhanced_textwork/paragraphs/new.html.erb +38 -0
  278. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_index.html.erb +20 -0
  279. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_overview.html.erb +35 -0
  280. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_vote_button.html.erb +53 -0
  281. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_vote_button_chevron.html.erb +72 -0
  282. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_paragraph_votes_count.html.erb +41 -0
  283. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/_view_index.html.erb +10 -0
  284. data/app/views/decidim/enhanced_textwork/paragraphs/participatory_texts/participatory_text.html.erb +29 -0
  285. data/app/views/decidim/enhanced_textwork/paragraphs/preview.html.erb +41 -0
  286. data/app/views/decidim/enhanced_textwork/paragraphs/show.html.erb +143 -0
  287. data/app/views/decidim/enhanced_textwork/versions/index.html.erb +16 -0
  288. data/app/views/decidim/enhanced_textwork/versions/show.html.erb +18 -0
  289. data/config/assets.rb +10 -0
  290. data/config/locales/de.yml +927 -0
  291. data/config/locales/en.yml +967 -0
  292. data/config/locales/todo/am-ET.yml +1 -0
  293. data/config/locales/todo/ar-SA.yml +801 -0
  294. data/config/locales/todo/ar.yml +791 -0
  295. data/config/locales/todo/bg-BG.yml +237 -0
  296. data/config/locales/todo/bg.yml +238 -0
  297. data/config/locales/todo/ca.yml +908 -0
  298. data/config/locales/todo/cs-CZ.yml +787 -0
  299. data/config/locales/todo/cs.yml +969 -0
  300. data/config/locales/todo/da-DK.yml +1 -0
  301. data/config/locales/todo/da.yml +1 -0
  302. data/config/locales/todo/el-GR.yml +1 -0
  303. data/config/locales/todo/el.yml +848 -0
  304. data/config/locales/todo/eo-UY.yml +1 -0
  305. data/config/locales/todo/eo.yml +1 -0
  306. data/config/locales/todo/es-MX.yml +908 -0
  307. data/config/locales/todo/es-PY.yml +908 -0
  308. data/config/locales/todo/es.yml +908 -0
  309. data/config/locales/todo/et-EE.yml +1 -0
  310. data/config/locales/todo/et.yml +1 -0
  311. data/config/locales/todo/eu.yml +717 -0
  312. data/config/locales/todo/fi-pl.yml +763 -0
  313. data/config/locales/todo/fi-plain.yml +920 -0
  314. data/config/locales/todo/fi.yml +920 -0
  315. data/config/locales/todo/fr-CA.yml +936 -0
  316. data/config/locales/todo/fr-LU.yml +903 -0
  317. data/config/locales/todo/fr.yml +936 -0
  318. data/config/locales/todo/ga-IE.yml +275 -0
  319. data/config/locales/todo/gl.yml +808 -0
  320. data/config/locales/todo/hr-HR.yml +1 -0
  321. data/config/locales/todo/hr.yml +1 -0
  322. data/config/locales/todo/hu.yml +847 -0
  323. data/config/locales/todo/id-ID.yml +704 -0
  324. data/config/locales/todo/is-IS.yml +269 -0
  325. data/config/locales/todo/is.yml +274 -0
  326. data/config/locales/todo/it.yml +908 -0
  327. data/config/locales/todo/ja.yml +922 -0
  328. data/config/locales/todo/ko-KR.yml +1 -0
  329. data/config/locales/todo/ko.yml +1 -0
  330. data/config/locales/todo/lb-LU.yml +1 -0
  331. data/config/locales/todo/lb.yml +40 -0
  332. data/config/locales/todo/lt-LT.yml +1 -0
  333. data/config/locales/todo/lt.yml +1 -0
  334. data/config/locales/todo/lv.yml +838 -0
  335. data/config/locales/todo/mt-MT.yml +1 -0
  336. data/config/locales/todo/mt.yml +1 -0
  337. data/config/locales/todo/nl.yml +882 -0
  338. data/config/locales/todo/no.yml +770 -0
  339. data/config/locales/todo/om-ET.yml +1 -0
  340. data/config/locales/todo/pl.yml +927 -0
  341. data/config/locales/todo/pt-BR.yml +908 -0
  342. data/config/locales/todo/pt.yml +945 -0
  343. data/config/locales/todo/ro-RO.yml +886 -0
  344. data/config/locales/todo/ru.yml +379 -0
  345. data/config/locales/todo/si-LK.yml +1 -0
  346. data/config/locales/todo/sk-SK.yml +896 -0
  347. data/config/locales/todo/sk.yml +851 -0
  348. data/config/locales/todo/sl.yml +26 -0
  349. data/config/locales/todo/so-SO.yml +1 -0
  350. data/config/locales/todo/sr-CS.yml +125 -0
  351. data/config/locales/todo/sv.yml +908 -0
  352. data/config/locales/todo/sw-KE.yml +1 -0
  353. data/config/locales/todo/ti-ER.yml +1 -0
  354. data/config/locales/todo/tr-TR.yml +890 -0
  355. data/config/locales/todo/uk.yml +379 -0
  356. data/config/locales/todo/vi-VN.yml +1 -0
  357. data/config/locales/todo/vi.yml +1 -0
  358. data/config/locales/todo/zh-CN.yml +857 -0
  359. data/config/locales/todo/zh-TW.yml +1 -0
  360. data/db/migrate/20161212110850_create_decidim_paragraphs.rb +16 -0
  361. data/db/migrate/20170112115253_create_paragraph_votes.rb +14 -0
  362. data/db/migrate/20170113114245_add_enhanced_textwork_text_search_indexes.rb +8 -0
  363. data/db/migrate/20170118120151_add_counter_cache_votes_to_paragraphs.rb +7 -0
  364. data/db/migrate/20170120151202_add_user_group_id_to_paragraphs.rb +7 -0
  365. data/db/migrate/20170131092413_add_answers_to_paragraphs.rb +9 -0
  366. data/db/migrate/20170205082832_add_index_to_decidim_enhanced_textwork_paragraphs_paragraph_votes_count.rb +9 -0
  367. data/db/migrate/20170215113152_create_paragraph_reports.rb +16 -0
  368. data/db/migrate/20170215131720_add_report_count_to_paragraphs.rb +7 -0
  369. data/db/migrate/20170215132030_add_reference_to_paragraphs.rb +13 -0
  370. data/db/migrate/20170220152416_add_hidden_at_to_paragraphs.rb +7 -0
  371. data/db/migrate/20170228105156_add_geolocalization_fields_to_paragraphs.rb +9 -0
  372. data/db/migrate/20170307085300_migrate_paragraph_reports_data_to_reports.rb +24 -0
  373. data/db/migrate/20170410073742_remove_not_null_reference_paragraphs.rb +7 -0
  374. data/db/migrate/20170612101809_migrate_paragraphs_category.rb +15 -0
  375. data/db/migrate/20171201115434_create_paragraph_endorsements.rb +16 -0
  376. data/db/migrate/20171201122623_add_counter_cache_endorsements_to_paragraphs.rb +8 -0
  377. data/db/migrate/20171212102250_enable_pg_trgm_extension_for_paragraphs.rb +18 -0
  378. data/db/migrate/20171220084719_add_published_at_to_paragraphs.rb +14 -0
  379. data/db/migrate/20180111110204_create_decidim_paragraph_notes.rb +15 -0
  380. data/db/migrate/20180115155220_add_index_created_at_paragraph_notes.rb +7 -0
  381. data/db/migrate/20180305133811_rename_features_to_components_at_paragraphs.rb +11 -0
  382. data/db/migrate/20180326091532_create_decidim_enhanced_textwork_collaborative_drafts.rb +29 -0
  383. data/db/migrate/20180413135249_fix_nil_threshold_per_paragraph.rb +18 -0
  384. data/db/migrate/20180529101323_add_counter_cache_coauthorships_to_paragraphs.rb +8 -0
  385. data/db/migrate/20180529110230_move_enhanced_textwork_authorships_to_coauthorships.rb +28 -0
  386. data/db/migrate/20180529110830_remove_authorships_from_paragraphs.rb +8 -0
  387. data/db/migrate/20180613151121_create_enhanced_textwork_collaborative_draft_collaborator_requests.rb +12 -0
  388. data/db/migrate/20180711074134_add_enhanced_textwork_counter_cache_coauthorships_to_collaborative_drafts.rb +7 -0
  389. data/db/migrate/20180711075004_remove_index_counter_cache_coauthorships_to_paragraphs.rb +7 -0
  390. data/db/migrate/20180927111721_create_enhanced_textwork_participatory_texts.rb +13 -0
  391. data/db/migrate/20180930125321_add_participatory_text_level_to_paragraphs.rb +7 -0
  392. data/db/migrate/20180930125321_add_position_to_paragraphs.rb +7 -0
  393. data/db/migrate/20181003074440_fix_user_groups_ids_in_paragraphs_endorsements.rb +20 -0
  394. data/db/migrate/20181010114622_add_enhanced_textwork_temporary_votes.rb +9 -0
  395. data/db/migrate/20181016132225_add_enhanced_textwork_organization_as_author.rb +13 -0
  396. data/db/migrate/20181017084221_make_author_polymorhpic_for_paragraph_endorsements.rb +31 -0
  397. data/db/migrate/20181026073215_add_enhanced_textwork_created_in_meeting.rb +7 -0
  398. data/db/migrate/20190215113158_use_enhanced_textwork_md5_indexes.rb +17 -0
  399. data/db/migrate/20191206154128_add_endorsements_counter_cache_to_paragraphs.rb +7 -0
  400. data/db/migrate/20200120215928_move_paragraph_endorsements_to_core_endorsements.rb +54 -0
  401. data/db/migrate/20200120230130_drop_paragraph_endorsements.rb +8 -0
  402. data/db/migrate/20200203111239_add_paragraph_valuation_assignments.rb +12 -0
  403. data/db/migrate/20200210135152_add_costs_to_paragraphs.rb +9 -0
  404. data/db/migrate/20200212120110_sync_paragraphs_state_with_amendments_state.rb +28 -0
  405. data/db/migrate/20200227175922_add_state_published_at_to_paragraphs.rb +7 -0
  406. data/db/migrate/20200306123652_publish_existing_paragraphs_state.rb +15 -0
  407. data/db/migrate/20200708091228_move_paragraphs_fields_to_i18n.rb +86 -0
  408. data/db/migrate/20200730131631_move_paragraph_endorsed_event_notifications_to_resource_endorsed_event.rb +20 -0
  409. data/db/migrate/20200827154156_add_commentable_counter_cache_to_paragraphs.rb +12 -0
  410. data/db/migrate/20201002085508_fix_paragraphs_data.rb +36 -0
  411. data/db/migrate/20210127115628_fix_answered_paragraphs_after_copy.rb +14 -0
  412. data/db/migrate/20210310102839_add_followable_counter_cache_to_paragraphs.rb +16 -0
  413. data/db/migrate/20210310120812_add_enhanced_textwork_followable_counter_cache_to_collaborative_drafts.rb +16 -0
  414. data/db/migrate/20210318082934_fix_counters_for_copied_paragraphs.rb +19 -0
  415. data/lib/decidim/api/paragraph_input_filter.rb +29 -0
  416. data/lib/decidim/api/paragraph_input_sort.rb +20 -0
  417. data/lib/decidim/api/paragraph_type.rb +56 -0
  418. data/lib/decidim/api/paragraphs_type.rb +43 -0
  419. data/lib/decidim/content_parsers/paragraph_parser.rb +101 -0
  420. data/lib/decidim/content_renderers/paragraph_renderer.rb +33 -0
  421. data/lib/decidim/enhanced_textwork/admin.rb +10 -0
  422. data/lib/decidim/enhanced_textwork/admin_engine.rb +52 -0
  423. data/lib/decidim/enhanced_textwork/api.rb +10 -0
  424. data/lib/decidim/enhanced_textwork/commentable_collaborative_draft.rb +38 -0
  425. data/lib/decidim/enhanced_textwork/commentable_paragraph.rb +36 -0
  426. data/lib/decidim/enhanced_textwork/component.rb +448 -0
  427. data/lib/decidim/enhanced_textwork/doc_to_markdown.rb +50 -0
  428. data/lib/decidim/enhanced_textwork/engine.rb +204 -0
  429. data/lib/decidim/enhanced_textwork/html_to_markdown.rb +22 -0
  430. data/lib/decidim/enhanced_textwork/markdown_to_paragraphs.rb +153 -0
  431. data/lib/decidim/enhanced_textwork/odt_to_markdown.rb +46 -0
  432. data/lib/decidim/enhanced_textwork/paragraph_creator.rb +98 -0
  433. data/lib/decidim/enhanced_textwork/paragraph_serializer.rb +95 -0
  434. data/lib/decidim/enhanced_textwork/participatory_text_section.rb +21 -0
  435. data/lib/decidim/enhanced_textwork/test/capybara_paragraphs_picker.rb +59 -0
  436. data/lib/decidim/enhanced_textwork/test/factories.rb +492 -0
  437. data/lib/decidim/enhanced_textwork/valuatable.rb +21 -0
  438. data/lib/decidim/enhanced_textwork/version.rb +14 -0
  439. data/lib/decidim/enhanced_textwork.rb +58 -0
  440. data/lib/decidim/exporters/word.rb +309 -0
  441. metadata +704 -0
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module EnhancedTextwork
5
+ # This cell renders the button and modal for the publish/withdraw
6
+ # actions in the details of a collaborative draft
7
+ # the `cell` should be called with an :action argument, to show relative info:
8
+ # - :publish
9
+ # - :withdraw
10
+ class IrreversibleActionModalCell < Decidim::ViewModel
11
+ def show
12
+ return unless action.presence
13
+
14
+ render :show
15
+ end
16
+
17
+ private
18
+
19
+ def action
20
+ options[:action]
21
+ end
22
+
23
+ def publish?
24
+ action == :publish
25
+ end
26
+
27
+ def withdraw?
28
+ action == :withdraw
29
+ end
30
+
31
+ def modal_id
32
+ @modal_id ||= "#{SecureRandom.uuid}-#{action}-irreversible-action-modal"
33
+ end
34
+
35
+ def button_reveal_modal
36
+ data = { open: modal_id }
37
+ label = t(action, scope: "decidim.enhanced_textwork.collaborative_drafts.show")
38
+ css = publish? ? "button expanded button--sc" : "secondary"
39
+
40
+ button_tag label, type: "button", class: css, data: data
41
+ end
42
+
43
+ def modal_title
44
+ t("title", scope: "decidim.enhanced_textwork.collaborative_drafts.collaborative_draft.#{action}.irreversible_action_modal")
45
+ end
46
+
47
+ def modal_body
48
+ t("body", scope: "decidim.enhanced_textwork.collaborative_drafts.collaborative_draft.#{action}.irreversible_action_modal")
49
+ end
50
+
51
+ def button_continue
52
+ label = t("ok", scope: "decidim.enhanced_textwork.collaborative_drafts.collaborative_draft.#{action}.irreversible_action_modal")
53
+ path = resource_path action
54
+ css = "button expanded"
55
+ button_to label, path, class: css, form_class: "columns medium-6"
56
+ end
57
+
58
+ def close_label
59
+ t("cancel", scope: "decidim.enhanced_textwork.collaborative_drafts.collaborative_draft.#{action}.irreversible_action_modal")
60
+ end
61
+
62
+ def button_cancel
63
+ tag.div(class: "columns medium-6") do
64
+ button_tag type: "button", class: "clear button secondary expanded", "data-close": "" do
65
+ close_label
66
+ end
67
+ end
68
+ end
69
+
70
+ def resource_path(action)
71
+ @resource_path ||= decidim_enhanced_textwork.send("#{action}_collaborative_draft_path",
72
+ id: model.id)
73
+ end
74
+
75
+ def decidim_enhanced_textwork
76
+ Decidim::EngineRouter.main_proxy(model.component)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module EnhancedTextwork
5
+ # A cell to display when actions happen on a paragraph.
6
+ class ParagraphActivityCell < ActivityCell
7
+ def title
8
+ case action
9
+ when "update"
10
+ I18n.t(
11
+ "decidim.enhanced_textwork.last_activity.paragraph_updated_at_html",
12
+ link: participatory_space_link
13
+ )
14
+ else
15
+ I18n.t(
16
+ "decidim.enhanced_textwork.last_activity.new_paragraph_at_html",
17
+ link: participatory_space_link
18
+ )
19
+ end
20
+ end
21
+
22
+ def resource_link_text
23
+ decidim_html_escape(presenter.title)
24
+ end
25
+
26
+ def description
27
+ strip_tags(presenter.body(links: true))
28
+ end
29
+
30
+ def presenter
31
+ @presenter ||= Decidim::EnhancedTextwork::ParagraphPresenter.new(resource)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders the paragraph card for an instance of a Paragraph
8
+ # the default size is the Medium Card (:m)
9
+ class ParagraphCell < Decidim::ViewModel
10
+ include ParagraphCellsHelper
11
+ include Cell::ViewModel::Partial
12
+ include Messaging::ConversationHelper
13
+
14
+ def show
15
+ cell card_size, model, options
16
+ end
17
+
18
+ private
19
+
20
+ def card_size
21
+ "decidim/enhanced_textwork/paragraph_m"
22
+ end
23
+
24
+ def resource_path
25
+ resource_locator(model).path(filter_link_params)
26
+ end
27
+
28
+ def current_participatory_space
29
+ model.component.participatory_space
30
+ end
31
+
32
+ def current_component
33
+ model.component
34
+ end
35
+
36
+ def component_name
37
+ translated_attribute model.component.name
38
+ end
39
+
40
+ def component_type_name
41
+ model.class.model_name.human
42
+ end
43
+
44
+ def participatory_space_name
45
+ translated_attribute current_participatory_space.title
46
+ end
47
+
48
+ def participatory_space_type_name
49
+ translated_attribute current_participatory_space.model_name.human
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders the link to the source collaborative draft of a paragraph.
8
+ class ParagraphLinkToCollaborativeDraftCell < ParagraphLinkedResourcesCell
9
+ private
10
+
11
+ def linked_resource
12
+ @linked_resource ||= model.linked_resources(:collaborative_draft, "created_from_collaborative_draft").first
13
+ end
14
+
15
+ def link_to_resource
16
+ link_to resource_locator(linked_resource).path, class: "link" do
17
+ t("link_to_collaborative_draft_text", scope: "decidim.enhanced_textwork.paragraphs.show")
18
+ end
19
+ end
20
+
21
+ def link_help_text
22
+ t("link_to_collaborative_draft_help_text", scope: "decidim.enhanced_textwork.paragraphs.show")
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ <div class="text-center mt-sm">
2
+ <%= link_to_resource %>
3
+
4
+ <div class="text-center">
5
+ <small>
6
+ <%= link_help_text %>
7
+ </small>
8
+ </div>
9
+ </div>
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders the link to the rejected emendation promoted to paragraph.
8
+ class ParagraphLinkToRejectedEmendationCell < ParagraphLinkedResourcesCell
9
+ private
10
+
11
+ def linked_resource
12
+ @linked_resource ||= model.linked_promoted_resource
13
+ end
14
+
15
+ def link_to_resource
16
+ link_to resource_locator(linked_resource).path, class: "link" do
17
+ if model.emendation?
18
+ t("link_to_paragraph_from_emendation_text", scope: "decidim.enhanced_textwork.paragraphs.show")
19
+ else
20
+ t("link_to_promoted_emendation_text", scope: "decidim.enhanced_textwork.paragraphs.show")
21
+ end
22
+ end
23
+ end
24
+
25
+ def link_help_text
26
+ if model.emendation?
27
+ t("link_to_paragraph_from_emendation_help_text", scope: "decidim.enhanced_textwork.paragraphs.show")
28
+ else
29
+ t("link_to_promoted_emendation_help_text", scope: "decidim.enhanced_textwork.paragraphs.show")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ <div class="text-center mt-sm">
2
+ <%= link_to_resource %>
3
+
4
+ <div class="text-center">
5
+ <small>
6
+ <%= link_help_text %>
7
+ </small>
8
+ </div>
9
+ </div>
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders the linked resource of a paragraph.
8
+ class ParagraphLinkedResourcesCell < Decidim::ViewModel
9
+ def show
10
+ render if linked_resource
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ <% if has_link_to_resource? %>
2
+ <div class="card__footer">
3
+ <div class="card__support">
4
+ <% if has_actions? %>
5
+ <% if !current_settings.votes_hidden? %>
6
+ <%= cell(
7
+ "decidim/progress_bar",
8
+ progress_bar_progress,
9
+ total: progress_bar_total,
10
+ units_name: "decidim.enhanced_textwork.paragraphs.votes_count.count",
11
+ element_id: "paragraph-#{model.id}-votes-count",
12
+ subtitle_text: progress_bar_subtitle_text,
13
+ small: true
14
+ ) %>
15
+ <% end %>
16
+ <%= render partial: "decidim/enhanced_textwork/paragraphs/vote_button.html", locals: { paragraph: model, from_paragraphs_list: true } %>
17
+ <% elsif has_footer? %>
18
+ <div class="card__support__data"></div>
19
+ <%= link_to resource_path, class: "card__button button--sc light button small" do %>
20
+ <%= t("decidim.enhanced_textwork.paragraphs.paragraph.view_paragraph") %>
21
+ <span class="show-for-sr"><%= title %></span>
22
+ <% end %>
23
+ <% end %>
24
+ </div>
25
+ </div>
26
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render partial: "decidim/shared/tags.html", locals: { resource: model, tags_class_extra: "tags--paragraph" } %>
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders a paragraph with its M-size card.
8
+ class ParagraphMCell < Decidim::CardMCell
9
+ include ParagraphCellsHelper
10
+
11
+ delegate :current_locale, to: :controller
12
+
13
+ def badge
14
+ render if has_badge?
15
+ end
16
+
17
+ private
18
+
19
+ def preview?
20
+ options[:preview]
21
+ end
22
+
23
+ def title
24
+ decidim_html_escape(present(model).title)
25
+ end
26
+
27
+ def body
28
+ decidim_sanitize(present(model).body)
29
+ end
30
+
31
+ def has_state?
32
+ model.published?
33
+ end
34
+
35
+ def has_badge?
36
+ published_state? || withdrawn?
37
+ end
38
+
39
+ def has_link_to_resource?
40
+ model.published?
41
+ end
42
+
43
+ def has_footer?
44
+ return false if model.emendation?
45
+
46
+ true
47
+ end
48
+
49
+ def description
50
+ strip_tags(body).truncate(100, separator: /\s/)
51
+ end
52
+
53
+ def badge_classes
54
+ return super unless options[:full_badge]
55
+
56
+ state_classes.concat(["label", "paragraph-status"]).join(" ")
57
+ end
58
+
59
+ def base_statuses
60
+ @base_statuses ||= begin
61
+ if endorsements_visible?
62
+ [:endorsements_count, :comments_count]
63
+ else
64
+ [:comments_count]
65
+ end
66
+ end
67
+ end
68
+
69
+ def statuses
70
+ return [] if preview?
71
+ return base_statuses if model.draft?
72
+ return [:creation_date] + base_statuses if !has_link_to_resource? || !can_be_followed?
73
+
74
+ [:creation_date, :follow] + base_statuses
75
+ end
76
+
77
+ def creation_date_status
78
+ explanation = tag.strong(t("activemodel.attributes.common.created_at"))
79
+ "#{explanation}<br>#{l(model.published_at.to_date, format: :decidim_short)}"
80
+ end
81
+
82
+ def endorsements_count_status
83
+ return endorsements_count unless has_link_to_resource?
84
+
85
+ link_to resource_path, "aria-label" => "#{t("decidim.endorsable.endorsements_count")}: #{model.endorsements_count}", title: t("decidim.endorsable.endorsements_count") do
86
+ endorsements_count
87
+ end
88
+ end
89
+
90
+ def endorsements_count
91
+ with_tooltip t("decidim.endorsable.endorsements") do
92
+ "#{icon("bullhorn", class: "icon--small")} #{model.endorsements_count}"
93
+ end
94
+ end
95
+
96
+ def progress_bar_progress
97
+ model.paragraph_votes_count || 0
98
+ end
99
+
100
+ def progress_bar_total
101
+ model.maximum_votes || 0
102
+ end
103
+
104
+ def progress_bar_subtitle_text
105
+ if progress_bar_progress >= progress_bar_total
106
+ t("decidim.enhanced_textwork.paragraphs.votes_count.most_popular_paragraph")
107
+ else
108
+ t("decidim.enhanced_textwork.paragraphs.votes_count.need_more_votes")
109
+ end
110
+ end
111
+
112
+ def can_be_followed?
113
+ !model.withdrawn?
114
+ end
115
+
116
+ def endorsements_visible?
117
+ model.component.current_settings.endorsements_enabled?
118
+ end
119
+
120
+ def has_image?
121
+ @has_image ||= model.attachments.find_by("content_type like '%image%'").present?
122
+ end
123
+
124
+ def resource_image_path
125
+ @resource_image_path ||= has_image? ? model.attachments.find_by("content_type like '%image%'").url : nil
126
+ end
127
+
128
+ def cache_hash
129
+ hash = []
130
+ hash << "decidim/enhanced_textwork/paragraph_m"
131
+ hash << I18n.locale.to_s
132
+ hash << model.cache_key_with_version
133
+ hash << model.paragraph_votes_count
134
+ hash << model.endorsements_count
135
+ hash << model.comments_count
136
+ hash << Digest::MD5.hexdigest(model.component.cache_key_with_version)
137
+ hash << Digest::MD5.hexdigest(resource_image_path) if resource_image_path
138
+ hash << render_space? ? 1 : 0
139
+ if current_user
140
+ hash << current_user.cache_key_with_version
141
+ hash << current_user.follows?(model) ? 1 : 0
142
+ end
143
+ hash << model.follows_count
144
+ hash << Digest::MD5.hexdigest(model.authors.map(&:cache_key_with_version).to_s)
145
+ hash << (model.must_render_translation?(model.organization) ? 1 : 0) if model.respond_to?(:must_render_translation?)
146
+ hash << model.component.participatory_space.active_step.id if model.component.participatory_space.has_steps?
147
+
148
+ hash.join("/")
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,33 @@
1
+ <figure>
2
+ <ul class="tags tags--paragraph tags--list">
3
+ <% if category.present? %>
4
+ <li>
5
+ <%= link_to resource_locator(model).index(filter: { category_id: [category.id.to_s] }), title: t("decidim.tags.filter_results_for_category", resource: translated_attribute(category.name)) do %>
6
+ <span class="show-for-sr"><%= t "decidim.tags.filter_results_for_category", resource: translated_attribute(category.name) %></span>
7
+ <span aria-hidden="true"><%= translated_attribute(category.name) %></span>
8
+ <% end %>
9
+ <% if previous_category.present? && show_previous_category? %>
10
+ &nbsp;
11
+ <small class="text-small">
12
+ <%= t("changed_from", scope: "decidim.enhanced_textwork.paragraphs.tags", previous_name: "#{previous_category.translated_name}").html_safe %>
13
+ </small>
14
+ <% end %>
15
+ </li>
16
+ <% end %>
17
+
18
+ <% if has_visible_scopes?(model) %>
19
+ <li>
20
+ <%= link_to resource_locator(model).index(filter: { scope_id: [scope.id] }), title: t("decidim.tags.filter_results_for_scope", resource: translated_attribute(scope.name)) do %>
21
+ <span class="show-for-sr"><%= t "decidim.tags.filter_results_for_scope", resource: translated_attribute(scope.name) %></span>
22
+ <span aria-hidden="true"><%= translated_attribute(scope.name) %></span>
23
+ <% end %>
24
+ <% if previous_scope.present? && show_previous_scope? %>
25
+ &nbsp;
26
+ <small class="text-small">
27
+ <%= t("changed_from", scope: "decidim.enhanced_textwork.paragraphs.tags", previous_name: "#{translated_attribute(previous_scope.name)}").html_safe %>
28
+ </small>
29
+ <% end %>
30
+ </li>
31
+ <% end %>
32
+ </ul>
33
+ </figure>
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders the tags for a paragraph.
8
+ class ParagraphTagsCell < Decidim::ViewModel
9
+ include ParagraphCellsHelper
10
+
11
+ property :category
12
+ property :previous_category
13
+ property :scope
14
+ property :previous_scope
15
+
16
+ def show
17
+ render if has_category_or_scopes?
18
+ end
19
+
20
+ private
21
+
22
+ def show_previous_category?
23
+ options[:show_previous_category].to_s != "false"
24
+ end
25
+
26
+ def show_previous_scope?
27
+ options[:show_previous_scope].to_s != "false"
28
+ end
29
+
30
+ def has_category_or_scopes?
31
+ category.present? || has_visible_scopes?(model)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ <ul id="paragraphs_list">
2
+ <% decorated_paragraphs do |paragraph| %>
3
+ <li>
4
+ <label><input type="checkbox" data-picker-text="<%= paragraph.id_and_title(html_escape: true) %>" data-picker-url="<%= picker_path %>" value="<%= paragraph.id %>" data-picker-choose> <%= paragraph.id_and_title(html_escape: true) %> (<%= paragraph.reference %>)</label>
5
+ </li>
6
+ <% end %>
7
+ <% if more_paragraphs? %>
8
+ <li><div class="callout warning"><%= t("paragraphs_picker.more_paragraphs", scope: "decidim.enhanced_textwork", number: more_paragraphs_count) %></div>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ <div id="no_paragraphs" class="callout warning"><%= t("paragraphs_picker.no_paragraphs", scope: "decidim.enhanced_textwork") %></div>
@@ -0,0 +1,14 @@
1
+ <div class="picker-header">
2
+ <h1><%= t("paragraphs_picker.choose_paragraphs", scope: "decidim.enhanced_textwork") %></h1>
3
+ <input type="text" name="paragraphs-filter" id="paragraphs_filter" placeholder="<%= t("decidim.admin.filters.search_placeholder.id_string_or_title_cont", collection: paragraphs_collection_name) %>">
4
+ </div>
5
+ <div class="picker-content picker-list" data-picker-path="<%= picker_path %>" data-picker-more="<%= more_paragraphs? %>">
6
+ <%= render :paragraphs %>
7
+ </div>
8
+ <div class="picker-footer">
9
+ <div class="buttons button--double">
10
+ <a class="button" data-close=""><%= t("paragraphs_picker.close", scope: "decidim.enhanced_textwork") %></a>
11
+ </div>
12
+ </div>
13
+
14
+ <%= javascript_pack_tag "decidim_enhanced_textwork_admin" %>
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cell/partial"
4
+
5
+ module Decidim
6
+ module EnhancedTextwork
7
+ # This cell renders a paragraphs picker.
8
+ class ParagraphsPickerCell < Decidim::ViewModel
9
+ MAX_PARAGRAPHS = 1000
10
+
11
+ def show
12
+ if filtered?
13
+ render :paragraphs
14
+ else
15
+ render
16
+ end
17
+ end
18
+
19
+ alias component model
20
+
21
+ def filtered?
22
+ !search_text.nil?
23
+ end
24
+
25
+ def picker_path
26
+ request.path
27
+ end
28
+
29
+ def search_text
30
+ params[:q]
31
+ end
32
+
33
+ def more_paragraphs?
34
+ @more_paragraphs ||= more_paragraphs_count.positive?
35
+ end
36
+
37
+ def more_paragraphs_count
38
+ @more_paragraphs_count ||= paragraphs_count - MAX_PARAGRAPHS
39
+ end
40
+
41
+ def paragraphs_count
42
+ @paragraphs_count ||= filtered_paragraphs.count
43
+ end
44
+
45
+ def decorated_paragraphs
46
+ filtered_paragraphs.limit(MAX_PARAGRAPHS).each do |paragraph|
47
+ yield Decidim::EnhancedTextwork::ParagraphPresenter.new(paragraph)
48
+ end
49
+ end
50
+
51
+ def filtered_paragraphs
52
+ @filtered_paragraphs ||= if filtered?
53
+ paragraphs.where("title::text ILIKE ?", "%#{search_text}%")
54
+ .or(paragraphs.where("reference ILIKE ?", "%#{search_text}%"))
55
+ .or(paragraphs.where("id::text ILIKE ?", "%#{search_text}%"))
56
+ else
57
+ paragraphs
58
+ end
59
+ end
60
+
61
+ def paragraphs
62
+ @paragraphs ||= Decidim.find_resource_manifest(:paragraphs).try(:resource_scope, component)
63
+ &.published
64
+ &.order(id: :asc)
65
+ end
66
+
67
+ def paragraphs_collection_name
68
+ Decidim::EnhancedTextwork::Paragraph.model_name.human(count: 2)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,33 @@
1
+ <div class="columns mediumlarge-4 hidden-section p-sm">
2
+ <div class="medium-8">
3
+ <%= follow_button_for(model, true) %>
4
+ <% if amendmendment_creation_enabled? || visible_emendations.any? %>
5
+ <div class="button-group button-group--collapse mb-s row collapse amend-buttons">
6
+ <%= link_to resource_amendments_path, class: "column medium-4 button light secondary" do %>
7
+ <%= visible_emendations.count %>
8
+ <% end %>
9
+ <%= link_to amend_resource_path, class: "column button hollow secondary button--sc", disabled: amend_button_disabled? do %>
10
+ <%= t("amend", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons") %>
11
+ <% end %>
12
+ </div>
13
+ <% end %>
14
+ <% if component_settings.comments_enabled? %>
15
+ <div class="button-group button-group--collapse row collapse comment-buttons">
16
+ <% if current_settings.comments_blocked? %>
17
+ <%= content_tag :button, class: "column medium-4 button light secondary" do %>
18
+ <%= icon "comment-square", class: "icon--small", aria_label: t("comments", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons"), role: "img" %>
19
+ <%= model.comments_count %>
20
+ <% end %>
21
+ <%= content_tag :button, t("comment", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons"), class: "column button hollow secondary button--sc disabled", disabled: true, title: t("comment", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons") %>
22
+ <% else %>
23
+ <%= link_to resource_comments_path, class: "column medium-4 button light secondary" do %>
24
+ <%= icon "comment-square", class: "icon--small", aria_label: t("comments", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons"), role: "img" %> <%= model.comments_count %>
25
+ <% end %>
26
+ <%= link_to resource_comments_path, class: "column button hollow secondary button--sc" do %>
27
+ <%= t("comment", scope: "decidim.enhanced_textwork.participatory_text_paragraph.buttons") %>
28
+ <% end %>
29
+ <% end %>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+ </div>