decidim-navigation_maps 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -5
  3. data/Rakefile +18 -0
  4. data/app/cells/decidim/navigation_maps/content_blocks/groups_navigation_map_cell.rb +21 -0
  5. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map/_tabs_content.erb +1 -1
  6. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map/show.erb +6 -6
  7. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_cell.rb +31 -0
  8. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/_form.erb +4 -4
  9. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/_tabs_content.erb +0 -1
  10. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form/show.erb +7 -4
  11. data/app/cells/decidim/navigation_maps/content_blocks/navigation_map_settings_form_cell.rb +10 -1
  12. data/app/commands/decidim/navigation_maps/save_blueprints.rb +7 -1
  13. data/app/controllers/decidim/navigation_maps/admin/blueprints_controller.rb +3 -3
  14. data/app/forms/decidim/navigation_maps/area_form.rb +1 -1
  15. data/app/forms/decidim/navigation_maps/blueprint_form.rb +1 -0
  16. data/app/forms/decidim/navigation_maps/blueprint_forms.rb +1 -0
  17. data/app/jobs/decidim/navigation_maps/migrate_legacy_images_job.rb +32 -0
  18. data/app/models/decidim/navigation_maps/blueprint.rb +5 -3
  19. data/app/packs/entrypoints/decidim_admin_navigation_maps.js +4 -0
  20. data/app/packs/entrypoints/decidim_admin_navigation_maps.scss +1 -0
  21. data/app/packs/entrypoints/decidim_navigation_maps.js +7 -0
  22. data/app/packs/entrypoints/decidim_navigation_maps.scss +1 -0
  23. data/app/packs/src/decidim/navigation_maps/admin/map_editor.js +83 -0
  24. data/app/packs/src/decidim/navigation_maps/admin/navigation_maps.js +154 -0
  25. data/app/packs/src/decidim/navigation_maps/map_view.js +125 -0
  26. data/app/packs/src/decidim/navigation_maps/navigation_maps.js +43 -0
  27. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/_variables.scss +0 -0
  28. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/admin/navigation_maps.scss +4 -4
  29. data/app/{assets → packs}/stylesheets/decidim/navigation_maps/navigation_maps.scss +1 -2
  30. data/app/queries/decidim/navigation_maps/content_block_blueprints.rb +20 -0
  31. data/app/uploaders/decidim/navigation_maps/blueprint_uploader.rb +4 -12
  32. data/app/uploaders/decidim/navigation_maps/cw/blueprint_uploader.rb +24 -0
  33. data/config/assets.rb +41 -0
  34. data/config/locales/ca.yml +1 -0
  35. data/config/locales/cs.yml +2 -1
  36. data/config/locales/en.yml +1 -0
  37. data/config/locales/es.yml +1 -0
  38. data/db/migrate/20201105130724_add_reference_to_content_block_to_blueprints_table.rb +12 -0
  39. data/db/seeds/pla-cerda.jpg +0 -0
  40. data/db/seeds.rb +62 -11
  41. data/lib/decidim/navigation_maps/admin_engine.rb +0 -4
  42. data/lib/decidim/navigation_maps/engine.rb +16 -4
  43. data/lib/decidim/navigation_maps/navigation_map_cell_helpers.rb +4 -4
  44. data/lib/decidim/navigation_maps/test/factories.rb +1 -0
  45. data/lib/decidim/navigation_maps/version.rb +2 -2
  46. data/lib/decidim/navigation_maps.rb +0 -2
  47. data/lib/tasks/custom_seeds.rake +8 -0
  48. data/lib/tasks/decidim_navigation_maps_webpacker_tasks.rake +58 -0
  49. data/lib/tasks/navigation_maps_active_storage_migration_tasks.rake +37 -0
  50. metadata +38 -29
  51. data/app/assets/config/admin/decidim_navigation_maps_manifest.css +0 -3
  52. data/app/assets/config/admin/decidim_navigation_maps_manifest.js +0 -3
  53. data/app/assets/config/decidim_navigation_maps_manifest.css +0 -3
  54. data/app/assets/config/decidim_navigation_maps_manifest.js +0 -1
  55. data/app/assets/images/decidim/navigation_maps/icon.svg +0 -1
  56. data/app/assets/javascripts/decidim/navigation_maps/admin/map_editor.js +0 -88
  57. data/app/assets/javascripts/decidim/navigation_maps/admin/navigation_maps.js +0 -143
  58. data/app/assets/javascripts/decidim/navigation_maps/map_view.js +0 -123
  59. data/app/assets/javascripts/decidim/navigation_maps/navigation_maps.js +0 -44
