decidim 0.0.8.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim might be problematic. Click here for more details.

Files changed (292) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -21
  3. data/.codeclimate.yml +10 -6
  4. data/.eslintignore +1 -0
  5. data/.gitignore +1 -1
  6. data/.rubocop.yml +38 -20
  7. data/.travis.yml +0 -1
  8. data/Gemfile +6 -9
  9. data/Gemfile.lock +165 -205
  10. data/Rakefile +1 -1
  11. data/codecov.yml +5 -71
  12. data/crowdin.yaml +1 -1
  13. data/decidim-admin/app/assets/stylesheets/decidim/admin/_decidim.scss +9 -2
  14. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_action-icon.scss +7 -0
  15. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_cards.scss +6 -0
  16. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_editor.scss +1 -0
  17. data/decidim-admin/app/assets/stylesheets/decidim/admin/{_sidebar.scss → extra/_sidebar.scss} +0 -0
  18. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_action-icon.scss +23 -0
  19. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_cards.scss +0 -7
  20. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_icons.scss +4 -2
  21. data/decidim-admin/app/assets/stylesheets/decidim/admin/modules/_modules.scss +0 -1
  22. data/decidim-admin/app/assets/stylesheets/decidim/admin/{modules/_datepicker.scss → plugins/_foundation-datepicker.scss} +1 -1
  23. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/_constants.scss +5 -0
  24. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/_math.scss +45 -0
  25. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_acos.scss +12 -0
  26. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_asin.scss +12 -0
  27. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_atan.scss +28 -0
  28. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_atan2.scss +37 -0
  29. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_cos.scss +13 -0
  30. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_cot.scss +9 -0
  31. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_csc.scss +9 -0
  32. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_exp.scss +12 -0
  33. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_fact.scss +18 -0
  34. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_frexp.scss +21 -0
  35. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_ldexp.scss +17 -0
  36. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_log.scss +34 -0
  37. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_pow.scss +28 -0
  38. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sec.scss +9 -0
  39. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sin.scss +9 -0
  40. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_sqrt.scss +16 -0
  41. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/functions/_tan.scss +9 -0
  42. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_deg-to-rad.scss +4 -0
  43. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_rad-to-deg.scss +4 -0
  44. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_strip-unit.scss +8 -0
  45. data/decidim-admin/app/assets/stylesheets/decidim/admin/vendor/mathsass/helpers/_unitless-rad.scss +13 -0
  46. data/decidim-admin/app/commands/decidim/admin/create_participatory_process.rb +23 -17
  47. data/decidim-admin/app/commands/decidim/admin/create_participatory_process_group.rb +1 -1
  48. data/decidim-admin/app/controllers/decidim/admin/moderations_controller.rb +4 -4
  49. data/decidim-admin/app/controllers/decidim/admin/participatory_processes_controller.rb +1 -1
  50. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +6 -2
  51. data/decidim-admin/app/forms/decidim/admin/participatory_process_form.rb +5 -0
  52. data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +1 -1
  53. data/decidim-admin/app/helpers/decidim/admin/attributes_display_helper.rb +1 -1
  54. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +5 -1
  55. data/decidim-admin/app/views/decidim/admin/moderations/_report.html.erb +11 -0
  56. data/decidim-admin/app/views/decidim/admin/moderations/index.html.erb +22 -24
  57. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +3 -0
  58. data/decidim-admin/config/i18n-tasks.yml +1 -0
  59. data/decidim-admin/config/locales/ca.yml +7 -3
  60. data/decidim-admin/config/locales/en.yml +6 -2
  61. data/decidim-admin/config/locales/es.yml +7 -3
  62. data/decidim-admin/config/locales/eu.yml +4 -3
  63. data/decidim-admin/config/locales/fi.yml +4 -3
  64. data/decidim-admin/config/locales/fr.yml +389 -2
  65. data/decidim-admin/config/locales/nl.yml +4 -1
  66. data/decidim-admin/decidim-admin.gemspec +3 -3
  67. data/decidim-admin/lib/decidim/admin/test/manage_attachments_examples.rb +2 -2
  68. data/decidim-admin/spec/commands/activate_participatory_process_step_spec.rb +1 -0
  69. data/decidim-admin/spec/commands/create_category_spec.rb +1 -1
  70. data/decidim-admin/spec/commands/create_feature_spec.rb +7 -5
  71. data/decidim-admin/spec/commands/create_participatory_process_admin_spec.rb +2 -1
  72. data/decidim-admin/spec/commands/create_participatory_process_spec.rb +14 -6
  73. data/decidim-admin/spec/commands/create_scope_spec.rb +3 -2
  74. data/decidim-admin/spec/commands/deactivate_participatory_process_step_spec.rb +1 -0
  75. data/decidim-admin/spec/commands/destroy_feature_spec.rb +1 -0
  76. data/decidim-admin/spec/commands/destroy_participatory_process_step_spec.rb +1 -0
  77. data/decidim-admin/spec/commands/publish_participatory_process_spec.rb +1 -0
  78. data/decidim-admin/spec/commands/reorder_participatory_process_steps_spec.rb +1 -0
  79. data/decidim-admin/spec/commands/unpublish_participatory_process_spec.rb +1 -0
  80. data/decidim-admin/spec/commands/update_feature_spec.rb +7 -5
  81. data/decidim-admin/spec/commands/update_participatory_process_spec.rb +5 -5
  82. data/decidim-admin/spec/commands/update_scope_spec.rb +3 -2
  83. data/decidim-admin/spec/factories.rb +1 -0
  84. data/decidim-admin/spec/features/admin_invite_spec.rb +5 -5
  85. data/decidim-admin/spec/features/admin_manages_newsletters_spec.rb +5 -5
  86. data/decidim-admin/spec/features/admin_manages_organization_admins_spec.rb +2 -2
  87. data/decidim-admin/spec/features/admin_manages_organization_scopes_spec.rb +3 -3
  88. data/decidim-admin/spec/features/admin_manages_organization_spec.rb +7 -11
  89. data/decidim-admin/spec/features/admin_manages_participatory_process_groups_spec.rb +2 -2
  90. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +3 -3
  91. data/decidim-admin/spec/features/static_pages_spec.rb +8 -7
  92. data/decidim-admin/spec/forms/newsletter_form_spec.rb +2 -2
  93. data/decidim-admin/spec/forms/organization_form_spec.rb +3 -3
  94. data/decidim-admin/spec/forms/participatory_process_form_spec.rb +4 -4
  95. data/decidim-admin/spec/forms/participatory_process_step_form_spec.rb +1 -1
  96. data/decidim-admin/spec/forms/participatory_process_user_role_form_spec.rb +1 -1
  97. data/decidim-admin/spec/forms/scope_form_spec.rb +1 -1
  98. data/decidim-admin/spec/helpers/aria_selected_link_to_helper_spec.rb +1 -0
  99. data/decidim-admin/spec/helpers/feature_settings_helper_spec.rb +1 -0
  100. data/decidim-admin/spec/jobs/newsletter_delivery_job_spec.rb +2 -2
  101. data/decidim-admin/spec/queries/process_admins_spec.rb +1 -1
  102. data/decidim-admin/spec/shared/manage_process_admins_examples.rb +2 -2
  103. data/decidim-admin/spec/shared/manage_process_categories_examples.rb +3 -3
  104. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +5 -5
  105. data/decidim-admin/spec/shared/manage_processes_examples.rb +4 -4
  106. data/decidim-admin/spec/shared/participatory_admin_shared_context.rb +1 -0
  107. data/decidim-admin/spec/spec_helper.rb +1 -0
  108. data/decidim-admin/spec/views/decidim/static_pages/_form.html.erb_spec.rb +1 -0
  109. data/decidim-api/app/controllers/decidim/api/application_controller.rb +1 -1
  110. data/decidim-api/decidim-api.gemspec +1 -1
  111. data/decidim-api/spec/factories.rb +1 -0
  112. data/decidim-api/spec/spec_helper.rb +1 -0
  113. data/decidim-budgets/app/queries/decidim/budgets/filtered_projects.rb +36 -0
  114. data/decidim-budgets/config/locales/ca.yml +1 -0
  115. data/decidim-budgets/config/locales/en.yml +1 -0
  116. data/decidim-budgets/config/locales/es.yml +1 -0
  117. data/decidim-budgets/config/locales/fr.yml +35 -3
  118. data/decidim-budgets/decidim-budgets.gemspec +2 -2
  119. data/decidim-budgets/lib/decidim/budgets/feature.rb +9 -0
  120. data/decidim-budgets/spec/commands/add_line_item_spec.rb +6 -9
  121. data/decidim-budgets/spec/commands/cancel_order_spec.rb +3 -1
  122. data/decidim-budgets/spec/commands/checkout_spec.rb +3 -1
  123. data/decidim-budgets/spec/commands/create_project_spec.rb +4 -3
  124. data/decidim-budgets/spec/commands/remove_line_item_spec.rb +2 -1
  125. data/decidim-budgets/spec/commands/update_project_spec.rb +4 -3
  126. data/decidim-budgets/spec/factories.rb +1 -0
  127. data/decidim-budgets/spec/features/orders_spec.rb +24 -24
  128. data/decidim-budgets/spec/forms/project_form_spec.rb +1 -0
  129. data/decidim-budgets/spec/models/project_spec.rb +1 -1
  130. data/decidim-budgets/spec/queries/decidim/budgets/filtered_projects_spec.rb +21 -0
  131. data/decidim-budgets/spec/services/project_search_spec.rb +4 -3
  132. data/decidim-budgets/spec/shared/admin_shared_context.rb +1 -0
  133. data/decidim-budgets/spec/shared/manage_attachments_examples.rb +1 -0
  134. data/decidim-budgets/spec/spec_helper.rb +1 -0
  135. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  136. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +8 -2
  137. data/decidim-comments/app/frontend/application/application.component.tsx +3 -3
  138. data/decidim-comments/app/frontend/application/icon.component.tsx +1 -1
  139. data/decidim-comments/app/frontend/comments/add_comment_form.component.tsx +7 -7
  140. data/decidim-comments/app/frontend/comments/comment.component.test.tsx +7 -7
  141. data/decidim-comments/app/frontend/comments/comment.component.tsx +6 -6
  142. data/decidim-comments/app/frontend/comments/comment_thread.component.tsx +2 -2
  143. data/decidim-comments/app/frontend/comments/comments.component.test.tsx +5 -5
  144. data/decidim-comments/app/frontend/comments/comments.component.tsx +6 -6
  145. data/decidim-comments/app/frontend/comments/down_vote_button.component.test.tsx +4 -4
  146. data/decidim-comments/app/frontend/comments/down_vote_button.component.tsx +3 -3
  147. data/decidim-comments/app/frontend/comments/up_vote_button.component.test.tsx +4 -4
  148. data/decidim-comments/app/frontend/comments/up_vote_button.component.tsx +3 -3
  149. data/decidim-comments/app/frontend/comments/vote_button.component.tsx +1 -1
  150. data/decidim-comments/app/frontend/comments/vote_button_component.test.tsx +2 -2
  151. data/decidim-comments/app/frontend/entry.ts +2 -2
  152. data/decidim-comments/app/frontend/support/generate_comments_data.ts +2 -2
  153. data/decidim-comments/app/frontend/support/load_translations.ts +2 -2
  154. data/decidim-comments/app/frontend/support/resolve_graphql_query.ts +1 -1
  155. data/decidim-comments/app/mailers/decidim/comments/comment_notification_mailer.rb +1 -1
  156. data/decidim-comments/app/models/decidim/comments/comment.rb +3 -8
  157. data/decidim-comments/app/models/decidim/comments/seed.rb +1 -0
  158. data/decidim-comments/config/locales/fr.yml +62 -1
  159. data/decidim-comments/db/migrate/20170504085413_add_root_commentable_to_comments.rb +7 -0
  160. data/decidim-comments/db/migrate/20170510091348_update_root_commentable_for_comments.rb +22 -0
  161. data/decidim-comments/db/migrate/20170510091409_set_root_commentable_null_constraints.rb +6 -0
  162. data/decidim-comments/db/seeds.rb +4 -2
  163. data/decidim-comments/lib/decidim/comments/engine.rb +8 -0
  164. data/decidim-comments/lib/decidim/comments/test/factories.rb +1 -0
  165. data/decidim-comments/spec/commands/create_comment_spec.rb +13 -6
  166. data/decidim-comments/spec/commands/vote_comment_spec.rb +2 -6
  167. data/decidim-comments/spec/factories.rb +1 -0
  168. data/decidim-comments/spec/features/notifications_spec.rb +4 -4
  169. data/decidim-comments/spec/features/process_admin_manages_comments_spec.rb +1 -1
  170. data/decidim-comments/spec/features/report_comment_spec.rb +4 -2
  171. data/decidim-comments/spec/helpers/comments_helper_spec.rb +3 -3
  172. data/decidim-comments/spec/mailers/comment_notification_mailer_spec.rb +2 -1
  173. data/decidim-comments/spec/models/comment_spec.rb +5 -9
  174. data/decidim-comments/spec/models/comment_vote_spec.rb +3 -3
  175. data/decidim-comments/spec/models/seed_spec.rb +1 -1
  176. data/decidim-comments/spec/queries/sorted_comments_spec.rb +5 -5
  177. data/decidim-comments/spec/shared/admin_shared_context.rb +1 -0
  178. data/decidim-comments/spec/spec_helper.rb +1 -0
  179. data/decidim-comments/spec/types/comment_mutation_type_spec.rb +4 -12
  180. data/decidim-comments/spec/types/comment_type_spec.rb +4 -5
  181. data/decidim-comments/spec/types/commentable_mutation_type_spec.rb +2 -2
  182. data/decidim-comments/spec/types/mutation_type_spec.rb +4 -6
  183. data/decidim-comments/spec/types/query_type_spec.rb +1 -1
  184. data/decidim-dev/decidim-dev.gemspec +6 -6
  185. data/decidim-dev/lib/decidim/dev/common_rake.rb +5 -1
  186. data/decidim-dev/lib/decidim/dev/railtie.rb +1 -0
  187. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +0 -2
  188. data/decidim-dev/lib/decidim/dev/test/rspec_support/geocoder.rb +4 -3
  189. data/decidim-dev/lib/decidim/dev/test/rspec_support/i18n.rb +2 -2
  190. data/decidim-dev/lib/decidim/dev/test/rspec_support/webmock.rb +1 -0
  191. data/decidim-dev/lib/generators/decidim/dummy_generator.rb +1 -1
  192. data/decidim-dev/lib/generators/decidim/templates/autoprefixer_initializer.rb +4 -3
  193. data/decidim-dev/lib/tasks/test_app.rake +1 -0
  194. data/decidim-meetings/app/controllers/decidim/meetings/meeting_widgets_controller.rb +1 -0
  195. data/decidim-meetings/app/controllers/decidim/meetings/meetings_controller.rb +8 -8
  196. data/decidim-meetings/app/helpers/decidim/meetings/map_helper.rb +9 -9
  197. data/decidim-meetings/app/models/decidim/meetings/meeting.rb +1 -1
  198. data/decidim-meetings/app/views/decidim/meetings/meeting_widgets/show.html.erb +8 -17
  199. data/decidim-meetings/config/locales/fr.yml +95 -1
  200. data/decidim-meetings/lib/decidim/meetings/feature.rb +7 -0
  201. data/decidim-meetings/spec/commands/close_meeting_spec.rb +2 -1
  202. data/decidim-meetings/spec/commands/create_meeting_spec.rb +6 -5
  203. data/decidim-meetings/spec/commands/update_meeting_spec.rb +6 -5
  204. data/decidim-meetings/spec/factories.rb +1 -0
  205. data/decidim-meetings/spec/features/explore_meetings_spec.rb +2 -1
  206. data/decidim-meetings/spec/forms/close_meeting_form_spec.rb +1 -0
  207. data/decidim-meetings/spec/forms/meeting_form_spec.rb +5 -3
  208. data/decidim-meetings/spec/services/meeting_search_spec.rb +3 -2
  209. data/decidim-meetings/spec/shared/admin_shared_context.rb +1 -0
  210. data/decidim-meetings/spec/shared/manage_attachments_examples.rb +1 -1
  211. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +21 -20
  212. data/decidim-meetings/spec/spec_helper.rb +1 -0
  213. data/decidim-pages/config/locales/fr.yml +18 -1
  214. data/decidim-pages/decidim-pages.gemspec +1 -1
  215. data/decidim-pages/lib/decidim/pages/feature.rb +7 -0
  216. data/decidim-pages/spec/commands/create_page_spec.rb +1 -3
  217. data/decidim-pages/spec/factories.rb +1 -0
  218. data/decidim-pages/spec/spec_helper.rb +1 -0
  219. data/decidim-proposals/app/commands/decidim/proposals/create_proposal_export.rb +36 -0
  220. data/decidim-proposals/app/controllers/decidim/proposals/admin/exports_controller.rb +24 -0
  221. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +3 -1
  222. data/decidim-proposals/app/controllers/decidim/proposals/proposal_widgets_controller.rb +0 -5
  223. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +0 -1
  224. data/decidim-proposals/app/jobs/decidim/proposals/export_job.rb +21 -0
  225. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +1 -1
  226. data/decidim-proposals/app/queries/decidim/proposals/filtered_proposals.rb +36 -0
  227. data/decidim-proposals/app/services/decidim/proposals/proposal_serializer.rb +72 -0
  228. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/index.html.erb +15 -3
  229. data/decidim-proposals/app/views/decidim/proposals/proposal_widgets/show.html.erb +4 -25
  230. data/decidim-proposals/config/locales/ca.yml +4 -0
  231. data/decidim-proposals/config/locales/en.yml +6 -1
  232. data/decidim-proposals/config/locales/es.yml +4 -0
  233. data/decidim-proposals/config/locales/fr.yml +146 -1
  234. data/decidim-proposals/decidim-proposals.gemspec +2 -2
  235. data/decidim-proposals/lib/decidim/proposals/admin_engine.rb +5 -0
  236. data/decidim-proposals/lib/decidim/proposals/feature.rb +14 -0
  237. data/decidim-proposals/spec/factories.rb +1 -0
  238. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +1 -0
  239. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +1 -0
  240. data/decidim-proposals/spec/features/proposals_spec.rb +29 -28
  241. data/decidim-proposals/spec/features/report_proposal_spec.rb +2 -2
  242. data/decidim-proposals/spec/features/vote_proposal_spec.rb +36 -32
  243. data/decidim-proposals/spec/helpers/proposal_order_helper_spec.rb +3 -3
  244. data/decidim-proposals/spec/jobs/export_job_spec.rb +57 -0
  245. data/decidim-proposals/spec/lib/decidim/proposals/feature_spec.rb +1 -0
  246. data/decidim-proposals/spec/models/decidim/proposals/proposal_vote_spec.rb +3 -3
  247. data/decidim-proposals/spec/queries/decidim/proposals/filtered_proposals_spec.rb +21 -0
  248. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +12 -12
  249. data/decidim-proposals/spec/services/decidim/proposals/proposal_serializer_spec.rb +71 -0
  250. data/decidim-proposals/spec/shared/admin_shared_context.rb +1 -0
  251. data/decidim-proposals/spec/shared/create_proposal_examples.rb +4 -3
  252. data/decidim-proposals/spec/shared/export_proposals_examples.rb +37 -0
  253. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +12 -11
  254. data/decidim-proposals/spec/shared/proposal_form_examples.rb +9 -8
  255. data/decidim-proposals/spec/spec_helper.rb +1 -0
  256. data/decidim-results/app/controllers/decidim/results/result_widgets_controller.rb +1 -0
  257. data/decidim-results/app/controllers/decidim/results/results_controller.rb +1 -1
  258. data/decidim-results/app/queries/decidim/results/filtered_results.rb +36 -0
  259. data/decidim-results/app/services/decidim/results/result_stats_calculator.rb +1 -1
  260. data/decidim-results/app/views/decidim/results/result_widgets/show.html.erb +2 -10
  261. data/decidim-results/config/locales/fr.yml +75 -1
  262. data/decidim-results/decidim-results.gemspec +2 -2
  263. data/decidim-results/lib/decidim/results/feature.rb +9 -0
  264. data/decidim-results/spec/commands/create_result_spec.rb +4 -3
  265. data/decidim-results/spec/commands/update_result_spec.rb +5 -4
  266. data/decidim-results/spec/controllers/results_controller_spec.rb +31 -0
  267. data/decidim-results/spec/factories.rb +1 -0
  268. data/decidim-results/spec/features/explore_results_spec.rb +75 -74
  269. data/decidim-results/spec/forms/result_form_spec.rb +2 -1
  270. data/decidim-results/spec/queries/decidim/results/filtered_results_spec.rb +21 -0
  271. data/decidim-results/spec/services/result_search_spec.rb +4 -3
  272. data/decidim-results/spec/services/result_stats_calculator_spec.rb +1 -0
  273. data/decidim-results/spec/shared/admin_shared_context.rb +1 -0
  274. data/decidim-results/spec/spec_helper.rb +1 -0
  275. data/decidim-system/config/locales/fr.yml +64 -1
  276. data/decidim-system/decidim-system.gemspec +3 -3
  277. data/decidim-system/spec/factories.rb +1 -0
  278. data/decidim-system/spec/spec_helper.rb +1 -0
  279. data/docs/how_to_create_a_plugin.md +117 -139
  280. data/lib/generators/decidim/install_generator.rb +1 -1
  281. data/package.json +30 -31
  282. data/tslint.json +1 -2
  283. data/webpack.config.js +2 -3
  284. data/yarn.lock +976 -1326
  285. metadata +68 -31
  286. data/decidim-admin/yarn.lock +0 -4
  287. data/decidim-api/.gitignore +0 -7
  288. data/decidim-budgets/.gitignore +0 -7
  289. data/decidim-meetings/.gitignore +0 -7
  290. data/decidim-pages/.gitignore +0 -3
  291. data/decidim-proposals/.gitignore +0 -3
  292. data/decidim-results/.gitignore +0 -7
