decidim-decidim_awesome 0.7.2 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +181 -0
  3. data/README.md +61 -35
  4. data/Rakefile +11 -12
  5. data/app/cells/decidim/decidim_awesome/content_blocks/map/error.erb +11 -0
  6. data/app/cells/decidim/decidim_awesome/content_blocks/map/show.erb +1 -61
  7. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +11 -0
  8. data/app/cells/decidim/decidim_awesome/content_blocks/map_form/show.erb +8 -4
  9. data/app/commands/decidim/decidim_awesome/admin/create_custom_redirect.rb +51 -0
  10. data/app/commands/decidim/decidim_awesome/admin/destroy_custom_redirect.rb +47 -0
  11. data/app/commands/decidim/decidim_awesome/admin/update_custom_redirect.rb +49 -0
  12. data/app/commands/decidim/decidim_awesome/create_editor_image.rb +12 -5
  13. data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +58 -0
  14. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +24 -24
  15. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +9 -1
  16. data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +91 -0
  17. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +5 -8
  18. data/app/controllers/decidim/decidim_awesome/blank_component_controller.rb +19 -0
  19. data/app/controllers/decidim/decidim_awesome/editor_images_controller.rb +2 -3
  20. data/app/controllers/decidim/decidim_awesome/iframe_component/iframe_controller.rb +1 -1
  21. data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +2 -6
  22. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +2 -0
  23. data/app/forms/decidim/decidim_awesome/admin/custom_redirect_form.rb +45 -0
  24. data/app/forms/decidim/decidim_awesome/editor_image_form.rb +3 -2
  25. data/app/forms/decidim/decidim_awesome/proposals/proposal_wizard_create_step_form_override.rb +38 -0
  26. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +22 -9
  27. data/app/helpers/decidim/decidim_awesome/admin/system_checker_helpers.rb +36 -0
  28. data/app/helpers/decidim/decidim_awesome/map_helper.rb +18 -12
  29. data/app/helpers/decidim/decidim_awesome/proposals/application_helper_override.rb +2 -2
  30. data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +106 -0
  31. data/app/models/decidim/decidim_awesome/editor_image.rb +4 -9
  32. data/app/packs/entrypoints/decidim_admin_decidim_awesome.js +5 -0
  33. data/app/packs/entrypoints/decidim_admin_decidim_awesome.scss +1 -0
  34. data/app/packs/entrypoints/decidim_admin_decidim_awesome_custom_fields.js +2 -0
  35. data/app/packs/entrypoints/decidim_decidim_awesome.js +9 -0
  36. data/app/packs/entrypoints/decidim_decidim_awesome.scss +1 -0
  37. data/app/packs/entrypoints/decidim_decidim_awesome_admin_form_exit_warn.js +1 -0
  38. data/app/packs/entrypoints/decidim_decidim_awesome_custom_fields.js +1 -0
  39. data/app/packs/entrypoints/decidim_decidim_awesome_iframe.scss +1 -0
  40. data/app/packs/entrypoints/decidim_decidim_awesome_map.js +5 -0
  41. data/app/packs/entrypoints/decidim_decidim_awesome_map.scss +1 -0
  42. data/app/{assets → packs}/images/decidim/decidim_awesome/platoniq-logo.png +0 -0
  43. data/app/{assets/javascripts/decidim/decidim_awesome/admin/auto_edit.js.es6 → packs/src/decidim/decidim_awesome/admin/auto_edit.js} +39 -34
  44. data/app/packs/src/decidim/decidim_awesome/admin/check_redirections.js +48 -0
  45. data/app/{assets/javascripts/decidim/decidim_awesome/admin/codemirror.js.es6 → packs/src/decidim/decidim_awesome/admin/codemirror.js} +4 -4
  46. data/app/packs/src/decidim/decidim_awesome/admin/constraints.js +55 -0
  47. data/app/{assets/javascripts/decidim/decidim_awesome/admin/form_builder.js.es6 → packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js} +23 -26
  48. data/app/{assets/javascripts/decidim/decidim_awesome/admin/form_exit_warn.js.es6 → packs/src/decidim/decidim_awesome/admin/form_exit_warn.js} +0 -2
  49. data/app/{assets/javascripts/decidim/decidim_awesome/admin/user_picker.js.es6 → packs/src/decidim/decidim_awesome/admin/user_picker.js} +3 -3
  50. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +23 -0
  51. data/app/packs/src/decidim/decidim_awesome/awesome_application.js +17 -0
  52. data/app/{assets/javascripts/decidim/decidim_awesome/awesome_map/api_fetcher.js.es6 → packs/src/decidim/decidim_awesome/awesome_map/api/api_fetcher.js} +1 -15
  53. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/fetcher.js +134 -0
  54. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/meetings_fetcher.js +59 -0
  55. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +52 -0
  56. data/app/packs/src/decidim/decidim_awesome/awesome_map/awesome_map.js +129 -0
  57. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +130 -0
  58. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/meetings_controller.js +31 -0
  59. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +88 -0
  60. data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +221 -0
  61. data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +51 -0
  62. data/app/packs/src/decidim/decidim_awesome/editors/editor.js +191 -0
  63. data/app/{assets/javascripts/decidim/decidim_awesome/editors/tabs_focus.js.es6 → packs/src/decidim/decidim_awesome/editors/tabs_focus.js} +4 -6
  64. data/app/{assets/javascripts/decidim/decidim_awesome/forms/autosave.js.es6 → packs/src/decidim/decidim_awesome/forms/autosave.js} +20 -17
  65. data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +207 -0
  66. data/app/{assets/javascripts/decidim/decidim_awesome/forms/rich_text_plugin.js.es6 → packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js} +23 -21
  67. data/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js +22 -0
  68. data/app/packs/src/decidim/decidim_awesome/proposals/images.js +25 -0
  69. data/{vendor/assets/javascripts → app/packs/src/vendor}/image-resize.min.js +0 -0
  70. data/{vendor/assets/javascripts → app/packs/src/vendor}/image-upload.min.js +0 -0
  71. data/{vendor/assets/javascripts → app/packs/src/vendor}/jquery.truncate.js +0 -0
  72. data/app/packs/src/vendor/leaflet.featuregroup.subgroup.js +184 -0
  73. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/admin/auto_edits.scss +2 -1
  74. data/app/packs/stylesheets/decidim/decidim_awesome/admin/check_redirections.scss +28 -0
  75. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/admin/codemirror.scss +8 -6
  76. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/admin/constraints.scss +13 -13
  77. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/admin/custom_fields.scss +37 -10
  78. data/app/packs/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +41 -0
  79. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin.scss +71 -0
  80. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_application.scss +19 -0
  81. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/awesome_iframe/iframe.scss +3 -3
  82. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +176 -0
  83. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/editors/markdown_editor.scss +6 -4
  84. data/app/packs/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +58 -0
  85. data/app/{assets → packs}/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -2
  86. data/app/packs/stylesheets/vendor/select2-foundation-theme.scss +348 -0
  87. data/app/presenters/decidim/decidim_awesome/menu_item_presenter_override.rb +25 -0
  88. data/app/presenters/decidim/decidim_awesome/menu_presenter_override.rb +23 -0
  89. data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +26 -0
  90. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +4 -16
  91. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +28 -22
  92. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +1 -1
  93. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +1 -1
  94. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -0
  95. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +1 -1
  96. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +7 -6
  97. data/app/views/decidim/decidim_awesome/admin/config/_modal.html.erb +1 -1
  98. data/app/views/decidim/decidim_awesome/admin/config/show.html.erb +3 -3
  99. data/app/views/decidim/decidim_awesome/admin/constraints/new.html.erb +1 -1
  100. data/app/views/decidim/decidim_awesome/admin/custom_redirects/_form.html.erb +6 -0
  101. data/app/views/decidim/decidim_awesome/admin/custom_redirects/edit.html.erb +13 -0
  102. data/app/views/decidim/decidim_awesome/admin/custom_redirects/index.html.erb +37 -0
  103. data/app/views/decidim/decidim_awesome/admin/custom_redirects/new.html.erb +13 -0
  104. data/app/views/decidim/decidim_awesome/admin/menu_hacks/edit.html.erb +1 -1
  105. data/app/views/decidim/decidim_awesome/admin/menu_hacks/new.html.erb +1 -1
  106. data/app/views/decidim/decidim_awesome/admin/proposals/_editor.html.erb +5 -3
  107. data/app/views/decidim/decidim_awesome/iframe_component/iframe/show.html.erb +1 -1
  108. data/app/views/decidim/decidim_awesome/map_component/map/_api_ready.html.erb +3 -0
  109. data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +68 -0
  110. data/app/views/decidim/decidim_awesome/map_component/map/{error.erb → error.html.erb} +2 -0
  111. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +3 -67
  112. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +1 -1
  113. data/app/views/layouts/decidim/admin/decidim_awesome.html.erb +13 -9
  114. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +0 -2
  115. data/app/views/{v0.24 → v0.25}/decidim/proposals/collaborative_drafts/_show.html.erb +0 -0
  116. data/app/views/{v0.23 → v0.25}/layouts/decidim/_head.html.erb +12 -10
  117. data/app/views/v0.25/layouts/decidim/admin/_header.html.erb +11 -0
  118. data/app/views/{v0.23 → v0.26}/decidim/proposals/collaborative_drafts/_show.html.erb +1 -7
  119. data/app/views/{v0.24 → v0.26}/layouts/decidim/_head.html.erb +16 -10
  120. data/app/views/v0.26/layouts/decidim/admin/_header.html.erb +11 -0
  121. data/config/assets.rb +46 -0
  122. data/config/i18n-tasks.yml +6 -0
  123. data/config/locales/ca.yml +77 -13
  124. data/config/locales/cs.yml +65 -1
  125. data/config/locales/en.yml +69 -1
  126. data/config/locales/es.yml +65 -1
  127. data/config/locales/eu.yml +0 -232
  128. data/config/locales/fr.yml +117 -53
  129. data/config/locales/it.yml +65 -1
  130. data/config/locales/ja.yml +66 -3
  131. data/config/locales/nl.yml +5 -46
  132. data/config/locales/pt-BR.yml +348 -0
  133. data/config/locales/pt-PT.yml +7 -0
  134. data/config/locales/pt.yml +7 -0
  135. data/config/locales/sv.yml +67 -182
  136. data/lib/decidim/decidim_awesome/admin_engine.rb +10 -15
  137. data/lib/decidim/decidim_awesome/awesome.rb +214 -0
  138. data/lib/decidim/decidim_awesome/awesome_helpers.rb +0 -7
  139. data/lib/decidim/decidim_awesome/checksums.yml +13 -16
  140. data/lib/decidim/decidim_awesome/config.rb +1 -0
  141. data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +39 -0
  142. data/lib/decidim/decidim_awesome/engine.rb +27 -55
  143. data/lib/decidim/decidim_awesome/iframe_component/admin_engine.rb +23 -0
  144. data/lib/decidim/decidim_awesome/iframe_component/component.rb +6 -6
  145. data/lib/decidim/decidim_awesome/map_component/admin_engine.rb +23 -0
  146. data/lib/decidim/decidim_awesome/map_component/component.rb +6 -5
  147. data/lib/decidim/decidim_awesome/map_component/engine.rb +34 -0
  148. data/lib/decidim/decidim_awesome/menu_hacker.rb +1 -0
  149. data/lib/decidim/decidim_awesome/test/factories.rb +2 -2
  150. data/lib/decidim/decidim_awesome/test/initializer.rb +25 -0
  151. data/lib/decidim/decidim_awesome/test/layouts/decidim/_head.html.erb +30 -2
  152. data/lib/decidim/decidim_awesome/test/layouts/decidim/admin/_header.html.erb +7 -2
  153. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +18 -0
  154. data/lib/decidim/decidim_awesome/test/shared_examples/controller_examples.rb +13 -0
  155. data/lib/decidim/decidim_awesome/test/shared_examples/custom_redirects_contexts.rb +47 -0
  156. data/lib/decidim/decidim_awesome/test/shared_examples/menu_hack_contexts.rb +0 -17
  157. data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +9 -17
  158. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +202 -0
  159. data/lib/decidim/decidim_awesome/version.rb +2 -2
  160. data/lib/decidim/decidim_awesome.rb +4 -152
  161. data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +37 -0
  162. data/lib/tasks/decidim_awesome_webpacker_tasks.rake +64 -0
  163. data/package.json +211 -0
  164. metadata +113 -113
  165. data/app/assets/config/decidim_admin_decidim_awesome_manifest.css +0 -3
  166. data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +0 -2
  167. data/app/assets/config/decidim_decidim_awesome_manifest.css +0 -5
  168. data/app/assets/config/decidim_decidim_awesome_manifest.js +0 -4
  169. data/app/assets/config/legacy_decidim_admin_decidim_awesome_manifest.js +0 -2
  170. data/app/assets/config/legacy_decidim_decidim_awesome_manifest.js +0 -4
  171. data/app/assets/javascripts/decidim/decidim_awesome/admin/constraints.js.es6 +0 -54
  172. data/app/assets/javascripts/decidim/decidim_awesome/admin/legacy_form_builder.js.es6 +0 -80
  173. data/app/assets/javascripts/decidim/decidim_awesome/awesome_admin.js +0 -7
  174. data/app/assets/javascripts/decidim/decidim_awesome/awesome_application.js +0 -3
  175. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/categories.js.es6 +0 -25
  176. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/hashtags.js.es6 +0 -48
  177. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/layers.js.es6 +0 -107
  178. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/load_map.js.es6 +0 -15
  179. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6 +0 -207
  180. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/markers.js.es6 +0 -56
  181. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +0 -132
  182. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6 +0 -107
  183. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/utilities.js.es6 +0 -57
  184. data/app/assets/javascripts/decidim/decidim_awesome/editors/legacy_quill_editor.js.es6 +0 -172
  185. data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +0 -185
  186. data/app/assets/javascripts/decidim/decidim_awesome/forms/custom_fields_builder.js.es6 +0 -211
  187. data/app/assets/javascripts/decidim/decidim_awesome/legacy_admin.js +0 -7
  188. data/app/assets/javascripts/decidim/decidim_awesome/legacy_application.js +0 -3
  189. data/app/assets/javascripts/decidim/decidim_awesome/proposals/custom_fields.js.es6 +0 -21
  190. data/app/assets/javascripts/decidim/decidim_awesome/proposals/images.js.es6 +0 -25
  191. data/app/assets/stylesheets/decidim/decidim_awesome/admin/user_picker.scss +0 -35
  192. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_admin.scss +0 -64
  193. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_application.scss +0 -22
  194. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/leaflet.scss.erb +0 -18
  195. data/app/assets/stylesheets/decidim/decidim_awesome/awesome_map/map.scss +0 -160
  196. data/app/assets/stylesheets/decidim/decidim_awesome/editors/quill_editor.scss +0 -22
  197. data/app/awesome_overrides/forms/decidim/proposals/proposal_wizard_create_step_form_override.rb +0 -28
  198. data/app/awesome_overrides/presenters/decidim/menu_presenter_override.rb +0 -39
  199. data/app/controllers/concerns/decidim/decidim_awesome/admin_not_found_redirect.rb +0 -39
  200. data/app/controllers/decidim/decidim_awesome/iframe_component/application_controller.rb +0 -15
  201. data/app/controllers/decidim/decidim_awesome/map_component/application_controller.rb +0 -15
  202. data/app/views/v0.23/layouts/decidim/admin/_header.html.erb +0 -12
  203. data/app/views/v0.24/layouts/decidim/admin/_header.html.erb +0 -12
  204. data/lib/decidim/decidim_awesome/test/themes/css.lvh.me.css +0 -3
  205. data/lib/decidim/decidim_awesome/test/themes/erb.lvh.me.scss.erb +0 -2
  206. data/lib/decidim/decidim_awesome/test/themes/scss.lvh.me.scss +0 -1
  207. data/lib/decidim/decidim_awesome/test/themes/test-theme/body.scss +0 -4
  208. data/vendor/assets/images/layers-2x.png +0 -0
  209. data/vendor/assets/images/layers.png +0 -0
  210. data/vendor/assets/images/marker-icon.png +0 -0
  211. data/vendor/assets/javascripts/codemirror-4.inline-attachment.js +0 -89
  212. data/vendor/assets/javascripts/codemirror.js +0 -9801
  213. data/vendor/assets/javascripts/delta.min.js +0 -405
  214. data/vendor/assets/javascripts/delta.min.js.map +0 -1
  215. data/vendor/assets/javascripts/europa.min.js +0 -4
  216. data/vendor/assets/javascripts/form-builder.min.js +0 -19
  217. data/vendor/assets/javascripts/form-render.min.js +0 -19
  218. data/vendor/assets/javascripts/form-storage.js +0 -824
  219. data/vendor/assets/javascripts/highlight.min.js +0 -44
  220. data/vendor/assets/javascripts/inline-attachment.js +0 -399
  221. data/vendor/assets/javascripts/inscrybmde.min.js +0 -7
  222. data/vendor/assets/javascripts/jquery-ui.min.js +0 -13
  223. data/vendor/assets/javascripts/jquery.inline-attachment.js +0 -66
  224. data/vendor/assets/javascripts/jsrender.min.js +0 -4
  225. data/vendor/assets/javascripts/keymap/sublime.js +0 -720
  226. data/vendor/assets/javascripts/leaflet.featuregroup.subgroup.js +0 -6
  227. data/vendor/assets/javascripts/mode/css/css.js +0 -864
  228. data/vendor/assets/javascripts/select2.js +0 -6147
  229. data/vendor/assets/langs/en-US.lang +0 -110
  230. data/vendor/assets/stylesheets/codemirror.css +0 -350
  231. data/vendor/assets/stylesheets/default.min.css +0 -1
  232. data/vendor/assets/stylesheets/foundation.min.css +0 -1
  233. data/vendor/assets/stylesheets/github.min.css +0 -2
  234. data/vendor/assets/stylesheets/inscrybmde.min.scss +0 -194
  235. data/vendor/assets/stylesheets/jquery-ui.min.css +0 -7
  236. data/vendor/assets/stylesheets/select2-foundation-theme.css +0 -249
  237. data/vendor/assets/stylesheets/select2.css +0 -515
