decidim-decidim_awesome 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/app/assets/config/decidim_admin_decidim_awesome_manifest.js +1 -0
  4. data/app/assets/config/decidim_decidim_awesome_manifest.js +1 -1
  5. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6 +2 -2
  6. data/app/assets/javascripts/decidim/decidim_awesome/editors/legacy_quill_editor.js.es6 +160 -0
  7. data/app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6 +16 -5
  8. data/app/assets/javascripts/decidim/decidim_awesome/legacy_admin.js +3 -0
  9. data/app/assets/javascripts/decidim/decidim_awesome/legacy_application.js +4 -0
  10. data/app/awesome_overrides/presenters/decidim/proposals/proposal_presenter_override.rb +3 -9
  11. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +1 -1
  12. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +2 -2
  13. data/app/controllers/decidim/decidim_awesome/map_component/map_controller.rb +1 -4
  14. data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -48
  15. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +0 -5
  16. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +1 -1
  17. data/app/views/decidim/decidim_awesome/map_component/map/show.html.erb +2 -32
  18. data/app/views/v0.23/layouts/decidim/_head.html.erb +1 -1
  19. data/app/views/v0.23/layouts/decidim/admin/_header.html.erb +1 -1
  20. data/app/views/{v0.22 → v0.24}/layouts/decidim/_head.html.erb +2 -0
  21. data/app/views/{v0.22 → v0.24}/layouts/decidim/admin/_header.html.erb +1 -0
  22. data/lib/decidim/decidim_awesome/checksums.yml +3 -6
  23. data/lib/decidim/decidim_awesome/config.rb +1 -3
  24. data/lib/decidim/decidim_awesome/engine.rb +2 -2
  25. data/lib/decidim/decidim_awesome/iframe_component/component.rb +1 -1
  26. data/lib/decidim/decidim_awesome/map_component/component.rb +1 -1
  27. data/lib/decidim/decidim_awesome/menu_hacker.rb +1 -1
  28. data/lib/decidim/decidim_awesome/system_checker.rb +1 -1
  29. data/lib/decidim/decidim_awesome/version.rb +2 -2
  30. metadata +21 -20
  31. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6 +0 -218
  32. data/app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_proposals.js.es6 +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32cc1fc0147bd8a5daf75a5deab25f18ede902f0ceb8c9a4a0073528dec97568
4
- data.tar.gz: 2ed32bdc25c0e2ab7b5b8b7362adad7a191634290b896e6f3e0f630687ba0824
3
+ metadata.gz: 431402f5979263fb5886d2285f64cb81bea75efd183e461d87cc3fff5a5f31fd
4
+ data.tar.gz: 8b842985079085bd7ed837287e051572a6bbe51de233f8b1ccb5b0df63d35316
5
5
  SHA512:
6
- metadata.gz: df2b4b28994f8ad2f11e87080c683edb9fc8f215c76a7b6e15ebd27df018317fb64daf5f1c9b3910d2bd6c676d746caadec6defdaeb57716509cb9b3b33b67d8
7
- data.tar.gz: 95a51e3cf9e87c8b2c9756ad6ab11ab1ee90d252b16f99740a20e190742bb0017e88bb36357ac2031d588bcf792b86d1337fe0685c7dfb309789beb4a7aa6797
6
+ metadata.gz: 99427312051b0d7f486ba7070cd8eaab79f370cdc8c200e7b0f38de3f90236399fa6c44d86204d2e90d97cda0f15ab62b42a778bbfa8114126df4e70b86b9605
7
+ data.tar.gz: 31cab4d0be0fc9d3add07cf9e33976cf6708ed96771d55c57415b9d0fcd060f09a8f1b2275fbeca284c7e9e168494849c40bc02bd1db6fedc0b03bbf2eb78100
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Decidim::DecidimAwesome
2
2
 