@@ -1,15 +1,15 @@
1
- import { mount, shallow } from "enzyme";
1
+ import { mount, shallow } from "enzyme";
2
2
  import * as $ from "jquery";
3
3
  import * as React from "react";
4
4
 
5
5
  import { CommentFragment } from "../support/schema";
6
- import AddCommentForm from "./add_comment_form.component";
7
- import Comment from "./comment.component";
8
- import DownVoteButton from "./down_vote_button.component";
9
- import UpVoteButton from "./up_vote_button.component";
6
+ import AddCommentForm from "./add_comment_form.component";
7
+ import Comment from "./comment.component";
8
+ import DownVoteButton from "./down_vote_button.component";
9
+ import UpVoteButton from "./up_vote_button.component";
10
10
 
11
11
  import generateCommentsData from "../support/generate_comments_data";
12
- import generateUserData from "../support/generate_user_data";
12
+ import generateUserData from "../support/generate_user_data";
13
13
 
14
14
  import { loadLocaleTranslations } from "../support/load_translations";
15
15
 
@@ -19,7 +19,7 @@ describe("<Comment />", () => {
19
19
 
20
20
  beforeEach(() => {
21
21
  loadLocaleTranslations("en");
22
- let commentsData = generateCommentsData(1);
22
+ const commentsData = generateCommentsData(1);
23
23
  commentsData[0].comments = generateCommentsData(3);
24
24
 
25
25
  comment = commentsData[0];
@@ -1,12 +1,12 @@
1
- import * as classnames from "classnames";
2
- import * as moment from "moment";
3
- import * as React from "react";
1
+ import * as classnames from "classnames";
2
+ import * as moment from "moment";
3
+ import * as React from "react";
4
4
 
5
5
  import Icon from "../application/icon.component";
6
6
 
7
- import AddCommentForm from "./add_comment_form.component";
8
- import DownVoteButton from "./down_vote_button.component";
9
- import UpVoteButton from "./up_vote_button.component";
7
+ import AddCommentForm from "./add_comment_form.component";
8
+ import DownVoteButton from "./down_vote_button.component";
9
+ import UpVoteButton from "./up_vote_button.component";
10
10
 
11
11
  import {
12
12
  AddCommentFormSessionFragment,
@@ -1,6 +1,6 @@
1
- import * as React from "react";
1
+ import * as React from "react";
2
2
 
3
- import Comment from "./comment.component";
3
+ import Comment from "./comment.component";
4
4
 
5
5
  import {
6
6
  AddCommentFormSessionFragment,
@@ -1,14 +1,14 @@
1
- import { shallow } from "enzyme";
1
+ import { shallow } from "enzyme";
2
2
  import * as React from "react";
3
3
 
4
- import AddCommentForm from "./add_comment_form.component";
4
+ import AddCommentForm from "./add_comment_form.component";
5
5
  import CommentOrderSelector from "./comment_order_selector.component";
6
- import CommentThread from "./comment_thread.component";
6
+ import CommentThread from "./comment_thread.component";
7
7
  import { Comments, commentsQuery } from "./comments.component";
8
8
 
9
9
  import generateCommentsData from "../support/generate_comments_data";
10
- import generateUserData from "../support/generate_user_data";
11
- import resolveGraphQLQuery from "../support/resolve_graphql_query";
10
+ import generateUserData from "../support/generate_user_data";
11
+ import resolveGraphQLQuery from "../support/resolve_graphql_query";
12
12
 
13
13
  import { loadLocaleTranslations } from "../support/load_translations";
14
14
 
@@ -1,11 +1,11 @@
1
- import * as React from "react";
2
- import { graphql } from "react-apollo";
1
+ import * as React from "react";
2
+ import { graphql } from "react-apollo";
3
3
 
4
- import Application from "../application/application.component";
4
+ import Application from "../application/application.component";
5
5
 
6
- import AddCommentForm from "./add_comment_form.component";
6
+ import AddCommentForm from "./add_comment_form.component";
7
7
  import CommentOrderSelector from "./comment_order_selector.component";
8
- import CommentThread from "./comment_thread.component";
8
+ import CommentThread from "./comment_thread.component";
9
9
 
10
10
  import {
11
11
  GetCommentsQuery,
@@ -18,7 +18,7 @@ interface CommentsProps extends GetCommentsQuery {
18
18
  loading?: boolean;
19
19
  orderBy: string;
20
20
  reorderComments: (orderBy: string) => void;
21
- };
21
+ }
22
22
 
23
23
  /**
24
24
  * The core class of the Decidim Comments engine.
@@ -1,8 +1,8 @@
1
- import { shallow } from "enzyme";
1
+ import { shallow } from "enzyme";
2
2
  import * as React from "react";
3
3
 
4
- import { DownVoteButton } from "./down_vote_button.component";
5
- import VoteButton from "./vote_button.component";
4
+ import { DownVoteButton } from "./down_vote_button.component";
5
+ import VoteButton from "./vote_button.component";
6
6
 
7
7
  import generateCommentsData from "../support/generate_comments_data";
8
8
 
@@ -13,7 +13,7 @@ describe("<DownVoteButton />", () => {
13
13
  const downVote = jasmine.createSpy("downVote");
14
14
 
15
15
  beforeEach(() => {
16
- let commentsData = generateCommentsData(1);
16
+ const commentsData = generateCommentsData(1);
17
17
 
18
18
  comment = commentsData[0];
19
19
  });
@@ -1,7 +1,7 @@
1
- import * as React from "react";
2
- import { graphql } from "react-apollo";
1
+ import * as React from "react";
2
+ import { graphql } from "react-apollo";
3
3
 
4
- import VoteButton from "./vote_button.component";
4
+ import VoteButton from "./vote_button.component";
5
5
 
6
6
  import {
7
7
  CommentFragment,
@@ -1,8 +1,8 @@
1
- import { shallow } from "enzyme";
1
+ import { shallow } from "enzyme";
2
2
  import * as React from "react";
3
3
 
4
- import { UpVoteButton } from "./up_vote_button.component";
5
- import VoteButton from "./vote_button.component";
4
+ import { UpVoteButton } from "./up_vote_button.component";
5
+ import VoteButton from "./vote_button.component";
6
6
 
7
7
  import generateCommentsData from "../support/generate_comments_data";
8
8
 
@@ -13,7 +13,7 @@ describe("<UpVoteButton />", () => {
13
13
  const upVote = jasmine.createSpy("upVote");
14
14
 
15
15
  beforeEach(() => {
16
- let commentsData = generateCommentsData(1);
16
+ const commentsData = generateCommentsData(1);
17
17
 
18
18
  comment = commentsData[0];
19
19
  });
@@ -1,7 +1,7 @@
1
- import * as React from "react";
2
- import { graphql } from "react-apollo";
1
+ import * as React from "react";
2
+ import { graphql } from "react-apollo";
3
3
 
4
- import VoteButton from "./vote_button.component";
4
+ import VoteButton from "./vote_button.component";
5
5
 
6
6
  import {
7
7
  CommentFragment,
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import Icon from "../application/icon.component";
2
+ import Icon from "../application/icon.component";
3
3
 
4
4
  interface VoteButtonProps {
5
5
  buttonClassName: string;
@@ -1,7 +1,7 @@
1
1
  import { shallow } from "enzyme";
2
2
  import * as React from "react";
3
- import Icon from "../application/icon.component";
4
- import VoteButton from "./vote_button.component";
3
+ import Icon from "../application/icon.component";
4
+ import VoteButton from "./vote_button.component";
5
5
 
6
6
  describe("<VoteButton />", () => {
7
7
  const voteAction: jasmine.Spy = jasmine.createSpy("voteAction");
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as ReactDOM from "react-dom";
2
+ import * as ReactDOM from "react-dom";
3
3
 
4
4
  import Comments, { CommentsApplicationProps } from "./comments/comments.component";
5
5
  import loadTranslations from "./support/load_translations";
@@ -7,7 +7,7 @@ import loadTranslations from "./support/load_translations";
7
7
  window.DecidimComments = window.DecidimComments || {};
8
8
 
9
9
  window.DecidimComments.renderCommentsComponent = (nodeId: string, props: CommentsApplicationProps) => {
10
- let node = window.$(`#${nodeId}`)[0];
10
+ const node = window.$(`#${nodeId}`)[0];
11
11
 
12
12
  ReactDOM.render(
13
13
  React.createElement(Comments, props),
@@ -1,6 +1,6 @@
1
1
  import { date, image, lorem, name, random } from "faker/locale/en";
2
2
 
3
- import { CommentFragment } from "../support/schema";
3
+ import { CommentFragment } from "../support/schema";
4
4
 
5
5
  /**
6
6
  * Generate random comment data to emulate a database real content
@@ -8,7 +8,7 @@ import { CommentFragment } from "../support/schema";
8
8
  * @returns {Object[]} - An array of objects representing comments data
9
9
  */
10
10
  const generateCommentsData = (num = 1) => {
11
- let commentsData: CommentFragment[] = [];
11
+ const commentsData: CommentFragment[] = [];
12
12
 
13
13
  for (let idx = 0; idx < num; idx += 1) {
14
14
  commentsData.push({
@@ -9,14 +9,14 @@ const { I18n } = require("react-i18nify");
9
9
  * @returns {Void} - Nothing
10
10
  */
11
11
  const loadTranslations = () => {
12
- const translationsContext = (<any> require).context("../../../config/locales/", true, /\.yml$/);
12
+ const translationsContext = (require as any).context("../../../config/locales/", true, /\.yml$/);
13
13
  const translationFiles = requireAll(translationsContext);
14
14
 
15
15
  const translations = translationsContext.keys().reduce((acc: any, key: string, index: number) => {
16
16
  const match = key.match(/\.\/(.*)\.yml/);
17
17
 
18
18
  if (match) {
19
- let locale = match[1];
19
+ const locale = match[1];
20
20
  acc[locale] = translationFiles[index][locale].decidim;
21
21
  }
22
22
 
@@ -20,7 +20,7 @@ const resolver = (fieldName: string, root: any) => root[fieldName];
20
20
  const resolveGraphQLQuery = (document: any, options: any = {}) => {
21
21
  const { filterResult, rootValue, context, variables } = options;
22
22
 
23
- let result = graphql(
23
+ const result = graphql(
24
24
  resolver,
25
25
  document,
26
26
  rootValue,
@@ -32,7 +32,7 @@ module Decidim
32
32
  private
33
33
 
34
34
  def commentable_title
35
- @commentable.title.kind_of?(Hash) ? @commentable.title[I18n.locale.to_s] : @commentable.title
35
+ @commentable.title.is_a?(Hash) ? @commentable.title[I18n.locale.to_s] : @commentable.title
36
36
  end
37
37
  end
38
38
  end
@@ -18,10 +18,11 @@ module Decidim
18
18
  MAX_DEPTH = 3
19
19
 
20
20
  belongs_to :commentable, foreign_key: "decidim_commentable_id", foreign_type: "decidim_commentable_type", polymorphic: true
21
+ belongs_to :root_commentable, foreign_key: "decidim_root_commentable_id", foreign_type: "decidim_root_commentable_type", polymorphic: true
21
22
  has_many :up_votes, -> { where(weight: 1) }, foreign_key: "decidim_comment_id", class_name: CommentVote, dependent: :destroy
22
23
  has_many :down_votes, -> { where(weight: -1) }, foreign_key: "decidim_comment_id", class_name: CommentVote, dependent: :destroy
23
24
 
24
- validates :author, :commentable, :body, presence: true
25
+ validates :author, :commentable, :root_commentable, :body, presence: true
25
26
  validates :depth, numericality: { greater_than_or_equal_to: 0 }
26
27
  validates :alignment, inclusion: { in: [0, 1, -1] }
27
28
 
@@ -50,15 +51,9 @@ module Decidim
50
51
  down_votes.any? { |vote| vote.author == user }
51
52
  end
52
53
 
53
- # Public: Returns the commentable object of the parent comment
54
- def root_commentable
55
- return commentable if depth == 0
56
- commentable.root_commentable
57
- end
58
-
59
54
  # Public: Overrides the `reported_content` Reportable concern method.
60
55
  def reported_content
61
- "<p>#{body}</p>"
56
+ body
62
57
  end
63
58
 
64
59
  private
@@ -17,6 +17,7 @@ module Decidim
17
17
  random = rand(Decidim::User.count)
18
18
  Comment.create(
19
19
  commentable: resource,
20
+ root_commentable: resource,
20
21
  body: ::Faker::Lorem.sentence,
21
22
  author: Decidim::User.where(organization: organization).offset(random).first
22
23
  )
@@ -1,5 +1,66 @@
1
1
  fr:
2
+ activerecord:
3
+ errors:
4
+ messages:
5
+ cannot_have_comments: ne peut pas être commenté
2
6
  decidim:
3
7
  comments:
4
8
  comment_notification_mailer:
5
- hello: Bonjour %{name},
9
+ comment_created:
10
+ new_comment_html: Un nouveau commentaire a été publié par <b>%{commenter}</b> dans <b>%{commentable_link}</b>
11
+ hello: Bonjour %{name},
12
+ manage_email_subscriptions_html: Vous pouvez arrêter de recevoir ces emails en modifiant vos paramètres dans %{link}.
13
+ notifications_settings_link: la page de configuration des notifications
14
+ reply_created:
15
+ new_reply_html: Il y a une nouvelle réponse à votre commentaire de <b>%{commenter}</b> dans <b>%{commentable_link}</b>
16
+ mailer:
17
+ comment_notification:
18
+ comment_created:
19
+ subject: Vous avez un nouveau commentaire
20
+ reply_created:
21
+ subject: Vous avez une nouvelle réponse à votre commentaire
22
+ components:
23
+ add_comment_form:
24
+ account_message: 'Pour ajouter votre commentaire <a href="%{sign_in_url}"> identifiez vous avec votre compte</a> ou <a href="%{sign_up_url}">inscrivez-vous</a>. '
25
+ form:
26
+ body:
27
+ label: Commentaire
28
+ placeholder: Que pensez-vous de cela?
29
+ form_error: Le texte est requis et ne peut pas dépasser %{length} caractères.
30
+ submit: Envoyer
31
+ user_group_id:
32
+ label: Commenter en tant que
33
+ opinion:
34
+ neutral: Neutre
35
+ title: Ajoutez votre commentaire
36
+ comment:
37
+ alignment:
38
+ against: Contre
39
+ in_favor: Pour
40
+ reply: Répondre
41
+ report:
42
+ action: Signaler
43
+ already_reported: Ce contenu a déjà été signalé et il sera examiné par un administrateur.
44
+ close: Fermer
45
+ description: Ce contenu est-il inapproprié?
46
+ details: Commentaires additionnels
47
+ reasons:
48
+ does_not_belong: Contient des activités illégales, des menaces suicidaires, des informations personnelles, ou autre chose que vous pensez ne pas être approprié à %{organization_name}.
49
+ offensive: Contient des propos racisme, sexiste, des insultes, des attaques personnelles, des menaces de mort, des incitations au suicide ou toute forme de discours de haine.
50
+ spam: Contient des piège-à-clic (clickbait), des publicités, des escroqueries ou des robots fonctionnant au script (script bots).
51
+ title: Signaler un problème
52
+ comment_order_selector:
53
+ order:
54
+ best_rated: Les mieux notés
55
+ most_discussed: Les plus débattus
56
+ older: Les plus anciens
57
+ recent: Les plus récents
58
+ title: 'Classement par :'
59
+ comment_thread:
60
+ title: Conversation avec %{authorName}
61
+ comments:
62
+ blocked_comments_warning: Les commentaires sont désactivés dans l'étape actuelle, mais vous pouvez lire les commentaires des étapes précédentes.
63
+ loading: Chargement des commentaires ...
64
+ title: "%{count} commentaires"
65
+ featured_comment:
66
+ title: Commentaire vedette
@@ -0,0 +1,7 @@
1
+ class AddRootCommentableToComments < ActiveRecord::Migration[5.0]
2
+ def change
3
+ change_table :decidim_comments_comments do |t|
4
+ t.references :decidim_root_commentable, polymorphic: true, index: { name: "decidim_comments_comment_root_commentable" }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ class UpdateRootCommentableForComments < ActiveRecord::Migration[5.0]
2
+ def up
3
+ Decidim::Comments::Comment.where(depth: 0).update_all(
4
+ "decidim_root_commentable_id = decidim_commentable_id, decidim_root_commentable_type = decidim_commentable_type"
5
+ )
6
+
7
+ Decidim::Comments::Comment.where("depth > 0").find_each do |comment|
8
+ comment.root_commentable = root_commentable(comment)
9
+ comment.save(validate: false)
10
+ end
11
+ end
12
+
13
+ def down
14
+ end
15
+
16
+ private
17
+
18
+ def root_commentable(comment)
19
+ return comment.commentable if comment.depth.zero?
20
+ root_commentable comment.commentable
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ class SetRootCommentableNullConstraints < ActiveRecord::Migration[5.0]
2
+ def change
3
+ change_column_null(:decidim_comments_comments, :decidim_root_commentable_id, false)
4
+ change_column_null(:decidim_comments_comments, :decidim_root_commentable_type, false)
5
+ end
6
+ end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
1
2
  # Since comments cannot exist without a real model we are not including
2
3
  # specific seeds for this engine.
3
4
  # Other engines are free to include comments on their seeds like this:
4
- #
5
- # n.times do
5
+ #
6
+ # n.times do
6
7
  # Decidim::Comments::Comment.create!(
7
8
  # author: author,
8
9
  # commentable: commentable,
10
+ # root_commentable: commentable,
9
11
  # body: Faker::Lorem.paragraph
10
12
  # )
11
13
  # end
@@ -29,6 +29,14 @@ module Decidim
29
29
  initializer "decidim_comments.mutation_extensions" do
30
30
  Comments::MutationExtensions.extend!(Decidim::Api::MutationType)
31
31
  end
32
+
33
+ initializer "decidim.stats" do
34
+ Decidim.stats.register :comments_count, priority: StatsRegistry::MEDIUM_PRIORITY do |features, start_at, end_at|
35
+ Decidim.feature_manifests.sum do |feature|
36
+ feature.stats.filter(tag: :comments).with_context(features, start_at, end_at).map { |_name, value| value }.sum
37
+ end
38
+ end
39
+ end
32
40
  end
33
41
  end
34
42
  end
@@ -6,6 +6,7 @@ FactoryGirl.define do
6
6
  factory :comment, class: "Decidim::Comments::Comment" do
7
7
  author { build(:user, organization: commentable.organization) }
8
8
  commentable { build(:dummy_resource) }
9
+ root_commentable { commentable }
9
10
  body { Faker::Lorem.paragraph }
10
11
  end
11
12