decidim-navigation_maps 1.2.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -3
  3. data/Rakefile +8 -0
  4. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map/_tabs_content.erb +1 -1
  5. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map/show.erb +2 -2
  6. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_cell.rb +5 -0
  7. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/_form.erb +4 -4
  8. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/_tabs_content.erb +0 -1
  9. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/show.erb +4 -2
  10. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form_cell.rb +9 -0
  11. data/app/controllers/decidim/navigation_maps/admin/blueprints_controller.rb +1 -1
  12. data/app/jobs/decidim/navigation_maps/migrate_legacy_images_job.rb +32 -0
  13. data/app/models/decidim/navigation_maps/blueprint.rb +4 -3
  14. data/app/packs/entrypoints/decidim_admin_navigation_maps.js +4 -0
  15. data/app/packs/entrypoints/decidim_admin_navigation_maps.scss +1 -0
  16. data/app/packs/entrypoints/decidim_navigation_maps.js +7 -0
  17. data/app/packs/entrypoints/decidim_navigation_maps.scss +1 -0
  18. data/app/packs/src/decidim/navigation_maps/admin/map_editor.js +83 -0
  19. data/app/packs/src/decidim/navigation_maps/admin/navigation_maps.js +154 -0
  20. data/app/packs/src/decidim/navigation_maps/map_view.js +125 -0
  21. data/app/packs/src/decidim/navigation_maps/navigation_maps.js +43 -0
  22. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/_variables.scss +0 -0
  23. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/admin/navigation_maps.scss +4 -4
  24. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/navigation_maps.scss +1 -2
  25. data/app/uploaders/decidim/navigation_maps/blueprint_uploader.rb +4 -12
  26. data/app/uploaders/decidim/navigation_maps/cw/blueprint_uploader.rb +24 -0
  27. data/config/assets.rb +41 -0
  28. data/config/locales/cs.yml +1 -1
  29. data/db/seeds.rb +6 -5
  30. data/lib/decidim/navigation_maps/admin_engine.rb +0 -4
  31. data/lib/decidim/navigation_maps/engine.rb +4 -4
  32. data/lib/decidim/navigation_maps/navigation_map_cell_helpers.rb +1 -1
  33. data/lib/decidim/navigation_maps/version.rb +2 -2
  34. data/lib/decidim/navigation_maps.rb +0 -2
  35. data/lib/tasks/decidim_navigation_maps_webpacker_tasks.rake +58 -0
  36. data/lib/tasks/navigation_maps_active_storage_migration_tasks.rake +37 -0
  37. data/package.json +197 -0
  38. metadata +32 -46
  39. data/app/assets/config/admin/decidim_navigation_maps_manifest.css +0 -3
  40. data/app/assets/config/admin/decidim_navigation_maps_manifest.js +0 -3
  41. data/app/assets/config/decidim_navigation_maps_manifest.css +0 -3
  42. data/app/assets/config/decidim_navigation_maps_manifest.js +0 -1
  43. data/app/assets/images/decidim/navigation_maps/icon.svg +0 -1
  44. data/app/assets/javascripts/decidim/navigation_maps/admin/map_editor.js +0 -88
  45. data/app/assets/javascripts/decidim/navigation_maps/admin/navigation_maps.js +0 -143
  46. data/app/assets/javascripts/decidim/navigation_maps/map_view.js +0 -123
  47. data/app/assets/javascripts/decidim/navigation_maps/navigation_maps.js +0 -44
  48. data/vendor/assets/images/draw/layers-2x.png +0 -0
  49. data/vendor/assets/images/draw/layers.png +0 -0
  50. data/vendor/assets/images/draw/marker-icon-2x.png +0 -0
  51. data/vendor/assets/images/draw/marker-icon.png +0 -0
  52. data/vendor/assets/images/draw/marker-shadow.png +0 -0
  53. data/vendor/assets/images/draw/spritesheet-2x.png +0 -0
  54. data/vendor/assets/images/draw/spritesheet.png +0 -0
  55. data/vendor/assets/images/draw/spritesheet.svg +0 -156
  56. data/vendor/assets/images/images/layers-2x.png +0 -0
  57. data/vendor/assets/images/images/layers.png +0 -0
  58. data/vendor/assets/images/images/marker-icon-2x.png +0 -0
  59. data/vendor/assets/images/images/marker-icon.png +0 -0
  60. data/vendor/assets/images/images/marker-shadow.png +0 -0
  61. data/vendor/assets/javascripts/jquery.form.js +0 -1277
  62. data/vendor/assets/javascripts/jsrender.min.js +0 -4
  63. data/vendor/assets/javascripts/jsrender.min.js.map +0 -1
  64. data/vendor/assets/javascripts/leaflet-geoman.min.js +0 -1
  65. data/vendor/assets/javascripts/leaflet.js +0 -5
  66. data/vendor/assets/stylesheets/leaflet-geoman.css +0 -164
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-navigation_maps
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2022-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,60 +16,60 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.24'
19
+ version: '0.25'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.25'
22
+ version: '0.27'
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.24'
29
+ version: '0.25'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.25'
32
+ version: '0.27'
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.24'
39
+ version: '0.25'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '0.25'
42
+ version: '0.27'
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.24'
49
+ version: '0.25'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '0.25'
52
+ version: '0.27'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: decidim-dev
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '0.24'
59
+ version: '0.25'
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.25'
62
+ version: '0.27'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: '0.24'
69
+ version: '0.25'
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '0.25'
72
+ version: '0.27'
73
73
  description: Allows to create visual guiding maps in content blocks for Decidim.