3
- [![Build](https://github.com/Platoniq/decidim-module-decidim_awesome/workflows/Build/badge.svg)](https://github.com/Platoniq/decidim-module-decidim_awesome/actions)
3
+ [![[CI] Test 0.24](https://github.com/Platoniq/decidim-module-decidim_awesome/actions/workflows/test%20-24.yml/badge.svg)](https://github.com/Platoniq/decidim-module-decidim_awesome/actions/workflows/test%20-24.yml)
4
+ [![[CI] Test 0.23](https://github.com/Platoniq/decidim-module-decidim_awesome/actions/workflows/test%20-23.yml/badge.svg)](https://github.com/Platoniq/decidim-module-decidim_awesome/actions/workflows/test%20-23.yml)
4
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/2dada53525dd5a944089/maintainability)](https://codeclimate.com/github/Platoniq/decidim-module-decidim_awesome/maintainability)
5
6
  [![Test Coverage](https://codecov.io/gh/Platoniq/decidim-module-decidim_awesome/branch/master/graph/badge.svg?token=TFBMCLLZJG)](undefined)
6
7
 
@@ -135,7 +136,7 @@ Some things in the road-map:
135
136
  Add this line to your application's Gemfile:
136
137
 
137
138
  ```ruby
138
- gem "decidim-decidim_awesome", "~> 0.6.6"
139
+ gem "decidim-decidim_awesome", "~> 0.7.0"
139
140
  ```
140
141
 
141
142
  And then execute:
@@ -152,6 +153,7 @@ Depending on your Decidim version, choose the corresponding Awesome version to e
152
153
  |---|---|
153
154
  | 0.5.x | 0.21.x, 0.22.x |
154
155
  | 0.6.x | 0.22.x, 0.23.x |
156
+ | 0.7.x | 0.23.x, 0.24.x |
155
157
 
156
158
  ## Configuration
157
159
 
@@ -1,2 +1,3 @@
1
1
  // = link decidim/decidim_awesome/admin.js
2
+ // = link decidim/decidim_awesome/legacy_admin.js
2
3
  // = link decidim/decidim_awesome/admin/form_exit_warn.js
@@ -1,3 +1,3 @@
1
+ // = link decidim/decidim_awesome/legacy_application.js
1
2
  // = link decidim/decidim_awesome/application.js
2
- // = link decidim/decidim_awesome/awesome_map/legacy_map.js
3
3
  // = link decidim/decidim_awesome/awesome_map/map.js
@@ -101,7 +101,7 @@
101
101
  };
102
102
 
103
103
  const fetchMeetings = (component, after, callback, finalCall = () => {}) => {
104
-
104
+
105
105
  const variables = {
106
106
  "id": component.id,
107
107
  "after": after
@@ -111,7 +111,7 @@
111
111
  if(result) {
112
112
  result.component.meetings.edges.forEach((element) => {
113
113
  if(!element.node) return;
114
-
114
+
115
115
  if(element.node.coordinates) {
116
116
  element.node.link = component.url + '/meetings/' + element.node.id;
117
117
  createMarker(element.node, callback);
@@ -0,0 +1,160 @@
1
+ // = require image-upload.min
2
+ // = require image-resize.min
3
+ // = require inscrybmde.min.js
4
+ // = require inline-attachment.js
5
+ // = require codemirror-4.inline-attachment.js
6
+ // = require jquery.inline-attachment.js
7
+ // = require_self
8
+
9
+ ((exports) => {
10
+ exports.DecidimAwesome = exports.DecidimAwesome || {};
11
+
12
+ // Redefines Quill editor with images
13
+ if(exports.DecidimAwesome.allow_images_in_full_editor || exports.DecidimAwesome.allow_images_in_small_editor || exports.DecidimAwesome.use_markdown_editor) {
14
+
15
+ const quillFormats = ["bold", "italic", "link", "underline", "header", "list", "video", "image", "alt"];
16
+
17
+ const createQuillEditor = (container) => {
18
+ const toolbar = $(container).data("toolbar");
19
+ const disabled = $(container).data("disabled");
20
+
21
+ let quillToolbar = [
22
+ ["bold", "italic", "underline"],
23
+ [{ list: "ordered" }, { list: "bullet" }],
24
+ ["link", "clean"]
25
+ ];
26
+
27
+ let addImage = false;
28
+
29
+ if (toolbar === "full") {
30
+ quillToolbar = [
31
+ [{ header: [1, 2, 3, 4, 5, 6, false] }],
32
+ ...quillToolbar
33
+ ];
34
+ if(exports.DecidimAwesome.allow_images_in_full_editor) {
35
+ quillToolbar.push(["video", "image"]);
36
+ addImage = true;
37
+ } else {
38
+ quillToolbar.push(["video"]);
39
+ }
40
+ } else if (toolbar === "basic") {
41
+ if(exports.DecidimAwesome.allow_images_in_small_editor) {
42
+ quillToolbar.push(["video", "image"]);
43
+ addImage = true;
44
+ } else {
45
+ quillToolbar.push(["video"]);
46
+ }
47
+ } else if(exports.DecidimAwesome.allow_images_in_small_editor) {
48
+ quillToolbar.push(["image"]);
49
+ addImage = true;
50
+ }
51
+
52
+ let modules = {
53
+ toolbar: quillToolbar
54
+ };
55
+ const $input = $(container).siblings('input[type="hidden"]');
56
+ container.innerHTML = $input.val() || "";
57
+ const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
58
+
59
+ if(addImage) {
60
+ modules.imageResize = {
61
+ modules: ["Resize", "DisplaySize"]
62
+ }
63
+ modules.imageUpload = {
64
+ url: exports.DecidimAwesome.editor_uploader_path, // server url. If the url is empty then the base64 returns
65
+ method: 'POST', // change query method, default 'POST'
66
+ name: 'image', // custom form name
67
+ withCredentials: false, // withCredentials
68
+ headers: { 'X-CSRF-Token': token }, // add custom headers, example { token: 'your-token'}
69
+ // personalize successful callback and call next function to insert new url to the editor
70
+ callbackOK: (serverResponse, next) => {
71
+ $(quill.getModule("toolbar").container).last().removeClass('editor-loading')
72
+ next(serverResponse.url);
73
+ },
74
+ // personalize failed callback
75
+ callbackKO: serverError => {
76
+ $(quill.getModule("toolbar").container).last().removeClass('editor-loading')
77
+ alert(serverError.message);
78
+ },
79
+ checkBeforeSend: (file, next) => {
80
+ $(quill.getModule("toolbar").container).last().addClass('editor-loading')
81
+ next(file); // go back to component and send to the server
82
+ }
83
+ }
84
+ }
85
+
86
+ const quill = new Quill(container, {
87
+ modules: modules,
88
+ formats: quillFormats,
89
+ theme: "snow"
90
+ });
91
+
92
+ if (disabled) {
93
+ quill.disable();
94
+ }
95
+
96
+ quill.on("text-change", () => {
97
+ const text = quill.getText();
98
+
99
+ // Triggers CustomEvent with the cursor position
100
+ // It is required in input_mentions.js
101
+ let event = new CustomEvent("quill-position", {
102
+ detail: quill.getSelection()
103
+ });
104
+ container.dispatchEvent(event);
105
+
106
+ if (text === "\n") {
107
+ $input.val("");
108
+ } else {
109
+ $input.val(quill.root.innerHTML);
110
+ }
111
+ });
112
+
113
+ if(addImage) {
114
+ const t = window.DecidimAwesome.texts["drag_and_drop_image"];
115
+ $(container).after(`<p class="help-text" style="margin-top:-1.5rem;">${t}</p>`);
116
+ }
117
+ };
118
+
119
+ const createMarkdownEditor = (container) => {
120
+ $(container).hide();
121
+ const t = window.DecidimAwesome.texts["drag_and_drop_image"];
122
+ const token = $( 'meta[name="csrf-token"]' ).attr( 'content' );
123
+ const $input = $(container).siblings('input[type="hidden"]');
124
+ const inscrybmde = new InscrybMDE({
125
+ element: $input[0],
126
+ spellChecker: false,
127
+ renderingConfig: {
128
+ codeSyntaxHighlighting: true
129
+ }
130
+ });
131
+
132
+ // Allow image upload
133
+ if(window.DecidimAwesome.allow_images_in_markdown_editor) {
134
+ $(inscrybmde.gui.statusbar).prepend(`<span class="help-text" style="float:left;margin:0;text-align:left;">${t}</span>`);
135
+ inlineAttachment.editors.codemirror4.attach(inscrybmde.codemirror, {
136
+ uploadUrl: window.DecidimAwesome.editor_uploader_path,
137
+ uploadFieldName: "image",
138
+ jsonFieldName: "url",
139
+ extraHeaders: { "X-CSRF-Token": token }
140
+ });
141
+ }
142
+ };
143
+
144
+ const quillEditor = () => {
145
+ $(".editor-container").each((idx, container) => {
146
+ if(exports.DecidimAwesome.use_markdown_editor) {
147
+ createMarkdownEditor(container);
148
+ } else {
149
+ createQuillEditor(container);
150
+ }
151
+ });
152
+ };
153
+
154
+ exports.Decidim = exports.Decidim || {};
155
+ exports.Decidim.quillEditor = quillEditor;
156
+ exports.Decidim.createQuillEditor = createQuillEditor;
157
+ exports.Decidim.createMarkdownEditor = createMarkdownEditor;
158
+
159
+ }
160
+ })(window);
@@ -12,14 +12,14 @@
12
12
  // Redefines Quill editor with images
13
13
  if(exports.DecidimAwesome.allow_images_in_full_editor || exports.DecidimAwesome.allow_images_in_small_editor || exports.DecidimAwesome.use_markdown_editor) {
14
14
 
15
- const quillFormats = ["bold", "italic", "link", "underline", "header", "list", "video", "image", "alt"];
15
+ const quillFormats = ["bold", "italic", "link", "underline", "header", "list", "video", "image", "alt", "break"];
16
16
 
17
17
  const createQuillEditor = (container) => {
18
18
  const toolbar = $(container).data("toolbar");
19
19
  const disabled = $(container).data("disabled");
20
20
 
21
21
  let quillToolbar = [
22
- ["bold", "italic", "underline"],
22
+ ["bold", "italic", "underline", "linebreak"],
23
23
  [{ list: "ordered" }, { list: "bullet" }],
24
24
  ["link", "clean"]
25
25
  ];
@@ -50,7 +50,13 @@
50
50
  }
51
51
 
52
52
  let modules = {
53
- toolbar: quillToolbar
53
+ linebreak: {},
54
+ toolbar: {
55
+ container: quillToolbar,
56
+ handlers: {
57
+ "linebreak": exports.Decidim.Editor.lineBreakButtonHandler
58
+ }
59
+ }
54
60
  };
55
61
  const $input = $(container).siblings('input[type="hidden"]');
56
62
  container.innerHTML = $input.val() || "";
@@ -109,11 +115,16 @@
109
115
  $input.val(quill.root.innerHTML);
110
116
  }
111
117
  });
112
-
118
+
113
119
  if(addImage) {
114
120
  const t = window.DecidimAwesome.texts["drag_and_drop_image"];
115
121
  $(container).after(`<p class="help-text" style="margin-top:-1.5rem;">${t}</p>`);
116
122
  }
123
+
124
+ // After editor is ready, linebreak_module deletes two extraneous new lines
125
+ quill.emitter.emit("editor-ready");
126
+
127
+ return quill;
117
128
  };
118
129
 
119
130
  const createMarkdownEditor = (container) => {
@@ -157,4 +168,4 @@
157
168
  exports.Decidim.createMarkdownEditor = createMarkdownEditor;
158
169
 
159
170
  }
160
- })(window);
171
+ })(window);
@@ -0,0 +1,3 @@
1
+ // = require decidim/decidim_awesome/admin/constraints
2
+ // = require decidim/decidim_awesome/admin/codemirror
3
+ // = require decidim/decidim_awesome/editors/legacy_quill_editor
@@ -0,0 +1,4 @@
1
+ // = require decidim/decidim_awesome/proposals/images
2
+ // = require decidim/decidim_awesome/editors/legacy_quill_editor
3
+ // = require decidim/decidim_awesome/editors/markdown_view
4
+ // = require decidim/decidim_awesome/forms/autosave
@@ -25,15 +25,9 @@ Decidim::Proposals::ProposalPresenter.class_eval do
25
25
  # rubocop:enable Metrics/CyclomaticComplexity
26
26
  # rubocop:enable Metrics/PerceivedComplexity
27
27
 
28
- if defined? translated_attribute
29
- text = translated_attribute(proposal.body)
30
-
31
- text = strip_tags(sanitize_text(text)) if strip_tags
32
- else
33
- # TODO: remove when 0.22 is diched
34
- text = proposal.body
35
- text = strip_tags(text) if strip_tags
36
- end
28
+ # TODO: remove when 0.23 is ditched
29
+ text = translated_attribute(proposal.body)
30
+ text = strip_tags(sanitize_text(text)) if strip_tags
37
31
 
38
32
  renderer = Decidim::ContentRenderers::HashtagRenderer.new(text)
39
33
  text = renderer.render(links: links, extras: extras).html_safe
@@ -37,7 +37,7 @@ module Decidim
37
37
  end
38
38
 
39
39
  def decidim_version_valid?
40
- Gem::Dependency.new("", DecidimAwesome::COMPAT_DECIDIM_VERSION).match?("", decidim_version)
40
+ Gem::Dependency.new("", DecidimAwesome::COMPAT_DECIDIM_VERSION).match?("", decidim_version, true)
41
41
  end
42
42
 
43
43
  def head_addons(part)
@@ -85,7 +85,7 @@ module Decidim
85
85
  end
86
86
 
87
87
  def current_items
88
- @current_items ||= current_menu.items(true)
88
+ @current_items ||= current_menu.items(include_invisible: true)
89
89
  end
90
90
 
91
91
  def current_menu
@@ -101,7 +101,7 @@ module Decidim
101
101
  end
102
102
 
103
103
  def visibility_options
104
- MenuForm::VISIBILITY_STATES.map { |key| [I18n.t(".menu_hacks.form.visibility.#{key}", scope: "decidim.decidim_awesome.admin"), key] }.to_h
104
+ MenuForm::VISIBILITY_STATES.index_by { |key| I18n.t(".menu_hacks.form.visibility.#{key}", scope: "decidim.decidim_awesome.admin") }
105
105
  end
106
106
 
107
107
  def target_options
@@ -14,10 +14,7 @@ module Decidim
14
14
  private
15
15
 
16
16
  def maps_enabled?
17
- return Decidim::Map.configured? if defined?(Decidim::Map)
18
-
19
- # TODO: remove when 0.22 support is diched
20
- Decidim.geocoder.present?
17
+ Decidim::Map.configured?
21
18
  end
22
19
 
23
20
  def map_components
@@ -6,8 +6,6 @@ module Decidim
6
6
  include Decidim::MapHelper
7
7
 
8
8
  def awesome_map_for(components, &block)
9
- return legacy_map_for(components, &block) unless defined?(Decidim::Map)
10
-
11
9
  map = dynamic_map_for({}, {}, &block)
12
10
  return unless map
13
11
 
@@ -39,50 +37,6 @@ module Decidim
39
37
  content_tag(:div, map, map_html_options)
40
38
  end
41
39
 
42
- # TODO: remove when 0.22 support is diched
43
- def legacy_map_for(components)
44
- return if Decidim.geocoder.blank?
45
-
46
- map_html_options = {
47
- class: "google-map",
48
- id: "map",
49
- "data-components" => components.map do |component|
50
- {
51
- id: component.id,
52
- type: component.manifest.name,
53
- name: translated_attribute(component.name),
54
- url: Decidim::EngineRouter.main_proxy(component).root_path,
55
- amendments: component.manifest.name == :proposals ? Decidim::Proposals::Proposal.where(component: component).only_emendations.count : 0
56
- }
57
- end.to_json,
58
- "data-collapsed" => current_component.settings.collapse,
59
- "data-show-not-answered" => current_component.current_settings.show_not_answered,
60
- "data-show-accepted" => current_component.current_settings.show_accepted,
61
- "data-show-withdrawn" => current_component.current_settings.show_withdrawn,
62
- "data-show-evaluating" => current_component.current_settings.show_evaluating,
63
- "data-show-rejected" => current_component.current_settings.show_rejected,
64
- "data-markers-data" => [].to_json
65
- }
66
-
67
- if Decidim.geocoder[:here_api_key]
68
- map_html_options["data-here-api-key"] = Decidim.geocoder[:here_api_key]
69
- else
70
- # Compatibility mode for old api_id/app_code configurations
71
- map_html_options["data-here-app-id"] = Decidim.geocoder[:here_app_id]
72
- map_html_options["data-here-app-code"] = Decidim.geocoder[:here_app_code]
73
- end
74
-
75
- content = capture { yield }.html_safe
76
- help = content_tag(:div, class: "map__help") do
77
- content_tag(:p, I18n.t("screen_reader_explanation", scope: "decidim.map.dynamic"), class: "show-for-sr")
78
- end
79
- content_tag :div, class: "awesome-map" do
80
- map = content_tag(:div, "", map_html_options)
81
-
82
- help + map + content
83
- end
84
- end
85
-
86
40
  # rubocop:disable Rails/HelperInstanceVariable
87
41
  def current_categories
88
42
  return @current_categories if @current_categories
@@ -102,6 +56,7 @@ module Decidim
102
56
 
103
57
  private
104
58
 
59
+ # rubocop:disable Style/FormatStringToken
105
60
  def append_category(category)
106
61
  @h += @golden_ratio_conjugate
107
62
  @h %= 1
@@ -114,11 +69,12 @@ module Decidim
114
69
  color: format("#%02x%02x%02x", r, g, b)
115
70
  )
116
71
  end
72
+ # rubocop:enable Style/FormatStringToken
117
73
  # rubocop:enable Rails/HelperInstanceVariable
118
74
 
119
- # rubocop:disable Naming/UncommunicativeMethodParamName
120
75
  # HSV values in [0..1[
121
76
  # returns [r, g, b] values from 0 to 255
77
+ # rubocop:disable Naming/MethodParameterName
122
78
  def hsv_to_rgb(h, s, v)
123
79
  h_i = (h * 6).to_i
124
80
  f = h * 6 - h_i
@@ -157,7 +113,7 @@ module Decidim
157
113
  end
158
114
  [(r * 256).to_i, (g * 256).to_i, (b * 256).to_i]
159
115
  end
160
- # rubocop:enable Naming/UncommunicativeMethodParamName
161
116
  end
117
+ # rubocop:enable Naming/MethodParameterName
162
118
  end
163
119
  end
@@ -10,11 +10,6 @@ module Decidim
10
10
  process resize_to_fit: [nil, 237]
11
11
  end
12
12
 
13
- # TODO: remove when diching 0.22 support
14
- def extension_white_list
15
- %w(jpg jpeg png)
16
- end
17
-
18
13
  def extension_whitelist
19
14
  %w(jpg jpeg png)
20
15
  end
@@ -57,7 +57,7 @@
57
57
  <ul class="vertical menu">
58
58
  <% {
59
59
  CSS: "//link[@rel='stylesheet'][contains(@href,'decidim_awesome/admin')]",
60
- JavaScript: "//script[contains(@src,'decidim_awesome/admin')]"
60
+ JavaScript: "//script[contains(@src,'decidim_awesome')]"
61
61
  }.each do |part, xpath| %>
62
62
  <li>
63
63
  <%= part %>
@@ -2,28 +2,6 @@
2
2
 
3
3
  <%= awesome_map_for map_components do %>
4
4
 
5
- <script id="legacy-marker-proposal-popup" type="text/x-jsrender">
6
- <div class="map-info__content">
7
- <h3>{{>title}}</h3>
8
- <div id="bodyContent">
9
- <div class="description">{{:body}}</div>
10
- <div class="map__date-adress">
11
- <div class="address card__extra">
12
- <div class="address__icon">{{:icon}}</div>
13
- <div class="address__details">
14
- <span>{{>address}}</span><br>
15
- </div>
16
- </div>
17
- </div>
18
- <div class="map-info__button">
19
- <a href="{{>link}}" class="button button--sc">
20
- <%= t(".view_proposal") %>
21
- </a>
22
- </div>
23
- </div>
24
- </div>
25
- </script>
26
-
27
5
  <script id="marker-proposal-popup" type="text/x-jsrender">
28
6
  <div class="map-info__content">
29
7
  <h3>{{>title.translation}}</h3>
@@ -82,11 +60,7 @@
82
60
  height: <%= current_component.settings.map_height %>px;
83
61
  }
84
62
  <% current_categories.each do |category| %>
85
- /* TODO: remove when diching 0.22 */
86
- i.awesome_map-category_<%= category[:id] %> {
87
- margin-left: <%= category[:parent] ? "1" : "0" %>em;
88
- }
89
- .awesome_map-category-<%= category[:id] %> i {
63
+ .awesome_map-category_<%= category[:id] %> {
90
64
  background-color: <%= category[:color] %> !important;
91
65
  }
92
66
  <% end %>
@@ -95,9 +69,5 @@
95
69
  window.AwesomeMap = window.AwesomeMap || {};
96
70
  window.AwesomeMap.categories = <%= current_categories.to_json.html_safe %>;
97
71
  </script>
98
- <% if version_prefix == "v0.23" %>
99
- <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
100
- <% else %>
101
- <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/legacy_map" %>
102
- <% end %>
72
+ <%= javascript_include_tag "decidim/decidim_awesome/awesome_map/map" %>
103
73
  <% end %>
@@ -36,4 +36,4 @@
36
36
  <%= content_for :header_snippets %>
37
37
 
38
38
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
39
- <%= javascript_include_tag "decidim/decidim_awesome/application" %>
39
+ <%= javascript_include_tag "decidim/decidim_awesome/legacy_application" %>
@@ -9,4 +9,4 @@
9
9
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
10
10
 
11
11
  <%= stylesheet_link_tag "decidim/decidim_awesome/admin", media: "all" %>
12
- <%= javascript_include_tag "decidim/decidim_awesome/admin" %>
12
+ <%= javascript_include_tag "decidim/decidim_awesome/legacy_admin" %>
@@ -32,6 +32,8 @@
32
32
 
33
33
  <%= render partial: "layouts/decidim/head_extra" %>
34
34
  <%== current_organization.header_snippets if Decidim.enable_html_header_snippets %>
35
+ <%= snippets.display(:head) %>
36
+ <%= content_for :header_snippets %>
35
37
 
36
38
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
37
39
  <%= javascript_include_tag "decidim/decidim_awesome/application" %>
@@ -4,6 +4,7 @@
4
4
  <%= javascript_include_tag "decidim/confirm" %>
5
5
  <%= javascript_include_tag "decidim/admin/application" %>
6
6
  <%= organization_colors %>
7
+ <%= snippets.display(:head) %>
7
8
 
8
9
  <%= render partial: "layouts/decidim/decidim_awesome/awesome_config" %>
9
10
 
@@ -1,23 +1,20 @@
1
1
  decidim-admin:
2
2
  /app/views/layouts/decidim/admin/_header.html.erb:
3
- decidim-0.22: 6af51ec6b8a760b0ee6e00a7834f5f9a
4
3
  decidim-0.23: 45f0e15f1b02a1c1a73b1a2184fd55af
5
4
  decidim-core:
6
5
  /app/views/layouts/decidim/_head.html.erb:
7
- decidim-0.22: bf16a58cd9e6d3f73e6875ff3d0b1e48
8
6
  decidim-0.23: e7f5eea07e884665474948ea750fc720
9
7
  /app/assets/javascripts/decidim/editor.js.es6:
10
- decidim-0.22: 797d0ec1c9e79453cf6718f82d2fdd27
11
8
  decidim-0.23: cb059b8ff0ffc62c67eb99d8d7a6637b
12
9
  decidim-0.23.1: 4787f73f0f33661e3897404f10019d26
10
+ decidim-0.24: 35262835144421baa700a34ca0939396
13
11
  /app/presenters/decidim/menu_presenter.rb:
14
- decidim-0.22: 042743c44a2aff284b493c7bebbccbb3
15
12
  decidim-0.23: 042743c44a2aff284b493c7bebbccbb3
13
+ decidim-0.24: 284c96f19cd98df091d8178d6db5a8b3
16
14
  /app/presenters/decidim/menu_item_presenter.rb:
17
- decidim-0.22: 70db39954b5840924530bf94d2a0a73a
18
15
  decidim-0.23: 70db39954b5840924530bf94d2a0a73a
19
16
  decidim-proposals:
20
17
  /app/presenters/decidim/proposals/proposal_presenter.rb:
21
- decidim-0.22: 7d60c8310d7fa4e38d9a27080c22b12c
22
18
  decidim-0.23: 437c0c25151f605401a4f14d090ba5ea
23
19
  decidim-0.23.1: 892021b2ce9ac10c2e1b738e6948cde0
20
+ decidim-0.24: 0b6717a3eeecad03277cea5ed6ba1fb7
@@ -119,9 +119,7 @@ module Decidim
119
119
  def enabled_for_organization?(key)
120
120
  case key.to_sym
121
121
  when :allow_images_in_proposals
122
- if @organization.respond_to? :rich_text_editor_in_public_views
123
- return false if @organization.rich_text_editor_in_public_views
124
- end
122
+ return false if @organization.rich_text_editor_in_public_views
125
123
  end
126
124
  true
127
125
  end
@@ -15,13 +15,13 @@ module Decidim
15
15
  end
16
16
 
17
17
  initializer "decidim_awesome.view_helpers" do
18
- ActionView::Base.send :include, AwesomeHelpers
18
+ ActionView::Base.include AwesomeHelpers
19
19
  end
20
20
 
21
21
  initializer "decidim_decidim_awesome.assets" do |app|
22
22
  app.config.assets.precompile += %w(decidim_decidim_awesome_manifest.js decidim_decidim_awesome_manifest.css)
23
23
  # add to precompile any present theme asset
24
- Dir.glob(Rails.root.join("app", "assets", "themes", "*.*")).each do |path|
24
+ Dir.glob(Rails.root.join("app/assets/themes/*.*")).each do |path|
25
25
  app.config.assets.precompile << path
26
26
  end
27
27
  end
@@ -43,7 +43,7 @@ Decidim.register_component(:awesome_iframe) do |component|
43
43
  published_at: Time.current,
44
44
  participatory_space: participatory_space,
45
45
  settings: {
46
- announcement: { en: Faker::Lorem.paragraphs(2).join("\n") }
46
+ announcement: { en: Faker::Lorem.paragraphs(number: 2).join("\n") }
47
47
  }
48
48
  }
49
49
 
@@ -53,7 +53,7 @@ Decidim.register_component(:awesome_map) do |component|
53
53
  published_at: Time.current,
54
54
  participatory_space: participatory_space,
55
55
  settings: {
56
- announcement: { en: Faker::Lorem.paragraphs(2).join("\n") }
56
+ announcement: { en: Faker::Lorem.paragraphs(number: 2).join("\n") }
57
57
  }
58
58
  }
59
59
 
@@ -12,7 +12,7 @@ module Decidim
12
12
  end
13
13
 
14
14
  # returns a combined array of the Decidim defined menu and the hacked stored as config vars
15
- def items(include_invisible = false)
15
+ def items(include_invisible: false)
16
16
  return @items if @items
17
17
 
18
18
  @items = default_items
@@ -14,7 +14,7 @@ module Decidim
14
14
  @overrides = checksums.map do |package, files|
15
15
  props = {
16
16
  spec: ::Gem::Specification.find_by_name(package),
17
- files: files.map { |file, signatures| [file, signatures.values] }.to_h
17
+ files: files.transform_values(&:values)
18
18
  }
19
19
  [package, to_struct(props)]
20
20
  end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-decidim_awesome version.
5
5
  module DecidimAwesome
6
- VERSION = "0.6.7"
7
- COMPAT_DECIDIM_VERSION = [">= 0.22.0", "< 0.24"].freeze
6
+ VERSION = "0.7.0"
7
+ COMPAT_DECIDIM_VERSION = [">= 0.23.0", "< 0.25"].freeze
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-decidim_awesome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
@@ -16,40 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.22.0
19
+ version: 0.23.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.24'
22
+ version: '0.25'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.22.0
29
+ version: 0.23.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.24'
32
+ version: '0.25'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: decidim-core
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 0.22.0
39
+ version: 0.23.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '0.24'
42
+ version: '0.25'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.22.0
49
+ version: 0.23.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '0.24'
52
+ version: '0.25'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: redcarpet
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: 2.3.0
73
+ version: '2.3'
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: 2.3.0
80
+ version: '2.3'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: appraisal
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -98,20 +98,20 @@ dependencies:
98
98
  requirements:
99
99
  - - ">="
100
100
  - !ruby/object:Gem::Version
101
- version: 0.22.0
101
+ version: 0.23.0
102
102
  - - "<"
103
103
  - !ruby/object:Gem::Version
104
- version: '0.24'
104
+ version: '0.25'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
- version: 0.22.0
111
+ version: 0.23.0
112
112
  - - "<"
113
113
  - !ruby/object:Gem::Version
114
- version: '0.24'
114
+ version: '0.25'
115
115
  description: Some usability and UX tweaks for Decidim.
116
116
  email:
117
117
  - ivan@platoniq.net
@@ -137,16 +137,17 @@ files:
137
137
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/categories.js.es6
138
138
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/hashtags.js.es6
139
139
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/layers.js.es6
140
- - app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_map.js.es6
141
- - app/assets/javascripts/decidim/decidim_awesome/awesome_map/legacy_proposals.js.es6
142
140
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/map.js.es6
143
141
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/markers.js.es6
144
142
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/meetings.js.es6
145
143
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/proposals.js.es6
146
144
  - app/assets/javascripts/decidim/decidim_awesome/awesome_map/utilities.js.es6
145
+ - app/assets/javascripts/decidim/decidim_awesome/editors/legacy_quill_editor.js.es6
147
146
  - app/assets/javascripts/decidim/decidim_awesome/editors/markdown_view.js.es6
148
147
  - app/assets/javascripts/decidim/decidim_awesome/editors/quill_editor.js.es6
149
148
  - app/assets/javascripts/decidim/decidim_awesome/forms/autosave.js.es6
149
+ - app/assets/javascripts/decidim/decidim_awesome/legacy_admin.js
150
+ - app/assets/javascripts/decidim/decidim_awesome/legacy_application.js
150
151
  - app/assets/javascripts/decidim/decidim_awesome/proposals/images.js.es6
151
152
  - app/assets/stylesheets/decidim/decidim_awesome/admin.scss
152
153
  - app/assets/stylesheets/decidim/decidim_awesome/admin/codemirror.scss
@@ -222,10 +223,10 @@ files:
222
223
  - app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb
223
224
  - app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb
224
225
  - app/views/layouts/decidim/decidim_awesome/_intergram_widget.html.erb
225
- - app/views/v0.22/layouts/decidim/_head.html.erb
226
- - app/views/v0.22/layouts/decidim/admin/_header.html.erb
227
226
  - app/views/v0.23/layouts/decidim/_head.html.erb
228
227
  - app/views/v0.23/layouts/decidim/admin/_header.html.erb
228
+ - app/views/v0.24/layouts/decidim/_head.html.erb
229
+ - app/views/v0.24/layouts/decidim/admin/_header.html.erb
229
230
  - config/i18n-tasks.yml
230
231
  - config/locales/ca.yml
231
232
  - config/locales/cs.yml
@@ -303,7 +304,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
303
304
  requirements:
304
305
  - - ">="
305
306
  - !ruby/object:Gem::Version
306
- version: '2.5'
307
+ version: '2.7'
307
308
  required_rubygems_version: !ruby/object:Gem::Requirement
308
309
  requirements:
309
310
  - - ">="
@@ -1,218 +0,0 @@
1
- // = require jsrender.min
2
- // = require decidim/map
3
- // = require leaflet.featuregroup.subgroup
4
- // = require decidim/decidim_awesome/awesome_map/utilities
5
- // = require decidim/decidim_awesome/awesome_map/categories
6
- // = require decidim/decidim_awesome/awesome_map/legacy_proposals
7
- // = require decidim/decidim_awesome/awesome_map/meetings
8
- // = require_self
9
-
10
- ((exports) => {
11
- const { fetchProposals, fetchMeetings, getCategory, amendments } = exports.AwesomeMap;
12
-
13
- const collapsedMenu = $("#map").data("collapsed");
14
- const show = {
15
- withdrawn: $("#map").data("show-withdrawn"),
16
- accepted: $("#map").data("show-accepted"),
17
- evaluating: $("#map").data("show-evaluating"),
18
- notAnswered: $("#map").data("show-not-answered"),
19
- rejected: $("#map").data("show-rejected")
20
- };
21
- const components = $("#map").data("components");
22
- const popupMeetingTemplateId = "marker-meeting-popup";
23
- const popupProposalTemplateId = "legacy-marker-proposal-popup";
24
-
25
- const cluster = L.markerClusterGroup();
26
- const layers = {};
27
-
28
- const control = L.control.layers(null, null, {
29
- position: 'topleft',
30
- sortLayers: false,
31
- collapsed: collapsedMenu,
32
- // hideSingleBase: true
33
- });
34
- const allMarkers = [];
35
-
36
- const drawMarker = (element, marker, component) => {
37
- let tmpl = component.type === "proposals" ? popupProposalTemplateId : popupMeetingTemplateId,
38
- node = document.createElement("div");
39
-
40
- $($.templates(`#${tmpl}`).render(element)).appendTo(node);
41
-
42
- marker.bindPopup(node, {
43
- maxwidth: 640,
44
- minWidth: 500,
45
- keepInView: true,
46
- className: "map-info"
47
- }).openPopup();
48
-
49
- allMarkers.push({
50
- marker: marker,
51
- component: component,
52
- element: element
53
- });
54
-
55
- // Add to category layer
56
- let cat = getCategory(element.category);
57
- if(layers[cat.id]) {
58
- marker.addTo(layers[cat.id].group);
59
- // show category if hidden
60
- const $label = $(`.awesome_map-category_${cat.id}`).closest("label");
61
- const $parent = $(`.awesome_map-category_${cat.parent}`).closest("label");
62
- $label.show();
63
- // update number of items
64
- $label.attr("title", parseInt($label.attr("title") || 0) + 1);
65
- // show parent if apply
66
- $parent.show();
67
- $parent.attr("title", parseInt($parent.attr("title") || 0) + 1);
68
- // update component stats
69
- const $component = $(`#awesome_map-component-${component.id}`);
70
- $component.attr("title", parseInt($component.attr("title") || 0) + 1);
71
- }
72
-
73
- return marker;
74
- };
75
-
76
- const loadElements = (map) => {
77
- // legends
78
- control.addTo(map);
79
- cluster.addTo(map);
80
-
81
- // Load markers
82
- components.forEach((component) => {
83
- if(component.type == "proposals") {
84
- // add control layer for proposals
85
- layers.proposals = {
86
- label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.proposals}</span>`,
87
- group: L.featureGroup.subGroup(cluster)
88
- };
89
- control.addOverlay(layers.proposals.group, layers.proposals.label);
90
- layers.proposals.group.addTo(map);
91
-
92
- // add control layer for amendments if any
93
- if(component.amendments) {
94
- layers.amendments = {
95
- label: `<span id="awesome_map-component-${component.d}" title="0">${window.DecidimAwesome.texts.amendments}</span>`,
96
- group: L.featureGroup.subGroup(cluster)
97
- }
98
- control.addOverlay(layers.amendments.group, layers.amendments.label);
99
- layers.amendments.group.addTo(map);
100
- }
101
-
102
- fetchProposals(component, '', (element, marker) => {
103
- if(show[element.state || 'notAnswered']) {
104
- drawMarker(element, marker, component).addTo(layers.proposals.group)
105
- }
106
- }, () => {
107
- // finall call
108
- map.fitBounds(cluster.getBounds(), { padding: [50, 50] });
109
- allMarkers.forEach((item) => {
110
- // add marker to amendments layers if it's an amendment
111
- if(amendments.find((a) => a == item.element.id)) {
112
- item.marker.removeFrom(layers.proposals.group);
113
- item.marker.addTo(layers.amendments.group);
114
- }
115
- });
116
- });
117
- }
118
-
119
- if(component.type == "meetings") {
120
- // add control layer for meetings
121
- layers.meetings = {
122
- label: `<span id="awesome_map-component-${component.id}" title="0">${component.name || window.DecidimAwesome.texts.meetings}</span>`,
123
- group: L.featureGroup.subGroup(cluster)
124
- };
125
- control.addOverlay(layers.meetings.group, layers.meetings.label);
126
- layers.meetings.group.addTo(map);
127
-
128
- fetchMeetings(component, '', (element, marker) => {
129
- drawMarker(element, marker, component).addTo(layers.meetings.group);
130
- }, () => {
131
- map.fitBounds(cluster.getBounds(), { padding: [50, 50] });
132
- });
133
- }
134
- });
135
-
136
-
137
- // add categories control layers
138
- if(window.AwesomeMap.categories.length) {
139
- let lastLayer = layers[Object.keys(layers)[Object.keys(layers).length - 1]];
140
- // Add Categories "title"
141
- if(lastLayer) {
142
- lastLayer.label = `${lastLayer.label}<hr><b>${window.DecidimAwesome.texts.categories}</b>`;
143
- control.removeLayer(lastLayer.group);
144
- control.addOverlay(lastLayer.group, lastLayer.label);
145
- }
146
-
147
- window.AwesomeMap.categories.forEach((category) => {
148
- // add control layer for this category
149
- layers[category.id] = {
150
- label: `<i class="awesome_map-category_${category.id}"></i> ${category.name}`,
151
- group: L.featureGroup.subGroup(cluster)
152
- };
153
- layers[category.id].group.addTo(map);
154
- control.addOverlay(layers[category.id].group, layers[category.id].label);
155
- // hide layer by default, it will be activated if there's any marker in it
156
- setTimeout(() => {
157
- $(`.awesome_map-category_${category.id}`).closest("label").hide();
158
- });
159
- });
160
-
161
- // watch events for subcategories syncronitzation
162
- const getCatFromClass = (name) => {
163
- let id = name.match(/awesome_map-category_(\d+)/)
164
- if(!id) return;
165
- const cat = getCategory(id[1]);
166
- if(!cat || !cat.name) return;
167
-
168
- return cat;
169
- };
170
-
171
- const indeterminateInput = (id) => {
172
- $('[class^="awesome_map-category_"]').parent().prev().prop("indeterminate", false);
173
- if(id) {
174
- let $input = $(`.awesome_map-category_${id}`).parent().prev();
175
- if(!$input.prop("checked")) {
176
- $input.prop("indeterminate", true);
177
- }
178
- }
179
- };
180
-
181
- map.on('overlayadd', (e) => {
182
- const cat = getCatFromClass(e.name);
183
- if(!cat) return;
184
- // if it's a children, put the parent to indeterminate
185
- indeterminateInput(cat.parent);
186
- });
187
-
188
- // on remove a parent category, remove all children
189
- map.on('overlayremove', (e) => {
190
- const cat = getCatFromClass(e.name);
191
- if(!cat) return;
192
- cat.children().forEach((c) => {
193
- let $el = $(`.awesome_map-category_${c.id}`);
194
- if($el.parent().prev().prop("checked")) {
195
- $el.click();
196
- }
197
- });
198
- });
199
-
200
- }
201
-
202
- };
203
-
204
- // currentMap might not be loaded yet so let's delay a bit
205
- // TODO: improve this
206
- const waitMap = () => {
207
- if(exports.Decidim && exports.Decidim.currentMap) {
208
- loadElements(exports.Decidim.currentMap);
209
- } else {
210
- setTimeout(() => {
211
- waitMap();
212
- }, 100);
213
- }
214
- };
215
-
216
- waitMap();
217
-
218
- })(window);
@@ -1,83 +0,0 @@
1
- // = require decidim/decidim_awesome/awesome_map/api_fetcher
2
- // = require decidim/decidim_awesome/awesome_map/categories
3
- // = require decidim/decidim_awesome/awesome_map/utilities
4
-
5
- ((exports) => {
6
- const { getCategory, truncate } = exports.AwesomeMap;
7
- const query = `query ($id: ID!, $after: String!) {
8
- component(id: $id) {
9
- id
10
- __typename
11
- ... on Proposals {
12
- proposals(first: 50, after: $after){
13
- pageInfo {
14
- hasNextPage
15
- endCursor
16
- }
17
- edges {
18
- node {
19
- id
20
- state
21
- title
22
- body
23
- address
24
- coordinates {
25
- latitude
26
- longitude
27
- }
28
- amendments {
29
- emendation {
30
- id
31
- }
32
- }
33
- category {
34
- id
35
- }
36
- }
37
- }
38
- }
39
- }
40
- }
41
- }`;
42
-
43
- const ProposalIcon = L.DivIcon.SVGIcon.DecidimIcon;
44
-
45
- const createMarker = (element, callback) => {
46
- const marker = L.marker([element.coordinates.latitude, element.coordinates.longitude], {
47
- icon: new ProposalIcon({
48
- fillColor: getCategory(element.category).color
49
- })
50
- });
51
-
52
- element.body = truncate(element.body.replace(/\n/g, "<br>"));
53
- callback(element, marker);
54
- };
55
-
56
- const fetchProposals = (component, after, callback, finalCall = () => {}) => {
57
- const variables = {
58
- "id": component.id,
59
- "after": after
60
- };
61
- const api = new ApiFetcher(query, variables);
62
- api.fetchAll((result) => {
63
- if(result) {
64
- result.component.proposals.edges.forEach((element) => {
65
- if(!element.node) return;
66
-
67
- if(element.node.coordinates) {
68
- element.node.link = component.url + '/proposals/' + element.node.id;
69
- createMarker(element.node, callback);
70
- }
71
- });
72
- if (result.component.proposals.pageInfo.hasNextPage) {
73
- fetchProposals(component, result.component.proposals.pageInfo.endCursor, callback, finalCall);
74
- } else {
75
- finalCall();
76
- }
77
- }
78
- });
79
- };
80
-
81
- exports.AwesomeMap = exports.AwesomeMap || {};
82
- exports.AwesomeMap.fetchProposals = fetchProposals;
83
- })(window);