@@ -1,54 +0,0 @@
1
- // = require_self
2
-
3
- $(() => {
4
- const $modal = $('#constraintsModal');
5
- if(!$modal.length) return;
6
-
7
- $(".decidim_awesome-form").on("click", ".constraints-editor .add-condition,.constraints-editor .edit-condition", (e) => {
8
- e.preventDefault();
9
- const $this = $(e.target)
10
- const url = $this.attr("href");
11
- const $callout = $this.closest(".constraints-editor").find(".callout");
12
- $callout.hide();
13
- $callout.removeClass('alert success');
14
- $modal.find('.modal-content').html('');
15
- $modal.addClass('loading').foundation('open');
16
- $modal.data("url", url);
17
- $modal.find('.modal-content').load(url, () => {
18
- $modal.removeClass('loading');
19
- });
20
- });
21
-
22
- // Custom event listener to reload the modal if needed
23
- document.body.addEventListener("constraint:change", (e) => {
24
- const vars = e.detail.map((setting) => `${setting.key}=${setting.value}`);
25
- const url = $modal.data("url") + "&" + vars.join("&")
26
- $modal.addClass('loading');
27
- $modal.find('.modal-content').load(url, () => {
28
- $modal.removeClass('loading');
29
- });
30
- });
31
-
32
- // Rails AJAX events
33
- document.body.addEventListener('ajax:error', (responseText) => {
34
- const $container = $(`.constraints-editor[data-key="${responseText.detail[0].key}"]`)
35
- const $callout = $container.find(".callout");
36
- $callout.show();
37
- $callout.contents('p').html(responseText.detail[0].message + ": <strong>" + responseText.detail[0].error + "</strong>");
38
- $callout.addClass('alert');
39
- });
40
-
41
- document.body.addEventListener('ajax:success', (responseText) => {
42
- const $container = $(`.constraints-editor[data-key="${responseText.detail[0].key}"]`)
43
- const $callout = $container.find(".callout");
44
- $callout.show();
45
- $callout.contents('p').html(responseText.detail[0].message);
46
- $callout.addClass('success');
47
- // reconstruct list
48
- $container.replaceWith(responseText.detail[0].html);
49
- });
50
-
51
- document.body.addEventListener('ajax:complete', () => {
52
- $modal.foundation('close');
53
- })
54
- });
@@ -1,80 +0,0 @@
1
- // = require jquery-ui.min
2
- // = require decidim/decidim_awesome/editors/legacy_quill_editor
3
- // = require decidim/decidim_awesome/forms/rich_text_plugin
4
- // = require form-builder.min
5
- // = require_self
6
-
7
- let formBuilderList = [];
8
-
9
- $(() => {
10
- $(".awesome-edit-config .proposal_custom_fields_editor").each((_idx, el) => {
11
- const key = $(el).closest(".proposal_custom_fields_container").data("key");
12
- // DOCS: https://formbuilder.online/docs
13
- formBuilderList.push({
14
- el: el,
15
- key: key,
16
- config: {
17
- i18n: {
18
- locale: 'en-US',
19
- location: 'https://cdn.jsdelivr.net/npm/formbuilder-languages@1.1.0/'
20
- },
21
- formData: $(`input[name="config[proposal_custom_fields][${key}]"]`).val(),
22
- disableFields: ['button', 'file'],
23
- disabledActionButtons: ['save', 'data', 'clear'],
24
- disabledAttrs: [
25
- 'access',
26
- 'inline',
27
- 'className'
28
- ],
29
- controlOrder: [
30
- "text",
31
- "textarea",
32
- "number",
33
- "date",
34
- "checkbox-group",
35
- "radio-group",
36
- "select",
37
- "autocomplete",
38
- "header",
39
- "paragraph"
40
- ],
41
- disabledSubtypes: {
42
- text: ['color'], // TODO: fix hashtag generator with this
43
- // disable wysiwyg editors as they present problems
44
- // TODO: create custom type to integrate decidim Quill Editor
45
- textarea: ['tinymce', 'quill']
46
- },
47
- },
48
- instance: null
49
- });
50
- });
51
-
52
- $(document).on("formBuilder.create", (_event, i, list) => {
53
- if(!list[i]) return;
54
-
55
- $(list[i].el).formBuilder(list[i].config).promise.then(function(res){
56
- list[i].instance = res;
57
- // Attach to DOM
58
- list[i].el.FormBuilder = res;
59
- // remove spinner
60
- $(list[i].el).find(".loading-spinner").remove();
61
- // for external use
62
- $(document).trigger("formBuilder.created", [list[i]]);
63
- if(i < list.length) {
64
- $(document).trigger("formBuilder.create", [i + 1, list]);
65
- }
66
- });
67
- });
68
-
69
- if(formBuilderList.length) {
70
- $(document).trigger("formBuilder.create", [0, formBuilderList]);
71
- }
72
-
73
- $("form.awesome-edit-config").on("submit", () => {
74
- // e.preventDefault();
75
- formBuilderList.forEach((builder) =>{
76
- $(`input[name="config[proposal_custom_fields][${builder.key}]"]`).val(builder.instance.actions.getData("json"));
77
- });
78
- });
79
- });
80
-
@@ -1,7 +0,0 @@
1
- // = require decidim/decidim_awesome/admin/constraints
2
- // = require decidim/decidim_awesome/editors/quill_editor
3
- // = require decidim/decidim_awesome/admin/form_builder
4
- // = require decidim/decidim_awesome/editors/tabs_focus
5
- // = require decidim/decidim_awesome/admin/codemirror
6
- // = require decidim/decidim_awesome/admin/user_picker.js
7
- // = require decidim/decidim_awesome/admin/auto_edit.js
@@ -1,3 +0,0 @@
1
- // = require decidim/decidim_awesome/proposals/images
2
- // = require decidim/decidim_awesome/editors/quill_editor
3
- // = require decidim/decidim_awesome/forms/autosave
@@ -1,25 +0,0 @@
1
- ((exports) => {
2
-
3
- const getCategory = (category) => {
4
- let defaultCat = {
5
- color: getComputedStyle(document.documentElement).getPropertyValue('--primary'),
6
- children: () => {},
7
- parent: null,
8
- name: null
9
- };
10
- if(category) {
11
- let id = category.id ? parseInt(category.id, 10) : parseInt(category, 10);
12
- let cat = exports.AwesomeMap.categories.find((c) => c.id == id);
13
- if(cat) {
14
- cat.children = () => {
15
- return exports.AwesomeMap.categories.filter((c) => c.parent === cat.id );
16
- }
17
- return cat;
18
- }
19
- }
20
- return defaultCat;
21
- };
22
-
23
- exports.AwesomeMap = exports.AwesomeMap || {};
24
- exports.AwesomeMap.getCategory = getCategory;
25
- })(window);
@@ -1,48 +0,0 @@
1
- ((exports) => {
2
- const hashtags = [];
3
-
4
- const collectHashtags = (text) => {
5
- let tags = [];
6
- if(text) {
7
- const gids = text.match(/gid:\/\/[^\s<]+/g)
8
- if(gids) {
9
- tags = gids.filter(gid => gid.indexOf("/Decidim::Hashtag/") != -1).map(gid => {
10
- const parts = gid.split("/");
11
- const fromSelector = parts[5].charAt(0) == '_';
12
- const tag = fromSelector ? parts[5].substr(1) : parts[5];
13
- const name = '#' + tag;
14
- const html = `<a href="/search?term=${name}">${name}</a>`;
15
- const hashtag = {
16
- color: getComputedStyle(document.documentElement).getPropertyValue('--secondary'),
17
- gid: gid,
18
- id: parseInt(parts[4], 10),
19
- fromSelector: fromSelector,
20
- tag: tag,
21
- name: name,
22
- html: html
23
- }
24
- hashtags.push(hashtag)
25
- return hashtag;
26
- });
27
- }
28
- }
29
- return tags;
30
- };
31
-
32
- const removeHashtags = (text) => {
33
- return text.replace(/gid:\/\/[^\s<]+/g, "");
34
- };
35
-
36
- const appendHtmlHashtags = (text, tags) => {
37
- tags.forEach(tag => {
38
- text += ` ${tag.html}`;
39
- });
40
- return text;
41
- };
42
-
43
- exports.AwesomeMap = exports.AwesomeMap || {};
44
- exports.AwesomeMap.hashtags = hashtags;
45
- exports.AwesomeMap.collectHashtags = collectHashtags;
46
- exports.AwesomeMap.appendHtmlHashtags = appendHtmlHashtags;
47
- exports.AwesomeMap.removeHashtags = removeHashtags;
48
- })(window);
@@ -1,107 +0,0 @@
1
- // = require leaflet.featuregroup.subgroup
2
- // = require decidim/decidim_awesome/awesome_map/utilities
3
- // = require decidim/decidim_awesome/awesome_map/categories
4
- // = require decidim/decidim_awesome/awesome_map/hashtags
5
-
6
- ((exports) => {
7
- const { collapsedMenu, options, categories } = exports.AwesomeMap;
8
- const layers = {};
9
- const cluster = L.markerClusterGroup();
10
-
11
- const control = L.control.layers(null, null, {
12
- position: 'topleft',
13
- sortLayers: false,
14
- collapsed: collapsedMenu(),
15
- // hideSingleBase: true
16
- });
17
-
18
- const addProposalsControls = (map, component) => {
19
- // add control layer for proposals
20
- layers.proposals = {
21
- label: `<span class="awesome_map-component" id="awesome_map-component_${component.id}" title="0">${component.name || window.DecidimAwesome.texts.proposals}</span>`,
22
- group: L.featureGroup.subGroup(cluster)
23
- };
24
- control.addOverlay(layers.proposals.group, layers.proposals.label);
25
- layers.proposals.group.addTo(map);
26
-
27
- // add control layer for amendments if any
28
- if(options().menu.amendments && component.amendments) {
29
- layers.amendments = {
30
- label: `<span class="awesome_map-component" id="awesome_map-amendments_${component.id}" title="0">${window.DecidimAwesome.texts.amendments}</span>`,
31
- group: L.featureGroup.subGroup(cluster)
32
- }
33
- control.addOverlay(layers.amendments.group, layers.amendments.label);
34
- layers.amendments.group.addTo(map);
35
- }
36
- };
37
-
38
- const addMeetingsControls = (map, component) => {
39
- // add control layer for meetings
40
- layers.meetings = {
41
- label: `<span class="awesome_map-component" id="awesome_map-component_${component.id}" title="0">${component.name || window.DecidimAwesome.texts.meetings}</span>`,
42
- group: L.featureGroup.subGroup(cluster)
43
- };
44
- control.addOverlay(layers.meetings.group, layers.meetings.label);
45
- // console.log("map",map,"cluster", cluster, "layers", layers, "component", component)
46
- layers.meetings.group.addTo(map);
47
- };
48
-
49
- const addSearchControls = () => {
50
- $(control.getContainer()).contents("form").after(`<div id="awesome_map-categories-control" class="active"><b class="awesome_map-title-control">${window.DecidimAwesome.texts.categories}</b><div class="categories-container"></div></div>
51
- <div id="awesome_map-hashtags-control"><b class="awesome_map-title-control">${window.DecidimAwesome.texts.hashtags}</b><div class="hashtags-container"></div><a href="#" class="awesome_map-toggle_all_tags">${window.DecidimAwesome.texts.select_deselect_all}</a></div>`);
52
- };
53
-
54
- const addCategoriesControls = (map) => {
55
- if(categories && categories.length) {
56
- categories.forEach((category) => {
57
- // add control layer for this category
58
- const label = `<i class="awesome_map-category-${category.id}"></i> ${category.name}`;
59
- layers[category.id] = {
60
- label: label,
61
- group: L.featureGroup.subGroup(cluster)
62
- };
63
- layers[category.id].group.addTo(map);
64
- // In the next iteration to be sure layers are rendered
65
- setTimeout(() => {
66
- $('#awesome_map-categories-control .categories-container').append(`<label data-layer="${category.id}" class="awesome_map-category-${category.id}${category.parent?" subcategory":""}"><input type="checkbox" class="awesome_map-categories-selector" checked><span>${label}</span></label>`);
67
- });
68
- });
69
- }
70
- };
71
-
72
- // Hashtags are collected directly from proposals (this is different than categories)
73
- const addHashtagsControls = (map, hashtags, marker) => {
74
- // show hashtag layer
75
- if(hashtags && hashtags.length) {
76
- $('#awesome_map-hashtags-control').show();
77
- hashtags.forEach(hashtag => {
78
- // Add layer if not exists, otherwise just add the marker to the group
79
- if(!layers[hashtag.tag]) {
80
- layers[hashtag.tag] = {
81
- label: hashtag.name,
82
- group: L.featureGroup.subGroup(cluster)
83
- };
84
- layers[hashtag.tag].group.addTo(map);
85
- $('#awesome_map-hashtags-control .hashtags-container').append(`<label data-layer="${hashtag.tag}" class="awesome_map-hashtag-${hashtag.tag}"><input type="checkbox" class="awesome_map-hashtags-selector" checked><span>${hashtag.name}</span></label>`);
86
- // Call a trigger, might be in service for customizations
87
- exports.AwesomeMap.hashtagAdded(hashtag, $('#awesome_map-hashtags-control .hashtags-container'));
88
- }
89
- marker.addTo(layers[hashtag.tag].group);
90
-
91
- const $label = $(`label.awesome_map-hashtag-${hashtag.tag}`);
92
- // update number of items
93
- $label.attr("title", (parseInt($label.attr("title") || 0) + 1) + " " + window.DecidimAwesome.texts.items);
94
- });
95
- }
96
- };
97
-
98
- exports.AwesomeMap.layers = layers;
99
- exports.AwesomeMap.control = control;
100
- exports.AwesomeMap.cluster = cluster;
101
- exports.AwesomeMap.addProposalsControls = addProposalsControls;
102
- exports.AwesomeMap.addMeetingsControls = addMeetingsControls;
103
- exports.AwesomeMap.addSearchControls = addSearchControls;
104
- exports.AwesomeMap.addCategoriesControls = addCategoriesControls;
105
- exports.AwesomeMap.addHashtagsControls = addHashtagsControls;
106
- exports.AwesomeMap.hashtagAdded = $.noop;
107
- })(window);
@@ -1,15 +0,0 @@
1
- $(function () {
2
- // Tries to load the map because we cannot be sure if leaflet and decicim maps is loaded yet (other views can initialize snippets or not)
3
- const waitForMap = ($map) => {
4
- const map = $map.data("map");
5
- if(window.AwesomeMap && window.AwesomeMap.loadMapElements && map) {
6
- window.AwesomeMap.loadMapElements(map);
7
- } else {
8
- setTimeout(() => {
9
- waitForMap($map);
10
- }, 100);
11
- }
12
- };
13
-
14
- waitForMap($("#awesome-map .google-map"));
15
- });
@@ -1,207 +0,0 @@
1
- // = require decidim/decidim_awesome/awesome_map/layers
2
- // = require decidim/decidim_awesome/awesome_map/utilities
3
- // = require decidim/decidim_awesome/awesome_map/markers
4
- // = require decidim/decidim_awesome/awesome_map/categories
5
- // = require decidim/decidim_awesome/awesome_map/proposals
6
- // = require decidim/decidim_awesome/awesome_map/meetings
7
- // = require_self
8
-
9
- ((exports) => {
10
- const {
11
- layers,
12
- hideControls,
13
- cluster,
14
- control,
15
- addProposalsControls,
16
- addMeetingsControls,
17
- addSearchControls,
18
- addCategoriesControls,
19
- addHashtagsControls,
20
- fetchProposals,
21
- fetchMeetings,
22
- options,
23
- show,
24
- components,
25
- amendments,
26
- allMarkers,
27
- drawMarker,
28
- getCategory
29
- } = exports.AwesomeMap;
30
- const $ = exports.$; // eslint-disable-line
31
-
32
- exports.AwesomeMap.allMarkersLoaded = $.noop;
33
-
34
- const autoResizeMap = (map) => {
35
- // Setup center/zoom options if specified, otherwise fitbounds
36
- if(options().center) {
37
- map.setView(options().center, options().zoom);
38
- } else if(cluster.getBounds().isValid()) {
39
- map.fitBounds(cluster.getBounds(), { padding: [50, 50] });
40
- }
41
- };
42
-
43
- exports.AwesomeMap.loadMapElements = (map) => {
44
- autoResizeMap(map);
45
- // legends
46
- control.addTo(map);
47
- cluster.addTo(map);
48
- if(hideControls()) {
49
- $(control.getContainer()).hide()
50
- }
51
-
52
- // Load markers
53
- components().forEach((component) => {
54
- if(component.type == "proposals") {
55
- addProposalsControls(map, component);
56
-
57
- fetchProposals(component, '', (element, marker) => {
58
- // console.log(element.state, show[element.state || 'notAnswered'], show, element);
59
- if(show()[element.state || 'notAnswered']) {
60
- drawMarker(element, marker, component).addTo(layers.proposals.group);
61
- // Add hashtags menu items here, only hashtags with proposals associated will be present
62
- if(options().menu.hashtags) {
63
- addHashtagsControls(map, element.hashtags, marker);
64
- }
65
- }
66
- }, () => { // final call
67
- // Setup center/zoom options if specified, otherwise fitbounds
68
- autoResizeMap(map);
69
-
70
- allMarkers.forEach((item) => {
71
- // add marker to amendments layers if it's an amendment
72
- if(amendments.find((a) => a == item.element.id)) {
73
- item.marker.removeFrom(layers.proposals.group);
74
- if(options().menu.amendments) {
75
- item.marker.addTo(layers.amendments.group);
76
- }
77
- }
78
- });
79
- // Call a trigger, might be useful for customizations
80
- exports.AwesomeMap.allMarkersLoaded();
81
- });
82
- }
83
-
84
- if(options().menu.meetings && component.type == "meetings") {
85
- addMeetingsControls(map, component);
86
-
87
- fetchMeetings(component, '', (element, marker) => {
88
- drawMarker(element, marker, component).addTo(layers.meetings.group);
89
- }, () => autoResizeMap(map) );
90
- }
91
- });
92
-
93
- /*
94
- * We add all categories and hide those that have no proposals
95
- * This is done this way to ensure all parent categories are displayed
96
- * even if the have not proposals associated
97
- */
98
- addSearchControls(map);
99
- addCategoriesControls(map);
100
-
101
- // category events
102
- $("#awesome-map").on("change", ".awesome_map-categories-selector", (e) => {
103
- e.preventDefault();
104
- e.stopPropagation();
105
- const id = $(e.target).closest("label").data("layer");
106
- const cat = getCategory(id);
107
- // console.log("changed, layer", id, "cat", cat, "checked", e.target.checked, e);
108
- if(cat) {
109
- const layer = layers[cat.id];
110
- if(e.target.checked) {
111
- // show group of markers
112
- map.addLayer(layer.group);
113
-
114
- // if it's a children, put the parent to indeterminate
115
- indeterminateInput(cat.parent);
116
- } else {
117
- // hide group of markers
118
- map.removeLayer(layer.group);
119
- // if it's a children, put the parent to indeterminate
120
- cat.children().forEach((c) => {
121
- let $el = $(`.awesome_map-category-${c.id}`);
122
- if($el.parent().prev().prop("checked")) {
123
- $el.click();
124
- }
125
- });
126
- }
127
- // sync tags
128
- updateHashtagLayers();
129
- }
130
- });
131
-
132
- const indeterminateInput = (id) => {
133
- $('[class^="awesome_map-category-"]').parent().prev().prop("indeterminate", false);
134
- if(id) {
135
- let $input = $(`.awesome_map-category-${id}`).parent().prev();
136
- if(!$input.prop("checked")) {
137
- $input.prop("indeterminate", true);
138
- }
139
- }
140
- };
141
-
142
- const updateHashtagLayers = () => {
143
- // hide all
144
- $(".awesome_map-hashtags-selector").each((_idx, el) => {
145
- const layer = layers[$(el).closest("label").data("layer")];
146
- if(layer) {
147
- map.removeLayer(layer.group);
148
- }
149
- });
150
- // show selected only
151
- $(".awesome_map-hashtags-selector:checked").each((_idx, el) => {
152
- const layer = layers[$(el).closest("label").data("layer")];
153
- if(layer) {
154
- map.addLayer(layer.group);
155
- }
156
- });
157
- // hide non-selected categories
158
- $(".awesome_map-categories-selector:not(:checked)").each((_idx, el) => {
159
- const layer = layers[$(el).closest("label").data("layer")];
160
- if(layer) {
161
- map.addLayer(layer.group);
162
- map.removeLayer(layer.group);
163
- }
164
- });
165
- };
166
-
167
- // hashtag events
168
- $("#awesome-map").on("change", ".awesome_map-hashtags-selector", (e) => {
169
- e.preventDefault();
170
- e.stopPropagation();
171
- const tag = $(e.target).closest("label").data("layer");
172
- // console.log("changed, layer", tag, "checked", e.target.checked, e);
173
- if(tag) {
174
- updateHashtagLayers();
175
- }
176
- });
177
-
178
- // select/deselect all tags
179
- $("#awesome-map").on("click", ".awesome_map-toggle_all_tags", (e) => {
180
- e.preventDefault();
181
- e.stopPropagation();
182
- $("#awesome-map .awesome_map-hashtags-selector").prop("checked", $("#awesome-map .awesome_map-hashtags-selector:checked").length < $("#awesome-map .awesome_map-hashtags-selector").length);
183
- updateHashtagLayers();
184
- });
185
-
186
- // sub-layer hashtag title toggle
187
- $("#awesome-map").on("click", ".awesome_map-title-control", (e) => {
188
- e.preventDefault();
189
- e.stopPropagation();
190
- $("#awesome_map-hashtags-control").toggleClass("active");
191
- });
192
- };
193
-
194
- // order hashtags alphabetically
195
- exports.AwesomeMap.hashtagAdded = (_hashtag, $div) => {
196
- let $last = $div.contents("label:last");
197
- if($last.prev("label").length) {
198
- // move the label to order it alphabetically
199
- $div.contents("label").each((_idx, el) => {
200
- if($(el).text().localeCompare($last.text()) > 0) {
201
- $(el).before($last);
202
- return false;
203
- }
204
- });
205
- }
206
- };
207
- })(window);
@@ -1,56 +0,0 @@
1
- // = require jsrender.min
2
- // = require decidim/decidim_awesome/awesome_map/layers
3
- // = require decidim/decidim_awesome/awesome_map/categories
4
-
5
- ((exports) => {
6
- const { getCategory, layers } = exports.AwesomeMap;
7
-
8
- const popupMeetingTemplateId = "marker-meeting-popup";
9
- const popupProposalTemplateId = "marker-proposal-popup";
10
- const allMarkers = [];
11
-
12
- const drawMarker = (element, marker, component) => {
13
- let tmpl = component.type === "proposals" ? popupProposalTemplateId : popupMeetingTemplateId,
14
- node = document.createElement("div");
15
-
16
- $($.templates(`#${tmpl}`).render(element)).appendTo(node);
17
-
18
- marker.bindPopup(node, {
19
- maxwidth: 640,
20
- minWidth: 500,
21
- keepInView: true,
22
- className: "map-info"
23
- }).openPopup();
24
-
25
- allMarkers.push({
26
- marker: marker,
27
- component: component,
28
- element: element
29
- });
30
-
31
- // Add to category layer
32
- let cat = getCategory(element.category);
33
- if(layers[cat.id]) {
34
- $('#awesome_map-categories-control').show();
35
- marker.addTo(layers[cat.id].group);
36
- // show category if hidden
37
- const $label = $(`label.awesome_map-category-${cat.id}`);
38
- const $parent = $(`label.awesome_map-category-${cat.parent}`);
39
- $label.show();
40
- // update number of items
41
- $label.attr("title", (parseInt($label.attr("title") || 0) + 1) + " " + window.DecidimAwesome.texts.items);
42
- // show parent if apply
43
- $parent.show();
44
- $parent.attr("title", (parseInt($parent.attr("title") || 0) + 1) + " " + window.DecidimAwesome.texts.items);
45
- }
46
-
47
- // update component stats
48
- const $component = $(`#awesome_map-component_${component.id}`);
49
- $component.attr("title", parseInt($component.attr("title") || 0) + 1);
50
-
51
- return marker;
52
- };
53
-
54
- exports.AwesomeMap.allMarkers = allMarkers;
55
- exports.AwesomeMap.drawMarker = drawMarker;
56
- })(window);