74
74
  email:
75
75
  - ivan@platoniq.net
@@ -80,18 +80,6 @@ files:
80
80
  - LICENSE-AGPLv3.txt
81
81
  - README.md
82
82
  - Rakefile
83
- - app/assets/config/admin/decidim_navigation_maps_manifest.css
84
- - app/assets/config/admin/decidim_navigation_maps_manifest.js
85
- - app/assets/config/decidim_navigation_maps_manifest.css
86
- - app/assets/config/decidim_navigation_maps_manifest.js
87
- - app/assets/images/decidim/navigation_maps/icon.svg
88
- - app/assets/javascripts/decidim/navigation_maps/admin/map_editor.js
89
- - app/assets/javascripts/decidim/navigation_maps/admin/navigation_maps.js
90
- - app/assets/javascripts/decidim/navigation_maps/map_view.js
91
- - app/assets/javascripts/decidim/navigation_maps/navigation_maps.js
92
- - app/assets/stylesheets/decidim/navigation_maps/_variables.scss
93
- - app/assets/stylesheets/decidim/navigation_maps/admin/navigation_maps.scss
94
- - app/assets/stylesheets/decidim/navigation_maps/navigation_maps.scss
95
83
  - app/cells/decidim/navigation_maps/content_blocks/groups_navigation_map_cell.rb
96
84
  - app/cells/decidim/navigation_maps/content_blocks/navigation_map/_styles.erb
97
85
  - app/cells/decidim/navigation_maps/content_blocks/navigation_map/_tabs.erb
@@ -113,15 +101,29 @@ files:
113
101
  - app/forms/decidim/navigation_maps/area_form.rb
114
102
  - app/forms/decidim/navigation_maps/blueprint_form.rb
115
103
  - app/forms/decidim/navigation_maps/blueprint_forms.rb
104
+ - app/jobs/decidim/navigation_maps/migrate_legacy_images_job.rb
116
105
  - app/models/decidim/navigation_maps/application_record.rb
117
106
  - app/models/decidim/navigation_maps/blueprint.rb
118
107
  - app/models/decidim/navigation_maps/blueprint_area.rb