@@ -9,10 +9,6 @@ module Decidim
9
9
  class Engine < ::Rails::Engine
10
10
  isolate_namespace Decidim::NavigationMaps
11
11
 
12
- initializer "decidim_navigation_maps.assets" do |app|
13
- app.config.assets.precompile += %w(decidim_navigation_maps_manifest.js decidim_navigation_maps_manifest.css)
14
- end
15
-
16
12
  initializer "decidim.navigation_maps.content_blocks" do
17
13
  Decidim.content_blocks.register(:homepage, :navigation_map) do |content_block|
18
14
  content_block.cell = "decidim/navigation_maps/content_blocks/navigation_map"
@@ -21,6 +17,18 @@ module Decidim
21
17
 
22
18
  content_block.settings do |settings|
23
19
  settings.attribute :title, type: :text, translated: true
20
+ settings.attribute :autohide_tabs, type: :boolean, default: false
21
+ end
22
+ end
23
+
24
+ Decidim.content_blocks.register(:participatory_process_group_homepage, :navigation_map) do |content_block|
25
+ content_block.cell = "decidim/navigation_maps/content_blocks/groups_navigation_map"
26
+ content_block.public_name_key = "decidim.navigation_maps.content_blocks.name"
27
+ content_block.settings_form_cell = "decidim/navigation_maps/content_blocks/navigation_map_settings_form"
28
+
29
+ content_block.settings do |settings|
30
+ settings.attribute :title, type: :text, translated: true
31
+ settings.attribute :autohide_tabs, type: :boolean, default: false
24
32
  end
25
33
  end
26
34
  end
@@ -29,6 +37,10 @@ module Decidim
29
37
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::NavigationMaps::Engine.root}/app/cells")
30
38
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::NavigationMaps::Engine.root}/app/views") # for partials
31
39
  end
40
+
41
+ initializer "decidim_notify.webpacker.assets_path" do
42
+ Decidim.register_assets_path File.expand_path("app/packs", root)
43
+ end
32
44
  end
33
45
  end
34
46
  end
@@ -7,7 +7,7 @@ module Decidim
7
7
  delegate :available_locales, to: :current_organization
8
8
 
9
9
  def valid_blueprints
10
- organization_blueprints.where.not(image: [nil, ""]).order(:created_at)
10
+ content_block_blueprints.joins(:image_attachment).order(:created_at)
11
11
  end
12
12
 
13
13
  def valid_blueprints?
@@ -15,13 +15,13 @@ module Decidim
15
15
  end
16
16
 
17
17
  def blueprints
18
- organization_blueprints.order(:created_at)
18
+ content_block_blueprints.order(:created_at)
19
19
  end
20
20
 
21
21
  private
22
22
 
23
- def organization_blueprints
24
- @organization_blueprints ||= OrganizationBlueprints.new(current_organization).query
23
+ def content_block_blueprints
24
+ @content_block_blueprints ||= (OrganizationBlueprints.new(current_organization) | ContentBlockBlueprints.new(content_block)).query
25
25
  end
26
26
  end
27
27
  end
@@ -8,6 +8,7 @@ FactoryBot.define do
8
8
  image { Decidim::Dev.test_file("city.jpeg", "image/jpeg") }
9
9
  title { Decidim::Faker::Localized.word }
10
10
  description { generate_localized_title }
11
+ content_block { create(:content_block, organization: organization) }
11
12
  end
12
13
 
13
14
  factory :blueprint_area, class: "Decidim::NavigationMaps::BlueprintArea" do
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-meetings version.
5
5
  module NavigationMaps
6
- VERSION = "1.1.0"
7
- DECIDIM_VERSION = [">= 0.22", "< 0.24"].freeze
6
+ VERSION = "1.3.0"
7
+ DECIDIM_VERSION = [">= 0.25", "< 0.27"].freeze
8
8
  end
9
9
  end
@@ -5,8 +5,6 @@ require "decidim/navigation_maps/engine"
5
5
  require "decidim/navigation_maps/admin_engine"
6
6
 
7
7
  module Decidim
8
- # This namespace holds the logic of the `NavigationMaps` component. This component
9
- # allows users to create navigation_maps in a participatory space.
10
8
  module NavigationMaps
