decidim-navigation_maps 1.2.0 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,43 @@
1
+ import NavigationMapView from "src/decidim/navigation_maps/map_view.js";
2
+ import "jsviews/jsrender";
3
+
4
+ $(function() {
5
+
6
+ let $maps = $(".navigation_maps .map");
7
+ let $tabs = $("#navigation_maps-tabs");
8
+ let maps = {};
9
+ let tmpl = $.templates("#navigation_maps-popup");
10
+
11
+ $maps.each(function() {
12
+ let id = $(this).data("id");
13
+ maps[id] = new NavigationMapView(this);
14
+ maps[id].onSetLayerProperties(function(layer, props) {
15
+ if (!props.popup) {
16
+ let node = document.createElement("div");
17
+ let html = tmpl.render(props);
18
+ $(node).html(html);
19
+
20
+ layer.bindPopup(node, {
21
+ maxHeight: 400,
22
+ // autoPan: false,
23
+ maxWidth: 640,
24
+ minWidth: 200,
25
+ keepInView: true,
26
+ className: `navigation_map-info map-info-${id}-${layer._leaflet_id}`
27
+ });
28
+ }
29
+ });
30
+ maps[id].onClickArea(function(area) {
31
+ let popup = area.feature.properties && area.feature.properties.link && area.feature.properties.popup;
32
+ if (popup) {
33
+ location = area.feature.properties.link;
34
+ }
35
+ });
36
+ });
37
+
38
+ $tabs.on("change.zf.tabs", function(e, $tab, $content) {
39
+ let id = $content.find(".map").data("id");
40
+ maps[id].reload();
41
+ });
42
+
43
+ });
@@ -2,10 +2,10 @@
2
2
  //= require leaflet-geoman
3
3
  //= require_self
4
4
 
5
- @import "decidim/variables";
6
- @import "decidim/utils/settings";
7
- @import "decidim/utils/mixins";
8
- @import "decidim/navigation_maps/variables";
5
+ @import "stylesheets/decidim/variables";
6
+ @import "stylesheets/decidim/utils/settings";
7
+ @import "stylesheets/decidim/utils/mixins";
8
+ @import "stylesheets/decidim/navigation_maps/variables";
9
9
 
