diff --git a/Gemfile b/Gemfile index 311412f..ce5f64a 100644 --- a/Gemfile +++ b/Gemfile @@ -2,14 +2,17 @@ source "https://rubygems.org" +DECIDIM_VERSION = "0.28.1" + ruby RUBY_VERSION -gem "decidim", "0.28.1" -# gem "decidim-conferences", "0.28.1" -# gem "decidim-design", "0.28.1" -# gem "decidim-elections", "0.28.1" -# gem "decidim-initiatives", "0.28.1" -# gem "decidim-templates", "0.28.1" +gem "decidim", DECIDIM_VERSION + +gem "decidim-decidim_awesome", git: "https://github.com/decidim-ice/decidim-module-decidim_awesome", branch: "develop" +gem "decidim-social_crowdfunding", git: "https://github.com/Platoniq/decidim-module-social_crowdfunding", branch: "main" +gem "decidim-term_customizer", git: "https://github.com/mainio/decidim-module-term_customizer", branch: "main" + +gem "faraday", "~> 2.9.0" gem "bootsnap", "~> 1.3" @@ -21,7 +24,7 @@ group :development, :test do gem "byebug", "~> 11.0", platform: :mri gem "brakeman", "~> 5.4" - gem "decidim-dev", "0.28.1" + gem "decidim-dev", DECIDIM_VERSION gem "mdl" gem "net-imap", "~> 0.2.3" gem "net-pop", "~> 0.1.1" diff --git a/Gemfile.lock b/Gemfile.lock index 4cf8ba5..fbee98c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,32 @@ +GIT + remote: https://github.com/Platoniq/decidim-module-social_crowdfunding + revision: 1a3d32004dc85a2e80881a00db8b4b99bfc8f8cb + branch: main + specs: + decidim-social_crowdfunding (0.3.0) + decidim-admin (>= 0.28.0, < 0.29) + decidim-core (>= 0.28.0, < 0.29) + +GIT + remote: https://github.com/decidim-ice/decidim-module-decidim_awesome + revision: b2800256f5e147452438686029b3990c89fb21be + branch: develop + specs: + decidim-decidim_awesome (0.11.0) + decidim-admin (>= 0.28.0, < 0.29) + decidim-core (>= 0.28.0, < 0.29) + deface (>= 1.5) + sassc (~> 2.3) + +GIT + remote: https://github.com/mainio/decidim-module-term_customizer + revision: 9133eea57ebfc4164b640efd1ac6b9ca1628c793 + branch: main + specs: + decidim-term_customizer (0.28.0) + decidim-admin (~> 0.28.0) + decidim-core (~> 0.28.0) + GEM remote: https://rubygems.org/ specs: @@ -341,6 +370,12 @@ GEM declarative-builder (0.1.0) declarative-option (< 0.2.0) declarative-option (0.1.0) + deface (1.9.0) + actionview (>= 5.2) + nokogiri (>= 1.6) + polyglot + railties (>= 5.2) + rainbow (>= 2.1.0) devise (4.9.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -383,29 +418,10 @@ GEM railties (>= 5.0.0) faker (3.2.0) i18n (>= 1.8.11, < 2) - faraday (1.10.0) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday (2.9.1) + faraday-net_http (>= 2.0, < 3.2) + faraday-net_http (3.1.0) + net-http ffi (1.15.5) figaro (1.2.0) thor (>= 0.14.0, < 2) @@ -530,8 +546,9 @@ GEM msgpack (1.4.5) multi_json (1.15.0) multi_xml (0.6.0) - multipart-post (2.2.3) mutex_m (0.2.0) + net-http (0.4.1) + uri net-imap (0.2.3) digest net-protocol @@ -598,6 +615,7 @@ GEM pg_search (2.3.6) activerecord (>= 5.2) activesupport (>= 5.2) + polyglot (0.3.5) premailer (1.16.0) addressable css_parser (>= 1.6.0) @@ -735,7 +753,6 @@ GEM ruby-progressbar (1.11.0) ruby-vips (2.1.4) ffi (~> 1.12) - ruby2_keywords (0.0.5) rubyXL (3.4.25) nokogiri (>= 1.10.8) rubyzip (>= 1.3.0) @@ -745,6 +762,8 @@ GEM sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.4.0) + ffi (~> 1.9) selenium-webdriver (4.9.0) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) @@ -805,6 +824,7 @@ GEM uber (0.1.0) unicode-display_width (2.4.2) uniform_notifier (1.16.0) + uri (0.13.0) valid_email2 (4.0.6) activemodel (>= 3.2) mail (~> 2.5) @@ -860,7 +880,11 @@ DEPENDENCIES capistrano-rbenv capistrano-sidekiq decidim (= 0.28.1) + decidim-decidim_awesome! decidim-dev (= 0.28.1) + decidim-social_crowdfunding! + decidim-term_customizer! + faraday (~> 2.9.0) figaro (~> 1.2) letter_opener_web (~> 2.0) listen (~> 3.1) diff --git a/db/migrate/20240624112549_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb b/db/migrate/20240624112549_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb new file mode 100644 index 0000000..c0fc109 --- /dev/null +++ b/db/migrate/20240624112549_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132503) + +class CreateDecidimTermCustomizerTranslationSets < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_translation_sets do |t| + t.jsonb :name + end + end +end diff --git a/db/migrate/20240624112550_create_decidim_term_customizer_translations.decidim_term_customizer.rb b/db/migrate/20240624112550_create_decidim_term_customizer_translations.decidim_term_customizer.rb new file mode 100644 index 0000000..90bced4 --- /dev/null +++ b/db/migrate/20240624112550_create_decidim_term_customizer_translations.decidim_term_customizer.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132654) + +class CreateDecidimTermCustomizerTranslations < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_translations do |t| + t.string :locale + t.string :key + t.text :value + + t.references( + :translation_set, + null: false, + foreign_key: { to_table: :decidim_term_customizer_translation_sets }, + index: { name: "decidim_term_customizer_translation_translation_set" } + ) + end + end +end diff --git a/db/migrate/20240624112551_create_decidim_term_customizer_constraints.decidim_term_customizer.rb b/db/migrate/20240624112551_create_decidim_term_customizer_constraints.decidim_term_customizer.rb new file mode 100644 index 0000000..c027259 --- /dev/null +++ b/db/migrate/20240624112551_create_decidim_term_customizer_constraints.decidim_term_customizer.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +# This migration comes from decidim_term_customizer (originally 20190217132726) + +class CreateDecidimTermCustomizerConstraints < ActiveRecord::Migration[5.2] + def change + create_table :decidim_term_customizer_constraints do |t| + t.references :decidim_organization, null: false, foreign_key: true, index: { name: "decidim_term_customizer_constraint_organization" } + t.references :subject, polymorphic: true, index: { name: "decidim_term_customizer_constraint_subject" } + + t.references( + :translation_set, + null: false, + foreign_key: { to_table: :decidim_term_customizer_translation_sets }, + index: { name: "decidim_term_customizer_constraint_translation_set" } + ) + end + end +end diff --git a/db/migrate/20240624112844_create_decidim_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20240624112844_create_decidim_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..fccf913 --- /dev/null +++ b/db/migrate/20240624112844_create_decidim_awesome_config.decidim_decidim_awesome.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200324170000) + +class CreateDecidimAwesomeConfig < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_config do |t| + t.jsonb :var + t.jsonb :value + t.integer :decidim_organization_id, + foreign_key: true, + index: { name: "index_decidim_awesome_on_decidim_organization_id" } + + t.timestamps + t.index [:var, :decidim_organization_id], name: "index_decidim_awesome_organization_var", unique: true + end + end +end diff --git a/db/migrate/20240624112845_create_awesome_editor_images.decidim_decidim_awesome.rb b/db/migrate/20240624112845_create_awesome_editor_images.decidim_decidim_awesome.rb new file mode 100644 index 0000000..5a39901 --- /dev/null +++ b/db/migrate/20240624112845_create_awesome_editor_images.decidim_decidim_awesome.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200324230936) + +class CreateAwesomeEditorImages < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_editor_images do |t| + t.string :image + t.string :path + t.references :decidim_author, null: false, foreign_key: { to_table: :decidim_users }, index: { name: "decidim_awesome_editor_images_author" } + t.references :decidim_organization, null: false, foreign_key: true, index: { name: "decidim_awesome_editor_images_constraint_organization" } + + t.timestamps + end + end +end diff --git a/db/migrate/20240624112846_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb b/db/migrate/20240624112846_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb new file mode 100644 index 0000000..8ef6bc0 --- /dev/null +++ b/db/migrate/20240624112846_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20200403142257) + +class CreateDecidimAwesomeConfigConstraints < ActiveRecord::Migration[5.2] + def change + create_table :decidim_awesome_config_constraints do |t| + t.jsonb :settings + + t.references :decidim_awesome_config, null: false, foreign_key: { to_table: :decidim_awesome_config }, index: { name: "decidim_awesome_config_constraints_config" } + t.timestamps + t.index [:settings, :decidim_awesome_config_id], name: "index_decidim_awesome_settings_awesome_config", unique: true + end + end +end diff --git a/db/migrate/20240624112847_change_awesome_config_var_type.decidim_decidim_awesome.rb b/db/migrate/20240624112847_change_awesome_config_var_type.decidim_decidim_awesome.rb new file mode 100644 index 0000000..d1ef8db --- /dev/null +++ b/db/migrate/20240624112847_change_awesome_config_var_type.decidim_decidim_awesome.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20210628150825) + +class ChangeAwesomeConfigVarType < ActiveRecord::Migration[5.2] + def change + change_column :decidim_awesome_config, :var, :string + + Decidim::DecidimAwesome::AwesomeConfig.find_each do |config| + config.var.gsub!('"', "") + config.save! + end + end +end diff --git a/db/migrate/20240624112848_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb b/db/migrate/20240624112848_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb new file mode 100644 index 0000000..64482b4 --- /dev/null +++ b/db/migrate/20240624112848_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20231006113837) + +class CreateDecidimAwesomeVoteWeights < ActiveRecord::Migration[6.0] + def change + create_table :decidim_awesome_vote_weights do |t| + # this might be polymorphic in the future (if other types of votes are supported) + t.references :proposal_vote, null: false, index: { name: "decidim_awesome_proposals_weights_vote" } + + t.integer :weight, null: false, default: 1 + t.timestamps + end + end +end diff --git a/db/migrate/20240624112849_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb b/db/migrate/20240624112849_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb new file mode 100644 index 0000000..781fd3f --- /dev/null +++ b/db/migrate/20240624112849_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20231006113841) + +class CreateDecidimAwesomeProposalExtraFields < ActiveRecord::Migration[6.0] + def change + create_table :decidim_awesome_proposal_extra_fields do |t| + # this might be polymorphic in the future (if other types of votes are supported) + t.references :decidim_proposal, null: false, index: { name: "decidim_awesome_extra_fields_on_proposal" } + + t.jsonb :vote_weight_totals + t.integer :weight_total, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20240624112850_rename_editor_images_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20240624112850_rename_editor_images_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..a556be3 --- /dev/null +++ b/db/migrate/20240624112850_rename_editor_images_awesome_config.decidim_decidim_awesome.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +# This migration comes from decidim_decidim_awesome (originally 20240306175331) + +class RenameEditorImagesAwesomeConfig < ActiveRecord::Migration[6.1] + class AwesomeConfig < ApplicationRecord + self.table_name = :decidim_awesome_config + end + + # rubocop:disable Rails/SkipsModelValidations + def up + AwesomeConfig.where(var: :allow_images_in_full_editor).update_all(var: :allow_images_in_editors) + AwesomeConfig.where(var: :allow_images_in_small_editor).destroy_all + end + + def down + AwesomeConfig.where(var: :allow_images_in_editors).update_all(var: :allow_images_in_full_editor) + end + # rubocop:enable Rails/SkipsModelValidations +end diff --git a/db/migrate/20240624113132_create_decidim_social_crowdfunding_campaigns.decidim_social_crowdfunding.rb b/db/migrate/20240624113132_create_decidim_social_crowdfunding_campaigns.decidim_social_crowdfunding.rb new file mode 100644 index 0000000..bdb7816 --- /dev/null +++ b/db/migrate/20240624113132_create_decidim_social_crowdfunding_campaigns.decidim_social_crowdfunding.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true +# This migration comes from decidim_social_crowdfunding (originally 20211125195842) + +class CreateDecidimSocialCrowdfundingCampaigns < ActiveRecord::Migration[5.2] + def change + create_table :decidim_social_crowdfunding_campaigns do |t| + t.references :decidim_organization, foreign_key: { to_table: :decidim_organizations }, index: { name: "index_social_crowdfunding_campaigns_on_organization" } + + t.jsonb :name + t.jsonb :description + + t.string :slug + + t.string :url + t.string :lang + + t.string :thumbnail_url + + t.decimal :amount + t.decimal :minimum + t.decimal :optimum + + t.jsonb :data + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 52bcaa4..093c512 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2024_06_11_155186) do +ActiveRecord::Schema.define(version: 2024_06_24_113132) do # These are extensions that must be enabled in order to support this database enable_extension "ltree" @@ -311,6 +311,53 @@ t.index ["unique_id"], name: "index_decidim_authorizations_on_unique_id" end + create_table "decidim_awesome_config", force: :cascade do |t| + t.string "var" + t.jsonb "value" + t.integer "decidim_organization_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_decidim_awesome_on_decidim_organization_id" + t.index ["var", "decidim_organization_id"], name: "index_decidim_awesome_organization_var", unique: true + end + + create_table "decidim_awesome_config_constraints", force: :cascade do |t| + t.jsonb "settings" + t.bigint "decidim_awesome_config_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_awesome_config_id"], name: "decidim_awesome_config_constraints_config" + t.index ["settings", "decidim_awesome_config_id"], name: "index_decidim_awesome_settings_awesome_config", unique: true + end + + create_table "decidim_awesome_editor_images", force: :cascade do |t| + t.string "image" + t.string "path" + t.bigint "decidim_author_id", null: false + t.bigint "decidim_organization_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_author_id"], name: "decidim_awesome_editor_images_author" + t.index ["decidim_organization_id"], name: "decidim_awesome_editor_images_constraint_organization" + end + + create_table "decidim_awesome_proposal_extra_fields", force: :cascade do |t| + t.bigint "decidim_proposal_id", null: false + t.jsonb "vote_weight_totals" + t.integer "weight_total", default: 0 + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["decidim_proposal_id"], name: "decidim_awesome_extra_fields_on_proposal" + end + + create_table "decidim_awesome_vote_weights", force: :cascade do |t| + t.bigint "proposal_vote_id", null: false + t.integer "weight", default: 1, null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["proposal_vote_id"], name: "decidim_awesome_proposals_weights_vote" + end + create_table "decidim_blogs_posts", id: :serial, force: :cascade do |t| t.jsonb "title" t.jsonb "body" @@ -1397,6 +1444,23 @@ t.index ["target_type", "target_id"], name: "index_decidim_short_links_on_target" end + create_table "decidim_social_crowdfunding_campaigns", force: :cascade do |t| + t.bigint "decidim_organization_id" + t.jsonb "name" + t.jsonb "description" + t.string "slug" + t.string "url" + t.string "lang" + t.string "thumbnail_url" + t.decimal "amount" + t.decimal "minimum" + t.decimal "optimum" + t.jsonb "data" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["decidim_organization_id"], name: "index_social_crowdfunding_campaigns_on_organization" + end + create_table "decidim_sortitions_sortitions", force: :cascade do |t| t.bigint "decidim_component_id" t.integer "decidim_proposals_component_id" @@ -1470,6 +1534,28 @@ t.index ["reset_password_token"], name: "index_decidim_system_admins_on_reset_password_token", unique: true end + create_table "decidim_term_customizer_constraints", force: :cascade do |t| + t.bigint "decidim_organization_id", null: false + t.string "subject_type" + t.bigint "subject_id" + t.bigint "translation_set_id", null: false + t.index ["decidim_organization_id"], name: "decidim_term_customizer_constraint_organization" + t.index ["subject_type", "subject_id"], name: "decidim_term_customizer_constraint_subject" + t.index ["translation_set_id"], name: "decidim_term_customizer_constraint_translation_set" + end + + create_table "decidim_term_customizer_translation_sets", force: :cascade do |t| + t.jsonb "name" + end + + create_table "decidim_term_customizer_translations", force: :cascade do |t| + t.string "locale" + t.string "key" + t.text "value" + t.bigint "translation_set_id", null: false + t.index ["translation_set_id"], name: "decidim_term_customizer_translation_translation_set" + end + create_table "decidim_user_blocks", force: :cascade do |t| t.bigint "decidim_user_id" t.integer "blocking_user_id" @@ -1680,6 +1766,9 @@ add_foreign_key "decidim_authorization_transfers", "decidim_users", column: "source_user_id" add_foreign_key "decidim_authorization_transfers", "decidim_users", column: "user_id" add_foreign_key "decidim_authorizations", "decidim_users" + add_foreign_key "decidim_awesome_config_constraints", "decidim_awesome_config" + add_foreign_key "decidim_awesome_editor_images", "decidim_organizations" + add_foreign_key "decidim_awesome_editor_images", "decidim_users", column: "decidim_author_id" add_foreign_key "decidim_budgets_budgets", "decidim_scopes" add_foreign_key "decidim_budgets_orders", "decidim_budgets_budgets" add_foreign_key "decidim_budgets_projects", "decidim_budgets_budgets" @@ -1702,7 +1791,11 @@ add_foreign_key "decidim_scopes", "decidim_organizations" add_foreign_key "decidim_scopes", "decidim_scope_types", column: "scope_type_id" add_foreign_key "decidim_scopes", "decidim_scopes", column: "parent_id" + add_foreign_key "decidim_social_crowdfunding_campaigns", "decidim_organizations" add_foreign_key "decidim_static_pages", "decidim_organizations" + add_foreign_key "decidim_term_customizer_constraints", "decidim_organizations" + add_foreign_key "decidim_term_customizer_constraints", "decidim_term_customizer_translation_sets", column: "translation_set_id" + add_foreign_key "decidim_term_customizer_translations", "decidim_term_customizer_translation_sets", column: "translation_set_id" add_foreign_key "decidim_user_blocks", "decidim_users" add_foreign_key "decidim_user_blocks", "decidim_users", column: "blocking_user_id" add_foreign_key "decidim_user_moderations", "decidim_users" diff --git a/package-lock.json b/package-lock.json index 10929f0..a8ca70e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,13 +11,30 @@ "@decidim/browserslist-config": "^0.28.1", "@decidim/core": "^0.28.1", "@decidim/elections": "^0.28.1", - "@decidim/webpacker": "^0.28.1" + "@decidim/webpacker": "^0.28.1", + "@rails/actioncable": "^6.1.7", + "codemirror": "^5.65.16", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.7", + "highlight.js": "^11.9.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.14", + "leaflet.featuregroup.subgroup": "^1.0.2", + "tom-select": "^2.2.2" }, "devDependencies": { + "@babel/eslint-parser": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/preset-react": "^7.24.7", "@decidim/dev": "^0.28.1", "@decidim/eslint-config": "^0.28.1", "@decidim/prettier-config": "^0.28.1", - "@decidim/stylelint-config": "^0.28.1" + "@decidim/stylelint-config": "^0.28.1", + "postcss-scss": "^4.0.9", + "sass-embedded": "~1.57.1" } }, "node_modules/@alloc/quick-lru": { @@ -3093,6 +3110,14 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/@decidim/webpacker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/@decidim/webpacker/node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -3112,6 +3137,207 @@ "node": ">= 10.13.0" } }, + "node_modules/@decidim/webpacker/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.5.tgz", + "integrity": "sha512-JQI8aprHDRSNK5exXsbusswTENQPJxW1QWUcLdwuyESoJClT1zo8e+4cmaV5OAU4abcRC6Av4/RmLocPdjcR3A==", + "dependencies": { + "@bufbuild/protobuf": "^1.0.0", + "buffer-builder": "^0.2.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.77.5", + "sass-embedded-android-arm64": "1.77.5", + "sass-embedded-android-ia32": "1.77.5", + "sass-embedded-android-x64": "1.77.5", + "sass-embedded-darwin-arm64": "1.77.5", + "sass-embedded-darwin-x64": "1.77.5", + "sass-embedded-linux-arm": "1.77.5", + "sass-embedded-linux-arm64": "1.77.5", + "sass-embedded-linux-ia32": "1.77.5", + "sass-embedded-linux-musl-arm": "1.77.5", + "sass-embedded-linux-musl-arm64": "1.77.5", + "sass-embedded-linux-musl-ia32": "1.77.5", + "sass-embedded-linux-musl-x64": "1.77.5", + "sass-embedded-linux-x64": "1.77.5", + "sass-embedded-win32-arm64": "1.77.5", + "sass-embedded-win32-ia32": "1.77.5", + "sass-embedded-win32-x64": "1.77.5" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-darwin-arm64": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.5.tgz", + "integrity": "sha512-J3yP6w+xqPrGQE0+sO4Gam6kBDJL5ivgkFNxR0fVlvKeN5qVFYhymp/xGRRMxBrKjohEQtBGP431EzrtvUMFow==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-darwin-x64": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.5.tgz", + "integrity": "sha512-A9fh5tg4s0FidMTG31Vs8TzYZ3Mam/I/tfqvN0g512OhBajp/p2DJvBY+0Br2r+TNH1yGUXf2ZfULuTBFj5u8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-arm": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.5.tgz", + "integrity": "sha512-O7gbOWJloxITBZNkpwChFltxofsnDUf+3pz7+q2ETQKvZQ3kUfFENAF37slo0bsHJ7IEpwJK3ZJlnhZvIgfhgw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-arm64": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.5.tgz", + "integrity": "sha512-LoN804X7QsyvT/h8UGcgBMfV1SdT4JRRNV+slBICxoXPKBLXbZm9KyLRCBQcMLLdlXSZdOfZilxUN1Bd2az6OA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-ia32": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.5.tgz", + "integrity": "sha512-KHNJymlEmjyJbhGfB34zowohjgMvv/qKVsDX5hPlar+qMh+cxJwfgPln1Zl9bfe9qLObmEV2zFA1rpVBWy4xGQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-linux-x64": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.5.tgz", + "integrity": "sha512-3EmYeY+K8nMwIy1El9C+mPuONMQyXSCD6Yyztn3G7moPdZTqXrTL7kTJIl+SRq1tCcnOMMGXnBRE7Kpou1wd+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "sass": "dart-sass/sass" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-win32-ia32": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.5.tgz", + "integrity": "sha512-1ij/K5d2sHPJkytWiPJLoUOVHJOB6cSWXq7jmedeuGooWnBmqnWycmGkhBAEK/t6t1XgzMPsiJMGiHKh7fnBuA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "sass": "dart-sass/sass.bat" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/sass-embedded-win32-x64": { + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.5.tgz", + "integrity": "sha512-Pn6j0jDGeEAhuuVY0CaZaBa7yNkqimEsbUDYYuQ9xh+XdGvZ86SZf6HXHUVIyQUjHORLwQ5f0XoKYYzKfC0y9w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "sass": "dart-sass/sass.bat" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@decidim/webpacker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@decidim/webpacker/node_modules/webpack-cli": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", @@ -3748,6 +3974,11 @@ "node": ">=14" } }, + "node_modules/@rails/actioncable": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-6.1.7.tgz", + "integrity": "sha512-F6S74NGpxhbbDRFsQFGYqefRfZPgYvePNtz9hHKYOqLturrsqrDoG+UcrxEGHsvqDUorMYfx4Wl3K8smmk/u2g==" + }, "node_modules/@rails/activestorage": { "version": "6.1.7", "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-6.1.7.tgz", @@ -6833,6 +7064,14 @@ "node": ">=0.10.0" } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -7132,6 +7371,11 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.798.tgz", "integrity": "sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==" }, + "node_modules/element-matches-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/element-matches-polyfill/-/element-matches-polyfill-1.0.0.tgz", + "integrity": "sha512-6xnaB9NpWYmSgWP1/njuCanX1nopjVZRvSivd9cX7cfURGdldeT46g+3ph1pfNNiiPvHLjfhUk/8HXQkbcu7ng==" + }, "node_modules/element-qsa-scope": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/element-qsa-scope/-/element-qsa-scope-1.1.0.tgz", @@ -8666,6 +8910,31 @@ "node": ">= 6" } }, + "node_modules/form-serialize": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/form-serialize/-/form-serialize-0.7.2.tgz", + "integrity": "sha512-ohEA4Crzd/+hSREjGf4kSsy73WhAtQ7H+blGEz2DVd+JCi0TV5nZBSn9PaPlvrl9m29fa6xclAfpRkqZ57b1bw==" + }, + "node_modules/form-storage": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/form-storage/-/form-storage-1.3.5.tgz", + "integrity": "sha512-Pp9OE43Yy8DkBmk12Yf6i5HmWsNwDJ25IiON5JqaOrvfUE2fZQFYkGXbG9lIkum8h+JSURNulc/w6d56W9X3dA==", + "dependencies": { + "element-matches-polyfill": "^1.0.0", + "form-serialize": "^0.7.2", + "query-string": "^5.0.1", + "query-string-es5": "^6.1.4" + } + }, + "node_modules/formBuilder": { + "version": "3.19.7", + "resolved": "https://registry.npmjs.org/formBuilder/-/formBuilder-3.19.7.tgz", + "integrity": "sha512-3wR/etf9eqUyTNRKOAh8ZD/vKDU3vjIUbqifkQxF2gxsugv7SsMBmk1imnJDDffwZRLkMB9kgzuwtKfyGI8CwA==", + "dependencies": { + "jquery": ">=3.4.1", + "jquery-ui-sortable": "*" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9007,6 +9276,12 @@ "dev": true, "peer": true }, + "node_modules/google-protobuf": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", + "dev": true + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -9192,6 +9467,14 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -9617,6 +9900,36 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/inline-attacher": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/inline-attacher/-/inline-attacher-0.0.7.tgz", + "integrity": "sha512-TAOhFcPSVFizI/cdUtu/riEU6n4+aAFnRDCmKtz2T5RYqOm1016+i8G01T7C9fyve5F689k882Jp2SmFFVe26w==", + "dependencies": { + "@codemirror/view": "^6.16.0" + }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=7.0.0" + }, + "peerDependencies": { + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/inline-attacher/node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + }, + "node_modules/inline-attacher/node_modules/@codemirror/view": { + "version": "6.28.2", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.2.tgz", + "integrity": "sha512-A3DmyVfjgPsGIjiJqM/zvODUAPQdQl3ci0ghehYNnbt5x+o76xq+dL5+mMBuysDXnI3kapgOkoeJ0sbtL/3qPw==", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", @@ -10462,6 +10775,11 @@ "resolved": "https://registry.npmjs.org/jquery-serializejson/-/jquery-serializejson-2.9.0.tgz", "integrity": "sha512-xR7rjl0tRKIVioV5lOkOSv7K8BHMvGzYzC7Ech1iAYuZiYf0ksEpLC8OqjA5VApXf/qn/49O9hTmW70+/EA0vA==" }, + "node_modules/jquery-ui-sortable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jquery-ui-sortable/-/jquery-ui-sortable-1.0.0.tgz", + "integrity": "sha512-7xAUWoEJ/jHoj48ei8CCUtiad2uM3ie3IR2b3KB0Mpmb54IbBxzVb5vtrj0zqtd0GNQDImx+BPZml9QmK2EL3w==" + }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", @@ -10560,6 +10878,14 @@ "node": ">=0.10.0" } }, + "node_modules/jsrender": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/jsrender/-/jsrender-1.0.14.tgz", + "integrity": "sha512-gtpx42lvbZcnG+hLHzYxMaxu0gBM5sNHwkOAgVYoJRgzsVChurFCLfTO1KjgUYEBMp84hDq46WQW8rtSAMjmFw==", + "dependencies": { + "through2": "^3.0.1" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -10645,6 +10971,11 @@ "resolved": "https://registry.npmjs.org/leaflet-tilelayer-here/-/leaflet-tilelayer-here-2.0.1.tgz", "integrity": "sha512-lujfnFt7TuEk3bHGsWt/w01XBfrU9zy7B6C8fzJDr8txhNmVNA00kRRrEJPaLaFyVeSwwA5vWS6zDg2W13DCIA==" }, + "node_modules/leaflet.featuregroup.subgroup": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet.featuregroup.subgroup/-/leaflet.featuregroup.subgroup-1.0.2.tgz", + "integrity": "sha512-9nCVg8nUe686+BtPbUT7ALOe/IA+8Mum+rkA8pfPpCkH0WvKevRrH+JMcMTjAoNQKVI0uxrWrLV5w298SS3ESA==" + }, "node_modules/leaflet.markercluster": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", @@ -13666,6 +13997,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/query-string-es5": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/query-string-es5/-/query-string-es5-6.1.4.tgz", + "integrity": "sha512-pMdQETPqMQO+OUd2t3hUxBV8REa6w+iyD+o87M1qc1Vj3jBkQIIw3aZc+6rxlRTDxZ5ac+w0rGE/p4JIt2Xupg==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/query-string-es5/node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -14426,44 +14790,35 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass-embedded": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.2.tgz", - "integrity": "sha512-luiDeWNZ0tKs1jCiSFbuz8wFVQxYqN+vh+yfm9v7kW42yPtwEF8+z2ROaDJluSUZ7vhFmsXuqoKg9qBxc7SCnw==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.57.1.tgz", + "integrity": "sha512-O0s796x76bRSJIdmJ4lrK+zJLtF3XeP+0tbJzR4NAPSDnWqHLk2boUYSdfx4DnF4x9rGmcVlMWFE8UvnLMNCmw==", + "dev": true, "dependencies": { - "@bufbuild/protobuf": "^1.0.0", "buffer-builder": "^0.2.0", + "google-protobuf": "^3.11.4", "immutable": "^4.0.0", "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "varint": "^6.0.0" + "supports-color": "^8.1.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.77.2", - "sass-embedded-android-arm64": "1.77.2", - "sass-embedded-android-ia32": "1.77.2", - "sass-embedded-android-x64": "1.77.2", - "sass-embedded-darwin-arm64": "1.77.2", - "sass-embedded-darwin-x64": "1.77.2", - "sass-embedded-linux-arm": "1.77.2", - "sass-embedded-linux-arm64": "1.77.2", - "sass-embedded-linux-ia32": "1.77.2", - "sass-embedded-linux-musl-arm": "1.77.2", - "sass-embedded-linux-musl-arm64": "1.77.2", - "sass-embedded-linux-musl-ia32": "1.77.2", - "sass-embedded-linux-musl-x64": "1.77.2", - "sass-embedded-linux-x64": "1.77.2", - "sass-embedded-win32-arm64": "1.77.2", - "sass-embedded-win32-ia32": "1.77.2", - "sass-embedded-win32-x64": "1.77.2" + "sass-embedded-darwin-arm64": "1.57.1", + "sass-embedded-darwin-x64": "1.57.1", + "sass-embedded-linux-arm": "1.57.1", + "sass-embedded-linux-arm64": "1.57.1", + "sass-embedded-linux-ia32": "1.57.1", + "sass-embedded-linux-x64": "1.57.1", + "sass-embedded-win32-ia32": "1.57.1", + "sass-embedded-win32-x64": "1.57.1" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.2.tgz", - "integrity": "sha512-rMuIMZ/FstMrT9Y23LDgQGpCyfe3i10dJnmW+DVJ9Gqz4dR7qpysEBIQXU35mHVq8ppNZ0yGiFlFZTSiiVMdzQ==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.5.tgz", + "integrity": "sha512-/DfNYoykqwMFduecqa8n0NH+cS6oLdCPFjwhe92efsOOt5WDYEOlolnhoOENZxqdzvSV+8axL+mHQ1Ypl4MLtg==", "cpu": [ "arm" ], @@ -14479,9 +14834,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.2.tgz", - "integrity": "sha512-7DiFMros5iRYrkPlNqUBfzZ/DCgsI199pRF8xuBsPf9yuB8SLDOqvNk3QOnUCMAbpjW5VW1JgdfGFFlHTCnJQA==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.5.tgz", + "integrity": "sha512-t4yIhK5OUpg1coZxFpDo3BhI2YVj21JxEd5SVI6FfcWD2ESroQWsC4cbq3ejw5aun8R1Kx6xH1EKxO8bSMvn1g==", "cpu": [ "arm64" ], @@ -14497,9 +14852,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.2.tgz", - "integrity": "sha512-qN0laKrAjuvBLFdUogGz8jQlbHs6tgH91tKQeE7ZE4AO9zzDRlXtaEJP1x6B6AGVc8UOEkvQyR3Nej4qwWprhA==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.5.tgz", + "integrity": "sha512-92dWhEbR0Z2kpjbpfOx4LM9wlNBSnDsRtwpkMUK8udQIE7uF3E4/Fsf/88IJk0MrRkk4iwrsxxiCb1bz2tWnHQ==", "cpu": [ "ia32" ], @@ -14515,9 +14870,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.2.tgz", - "integrity": "sha512-HByqtC5g5hOaJenWs4Klx6gFEIZYx+IEFh5K56U+wB+jd6EU32Lrnbdxy1+i/p/kZrd+23HrVHQPv8zpmxucaw==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.5.tgz", + "integrity": "sha512-lFnXz9lRnjRLJ8Y28ONJViID3rDq4p6LJ/9ByPk2ZnSpx5ouUjsu4AfrXKJ0jgHWBaDvSKSxq2fPpt5aMQAEZA==", "cpu": [ "x64" ], @@ -14533,99 +14888,89 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.2.tgz", - "integrity": "sha512-0jkL/FwbAStqqxFSjHfhElEAWrKRRvFz2JeXOxskUdzMehDMv5LaewqSRCijyeKBO3KgurvndmSfrOizdU6WAw==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.57.1.tgz", + "integrity": "sha512-YSfrLZkM2HdXETQdSznv2DN2GdkmBNWLAlHfDWe0toSEIB2C2YGuoqHYZtl6PBYqu8k8FH4TDyct8VzoIa+rMw==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.2.tgz", - "integrity": "sha512-8Sy36IxOOFPWA5TdhC87SvOkrXUSis51CGKlIsM8yZISQiY9y8b+wrNJM1f3oHvs641xZBaeIuwibJXaY6hNBg==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.57.1.tgz", + "integrity": "sha512-xq2Au8CRLHQ+MqH2p8gQn9rYGtfQ8voCWMRz7klYmmh5kXHFjefG3opPPB8mJeSc3SIqE35SQxQEIhUbsxozpg==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.2.tgz", - "integrity": "sha512-/gtCseBkGCBw61p6MG2BqeYy8rblffw2KXUzMKjo9Hlqj/KajWDk7j1B+mVnqrHOPB/KBbm8Ym/2ooCYpnMIkQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.57.1.tgz", + "integrity": "sha512-s+roBIgiQSg8124JmYmiSw4THWRvkF2BOclBZCb+OFLa8ZTak2WZdGs0PhqkMmZypxQ7cewh9ts+sOWN24yIrw==", "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.2.tgz", - "integrity": "sha512-hlfNFu1IWHI0cOsbpFWPrJlx7IFZfXuI3iEhwa4oljM21y72E6tETUFmTr4f9Ka9qDLXkUxUoYaTH2SqGU9dDA==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.57.1.tgz", + "integrity": "sha512-R0GqVqf0xEhQ5nDbj7vqmKw+/1kqiURNBl0pD4uv4inBed2YKg+7agn7Y5XE5GUWbgOz7ubjL2kt4Glr7K7xeA==", "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.2.tgz", - "integrity": "sha512-JSIqGIeAKlrMw/oMFFFxZ10F3QUJVdjeGVI83h6mwNHTYgrX6PuOngcAYleIpYR5XicQgfueC5pPVPbP5CArBQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.57.1.tgz", + "integrity": "sha512-gKqMpfcjrW4S1m+cuRn88oUkr/HMv48CqyCHnfGCsrkTpIft33a1ZKW2jWm09rwmR0g/G6yGstoQO0iHWJWxuQ==", "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.2.tgz", - "integrity": "sha512-LZTSnfHPlfvkdQ8orpnEUCEx40qhKpMjxN3Ggi8kgQqv5jvtqn0ECdWl0n4WI5CrlkmtdS3VeFcsf078bt/f8Q==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.5.tgz", + "integrity": "sha512-TLhJzd1TJ0oX1oULobkWLMDLeErD27WbhdZqxtFvIqzyO+1TZPMwojhRX4YNWmHdmmYhIuXTR9foWxwL3Xjgsg==", "cpu": [ "arm" ], @@ -14638,9 +14983,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.2.tgz", - "integrity": "sha512-JQZuONuhIurKjc/qE9cTiJXSLixL8hGkalWN3LJHasYHVAU92QA/t8rv0T51vIzf/I2F59He3bapkPme60dwSw==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.5.tgz", + "integrity": "sha512-ZWl8K8rCL4/phm3IPWDADwjnYAiohoaKg7BKjGo+36zv8P0ocoA0A3j4xx7/kjUJWagOmmoTyYxoOu+lo1NaKw==", "cpu": [ "arm64" ], @@ -14653,9 +14998,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.2.tgz", - "integrity": "sha512-6F1GHBgPkcTXtfM0MK3PofozagNF8IawdfIG4RNzGeSZRhGBRgZLOS+vdre4xubTLSaa6xjbI47YfaD43z8URQ==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.5.tgz", + "integrity": "sha512-83zNSgsIIc+tYQFKepFIlvAvAHnbWSpZ824MjqXJLeCbfzcMO8SZ/q6OA0Zd2SIrf79lCWI4OfPHqp1PI6M7HQ==", "cpu": [ "ia32" ], @@ -14668,9 +15013,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.2.tgz", - "integrity": "sha512-8BiqLA1NJeN3rCaX6t747GWMMdH5YUFYuytXU8waDC/u+FSGoOHRxfrsB8BEWHVgSPDxhwZklanPCXXzbzB2lw==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.5.tgz", + "integrity": "sha512-/SW9ggXZJilbRbKvRHAxEuQM6Yr9piEpvK7/aDevFL2XFvBW9x+dTzpH5jPVEmM0qWdJisS1r5mEv8AXUUdQZg==", "cpu": [ "x64" ], @@ -14683,27 +15028,25 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.2.tgz", - "integrity": "sha512-czQOxGOX4U47jW9k+cbFBgSt/6FVx2WGLPqPvrgDiEToLJdZyvzUqrkpqQYfJ6hN1koqatCPEpDrUZBcTPGUGg==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.57.1.tgz", + "integrity": "sha512-AI6CrcuLWP22RXhVrZUN2JfdQ7YdFR30dA4twYwp/Q4hUfj85dJrVD5ORi8G04haMWPOQiFV6pBcMgzpiY2Bog==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" ], - "bin": { - "sass": "dart-sass/sass" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.2.tgz", - "integrity": "sha512-NA+4Y5PO04YQGtKNCyLrUjQU2nijskVA3Er/UYGtx66BBlWZ/ttbnlk+dU05SF5Jhjb3HtThGGH1meb7pKA+OQ==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.5.tgz", + "integrity": "sha512-dwVFOqkyfCRQgQB8CByH+MG93fp7IsfFaPDDCQVzVFAT00+HXk/dWFPMnv65XDDndGwsUE1KlZnjg8iOBDlRdw==", "cpu": [ "arm64" ], @@ -14719,37 +15062,33 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.2.tgz", - "integrity": "sha512-/3hGz4GefhVuuUu2gSOdsxBYym5Di0co0tZbtiokCU/8VhYhcAQ3v2Lni49VV6OnsyJLb1nUx+rbpd8cKO1U4w==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.57.1.tgz", + "integrity": "sha512-s7EhJLG9AnJNBga3I+W0rk6y/1n/i0XD34rvqR3yJgBhNKkI5rVCxFN7FAcGR50vQQbCO1MrUCmuVvld+2qvyQ==", "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" ], - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.2.tgz", - "integrity": "sha512-joHLDICWmnR9Ca+LT9B+Fp85sCvV9F3gdtHtXLSuQAEulG5Ip1Z9euB3FUw+Z0s0Vz4MjNea+JD+TwO9eMrpyw==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.57.1.tgz", + "integrity": "sha512-b/Kgz7ADPTlPITk8e47Zf3eiuXlTGhi/eWsAoesUmkjR7jayvFNLHPhThgiRAxkzT6UlWI3Dzr+E3OBqUjegEg==", "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" ], - "bin": { - "sass": "dart-sass/sass.bat" - }, "engines": { "node": ">=14.0.0" } @@ -14758,6 +15097,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -14766,6 +15106,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -14774,6 +15115,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -15401,6 +15743,14 @@ "node": ">= 0.8" } }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -15643,8 +15993,7 @@ "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", - "peer": true + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" }, "node_modules/style-search": { "version": "0.1.0", @@ -16395,6 +16744,15 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", diff --git a/package.json b/package.json index b107472..6eda9a7 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,32 @@ "@decidim/browserslist-config": "^0.28.1", "@decidim/core": "^0.28.1", "@decidim/elections": "^0.28.1", - "@decidim/webpacker": "^0.28.1" + "@decidim/webpacker": "^0.28.1", + "@rails/actioncable": "^6.1.7", + "codemirror": "^5.65.16", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.7", + "highlight.js": "^11.9.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.14", + "leaflet.featuregroup.subgroup": "^1.0.2", + "tom-select": "^2.2.2" }, "version": "0.1.0", "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610", "devDependencies": { + "@babel/eslint-parser": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/preset-react": "^7.24.7", "@decidim/dev": "^0.28.1", "@decidim/eslint-config": "^0.28.1", "@decidim/prettier-config": "^0.28.1", - "@decidim/stylelint-config": "^0.28.1" + "@decidim/stylelint-config": "^0.28.1", + "postcss-scss": "^4.0.9", + "sass-embedded": "~1.57.1" }, "browserslist": [ "extends @decidim/browserslist-config" diff --git a/spec/factories.rb b/spec/factories.rb index 0e6d87b..88e9db2 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true require "decidim/core/test/factories" +require "decidim/decidim_awesome/test/factories" diff --git a/spec/system/decidim_awesome/custom_styles_spec.rb b/spec/system/decidim_awesome/custom_styles_spec.rb new file mode 100644 index 0000000..00a5f27 --- /dev/null +++ b/spec/system/decidim_awesome/custom_styles_spec.rb @@ -0,0 +1,119 @@ +# frozen_string_literal: true + +require "rails_helper" + +describe "Custom styles" do + let(:organization) { create(:organization) } + let!(:participatory_process) { create(:participatory_process, organization:) } + let!(:config) { create(:awesome_config, organization:, var: :scoped_styles, value: styles) } + let(:config_helper) { create(:awesome_config, organization:, var: :scoped_style_bar) } + let(:styles) do + { + "bar" => "body {background: red;}" + } + end + + before do + switch_to_host(organization.host) + visit decidim.root_path + end + + shared_examples "extra css is added" do + it "css is present" do + expect(page.body).to have_content("body {background: red;}") + end + + it "css is applied" do + expect(page.execute_script("return window.getComputedStyle($('body')[0]).backgroundColor")).to eq("rgb(255, 0, 0)") + end + end + + shared_examples "no extra css is added" do + it "css is no present" do + expect(page.body).not_to have_content("body {background: red;}") + end + + it "css is not applyied" do + expect(page.execute_script("return window.getComputedStyle($('body')[0]).backgroundColor")).to eq("rgba(0, 0, 0, 0)") + end + end + + context "when there are custom styles" do + it_behaves_like "extra css is added" + end + + context "when there are empty css boxes" do + let(:styles) do + {} + end + + it_behaves_like "no extra css is added" + end + + context "when constraints are present" do + let!(:constraint) { create(:config_constraint, awesome_config: config_helper, settings:) } + let!(:other_constraint) { create(:config_constraint, awesome_config: config_helper, settings: other_settings) } + let(:settings) do + {} + end + + let(:other_settings) do + { "participatory_space_manifest" => "other" } + end + + before do + visit decidim.root_path + end + + context "when there are custom styles" do + it_behaves_like "extra css is added" + end + + context "and there are no custom styles" do + let(:styles) do + {} + end + + it_behaves_like "no extra css is added" + end + + context "and custom styles are scoped" do + let(:settings) do + { "participatory_space_manifest" => "participatory_processes" } + end + + context "and page do not match the scope" do + it_behaves_like "no extra css is added" + end + + context "and page matches the scope" do + before do + click_link_or_button "Processes" + end + + it_behaves_like "extra css is added" + + context "and none constraint is present" do + let(:other_settings) do + { "participatory_space_manifest" => "none" } + end + + it_behaves_like "no extra css is added" + end + end + end + end + + context "when there are custom styles with special characters" do + let(:css) { %(body > a[href="hey"] { color: blue; }) } + let(:styles) do + { + "special" => css + } + end + + it "decodes them correctly" do + expect(page.body).to have_content(css) + end + end +end