11
9
  autoload :NavigationMapCellHelpers, "decidim/navigation_maps/navigation_map_cell_helpers"
12
10
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :decidim_navigation_maps do
4
+ desc "custom seeding"
5
+ task seed: :environment do
6
+ Decidim::NavigationMaps::Engine.load_seed
7
+ end
8
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/gem_manager"
4
+
5
+ namespace :decidim_navigation_maps do
6
+ namespace :webpacker do
7
+ desc "Installs Decidim Awesome webpacker files in Rails instance application"
8
+ task install: :environment do
9
+ raise "Decidim gem is not installed" if decidim_path.nil?
10
+
11
+ install_navigation_maps_npm
12
+ end
13
+
14
+ desc "Adds Decidim Awesome dependencies in package.json"
15
+ task upgrade: :environment do
16
+ raise "Decidim gem is not installed" if decidim_path.nil?
17
+
18
+ install_navigation_maps_npm
19
+ end
20
+
21
+ def install_navigation_maps_npm
22
+ navigation_maps_npm_dependencies.each do |type, packages|
23
+ system! "npm i --save-#{type} #{packages.join(" ")}"
24
+ end
25
+ end
26
+
27
+ def navigation_maps_npm_dependencies
28
+ @navigation_maps_npm_dependencies ||= begin
29
+ package_json = JSON.parse(File.read(navigation_maps_path.join("package.json")))
30
+
31
+ {
32
+ prod: package_json["dependencies"].map { |package, version| "#{package}@#{version}" },
33
+ dev: package_json["devDependencies"].map { |package, version| "#{package}@#{version}" }
34
+ }.freeze
35
+ end
36
+ end
37
+
38
+ def navigation_maps_path
39
+ @navigation_maps_path ||= Pathname.new(navigation_maps_gemspec.full_gem_path) if Gem.loaded_specs.has_key?(gem_name)
40
+ end
41
+
42
+ def navigation_maps_gemspec
43
+ @navigation_maps_gemspec ||= Gem.loaded_specs[gem_name]
44
+ end
45
+
46
+ def rails_app_path
47
+ @rails_app_path ||= Rails.root
48
+ end
49
+
50
+ def system!(command)
51
+ system("cd #{rails_app_path} && #{command}") || abort("\n== Command #{command} failed ==")
52
+ end
53
+
54
+ def gem_name
55
+ "decidim-navigation_maps"
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :navigation_maps do
4
+ namespace :active_storage_migrations do
5
+ desc "Migrates editor images from Carrierwave to ActiveStorage"
6
+ task migrate_from_carrierwave: :environment do
7
+ stdout = Logger.new($stdout)
8
+ stdout.level = Logger::INFO
9
+ Rails.logger.extend(ActiveSupport::Logger.broadcast(stdout))
10
+ Decidim::Organization.find_each do |organization|
11
+ puts "Migrating Organization #{organization.id} (#{organization.host})..."
12
+ routes_mappings = []
13
+ Decidim::NavigationMaps::MigrateLegacyImagesJob.perform_now(organization.id, routes_mappings)
14
+
15
+ path = Rails.root.join("tmp/navigation_maps_editor_images_mappings.csv")
16
+ dirname = File.dirname(path)
17
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
18
+ File.open(path, "wb") do |file|
19
+ file.write(Decidim::Exporters::CSV.new(routes_mappings).export.read)
20
+ end
21
+ end
22
+ end
23
+
24
+ desc "Checks editor images migrated from Carrierwave to ActiveStorage"
25
+ task check_migration_from_carrierwave: :environment do
26
+ logger = ActiveSupport::TaggedLogging.new(Logger.new($stdout))
27
+
28
+ Decidim::CarrierWaveMigratorService.check_migration(
29
+ klass: Decidim::NavigationMaps::Blueprint,
30
+ cw_attribute: "image",
31
+ cw_uploader: Decidim::NavigationMaps::Cw::BlueprintUploader,
32
+ as_attribute: "image",
33
+ logger: logger
34
+ )
35
+ end
36
+ end
37
+ end
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.1.0
4
+ version: 1.3.0
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-01-12 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,61 +16,61 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.22'
19
+ version: '0.25'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.24'
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.22'
29
+ version: '0.25'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.24'
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.22'
39
+ version: '0.25'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '0.24'
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.22'
49
+ version: '0.25'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '0.24'
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.22'
59
+ version: '0.25'
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.24'
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.22'
69
+ version: '0.25'
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '0.24'
73
- description: Allows to map processes to image parts using maps.
72
+ version: '0.27'
73
+ description: Allows to create visual guiding maps in content blocks for Decidim.
74
74
  email:
75
75
  - ivan@platoniq.net
76
76
  executables: []
@@ -80,18 +80,7 @@ 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
83
+ - app/cells/decidim/navigation_maps/content_blocks/groups_navigation_map_cell.rb
95
84
  - app/cells/decidim/navigation_maps/content_blocks/navigation_map/_styles.erb
96
85
  - app/cells/decidim/navigation_maps/content_blocks/navigation_map/_tabs.erb
97
86
  - app/cells/decidim/navigation_maps/content_blocks/navigation_map/_tabs_content.erb
@@ -112,14 +101,29 @@ files:
112
101
  - app/forms/decidim/navigation_maps/area_form.rb
113
102
  - app/forms/decidim/navigation_maps/blueprint_form.rb
114
103
  - app/forms/decidim/navigation_maps/blueprint_forms.rb
104
+ - app/jobs/decidim/navigation_maps/migrate_legacy_images_job.rb
115
105
  - app/models/decidim/navigation_maps/application_record.rb
116
106
  - app/models/decidim/navigation_maps/blueprint.rb
117
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
+ - app/queries/decidim/navigation_maps/content_block_blueprints.rb
118
120
  - app/queries/decidim/navigation_maps/organization_blueprints.rb
119
121
  - app/uploaders/decidim/navigation_maps/blueprint_uploader.rb
122
+ - app/uploaders/decidim/navigation_maps/cw/blueprint_uploader.rb
120
123
  - app/views/decidim/navigation_maps/admin/areas/_form.html.erb
121
124
  - app/views/decidim/navigation_maps/admin/areas/new.html.erb
122
125
  - app/views/decidim/navigation_maps/admin/areas/show.html.erb
126
+ - config/assets.rb
123
127
  - config/i18n-tasks.yml
124
128
  - config/locales/ca.yml
125
129
  - config/locales/cs.yml
@@ -131,10 +135,12 @@ files:
131
135
  - db/migrate/20191126045831_add_link_type_to_decidim_navigation_maps_blueprint_areas.rb
132
136
  - db/migrate/20191126154019_add_area_id_to_decidim_navigation_maps_blueprint_areas.rb
133
137
  - db/migrate/20191127093746_add_color_to_navigation_maps_blueprint_areas.rb
138
+ - db/migrate/20201105130724_add_reference_to_content_block_to_blueprints_table.rb
134
139
  - db/migrate/20210112135817_add_height_to_navigation_maps_blueprints.rb
135
140
  - db/seeds.rb
136
141
  - db/seeds/antarctica.png
137
142
  - db/seeds/penguins.jpg
143
+ - db/seeds/pla-cerda.jpg
138
144
  - lib/decidim/navigation_maps.rb
139
145
  - lib/decidim/navigation_maps/admin.rb
140
146
  - lib/decidim/navigation_maps/admin_engine.rb
@@ -142,6 +148,9 @@ files:
142
148
  - lib/decidim/navigation_maps/navigation_map_cell_helpers.rb
143
149
  - lib/decidim/navigation_maps/test/factories.rb
144
150
  - lib/decidim/navigation_maps/version.rb
151
+ - lib/tasks/custom_seeds.rake
152
+ - lib/tasks/decidim_navigation_maps_webpacker_tasks.rake
153
+ - lib/tasks/navigation_maps_active_storage_migration_tasks.rake
145
154
  - vendor/assets/images/draw/layers-2x.png
146
155
  - vendor/assets/images/draw/layers.png
147
156
  - vendor/assets/images/draw/marker-icon-2x.png
@@ -173,14 +182,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
182
  requirements:
174
183
  - - ">="
175
184
  - !ruby/object:Gem::Version
176
- version: '2.6'
185
+ version: '2.7'
177
186
  required_rubygems_version: !ruby/object:Gem::Requirement
178
187
  requirements:
179
188
  - - ">="
180
189
  - !ruby/object:Gem::Version
181
190
  version: '0'
182
191
  requirements: []
183
- rubygems_version: 3.1.4
192
+ rubygems_version: 3.1.6
184
193
  signing_key:
185
194
  specification_version: 4
186
195
  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
- });