10
10
  .navigation_maps.admin {
11
11
  .accordion-item {
@@ -1,8 +1,7 @@
1
1
  //= require leaflet
2
2
  //= require leaflet-geoman
3
3
  //= require_self
4
-
5
- @import "decidim/navigation_maps/variables";
4
+ @import "stylesheets/decidim/navigation_maps/variables";
6
5
 
7
6
  .home-section {
8
7
  .navigation_maps {
@@ -4,18 +4,10 @@ module Decidim
4
4
  module NavigationMaps
5
5
  # This class deals with uploading images to a Blueprints.
6
6
  class BlueprintUploader < Decidim::ImageUploader
7
- process :validate_size, :validate_dimensions
8
-
9
- version :thumbnail do
10
- process resize_to_fit: [nil, 237]
11
- end
12
-
13
- def extension_white_list
14
- %w(jpg jpeg png svg)
15
- end
16
-
17
- def max_image_height_or_width
18
- 8000
7
+ set_variants do
8
+ {
9
+ thumbnail: { resize_to_fit: [nil, 237] }
10
+ }
19
11
  end
20
12
  end
21
13
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavigationMaps
5
+ module Cw
6
+ # This class deals with uploading images to a Blueprints.
7
+ class BlueprintUploader < Decidim::Cw::ImageUploader
8
+ process :validate_size, :validate_dimensions
9
+
10
+ version :thumbnail do
11
+ process resize_to_fit: [nil, 237]
12
+ end
13
+
14
+ def extension_white_list
15
+ %w(jpg jpeg png svg)
16
+ end
17
+
18
+ def max_image_height_or_width
19
+ 8000
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
data/config/assets.rb ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is located at `config/assets.rb` of your module.
4
+
5
+ # Define the base path of your module. Please note that `Rails.root` may not be
6
+ # used because we are not inside the Rails environment when this file is loaded.
7
+ base_path = File.expand_path("..", __dir__)
8
+
9
+ # Register an additional load path for webpack. All the assets within these
10
+ # directories will be available for inclusion within the Decidim assets. For
11
+ # example, if you have `app/packs/src/decidim/foo.js`, you can include that file
12
+ # in your JavaScript entrypoints (or other JavaScript files within Decidim)
13
+ # using `import "src/decidim/foo"` after you have registered the additional path
14
+ # as follows.
15
+ Decidim::Webpacker.register_path("#{base_path}/app/packs")
16
+
17
+ # Register the entrypoints for your module. These entrypoints can be included
18
+ # within your application using `javascript_pack_tag` and if you include any
19
+ # SCSS files within the entrypoints, they become available for inclusion using
20
+ # `stylesheet_pack_tag`.
21
+ Decidim::Webpacker.register_entrypoints(
22
+ decidim_navigation_maps: "#{base_path}/app/packs/entrypoints/decidim_navigation_maps.js",
23
+ decidim_admin_navigation_maps: "#{base_path}/app/packs/entrypoints/decidim_admin_navigation_maps.js"
24
+ )
25
+
26
+ # If you want to import some extra SCSS files in the Decidim main SCSS file
27
+ # without adding any extra stylesheet inclusion tags, you can use the following
28
+ # method to register the stylesheet import for the main application.
29
+ # Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/navigation_maps/navigation_maps")
30
+
31
+ # If you want to do the same but include the SCSS file for the admin panel's
32
+ # main SCSS file, you can use the following method.
33
+ # Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/navigation_maps/admin", group: :admin)
34
+
35
+ # If you want to override some SCSS variables/settings for Foundation from the
36
+ # module, you can add the following registered import.
37
+ # Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/foo/settings", type: :settings)
38
+
39
+ # If you want to do the same but override the SCSS variables of the admin
40
+ # panel's styles, you can use the following method.
41
+ # Decidim::Webpacker.register_stylesheet_import("stylesheets/decidim/foo/admin_settings", type: :settings, group: :admin)
@@ -29,7 +29,7 @@ cs:
29
29
  view: Zapojte se
30
30
  navigation_map_settings_form:
31
31
  add: Přidat
32
- autohide_tabs: Hide tabs navigation if there's only one map
32
+ autohide_tabs: Skrýt navigaci v záložkách, pokud je pouze jedna mapa
33
33
  blueprint_image: Obrázek plánu
34
34
  description: Popis
35
35
  editor: Editor mapy
data/db/seeds.rb CHANGED
@@ -24,18 +24,19 @@ if !ENV["SKIP_MODULE_SEEDS"] && (!Rails.env.production? || ENV["SEED"])
24
24
  blueprint1 = Decidim::NavigationMaps::Blueprint.create(
25
25
  organization: organization,
26
26
  content_block: content_block,
27
- image: File.new(File.join(seeds_root, "antarctica.png")),
28
27
  title: Decidim::Faker::Localized.sentence(word_count: 2),
29
28
  description: Decidim::Faker::Localized.sentence(word_count: 10)
30
29
  )
31
30
 
32
- Decidim::NavigationMaps::Blueprint.create(
31
+ blueprint2 = Decidim::NavigationMaps::Blueprint.create(
33
32
  organization: organization,
34
- image: File.new(File.join(seeds_root, "penguins.jpg")),
35
33
  title: Decidim::Faker::Localized.sentence(word_count: 2),
36
34
  description: Decidim::Faker::Localized.sentence(word_count: 10)
37
35
  )
38
36
 
37
+ blueprint1.image.attach(io: File.open(File.join(seeds_root, "antarctica.png")), filename: "antarctica.png", content_type: "image/png")
38
+ blueprint2.image.attach(io: File.open(File.join(seeds_root, "penguins.jpg")), filename: "penguins.jpg", content_type: "image/jpeg")
39
+
39
40
  Decidim::NavigationMaps::BlueprintArea.create(
40
41
  blueprint: blueprint1,
41
42
  area_id: "10",
@@ -84,7 +85,7 @@ if !ENV["SKIP_MODULE_SEEDS"] && (!Rails.env.production? || ENV["SEED"])
84
85
  link_type: "link",
85
86
  color: "#ffbb00",
86
87
  title: { en: "Penguins" },
87
- description: { en: "Penguins are beatiful animals" }
88
+ description: { en: "Penguins are beautiful animals" }
88
89
  )
89
90
 
90
91
  Decidim::NavigationMaps::BlueprintArea.create(
@@ -121,10 +122,10 @@ if !ENV["SKIP_MODULE_SEEDS"] && (!Rails.env.production? || ENV["SEED"])
121
122
  blueprint = Decidim::NavigationMaps::Blueprint.create(
122
123
  organization: organization,
123
124
  content_block: content_block,
124
- image: File.new(File.join(seeds_root, "pla-cerda.jpg")),
125
125
  title: Decidim::Faker::Localized.sentence(word_count: 2),
126
126
  description: Decidim::Faker::Localized.sentence(word_count: 10)
127
127
  )
128
+ blueprint1.image.attach(io: File.open(File.join(seeds_root, "pla-cerda.jpg")), filename: "pla-cerda.jpg", content_type: "image/jpeg")
128
129
 
129
130
  Decidim::NavigationMaps::BlueprintArea.create(
130
131
  blueprint: blueprint,
@@ -22,10 +22,6 @@ module Decidim
22
22
  end
23
23
  end
24
24
 
25
- initializer "decidim_navigation_maps.admin_assets" do |app|
26
- app.config.assets.precompile += %w(admin/decidim_navigation_maps_manifest.js admin/decidim_navigation_maps_manifest.css)
27
- end
28
-
29
25
  def load_seed
30
26
  nil
31
27
  end
@@ -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"
@@ -41,6 +37,10 @@ module Decidim
41
37
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::NavigationMaps::Engine.root}/app/cells")
42
38
  Cell::ViewModel.view_paths << File.expand_path("#{Decidim::NavigationMaps::Engine.root}/app/views") # for partials
43
39
  end
40
+
41
+ initializer "decidim_notify.webpacker.assets_path" do
42
+ Decidim.register_assets_path File.expand_path("app/packs", root)
43
+ end
44
44
  end
45
45
  end
46
46
  end
@@ -7,7 +7,7 @@ module Decidim
7
7
  delegate :available_locales, to: :current_organization
8
8
 
9
9
  def valid_blueprints
10
- content_block_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?
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-meetings version.
5
5
  module NavigationMaps
6
- VERSION = "1.2.0"
7
- DECIDIM_VERSION = [">= 0.24", "< 0.25"].freeze
6
+ VERSION = "1.3.2"
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,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
data/package.json ADDED
@@ -0,0 +1,197 @@
1
+ {
2
+ "name": "decidim-module-navigation_maps",
3
+ "version": "1.0.0",
4
+ "description": "A Blueprint/Map navigation for Decidim",
5
+ "scripts": {
6
+ "lint": "eslint -c .eslintrc.json --ext .js app/packs/",
7
+ "lint-fix": "eslint -c .eslintrc.json --ext .js app/packs/ --fix",
8
+ "stylelint": "stylelint **/*.scss",
9
+ "stylelint-fix": "stylelint **/*.scss --fix"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/Platoniq/decidim-module-navigation_maps.git"
14
+ },
15
+ "keywords": [
16
+ "decidim"
17
+ ],
18
+ "author": "Ivan Verges <ivan@platoniq.net>",
19
+ "license": "AGPL-3.0-or-later",
20
+ "bugs": {
21
+ "url": "https://github.com/Platoniq/decidim-module-navigation_maps/issues"
22
+ },
23
+ "homepage": "https://github.com/Platoniq/decidim-module-navigation_maps#readme",
24
+ "stylelint": {
25
+ "rules": {
26
+ "at-rule-empty-line-before": [
27
+ "always",
28
+ {
29
+ "except": [
30
+ "blockless-after-same-name-blockless",
31
+ "first-nested"
32
+ ],
33
+ "ignore": [
34
+ "after-comment"
35
+ ],
36
+ "ignoreAtRules": [
37
+ "else"
38
+ ]
39
+ }
40
+ ],
41
+ "at-rule-name-case": "lower",
42
+ "at-rule-semicolon-newline-after": "always",
43
+ "block-closing-brace-empty-line-before": "never",
44
+ "block-closing-brace-newline-after": "always",
45
+ "block-closing-brace-newline-before": "always-multi-line",
46
+ "block-closing-brace-space-before": "always-single-line",
47
+ "block-no-empty": true,
48
+ "block-opening-brace-newline-after": "always-multi-line",
49
+ "block-opening-brace-space-after": "always-single-line",
50
+ "block-opening-brace-space-before": "never",
51
+ "color-hex-case": "lower",
52
+ "color-hex-length": "short",
53
+ "color-no-invalid-hex": true,
54
+ "comment-empty-line-before": [
55
+ "always",
56
+ {
57
+ "except": [
58
+ "first-nested"
59
+ ],
60
+ "ignore": [
61
+ "stylelint-commands"
62
+ ]
63
+ }
64
+ ],
65
+ "comment-no-empty": true,
66
+ "comment-whitespace-inside": "always",
67
+ "custom-property-empty-line-before": [
68
+ "always",
69
+ {
70
+ "except": [
71
+ "after-custom-property",
72
+ "first-nested"
73
+ ],
74
+ "ignore": [
75
+ "after-comment",
76
+ "inside-single-line-block"
77
+ ]
78
+ }
79
+ ],
80
+ "declaration-bang-space-after": "never",
81
+ "declaration-bang-space-before": "always",
82
+ "declaration-block-no-duplicate-properties": [
83
+ true,
84
+ {
85
+ "ignore": [
86
+ "consecutive-duplicates-with-different-values"
87
+ ]
88
+ }
89
+ ],
90
+ "declaration-block-no-redundant-longhand-properties": true,
91
+ "declaration-block-no-shorthand-property-overrides": true,
92
+ "declaration-block-semicolon-newline-after": "always-multi-line",
93
+ "declaration-block-semicolon-space-after": "always-single-line",
94
+ "declaration-block-semicolon-space-before": "never",
95
+ "declaration-block-single-line-max-declarations": 1,
96
+ "declaration-block-trailing-semicolon": "always",
97
+ "declaration-colon-newline-after": "always-multi-line",
98
+ "declaration-colon-space-after": "always-single-line",
99
+ "declaration-colon-space-before": "never",
100
+ "declaration-empty-line-before": [
101
+ "always",
102
+ {
103
+ "except": [
104
+ "after-declaration",
105
+ "first-nested"
106
+ ],
107
+ "ignore": [
108
+ "after-comment",
109
+ "inside-single-line-block"
110
+ ]
111
+ }
112
+ ],
113
+ "function-calc-no-unspaced-operator": true,
114
+ "function-comma-newline-after": "always-multi-line",
115
+ "function-comma-space-after": "always-single-line",
116
+ "function-comma-space-before": "never",
117
+ "function-linear-gradient-no-nonstandard-direction": true,
118
+ "function-max-empty-lines": 0,
119
+ "function-name-case": "lower",
120
+ "function-parentheses-newline-inside": "always-multi-line",
121
+ "function-parentheses-space-inside": "never-single-line",
122
+ "function-whitespace-after": "always",
123
+ "indentation": 2,
124
+ "keyframe-declaration-no-important": true,
125
+ "length-zero-no-unit": true,
126
+ "max-empty-lines": 1,
127
+ "media-feature-colon-space-after": "always",
128
+ "media-feature-colon-space-before": "never",
129
+ "media-feature-name-case": "lower",
130
+ "media-feature-name-no-unknown": true,
131
+ "media-feature-parentheses-space-inside": "never",
132
+ "media-feature-range-operator-space-after": "always",
133
+ "media-feature-range-operator-space-before": "always",
134
+ "media-query-list-comma-newline-after": "always-multi-line",
135
+ "media-query-list-comma-space-after": "always-single-line",
136
+ "media-query-list-comma-space-before": "never",
137
+ "no-empty-source": true,
138
+ "no-eol-whitespace": true,
139
+ "no-extra-semicolons": true,
140
+ "no-invalid-double-slash-comments": true,
141
+ "no-missing-end-of-source-newline": true,
142
+ "number-leading-zero": "never",
143
+ "number-no-trailing-zeros": true,
144
+ "property-case": "lower",
145
+ "property-no-unknown": true,
146
+ "rule-empty-line-before": [
147
+ "always-multi-line",
148
+ {
149
+ "except": [
150
+ "first-nested"
151
+ ],
152
+ "ignore": [
153
+ "after-comment"
154
+ ]
155
+ }
156
+ ],
157
+ "selector-attribute-brackets-space-inside": "never",
158
+ "selector-attribute-operator-space-after": "never",
159
+ "selector-attribute-operator-space-before": "never",
160
+ "selector-combinator-space-after": "always",
161
+ "selector-combinator-space-before": "always",
162
+ "selector-descendant-combinator-no-non-space": true,
163
+ "selector-list-comma-newline-after": "always",
164
+ "selector-list-comma-space-before": "never",
165
+ "selector-max-empty-lines": 0,
166
+ "selector-pseudo-class-case": "lower",
167
+ "selector-pseudo-class-no-unknown": true,
168
+ "selector-pseudo-class-parentheses-space-inside": "never",
169
+ "selector-pseudo-element-case": "lower",
170
+ "selector-pseudo-element-colon-notation": "double",
171
+ "selector-pseudo-element-no-unknown": true,
172
+ "selector-type-case": "lower",
173
+ "selector-type-no-unknown": true,
174
+ "shorthand-property-no-redundant-values": true,
175
+ "string-no-newline": true,
176
+ "unit-case": "lower",
177
+ "unit-no-unknown": true,
178
+ "value-list-comma-newline-after": "always-multi-line",
179
+ "value-list-comma-space-after": "always-single-line",
180
+ "value-list-comma-space-before": "never",
181
+ "value-list-max-empty-lines": 0
182
+ }
183
+ },
184
+ "dependencies": {
185
+ "@geoman-io/leaflet-geoman-free": "^2.11.4",
186
+ "jquery-form": "^4.3.0",
187
+ "jsviews": "^1.0.11"
188
+ },
189
+ "devDependencies": {
190
+ "eslint": "^7.32.0",
191
+ "eslint": "^7.25.0",
192
+ "eslint-config-prettier": "^8.2.0",
193
+ "eslint-config-standard": "^11.0.0",
194
+ "eslint-plugin-import": "^2.22.0",
195
+ "stylelint": "13.11.0"
196
+ }
197
+ }