108
+ - app/packs/entrypoints/decidim_admin_navigation_maps.js
109
+ - app/packs/entrypoints/decidim_admin_navigation_maps.scss
110
+ - app/packs/entrypoints/decidim_navigation_maps.js
111
+ - app/packs/entrypoints/decidim_navigation_maps.scss
112
+ - app/packs/src/decidim/navigation_maps/admin/map_editor.js
113
+ - app/packs/src/decidim/navigation_maps/admin/navigation_maps.js
114
+ - app/packs/src/decidim/navigation_maps/map_view.js
115
+ - app/packs/src/decidim/navigation_maps/navigation_maps.js
116
+ - app/packs/stylesheets/decidim/navigation_maps/_variables.scss
117
+ - app/packs/stylesheets/decidim/navigation_maps/admin/navigation_maps.scss
118
+ - app/packs/stylesheets/decidim/navigation_maps/navigation_maps.scss
119
119
  - app/queries/decidim/navigation_maps/content_block_blueprints.rb
120
120
  - app/queries/decidim/navigation_maps/organization_blueprints.rb
121
121
  - app/uploaders/decidim/navigation_maps/blueprint_uploader.rb
122
+ - app/uploaders/decidim/navigation_maps/cw/blueprint_uploader.rb
122
123
  - app/views/decidim/navigation_maps/admin/areas/_form.html.erb
123
124
  - app/views/decidim/navigation_maps/admin/areas/new.html.erb
124
125
  - app/views/decidim/navigation_maps/admin/areas/show.html.erb
126
+ - config/assets.rb
125
127
  - config/i18n-tasks.yml
126
128
  - config/locales/ca.yml
127
129
  - config/locales/cs.yml
@@ -147,25 +149,9 @@ files:
147
149
  - lib/decidim/navigation_maps/test/factories.rb
148
150
  - lib/decidim/navigation_maps/version.rb
149
151
  - lib/tasks/custom_seeds.rake
150
- - vendor/assets/images/draw/layers-2x.png
151
- - vendor/assets/images/draw/layers.png
152
- - vendor/assets/images/draw/marker-icon-2x.png
153
- - vendor/assets/images/draw/marker-icon.png
154
- - vendor/assets/images/draw/marker-shadow.png
155
- - vendor/assets/images/draw/spritesheet-2x.png
156
- - vendor/assets/images/draw/spritesheet.png
157
- - vendor/assets/images/draw/spritesheet.svg
158
- - vendor/assets/images/images/layers-2x.png
159
- - vendor/assets/images/images/layers.png
160
- - vendor/assets/images/images/marker-icon-2x.png
161
- - vendor/assets/images/images/marker-icon.png
162
- - vendor/assets/images/images/marker-shadow.png
163
- - vendor/assets/javascripts/jquery.form.js
164
- - vendor/assets/javascripts/jsrender.min.js
165
- - vendor/assets/javascripts/jsrender.min.js.map
166
- - vendor/assets/javascripts/leaflet-geoman.min.js
167
- - vendor/assets/javascripts/leaflet.js
168
- - vendor/assets/stylesheets/leaflet-geoman.css
152
+ - lib/tasks/decidim_navigation_maps_webpacker_tasks.rake
153
+ - lib/tasks/navigation_maps_active_storage_migration_tasks.rake
154
+ - package.json
169
155
  homepage: https://github.com/Platoniq/decidim-module-navigation_maps
170
156
  licenses:
171
157
  - AGPL-3.0
@@ -185,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
171
  - !ruby/object:Gem::Version
186
172
  version: '0'
187
173
  requirements: []
188
- rubygems_version: 3.1.4
174
+ rubygems_version: 3.1.6
189
175
  signing_key:
190
176
  specification_version: 4
191
177
  summary: A decidim navigation_maps module
@@ -1,3 +0,0 @@
1
- /*
2
- *= link decidim/navigation_maps/admin/navigation_maps.css
3
- */
@@ -1,3 +0,0 @@
1
- //= link decidim/navigation_maps/admin/navigation_maps.js
2
- //= require jquery.form
3
- //= require leaflet
@@ -1,3 +0,0 @@
1
- /*
2
- *= link decidim/navigation_maps/navigation_maps.css
3
- */
@@ -1 +0,0 @@
1
- //= link decidim/navigation_maps/navigation_maps.js
@@ -1 +0,0 @@
1
- <svg height="35px" width="35px" fill="#000000" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 1 511 511" style="enable-background:new 0 1 511 511;" xml:space="preserve"><g><path d="M205.6,146.9c-22.2,0-40.2,18-40.2,40.2c0,22.2,18,40.2,40.2,40.2c22.2,0,40.2-18,40.2-40.2 C245.9,165,227.8,146.9,205.6,146.9z M205.6,206.6c-10.7,0-19.3-8.7-19.3-19.3c0-10.7,8.7-19.3,19.3-19.3 c10.6,0,19.3,8.7,19.3,19.3C225,197.9,216.3,206.6,205.6,206.6z"/><path d="M406.6,178V70.3c0-5.8-4.2-10.1-10-10.1H10.6C4.8,60.3,0,64.6,0,70.3v304.9c0,5.8,4.8,10.9,10.6,10.9h242 c24.5,39.8,68.7,66.7,119.1,66.7c77,0,139.4-62.8,139.4-139.7C511,248.4,467.4,193.7,406.6,178z M21,365.2v-284h364.7v92.9 c-4.2-0.5-9.1-0.7-14-0.7c-0.3,0-0.6,0-0.6,0v-66.4c0-5.8-5-10-10.9-10H47.2c-5.8,0-10.5,4.2-10.5,10v231.8 c0,5.8,4.7,10.8,10.5,10.8h189.7c1.5,5.2,3.1,10.5,5.2,15.7H21z M232.9,328.6H57.6v-40.4l61.5-54.3c2.8-2.5,7-2.6,10-0.2l63.3,50.6 c10.7,8.6,26,8.4,36.5-0.5l7.6-6.5c-3,11.4-4.6,23.6-4.6,35.8C232,318.3,232.3,323.3,232.9,328.6z M215.7,267.8 c-2.8,2.4-7,2.4-10,0.1l-63.4-50.6c-10.9-8.7-26.5-8.4-37,0.9l-47.7,42V117.9H350v57.2c-37.7,6-70.1,26.8-91.4,56.4L215.7,267.8z M371.6,431.7C306.2,431.7,253,378.4,253,313s53.2-118.6,118.6-118.6c65.4,0,118.6,53.2,118.6,118.6 C490.4,378.4,437.1,431.7,371.6,431.7z"/><path d="M435.4,234c-34.8-34.6-91-34.6-125.6,0c-13.7,13.7-22.4,31.2-25,50.4c-2.5,18.5,0.9,37.8,9.9,54.4c0,0,0,0.1,0.1,0.1 c4.4,8,9.4,14.7,15.2,20.4l55.1,55.1c2,2,4.6,3,7.4,3s5.5-1.2,7.4-3l55.1-55.1c16.9-16.9,26.2-39.2,26.2-62.8 C461.4,273,452.2,250.7,435.4,234z M420.1,344.6l-47.7,47.7l-47.7-47.7c-4.4-4.4-8.2-9.5-11.6-15.7c-14.2-26.6-9.6-58.8,11.6-80.1 c26.4-26.4,69.4-26.4,95.8,0c12.8,12.8,19.8,29.8,19.7,47.7C440.2,314.6,433,331.7,420.1,344.6z"/><path d="M372.3,241.7c-29,0-52.7,23.7-52.7,52.7c0,29,23.7,52.7,52.7,52.7s52.7-23.7,52.7-52.7 C425.1,265.4,401.5,241.7,372.3,241.7z M372.3,326c-17.5,0-31.8-14.2-31.8-31.8c0-17.5,14.3-31.8,31.8-31.8 c17.5,0,31.8,14.3,31.8,31.8C404.1,311.8,389.9,326,372.3,326z"/></g></svg>
@@ -1,88 +0,0 @@
1
- // Creates a map
2
- //= require decidim/navigation_maps/map_view
3
-
4
- function NavigationMapEditor(map_object, table_object) {
5
- var self = this;
6
- // Call constructor of superclass to initialize superclass-derived members.
7
- NavigationMapView.call(self, map_object, function() {
8
- self.createControls();
9
- if(self.blueprint) {
10
- self.createAreas();
11
- }
12
- });
13
- self.table_object = table_object;
14
- this.createAreaCallback = function () {};
15
- this.editAreaCallback = function () {};
16
- this.removeAreaCallback = function () {};
17
- }
18
-
19
- // NavigationMapEditor derives from NavigationMapView
20
- NavigationMapEditor.prototype = Object.create(NavigationMapView.prototype);
21
- NavigationMapEditor.prototype.constructor = NavigationMapEditor;
22
-
23
- NavigationMapEditor.prototype.createControls = function() {
24
- var self = this;
25
- self.map.pm.addControls({
26
- position: 'topleft',
27
- drawCircle: false,
28
- drawMarker: false,
29
- drawCircleMarker: false,
30
- drawPolyline: false,
31
- cutPolygon: false
32
- });
33
-
34
- self.map.on('pm:create', function(e) {
35
- var geojson = e.layer.toGeoJSON();
36
- self.blueprint[e.layer._leaflet_id] = geojson;
37
- self.attachEditorEvents(e.layer);
38
- self.createAreaCallback(e.layer._leaflet_id, e.layer, self);
39
- });
40
-
41
- self.map.on('pm:remove', function(e) {
42
- delete self.blueprint[e.layer._leaflet_id];
43
- self.removeAreaCallback(e.layer._leaflet_id, e.layer, self);
44
- });
45
- };
46
-
47
- NavigationMapEditor.prototype.editing = function() {
48
- var pm = this.map.pm;
49
- return pm.globalRemovalEnabled() || pm.globalDragModeEnabled() || pm.globalEditEnabled();
50
- };
51
-
52
- // register callback to handle area edits,removals and creations
53
- NavigationMapView.prototype.onCreateArea = function(callback) {
54
- this.createAreaCallback = callback;
55
- };
56
- NavigationMapView.prototype.onEditArea = function(callback) {
57
- this.editAreaCallback = callback;
58
- };
59
- NavigationMapView.prototype.onRemoveArea = function(callback) {
60
- this.removeCreateCallback = callback;
61
- };
62
-
63
- NavigationMapEditor.prototype.attachEditorEvents = function (layer) {
64
- var self = this;
65
-
66
- layer.on('mouseover', function(e) {
67
- e.target.getElement().classList.add('selected')
68
- });
69
-
70
- layer.on('mouseout', function(e) {
71
- e.target.getElement().classList.remove('selected')
72
- });
73
-
74
- layer.on('pm:edit', function(e) {
75
- self.blueprint[e.target._leaflet_id] = e.target.toGeoJSON();
76
- self.editAreaCallback(e.target._leaflet_id, e.target, self);
77
- });
78
-
79
- layer.on('click', function(e) {
80
- if(!self.editing()) {
81
- self.clickAreaCallback(e.target._leaflet_id, e.target, self);
82
- }
83
- });
84
- };
85
-
86
- NavigationMapEditor.prototype.getBlueprint = function () {
87
- return this.blueprint;
88
- };
@@ -1,143 +0,0 @@
1
- // Place all the behaviors and hooks related to the matching controller here.
2
- // All this logic will automatically be available in application.js.
3
- //= require jquery.form
4
- //= require decidim/navigation_maps/admin/map_editor
5
- //= require_self
6
-
7
- $(function() {
8
-
9
- var $maps = $('.navigation_maps.admin .map');
10
- var $progress = $('.navigation_maps.admin .progress');
11
- var $bar = $('.navigation_maps.admin .progress-meter');
12
- var $loading = $('.navigation_maps.admin .loading');
13
- var $callout = $('.navigation_maps.admin .callout');
14
- var $modal = $('#mapEditModal');
15
- var $form = $('form');
16
- var $tabs = $('#navigation_maps-tabs');
17
- var $accordion = $('.navigation_maps.admin .accordion');
18
- var editors = {};
19
- var new_areas = {};
20
-
21
- $maps.each(function() {
22
- var id = $(this).data('id');
23
- var table = document.getElementById("navigation_maps-table-" + id);
24
- editors[id] = new NavigationMapEditor(this, table);
25
- editors[id].onCreateArea(function(area_id) {
26
- new_areas[area_id] = true;
27
- });
28
-
29
- editors[id].onClickArea(function(area_id, area) {
30
- $modal.find('.modal-content').html('');
31
- $modal.addClass('loading').foundation('open');
32
- $callout.hide();
33
- $callout.removeClass('alert success');
34
- // "new" form insted of editing
35
- var rel = new_areas[area_id] ? 'new' : area_id;
36
- $modal.find('.modal-content').load(`/admin/navigation_maps/blueprints/${id}/areas/${rel}`, function() {
37
- var $input1 = $modal.find('input[name="blueprint_area[area_id]"]');
38
- var $input2 = $modal.find('input[name="blueprint_area[area_type]"]');
39
- var $input3 = $modal.find('input[name="blueprint_area[area]"]');
40
- var a = area.toGeoJSON();
41
- $modal.removeClass('loading');
42
- if($input1.length) $input1.val(area_id);
43
- if($input2.length) $input2.val(a.type);
44
- if($input3.length) $input3.val(JSON.stringify(a));
45
- $modal.find('ul[data-tabs=true]').each(function() {
46
- new Foundation.Tabs($(this));
47
- });
48
- });
49
- });
50
- });
51
-
52
- // Rails AJAX events
53
- document.body.addEventListener('ajax:error', function(responseText) {
54
- $callout.contents('p').html(responseText.detail[0].message + ": <strong>" + responseText.detail[0].error + "</strong>");
55
- $callout.addClass('alert');
56
- });
57
-
58
- document.body.addEventListener('ajax:success', function(responseText) {
59
- if(new_areas[responseText.detail[0].area]) {
60
- delete new_areas[responseText.detail[0].area]
61
- }
62
- var blueprint_id = responseText.detail[0].blueprint_id;
63
- var area_id = responseText.detail[0].area_id;
64
- var area = responseText.detail[0].area;
65
- editors[blueprint_id].setLayerProperties(editors[blueprint_id].map._layers[area_id], area);
66
- editors[blueprint_id].blueprint[area_id] = area;
67
- $callout.contents('p').html(responseText.detail[0].message);
68
- $callout.addClass('success');
69
- });
70
-
71
- document.body.addEventListener('ajax:complete', function() {
72
- $callout.show();
73
- $modal.foundation('close');
74
- })
75
-
76
- $tabs.on('change.zf.tabs', function(e, $tab, $content) {
77
- var id = $content.find('.map').data('id');
78
- if(id) {
79
- editors[id].reload();
80
- }
81
- });
82
-
83
- $accordion.on('down.zf.accordion', function(e, $accordion) {
84
- var id = $accordion.find('.map').data('id');
85
- if(id) {
86
- editors[id].reload();
87
- }
88
- });
89
-
90
- // If a new item si going to be created o the image is changed a reload is needed
91
- var needsReload = function() {
92
- var reload = false;
93
- if($form.find('#map-new input:checked').length) return true;
94
- if($form.find('.delete-tab input[type=checkbox]:checked').length) return true;
95
-
96
- $form.find('input[type=file],input[tabs_id=blueprints___title]').each(function() {
97
- if($(this).val()) {
98
- reload = true;
99
- return false;
100
- }
101
- });
102
- return reload;
103
- };
104
-
105
- $form.ajaxForm({
106
- url: $form.find('[name=action]').val(),
107
- beforeSerialize: function() {
108
- Object.keys(editors).forEach(function(key) {
109
- var editor = editors[key];
110
- $(`#blueprints_${editor.id}_blueprint`).val(JSON.stringify(editor.getBlueprint()));
111
- });
112
- },
113
- beforeSend: function() {
114
- var percentVal = '0%';
115
- $bar.width(percentVal).html(percentVal);
116
- $progress.show();
117
- $callout.hide();
118
- $callout.removeClass('alert success');
119
- $loading.show();
120
- },
121
- uploadProgress: function(event, position, total, percentComplete) {
122
- var percentVal = percentComplete + '%';
123
- $bar.width(percentVal).html(percentVal);
124
- },
125
- success: function(responseText) {
126
- $callout.show();
127
- $progress.hide();
128
- $callout.contents('p').html(responseText);
129
- $callout.addClass('success');
130
- $loading.hide();
131
- if(needsReload()) {
132
- $loading.show();
133
- location.reload();
134
- }
135
- },
136
- error: function(xhr) {
137
- $loading.hide();
138
- $callout.show();
139
- $callout.contents('p').html(xhr.responseText);
140
- $callout.addClass('alert');
141
- }
142
- });
143
- });
@@ -1,123 +0,0 @@
1
- // Creates a map view
2
- //= require leaflet
3
- //= require leaflet-geoman.min
4
-
5
- function NavigationMapView(map_object, callback) {
6
- var self = this;
7
- self.features = {};
8
- self.map_object = map_object;
9
- self.id = map_object.dataset.id;
10
- self.image_path = map_object.dataset.image;
11
- self.blueprint = map_object.dataset.blueprint ? JSON.parse(map_object.dataset.blueprint) : {};
12
- self.image = new Image();
13
- self.image.onload = function() {
14
- self.createMap();
15
- if(typeof callback === "function") {
16
- callback(self);
17
- } else {
18
- if(self.blueprint) {
19
- self.createAreas();
20
- }
21
- }
22
- };
23
- self.image.src = self.image_path;
24
- this.clickAreaCallback = function () {};
25
- this.setLayerPropertiesCallback = function () {};
26
- }
27
-
28
- NavigationMapView.prototype.createMap = function() {
29
- var bounds = [[0,0], [this.image.height,this.image.width]];
30
- this.map = L.map(this.map_object, {
31
- minZoom: -1,
32
- maxZoom: 2,
33
- crs: L.CRS.Simple,
34
- noWrap: true,
35
- zoomSnap: 0,
36
- // zoomDelta: 0.1,
37
- maxBounds: [[0,0], [this.image.height,this.image.width]],
38
- center: [this.image.height/2, this.image.width/2],
39
- zoom: -1,
40
- scrollWheelZoom: false,
41
- attributionControl: false
42
- });
43
-
44
- L.imageOverlay(this.image.src, bounds).addTo(this.map);
45
- this.fitBounds();
46
- };
47
-
48
- NavigationMapView.prototype.fitBounds = function() {
49
- var image_ratio = this.image.height / this.image.width;
50
- var map_ratio = this.map_object.offsetHeight / this.map_object.offsetWidth;
51
-
52
- if(image_ratio > map_ratio) {
53
- this.map.fitBounds([[0,0], [0,this.image.width]]);
54
- }
55
- else {
56
- this.map.fitBounds([[0,0], [this.image.height,0]]);
57
- }
58
- this.map.setView([this.image.height/2, this.image.width/2]);
59
- };
60
-
61
- NavigationMapView.prototype.createAreas = function() {
62
- var self = this;
63
- self.forEachBlueprint(function(id, geoarea) {
64
- new L.GeoJSON(geoarea, {
65
- onEachFeature: function(feature, layer) {
66
- layer._leaflet_id = id;
67
- self.setLayerProperties(layer, geoarea);
68
- self.attachEditorEvents(layer);
69
- }
70
- }).addTo(self.map);
71
- });
72
- };
73
-
74
- NavigationMapView.prototype.setLayerProperties = function (layer, area) {
75
- var props = area.properties;
76
- if(props) {
77
- if(props.color) {
78
- layer.setStyle({fillColor: props.color, color: props.color});
79
- }
80
- this.setLayerPropertiesCallback(layer, props);
81
- }
82
- };
83
-
84
- NavigationMapView.prototype.attachEditorEvents = function (layer) {
85
- var self = this;
86
-
87
- layer.on('mouseover', function(e) {
88
- e.target.getElement().classList.add('selected')
89
- });
90
-
91
- layer.on('mouseout', function(e) {
92
- e.target.getElement().classList.remove('selected')
93
- });
94
-
95
- layer.on('click', function(e) {
96
- self.clickAreaCallback(e.target, self);
97
- });
98
- };
99
-
100
- // register callback to handle area clicks
101
- NavigationMapView.prototype.onClickArea = function(callback) {
102
- this.clickAreaCallback = callback;
103
- };
104
-
105
- NavigationMapView.prototype.onSetLayerProperties = function(callback) {
106
- this.setLayerPropertiesCallback = callback;
107
- };
108
-
109
- NavigationMapView.prototype.forEachBlueprint = function (callback) {
110
- for (var id in this.blueprint) {
111
- var geoarea = this.blueprint[id];
112
- // avoid non-polygons for the moment
113
- if(!geoarea.geometry || geoarea.geometry.type !== 'Polygon') continue;
114
- callback(id, geoarea);
115
- }
116
- };
117
-
118
- NavigationMapView.prototype.reload = function () {
119
- if(this.map) {
120
- this.map.invalidateSize(true);
121
- this.fitBounds();
122
- }
123
- };
@@ -1,44 +0,0 @@
1
- // Place all the behaviors and hooks related to the matching controller here.
2
- // All this logic will automatically be available in application.js.
3
- //= require decidim/navigation_maps/map_view
4
- //= require jsrender.min
5
- //= require_self
6
-
7
- $(function() {
8
-
9
- var $maps = $('.navigation_maps .map');
10
- var $tabs = $('#navigation_maps-tabs');
11
- var maps = {};
12
- var tmpl = $.templates("#navigation_maps-popup");
13
-
14
- $maps.each(function() {
15
- var id = $(this).data('id');
16
- maps[id] = new NavigationMapView(this);
17
- maps[id].onSetLayerProperties(function(layer, props) {
18
- if(!props.popup) {
19
- var node = document.createElement("div");
20
- var html = tmpl.render(props);
21
- $(node).html(html);
22
-
23
- layer.bindPopup(node, {
24
- maxHeight: 400,
25
- // autoPan: false,
26
- maxWidth: 640,
27
- minWidth: 200,
28
- keepInView: true,
29
- className: `navigation_map-info map-info-${id}-${layer._leaflet_id}`
30
- });
31
- }
32
- });
33
- maps[id].onClickArea(function(area) {
34
- var popup = area.feature.properties && area.feature.properties.link && area.feature.properties.popup;
35
- if(popup) location = area.feature.properties.link;
36
- });
37
- });
38
-
39
- $tabs.on('change.zf.tabs', function(e, $tab, $content) {
40
- var id = $content.find('.map').data('id');
41
- maps[id].reload();
42
- });
43
-
44
- });
Binary file