From 7a643f9a81697109407f8e6bd2b73f06bd26c221 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 29 Jan 2025 11:24:09 +0100 Subject: [PATCH 01/18] feat(build): backport AWS Fargate specifics --- .gitignore | 3 +++ Gemfile.lock | 22 ---------------------- config/environments/production.rb | 22 +++++++++++++++++----- config/initializers/decidim.rb | 4 ++-- config/initializers/storage.rb | 5 +++++ config/puma.rb | 4 ++++ config/routes.rb | 4 ++++ config/secrets.yml | 15 ++++++++++++++- config/spring.rb | 2 +- config/storage.yml | 28 ++++++++++++++++++++++------ docker-compose.yml | 11 ++++++----- 11 files changed, 78 insertions(+), 42 deletions(-) create mode 100644 config/initializers/storage.rb diff --git a/.gitignore b/.gitignore index eae59bb..ded2258 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ public/sw.js* tailwind.config.js yarn-error.log minio_data + +# Ignore byebug history file. +.byebug_history \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 4bc13f4..7f20cc1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -301,14 +301,6 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - carrierwave (2.2.6) - activemodel (>= 5.0.0) - activesupport (>= 5.0.0) - addressable (~> 2.6) - image_processing (~> 1.1) - marcel (~> 1.0.0) - mini_mime (>= 0.1.3) - ssrf_filter (~> 1.0) cells (4.1.8) declarative-builder (~> 0.2.0) declarative-option (< 0.2.0) @@ -409,23 +401,13 @@ GEM activemodel (>= 3.2) mime-types (>= 1.0) flamegraph (0.9.5) - fog-aws (3.21.0) - fog-core (~> 2.1) - fog-json (~> 1.1) - fog-xml (~> 0.1) fog-core (2.6.0) builder excon (~> 1.0) formatador (>= 0.2, < 2.0) mime-types - fog-json (1.2.0) - fog-core - multi_json (~> 1.10) fog-local (0.8.0) fog-core (>= 1.27, < 3.0) - fog-xml (0.1.4) - fog-core - nokogiri (>= 1.5.11, < 2.0.0) formatador (1.1.0) foundation_rails_helper (4.0.1) actionpack (>= 4.1, < 7.1) @@ -532,7 +514,6 @@ GEM mini_mime (1.1.5) minitest (5.25.1) msgpack (1.7.5) - multi_json (1.15.0) multi_xml (0.7.1) bigdecimal (~> 3.1) net-http (0.5.0) @@ -813,7 +794,6 @@ GEM spring-watcher-listen (2.1.0) listen (>= 2.7, < 4.0) spring (>= 4) - ssrf_filter (1.1.2) stackprof (0.2.26) stringio (3.1.2) temple (0.10.3) @@ -892,7 +872,6 @@ DEPENDENCIES brakeman (~> 6.1) bullet byebug (~> 11.0) - carrierwave dalli decidim-accountability! decidim-admin! @@ -914,7 +893,6 @@ DEPENDENCIES decidim-verifications! dotenv-rails (~> 2.7) flamegraph - fog-aws letter_opener_web (~> 2.0) listen (~> 3.1) memory_profiler diff --git a/config/environments/production.rb b/config/environments/production.rb index 1fd287c..c03c980 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -41,10 +41,10 @@ # Store uploaded files on the local file system (see config/storage.yml for options). config.active_storage.service = Rails.application.secrets.dig(:storage, :provider)&.to_sym || :local - config.active_storage.service_urls_expire_in = if Rails.application.secrets.dig(:storage, :s3, :access_key_id).blank? - "120000" - else + config.active_storage.service_urls_expire_in = if %w(amazon amazon_instance_profile minio).include?(Rails.application.secrets.dig(:storage, :provider)) Rails.application.secrets.dig(:decidim, :service_urls_expires_in) + else + "120000" end.to_i.weeks # Mount Action Cable outside main process or domain. @@ -53,11 +53,11 @@ # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. - # config.force_ssl = true + config.force_ssl = Rails.application.secrets.decidim[:force_ssl].present? # Include generic and useful information about system operation, but avoid logging too much # information to avoid inadvertent exposure of personally identifiable information (PII). - config.log_level = %w(debug info warn error fatal).include?(ENV["RAILS_LOG_LEVEL"]) ? ENV["RAILS_LOG_LEVEL"] : :warn + config.log_level = %w(debug info warn error fatal).include?(ENV["RAILS_LOG_LEVEL"]) ? ENV["RAILS_LOG_LEVEL"].to_sym : :warn # Prepend all log lines with the following tags. config.log_tags = [:request_id, :ip] @@ -116,4 +116,16 @@ # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false + + config.ssl_options = if config.force_ssl + { + redirect: { + exclude: ->(request) { request.port == ENV.fetch("PUMA_HEALTH_CHECK_PORT", 3124) } + } + } + else + { + redirect: false + } + end end diff --git a/config/initializers/decidim.rb b/config/initializers/decidim.rb index 1a90b5b..989b1f9 100644 --- a/config/initializers/decidim.rb +++ b/config/initializers/decidim.rb @@ -389,8 +389,8 @@ # Defines additional content security policies following the structure # Read more: https://docs.decidim.org/en/develop/configure/initializer#_content_security_policy config.content_security_policies_extra = { - "connect-src" => %w(http://minio:9000 http://minio http://localhost:9000), - "img-src" => %w(http://minio:9000 http://minio http://localhost:9000) + "connect-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000), + "img-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000) } # Admin admin password configurations diff --git a/config/initializers/storage.rb b/config/initializers/storage.rb new file mode 100644 index 0000000..5999200 --- /dev/null +++ b/config/initializers/storage.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require "aws-sdk-core" + +Aws.config.update(credentials: Aws::ECSCredentials.new) if Rails.env.production? && Rails.application.config.active_storage.service == :amazon_instance_profile diff --git a/config/puma.rb b/config/puma.rb index e443901..3d8de6d 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -54,3 +54,7 @@ key_pem: File.read("#{cert_dir}/ssl-key.pem") ) end + +if Rails.application.secrets.puma[:health_check][:enabled] + activate_control_app "tcp://0.0.0.0:#{Rails.application.secrets.puma[:health_check][:port]}", { auth_token: Rails.application.secrets.puma[:health_check][:token] } +end diff --git a/config/routes.rb b/config/routes.rb index 6258177..c659cd1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,10 @@ require "sidekiq-scheduler/web" Rails.application.routes.draw do + if Rails.application.secrets.puma[:health_check][:enabled] + get "/stats", to: redirect { |_params, request| "http://#{request.host}:#{Rails.application.secrets.puma[:health_check][:port]}/stats?#{request.params.to_query}" } + end + authenticate :admin do mount Sidekiq::Web => "/sidekiq" end diff --git a/config/secrets.yml b/config/secrets.yml index acd90a7..280a502 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -82,12 +82,20 @@ decidim_default: &decidim_default storage_default: &storage_default provider: <%= Decidim::Env.new("STORAGE_PROVIDER", "local").to_s %> cdn_host: <%= ENV["STORAGE_CDN_HOST"] %> - s3: + amazon: access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> region: <%= ENV["AWS_REGION"] %> bucket: <%= ENV["AWS_BUCKET"] %> + amazon_instance_profile: + region: <%= ENV["AWS_REGION"] %> + bucket: <%= ENV["AWS_BUCKET"] %> + minio: + access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> + secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> + bucket: <%= ENV["AWS_BUCKET"] %> endpoint: <%= ENV["AWS_ENDPOINT"] %> + region: <%= ENV["AWS_REGION"] %> azure: storage_access_key: <%= ENV["AZURE_STORAGE_ACCESS_KEY"] %> storage_account_name: <%= ENV["AZURE_STORAGE_ACCOUNT_NAME"] %> @@ -148,6 +156,11 @@ default: &default enabled: <%= Decidim::Env.new("VAPID_PUBLIC_KEY").to_boolean_string %> public_key: <%= ENV["VAPID_PUBLIC_KEY"] %> private_key: <%= ENV["VAPID_PRIVATE_KEY"] %> + puma: + health_check: + enabled: <%= Decidim::Env.new("PUMA_HEALTH_CHECK_ENABLED").to_boolean_string %> + port: <%= Decidim::Env.new("PUMA_HEALTH_CHECK_PORT", 3124).to_i %> + token: <%= Decidim::Env.new("PUMA_HEALTH_CHECK_TOKEN", "decidimlite123456789").to_s %> development: <<: *default diff --git a/config/spring.rb b/config/spring.rb index 37be777..83c74ca 100644 --- a/config/spring.rb +++ b/config/spring.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -return if Rails.env.production? +return if ENV["RAILS_ENV"] == "production" require "decidim/spring" diff --git a/config/storage.yml b/config/storage.yml index 49ec24a..54a7d5c 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -6,14 +6,30 @@ local: service: Disk root: <%= Rails.root.join("storage") %> -s3: +amazon: service: S3 - access_key_id: <%= Rails.application.secrets.dig(:storage, :s3, :access_key_id) %> - secret_access_key: <%= Rails.application.secrets.dig(:storage, :s3, :secret_access_key) %> - bucket: <%= Rails.application.secrets.dig(:storage, :s3, :bucket) %> - endpoint: <%= Rails.application.secrets.dig(:storage, :s3, :bucket) == "mybucket" ? "http" : "https" %>://<%= Rails.application.secrets.dig(:storage, :s3, :endpoint) %> + region: <%= Rails.application.secrets.dig(:storage, :amazon, :region) %> + bucket: <%= Rails.application.secrets.dig(:amazon, :bucket) %> + access_key_id: <%= Rails.application.secrets.dig(:storage, :amazon, :access_key_id) %> + secret_access_key: <%= Rails.application.secrets.dig(:storage, :amazon, :secret_access_key) %> + +amazon_instance_profile: + service: S3 + region: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :region) %> + bucket: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :bucket) %> + # In production, the following configuration is set through instance profile + # see config/initalizers/storage.rb for more details + # access_key_id: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :access_key_id) %> + # secret_access_key: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :secret_access_key) %> + +minio: + service: S3 + access_key_id: <%= Rails.application.secrets.dig(:storage, :minio, :access_key_id) %> + secret_access_key: <%= Rails.application.secrets.dig(:storage, :minio, :secret_access_key) %> + bucket: <%= Rails.application.secrets.dig(:storage, :minio, :bucket) %> + endpoint: <%= Rails.application.secrets.dig(:storage, :minio, :endpoint) %> + region: <%= Rails.application.secrets.dig(:storage, :minio, :region) %> force_path_style: true - <%= "region: #{Rails.application.secrets.dig(:storage, :s3, :region)}" if Rails.application.secrets.dig(:storage, :s3, :region) %> azure: service: AzureStorage diff --git a/docker-compose.yml b/docker-compose.yml index 0a14f73..494df3a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: /usr/bin/mc alias set local http://minio:9000 minioadmin minioadmin && /usr/bin/mc mb --ignore-existing local/mybucket && /usr/bin/mc anonymous set public local/mybucket && - /usr/bin/mc admin config set local/ cors="*" && + /usr/bin/mc admin config set local/mybucket cors="*" && /usr/bin/mc admin service restart local && echo 'Bucket mybucket created and set to public!'; exit 0; @@ -72,9 +72,9 @@ services: - PUMA_WORKERS=4 - PUMA_PRELOAD_APP=true - RAILS_SESSION_STORE=active_record - - STORAGE_PROVIDER=s3 + - STORAGE_PROVIDER=minio - AWS_REGION=fr-par-1 - - AWS_ENDPOINT=minio:9000 + - AWS_ENDPOINT=http://minio:9000 - AWS_BUCKET=mybucket - AWS_ACCESS_KEY_ID=minioadmin - AWS_SECRET_ACCESS_KEY=minioadmin @@ -94,6 +94,7 @@ services: image: decidim-lite:1.0.0 command: [ "bundle", "exec", "rails", "server", "-b", "ssl://0.0.0.0:3000?key=/decidim/tls-certificate/key.pem&cert=/decidim/tls-certificate/cert.pem" ] environment: + - DECIDIM_CORS_ENABLED=true - DATABASE_HOST=database - DATABASE_USERNAME=postgres - DECIDIM_HOST=localhost @@ -114,9 +115,9 @@ services: - PUMA_WORKERS=4 - PUMA_PRELOAD_APP=true - RAILS_SESSION_STORE=active_record - - STORAGE_PROVIDER=s3 + - STORAGE_PROVIDER=minio - AWS_REGION=fr-par-1 - - AWS_ENDPOINT=minio:9000 # Should be localhost:9000 to make the AJAX requests work without CORS issues + - AWS_ENDPOINT=http://minio:9000 # Should be localhost:9000 to make the AJAX requests work without CORS issues - AWS_BUCKET=mybucket - AWS_ACCESS_KEY_ID=minioadmin - AWS_SECRET_ACCESS_KEY=minioadmin From 2cf466674183030e37be52ba3ad0c1ccbea77ad1 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 29 Jan 2025 15:40:14 +0100 Subject: [PATCH 02/18] fix: force ssl configuration --- Makefile | 1 + docker-compose.yml | 4 ++-- lib/tasks/decidim-app.rake | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 lib/tasks/decidim-app.rake diff --git a/Makefile b/Makefile index 083108a..01d125a 100644 --- a/Makefile +++ b/Makefile @@ -57,5 +57,6 @@ tls-cert: mkdir -p $(HOME)/.decidim/tls-certificate openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ -subj "/C=FR/ST=France/L=Paris/O=decidim/CN=decidim.eu" \ + -addext "subjectAltName = DNS:localhost, DNS:minio" \ -keyout $(HOME)/.decidim/tls-certificate/key.pem \ -out $(HOME)/.decidim/tls-certificate/cert.pem \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 494df3a..99bdb04 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,7 +61,7 @@ services: - RAILS_LOG_TO_STDOUT=true - RAILS_LOG_LEVEL=debug - ASSET_HOST=localhost:3000 - - FORCE_SSL=1 + - DECIDIM_FORCE_SSL=true - ENABLE_LETTER_OPENER=1 - SEED=true - DEFACE_ENABLED=false @@ -104,7 +104,7 @@ services: - RAILS_LOG_TO_STDOUT=true - RAILS_LOG_LEVEL=debug - ASSET_HOST=localhost:3000 - - FORCE_SSL=1 + - DECIDIM_FORCE_SSL=true - ENABLE_LETTER_OPENER=1 - SEED=true - DEFACE_ENABLED=false diff --git a/lib/tasks/decidim-app.rake b/lib/tasks/decidim-app.rake new file mode 100644 index 0000000..94299fb --- /dev/null +++ b/lib/tasks/decidim-app.rake @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +namespace :decidim_app do + namespace :k8s do + # This task does nothing right now, but it's a placeholder for future CI/CD pipeline tasks. + desc "Placeholder task for future CI/CD pipeline" + task upgrade: :environment do + puts "Running decidim_app:k8s:upgrade" + end + end +end \ No newline at end of file From f0901e2bd69c43230df85d315bea1e366974f7b6 Mon Sep 17 00:00:00 2001 From: moustachu Date: Fri, 14 Mar 2025 15:09:15 +0100 Subject: [PATCH 03/18] feat: add NYC ID (SAML) SSO strategy --- Gemfile | 10 ++ Gemfile.lock | 141 ++++++++++-------- .../decidim/omniauth/switch_controller.rb | 11 ++ app/helpers/application_helper.rb | 13 ++ app/packs/images/favicon.ico | Bin 0 -> 6518 bytes app/packs/images/nyc-for-developers-logo.svg | 37 +++++ app/packs/images/nyc-logo.png | Bin 0 -> 6204 bytes app/packs/images/nyc-logo.svg | 11 ++ app/packs/images/nyc-logo@2x.png | Bin 0 -> 16359 bytes app/packs/images/nyc_white.png | Bin 0 -> 1740 bytes .../devise/shared/_omniauth_buttons.html.erb | 24 +++ config/environments/production.rb | 6 + config/initializers/omniauth_nyc.rb | 27 ++++ config/routes.rb | 2 + config/secrets.yml | 30 ++-- .../strategies/email_not_validated_error.rb | 8 + lib/omniauth/strategies/nyc.rb | 86 +++++++++++ 17 files changed, 327 insertions(+), 79 deletions(-) create mode 100644 app/controllers/decidim/omniauth/switch_controller.rb create mode 100644 app/packs/images/favicon.ico create mode 100644 app/packs/images/nyc-for-developers-logo.svg create mode 100644 app/packs/images/nyc-logo.png create mode 100644 app/packs/images/nyc-logo.svg create mode 100644 app/packs/images/nyc-logo@2x.png create mode 100644 app/packs/images/nyc_white.png create mode 100644 app/views/decidim/devise/shared/_omniauth_buttons.html.erb create mode 100644 config/initializers/omniauth_nyc.rb create mode 100644 lib/omniauth/strategies/email_not_validated_error.rb create mode 100644 lib/omniauth/strategies/nyc.rb diff --git a/Gemfile b/Gemfile index e895887..cfeb13d 100644 --- a/Gemfile +++ b/Gemfile @@ -31,6 +31,16 @@ gem "dotenv-rails", "~> 2.7" gem "letter_opener_web", "~> 2.0" gem "spring" +# gem "ransack", "~> 4.0" +gem "actionpack", "~> 7.0.8.7" +gem "rails-html-sanitizer", "~> 1.6.1" +gem "net-imap", "~> 0.5.6" + +gem "omniauth-rails_csrf_protection" +gem "omniauth-saml" + +# gem "veracode" + group :development, :test do gem "byebug", "~> 11.0", platform: :mri diff --git a/Gemfile.lock b/Gemfile.lock index 7f20cc1..fd03af6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -177,47 +177,47 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8.6) - actionpack (= 7.0.8.6) - activesupport (= 7.0.8.6) + actioncable (7.0.8.7) + actionpack (= 7.0.8.7) + activesupport (= 7.0.8.7) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.6) - actionpack (= 7.0.8.6) - activejob (= 7.0.8.6) - activerecord (= 7.0.8.6) - activestorage (= 7.0.8.6) - activesupport (= 7.0.8.6) + actionmailbox (7.0.8.7) + actionpack (= 7.0.8.7) + activejob (= 7.0.8.7) + activerecord (= 7.0.8.7) + activestorage (= 7.0.8.7) + activesupport (= 7.0.8.7) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.8.6) - actionpack (= 7.0.8.6) - actionview (= 7.0.8.6) - activejob (= 7.0.8.6) - activesupport (= 7.0.8.6) + actionmailer (7.0.8.7) + actionpack (= 7.0.8.7) + actionview (= 7.0.8.7) + activejob (= 7.0.8.7) + activesupport (= 7.0.8.7) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.8.6) - actionview (= 7.0.8.6) - activesupport (= 7.0.8.6) + actionpack (7.0.8.7) + actionview (= 7.0.8.7) + activesupport (= 7.0.8.7) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.6) - actionpack (= 7.0.8.6) - activerecord (= 7.0.8.6) - activestorage (= 7.0.8.6) - activesupport (= 7.0.8.6) + actiontext (7.0.8.7) + actionpack (= 7.0.8.7) + activerecord (= 7.0.8.7) + activestorage (= 7.0.8.7) + activesupport (= 7.0.8.7) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.6) - activesupport (= 7.0.8.6) + actionview (7.0.8.7) + activesupport (= 7.0.8.7) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -225,30 +225,30 @@ GEM active_link_to (1.0.5) actionpack addressable - activejob (7.0.8.6) - activesupport (= 7.0.8.6) + activejob (7.0.8.7) + activesupport (= 7.0.8.7) globalid (>= 0.3.6) activejob-uniqueness (0.3.2) activejob (>= 4.2, < 7.3) redlock (>= 2.0, < 3) - activemodel (7.0.8.6) - activesupport (= 7.0.8.6) - activerecord (7.0.8.6) - activemodel (= 7.0.8.6) - activesupport (= 7.0.8.6) - activestorage (7.0.8.6) - actionpack (= 7.0.8.6) - activejob (= 7.0.8.6) - activerecord (= 7.0.8.6) - activesupport (= 7.0.8.6) + activemodel (7.0.8.7) + activesupport (= 7.0.8.7) + activerecord (7.0.8.7) + activemodel (= 7.0.8.7) + activesupport (= 7.0.8.7) + activestorage (7.0.8.7) + actionpack (= 7.0.8.7) + activejob (= 7.0.8.7) + activerecord (= 7.0.8.7) + activesupport (= 7.0.8.7) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.8.6) + activesupport (7.0.8.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - acts_as_list (1.2.3) + acts_as_list (1.2.4) activerecord (>= 6.1) activesupport (>= 6.1) addressable (2.8.7) @@ -327,7 +327,7 @@ GEM csv (3.3.0) dalli (3.2.8) dartsass (1.49.8) - date (3.4.0) + date (3.4.1) date_validator (0.12.0) activemodel (>= 3) activesupport (>= 3) @@ -518,7 +518,7 @@ GEM bigdecimal (~> 3.1) net-http (0.5.0) uri - net-imap (0.5.1) + net-imap (0.5.6) date net-protocol net-pop (0.1.2) @@ -528,17 +528,17 @@ GEM net-smtp (0.3.4) net-protocol nio4r (2.7.4) - nokogiri (1.16.7-aarch64-linux) + nokogiri (1.16.8-aarch64-linux) racc (~> 1.4) - nokogiri (1.16.7-arm-linux) + nokogiri (1.16.8-arm-linux) racc (~> 1.4) - nokogiri (1.16.7-arm64-darwin) + nokogiri (1.16.8-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.7-x86-linux) + nokogiri (1.16.8-x86-linux) racc (~> 1.4) - nokogiri (1.16.7-x86_64-darwin) + nokogiri (1.16.8-x86_64-darwin) racc (~> 1.4) - nokogiri (1.16.7-x86_64-linux) + nokogiri (1.16.8-x86_64-linux) racc (~> 1.4) oauth (1.1.0) oauth-tty (~> 1.0, >= 1.0.1) @@ -574,6 +574,9 @@ GEM omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) + omniauth-saml (2.2.1) + omniauth (~> 2.1) + ruby-saml (~> 1.17) omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack @@ -608,7 +611,7 @@ GEM nio4r (~> 2.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.10) + rack (2.2.11) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (1.1.1) @@ -622,20 +625,20 @@ GEM rack rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8.6) - actioncable (= 7.0.8.6) - actionmailbox (= 7.0.8.6) - actionmailer (= 7.0.8.6) - actionpack (= 7.0.8.6) - actiontext (= 7.0.8.6) - actionview (= 7.0.8.6) - activejob (= 7.0.8.6) - activemodel (= 7.0.8.6) - activerecord (= 7.0.8.6) - activestorage (= 7.0.8.6) - activesupport (= 7.0.8.6) + rails (7.0.8.7) + actioncable (= 7.0.8.7) + actionmailbox (= 7.0.8.7) + actionmailer (= 7.0.8.7) + actionpack (= 7.0.8.7) + actiontext (= 7.0.8.7) + actionview (= 7.0.8.7) + activejob (= 7.0.8.7) + activemodel (= 7.0.8.7) + activerecord (= 7.0.8.7) + activestorage (= 7.0.8.7) + activesupport (= 7.0.8.7) bundler (>= 1.15.0) - railties (= 7.0.8.6) + railties (= 7.0.8.7) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -644,15 +647,15 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.0) + rails-html-sanitizer (1.6.2) loofah (~> 2.21) - nokogiri (~> 1.14) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) rails-i18n (7.0.10) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.8.6) - actionpack (= 7.0.8.6) - activesupport (= 7.0.8.6) + railties (7.0.8.7) + actionpack (= 7.0.8.7) + activesupport (= 7.0.8.7) method_source rake (>= 12.2) thor (~> 1.0) @@ -748,6 +751,9 @@ GEM rubocop-rubycw (0.1.6) rubocop (~> 1.0) ruby-progressbar (1.13.0) + ruby-saml (1.17.0) + nokogiri (>= 1.13.10) + rexml ruby-vips (2.2.2) ffi (~> 1.12) logger @@ -866,6 +872,7 @@ PLATFORMS x86_64-linux-musl DEPENDENCIES + actionpack (~> 7.0.8.7) activejob-uniqueness aws-sdk-s3 bootsnap (~> 1.4) @@ -896,9 +903,13 @@ DEPENDENCIES letter_opener_web (~> 2.0) listen (~> 3.1) memory_profiler + net-imap (~> 0.5.6) + omniauth-rails_csrf_protection + omniauth-saml parallel_tests (~> 4.2) puma (>= 6.3.1) rack-mini-profiler + rails-html-sanitizer (~> 1.6.1) sidekiq (~> 6.0) sidekiq-scheduler (~> 5.0) spring diff --git a/app/controllers/decidim/omniauth/switch_controller.rb b/app/controllers/decidim/omniauth/switch_controller.rb new file mode 100644 index 0000000..ce1f111 --- /dev/null +++ b/app/controllers/decidim/omniauth/switch_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Decidim + module Omniauth + class SwitchController < DecidimController + def redirect + redirect_post("/users/auth/#{params["provider"]}", params: { authenticity_token: form_authenticity_token }) + end + end + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 15b06f0..fc058ed 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,17 @@ # frozen_string_literal: true module ApplicationHelper + def omniauth_sign_up_url(config) + return if config[:sign_up_button_url].blank? + + uri = URI(config[:sign_up_button_url]) + uri.query = { + showNameFields: "false", + lang: current_locale, + spName: config[:sign_up_button_sp_name], + target: Base64.urlsafe_encode64(config[:sign_up_button_target]) + }.to_query + + uri.to_s + end end diff --git a/app/packs/images/favicon.ico b/app/packs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c78fd9eb4d19b713c5a8caca44895aa81baa2dbf GIT binary patch literal 6518 zcmeHLK~BRk5Hv^#%BcrVoN_{aMqf}4s73sOC-4IfrCfOePv{f+B-m*>Vz4$&?4%rM zBBi^Yo!wd6by78ivv3}!(_pp=vx^Y!LI_oL7~h1jFl=U+QH)XJWZd~#@;&N}$ysAZklQa`2b)f`g4P5YSorrqgW=~}{1^^91|kJmkSto2gb ztQ+@0ywp;^i#9d12V$ib`Z?OvVGkUa+7fMQ^~q(8Q?Ry9oz7ys7Rc+n#;Ae!OI*8c z%shNQ?LUprHoh0v8eTkw@%at?zWt*{O3RC>ek$MFADuUHaW(L^O*rOUXV#y_+s1t& PS2?3UuE4kgr?mp#L^~te literal 0 HcmV?d00001 diff --git a/app/packs/images/nyc-for-developers-logo.svg b/app/packs/images/nyc-for-developers-logo.svg new file mode 100644 index 0000000..a9abfed --- /dev/null +++ b/app/packs/images/nyc-for-developers-logo.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/nyc-logo.png b/app/packs/images/nyc-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f1aea06d041916c0bbd6eb8133a48c679abb8a GIT binary patch literal 6204 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 + + nyc-logo + + + + \ No newline at end of file diff --git a/app/packs/images/nyc-logo@2x.png b/app/packs/images/nyc-logo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d4cd00a6d1ae108db8641bf3e954fd6c3c0d54ac GIT binary patch literal 16359 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 +<% if Devise.mappings[:user].omniauthable? && current_organization.enabled_omniauth_providers.any? %> + + <%- if current_organization.sign_in_enabled? %> + + <%- end %> +<% end %> \ No newline at end of file diff --git a/config/environments/production.rb b/config/environments/production.rb index c03c980..dac1caf 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -128,4 +128,10 @@ redirect: false } end + + # # Veracode configuration + # config.cache_classes = false + + # # Log error messages when you accidentally call methods on nil. + # config.whiny_nils = true end diff --git a/config/initializers/omniauth_nyc.rb b/config/initializers/omniauth_nyc.rb new file mode 100644 index 0000000..c1f9fa6 --- /dev/null +++ b/config/initializers/omniauth_nyc.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require "omniauth/strategies/nyc" + +Rails.application.config.middleware.use OmniAuth::Builder do + OmniAuth.config.logger = Rails.logger + + omniauth_config = Rails.application.secrets[:omniauth] + + if omniauth_config[:nyc].present? + provider( + OmniAuth::Strategies::NYC, + setup: setup_provider_proc(:nyc, + icon_path: :icon_path, + provider_name: :provider_name, + idp_cert_fingerprint: :idp_cert_fingerprint, + idp_cert: :idp_cert, + certificate: :idp_cert, + private_key: :idp_key, + issuer: :issuer, + authn_context: :authn_context, + assertion_consumer_service_url: :assertion_consumer_service_url, + idp_sso_target_url: :idp_sso_target_url, + idp_slo_target_url: :idp_slo_target_url) + ) + end +end diff --git a/config/routes.rb b/config/routes.rb index c659cd1..da13e5e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,8 @@ mount Sidekiq::Web => "/sidekiq" end + get "/sign_in_redirect/:provider", to: "decidim/omniauth/switch#redirect" + mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? || ENV.fetch("ENABLE_LETTER_OPENER", "0") == "1" mount Decidim::Core::Engine => "/" diff --git a/config/secrets.yml b/config/secrets.yml index 280a502..d7ea291 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -121,21 +121,23 @@ default: &default concurrency: <%= Decidim::Env.new('SIDEKIQ_CONCURRENCY', '5').to_i %> max_retries: <%= Decidim::Env.new('SIDEKIQ_MAX_RETRIES', '5').to_i %> omniauth: - facebook: + nyc: enabled: <%= Decidim::Env.new("OMNIAUTH_FACEBOOK_APP_ID").to_boolean_string %> - app_id: <%= ENV["OMNIAUTH_FACEBOOK_APP_ID"] %> - app_secret: <%= ENV["OMNIAUTH_FACEBOOK_APP_SECRET"] %> - icon: facebook-fill - twitter: - enabled: <%= Decidim::Env.new("OMNIAUTH_TWITTER_API_KEY").to_boolean_string %> - api_key: <%= ENV["OMNIAUTH_TWITTER_API_KEY"] %> - api_secret: <%= ENV["OMNIAUTH_TWITTER_API_SECRET"] %> - icon: twitter-x-fill - google_oauth2: - enabled: <%= Decidim::Env.new("OMNIAUTH_GOOGLE_CLIENT_ID").to_boolean_string %> - icon: google-fill - client_id: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_ID"] %> - client_secret: <%= ENV["OMNIAUTH_GOOGLE_CLIENT_SECRET"] %> + icon_path: <%= ENV["OMNIAUTH_NYC_ICON_PATH"] %> + provider_name: <%= ENV["OMNIAUTH_NYC_PROVIDER_NAME"] %> + idp_sso_target_url: <%= ENV["OMNIAUTH_NYC_SSO_URL"] %> + assertion_consumer_service_url: <%= ENV["OMNIAUTH_NYC_CALLBACK"] %> + authn_context: <%= ENV["OMNIAUTH_NYC_AUTHN_CONTEXT"] %> + issuer: <%= ENV["OMNIAUTH_NYC_ISSUER"] %> + idp_slo_target_url: <%= ENV["OMNIAUTH_NYC_SLO_URL"] %> + idp_cert_fingerprint: <%= ENV["OMNIAUTH_NYC_CERT_FINGERPRINT"] %> + idp_cert: <%= ENV["OMNIAUTH_NYC_CERT"] %> + idp_key: <%= ENV["OMNIAUTH_NYC_KEY"] %> + sign_in_button_text: <%= ENV["SIGN_IN_BUTTON_TEXT"] || "" %> + sign_up_button_url: <%= ENV["SIGN_UP_BUTTON_NYID_URL"] || "" %> + sign_up_button_sp_name: <%= ENV["SIGN_UP_BUTTON_SP_NAME"] || "" %> + sign_up_button_target: <%= ENV["SIGN_UP_BUTTON_TARGET"] || "" %> + sign_up_button_text: <%= ENV["SIGN_UP_BUTTON_TEXT"] || "" %> maps: dynamic_provider: <%= Decidim::Env.new("MAPS_DYNAMIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %> static_provider: <%= Decidim::Env.new("MAPS_STATIC_PROVIDER", ENV["MAPS_PROVIDER"]).to_s %> diff --git a/lib/omniauth/strategies/email_not_validated_error.rb b/lib/omniauth/strategies/email_not_validated_error.rb new file mode 100644 index 0000000..c3b531f --- /dev/null +++ b/lib/omniauth/strategies/email_not_validated_error.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module OmniAuth + module Strategies + class EmailNotValidatedError < RuntimeError + end + end +end diff --git a/lib/omniauth/strategies/nyc.rb b/lib/omniauth/strategies/nyc.rb new file mode 100644 index 0000000..6a43f2b --- /dev/null +++ b/lib/omniauth/strategies/nyc.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require "omniauth-saml" +require "omniauth/strategies/email_not_validated_error" + +module OmniAuth + module Strategies + class NYC < OmniAuth::Strategies::SAML + option :name, :nyc + + option :origin_param, "redirect_url" + + option :authn_context_comparison, "minimum" + option :name_identifier_format, "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" + option :attribute_statements, + name: %w(name), + email: %w(mail email), + first_name: %w(givenName), + last_name: %w(sn), + nickname: %w(sn), + nycExtEmailValidationFlag: %w(nycExtEmailValidationFlag) + option :idp_cert_fingerprint_validator, ->(fingerprint) { fingerprint } + option :force_authn, true + option :security, + authn_requests_signed: true, # Enable or not signature on AuthNRequest + logout_requests_signed: true, # Enable or not signature on Logout Request + logout_responses_signed: true, # Enable or not signature on Logout Response + want_assertions_signed: false, # Enable or not the requirement of signed assertion + metadata_signed: true, # Enable or not signature on Metadata + digest_method: XMLSecurity::Document::SHA1, + signature_method: XMLSecurity::Document::RSA_SHA1, + embed_sign: false + + info do + found_attributes = options.attribute_statements.map do |key, values| + attribute = find_attribute_by(values) + [key, attribute] + end + + hash_attributes = Hash[found_attributes] + + hash_attributes["name"] = "#{hash_attributes["first_name"]} #{hash_attributes["last_name"]}" + + if hash_attributes["first_name"].present? && hash_attributes["last_name"].present? + hash_attributes["nickname"] = "#{hash_attributes["first_name"].split(" ").first}#{hash_attributes["last_name"][0]}".downcase + end + + hash_attributes.except!("email") if hash_attributes["nycExtEmailValidationFlag"] == "False" + + hash_attributes + end + + def callback_phase + raise OmniAuth::Strategies::SAML::ValidationError, "SAML response missing" unless request.params["SAMLResponse"] + + with_settings do |settings| + # Call a fingerprint validation method if there's one + validate_fingerprint(settings) if options.idp_cert_fingerprint_validator + + handle_response(request.params["SAMLResponse"], options_for_response_object, settings) do + super + end + end + rescue OmniAuth::Strategies::SAML::ValidationError + fail!(:invalid_ticket, $ERROR_INFO) + rescue OneLogin::RubySaml::ValidationError # rubocop:disable Lint/DuplicateBranch + fail!(:invalid_ticket, $ERROR_INFO) + rescue OmniAuth::Strategies::EmailNotValidatedError + fail!(I18n.t("omniauth.strategies.nyc.email_not_validated"), $ERROR_INFO) + end + + def handle_response(raw_response, opts, settings) + super(raw_response, opts, settings) do + if @response_object.success? + nyc_ext_email_validation_flag = find_attribute_by(options.attribute_statements["nycExtEmailValidationFlag"]) + Rails.logger.debug { "nycExtEmailValidationFlag --> #{nyc_ext_email_validation_flag}" } + raise OmniAuth::Strategies::EmailNotValidatedError if nyc_ext_email_validation_flag == "False" + end + yield + end + end + end + end +end + +OmniAuth.config.add_camelization "nyc", "NYC" From 1c10febe228adf98171757281c79571ea109119d Mon Sep 17 00:00:00 2001 From: moustachu Date: Mon, 31 Mar 2025 14:29:14 +0200 Subject: [PATCH 04/18] fix(saml): Skip authenticity token verification for authorized origin --- config/application.rb | 5 ++++ config/initializers/omniauth_nyc.rb | 1 + config/secrets.yml | 1 + ...niauth_registrations_controller_extends.rb | 23 +++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb diff --git a/config/application.rb b/config/application.rb index b553bc9..d74f70b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -26,5 +26,10 @@ class Application < Rails::Application # # config.time_zone = "Central Time (US & Canada)" # config.eager_load_paths << Rails.root.join("extras") + + config.after_initialize do + # Controllers + require "extends/controllers/decidim/devise/omniauth_registrations_controller_extends" + end end end diff --git a/config/initializers/omniauth_nyc.rb b/config/initializers/omniauth_nyc.rb index c1f9fa6..667eae6 100644 --- a/config/initializers/omniauth_nyc.rb +++ b/config/initializers/omniauth_nyc.rb @@ -20,6 +20,7 @@ issuer: :issuer, authn_context: :authn_context, assertion_consumer_service_url: :assertion_consumer_service_url, + idp_sso_target_callback_origin: :idp_sso_target_callback_origin, idp_sso_target_url: :idp_sso_target_url, idp_slo_target_url: :idp_slo_target_url) ) diff --git a/config/secrets.yml b/config/secrets.yml index d7ea291..32f4c2b 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -127,6 +127,7 @@ default: &default provider_name: <%= ENV["OMNIAUTH_NYC_PROVIDER_NAME"] %> idp_sso_target_url: <%= ENV["OMNIAUTH_NYC_SSO_URL"] %> assertion_consumer_service_url: <%= ENV["OMNIAUTH_NYC_CALLBACK"] %> + idp_sso_target_callback_origin: <%= ENV["OMNIAUTH_NYC_SSO_CALLBACK_ORIGIN"] %> authn_context: <%= ENV["OMNIAUTH_NYC_AUTHN_CONTEXT"] %> issuer: <%= ENV["OMNIAUTH_NYC_ISSUER"] %> idp_slo_target_url: <%= ENV["OMNIAUTH_NYC_SLO_URL"] %> diff --git a/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb b/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb new file mode 100644 index 0000000..530f3b5 --- /dev/null +++ b/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module OmniauthRegistrationsControllerExtends + extend ActiveSupport::Concern + + included do + skip_before_action :verify_authenticity_token, if: :saml_callback? + + private + + def saml_callback? + custom_callback_origin = request.env["omniauth.strategy"]&.options&[:idp_sso_target_callback_origin] + result = request.path.end_with?("/callback") && custom_callback_origin.present? && URI.parse(request.origin).host == custom_callback_origin + + Rails.logger.info "Skip authenticity token verification for authorized origin: #{custom_callback_origin}" if result + result + end + end +end + +Decidim::Devise::OmniauthRegistrationsController.class_eval do + include(OmniauthRegistrationsControllerExtends) +end \ No newline at end of file From 7d92c2524d5e3dd15302592ea0d430315328c9af Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 2 Apr 2025 15:07:08 +0200 Subject: [PATCH 05/18] fix: bump dependencies with security issues --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index fd03af6..d66cf4f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -423,7 +423,7 @@ GEM csv (>= 3.0.0) globalid (1.2.1) activesupport (>= 6.1) - graphql (2.2.16) + graphql (2.2.17) base64 graphql-docs (4.0.0) commonmarker (~> 0.23, >= 0.23.6) @@ -611,7 +611,7 @@ GEM nio4r (~> 2.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.11) + rack (2.2.13) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (1.1.1) @@ -751,7 +751,7 @@ GEM rubocop-rubycw (0.1.6) rubocop (~> 1.0) ruby-progressbar (1.13.0) - ruby-saml (1.17.0) + ruby-saml (1.18.0) nokogiri (>= 1.13.10) rexml ruby-vips (2.2.2) @@ -814,7 +814,7 @@ GEM uber (0.1.0) unicode-display_width (2.6.0) uniform_notifier (1.16.0) - uri (1.0.2) + uri (1.0.3) valid_email2 (4.0.6) activemodel (>= 3.2) mail (~> 2.5) From 6fd22ca5b5915af8de8fe31aa0ebdd1276b4c8a0 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 2 Apr 2025 15:09:55 +0200 Subject: [PATCH 06/18] fix: remove custom HTTP error pages --- config/application.rb | 1 + config/database.yml | 1 - .../decidim/errors_controller_extends.rb | 30 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 lib/extends/controllers/decidim/errors_controller_extends.rb diff --git a/config/application.rb b/config/application.rb index d74f70b..d5da460 100644 --- a/config/application.rb +++ b/config/application.rb @@ -30,6 +30,7 @@ class Application < Rails::Application config.after_initialize do # Controllers require "extends/controllers/decidim/devise/omniauth_registrations_controller_extends" + require "extends/controllers/decidim/errors_controller_extends" end end end diff --git a/config/database.yml b/config/database.yml index 8ef91f3..b6cafdb 100644 --- a/config/database.yml +++ b/config/database.yml @@ -31,7 +31,6 @@ default: &default development: <<: *default - database: decidim_development_app_development # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. diff --git a/lib/extends/controllers/decidim/errors_controller_extends.rb b/lib/extends/controllers/decidim/errors_controller_extends.rb new file mode 100644 index 0000000..1a90fca --- /dev/null +++ b/lib/extends/controllers/decidim/errors_controller_extends.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module ErrorsControllerExtends + extend ActiveSupport::Concern + + included do + + before_action :delete_headers + skip_after_action :append_content_security_policy_headers + + def not_found + head :not_found + end + + def internal_server_error + head :internal_server_error + end + + private + + def delete_headers + response.delete_header("Content-Security-Policy") + response.delete_header("Link") + end + end +end + +Decidim::ErrorsController.class_eval do + include(ErrorsControllerExtends) +end \ No newline at end of file From 2afc56e0cf51fa7ed2c2a17a764f3cc9d39af342 Mon Sep 17 00:00:00 2001 From: moustachu Date: Fri, 4 Apr 2025 15:00:42 +0200 Subject: [PATCH 07/18] fix(sso): skip authenticity token with safe navigation operator --- .../omniauth_registrations_controller_extends.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb b/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb index 530f3b5..13dc17a 100644 --- a/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb +++ b/lib/extends/controllers/decidim/devise/omniauth_registrations_controller_extends.rb @@ -5,13 +5,15 @@ module OmniauthRegistrationsControllerExtends included do skip_before_action :verify_authenticity_token, if: :saml_callback? - + private def saml_callback? - custom_callback_origin = request.env["omniauth.strategy"]&.options&[:idp_sso_target_callback_origin] + custom_callback_origin = request.env["omniauth.strategy"]&.options&.[](:idp_sso_target_callback_origin) + Rails.logger.debug { "OmniauthRegistrationsControllerExtends::saml_callback? Custom callback origin: #{custom_callback_origin}" } result = request.path.end_with?("/callback") && custom_callback_origin.present? && URI.parse(request.origin).host == custom_callback_origin - + Rails.logger.debug { "OmniauthRegistrationsControllerExtends::saml_callback? Result : #{result}" } + Rails.logger.info "Skip authenticity token verification for authorized origin: #{custom_callback_origin}" if result result end @@ -20,4 +22,4 @@ def saml_callback? Decidim::Devise::OmniauthRegistrationsController.class_eval do include(OmniauthRegistrationsControllerExtends) -end \ No newline at end of file +end From e2e3198f7593fede3d843eb7aec6283162b4ad24 Mon Sep 17 00:00:00 2001 From: moustachu Date: Fri, 4 Apr 2025 15:04:14 +0200 Subject: [PATCH 08/18] fix(ci): rubocop --- Gemfile | 2 +- lib/extends/controllers/decidim/errors_controller_extends.rb | 3 +-- lib/omniauth/strategies/nyc.rb | 4 ++-- lib/tasks/decidim-app.rake | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index cfeb13d..b504fdb 100644 --- a/Gemfile +++ b/Gemfile @@ -33,8 +33,8 @@ gem "spring" # gem "ransack", "~> 4.0" gem "actionpack", "~> 7.0.8.7" -gem "rails-html-sanitizer", "~> 1.6.1" gem "net-imap", "~> 0.5.6" +gem "rails-html-sanitizer", "~> 1.6.1" gem "omniauth-rails_csrf_protection" gem "omniauth-saml" diff --git a/lib/extends/controllers/decidim/errors_controller_extends.rb b/lib/extends/controllers/decidim/errors_controller_extends.rb index 1a90fca..cd35827 100644 --- a/lib/extends/controllers/decidim/errors_controller_extends.rb +++ b/lib/extends/controllers/decidim/errors_controller_extends.rb @@ -4,7 +4,6 @@ module ErrorsControllerExtends extend ActiveSupport::Concern included do - before_action :delete_headers skip_after_action :append_content_security_policy_headers @@ -27,4 +26,4 @@ def delete_headers Decidim::ErrorsController.class_eval do include(ErrorsControllerExtends) -end \ No newline at end of file +end diff --git a/lib/omniauth/strategies/nyc.rb b/lib/omniauth/strategies/nyc.rb index 6a43f2b..0caa38c 100644 --- a/lib/omniauth/strategies/nyc.rb +++ b/lib/omniauth/strategies/nyc.rb @@ -37,12 +37,12 @@ class NYC < OmniAuth::Strategies::SAML [key, attribute] end - hash_attributes = Hash[found_attributes] + hash_attributes = found_attributes.to_h hash_attributes["name"] = "#{hash_attributes["first_name"]} #{hash_attributes["last_name"]}" if hash_attributes["first_name"].present? && hash_attributes["last_name"].present? - hash_attributes["nickname"] = "#{hash_attributes["first_name"].split(" ").first}#{hash_attributes["last_name"][0]}".downcase + hash_attributes["nickname"] = "#{hash_attributes["first_name"].split.first}#{hash_attributes["last_name"][0]}".downcase end hash_attributes.except!("email") if hash_attributes["nycExtEmailValidationFlag"] == "False" diff --git a/lib/tasks/decidim-app.rake b/lib/tasks/decidim-app.rake index 94299fb..2bfd7b1 100644 --- a/lib/tasks/decidim-app.rake +++ b/lib/tasks/decidim-app.rake @@ -8,4 +8,4 @@ namespace :decidim_app do puts "Running decidim_app:k8s:upgrade" end end -end \ No newline at end of file +end From 9369e7fed72383b339c9d5df36cd9d9e5875398a Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 16 Apr 2025 11:50:39 +0200 Subject: [PATCH 09/18] feat: cache expire time configuration variable --- config/initializers/decidim.rb | 1 + config/secrets.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/config/initializers/decidim.rb b/config/initializers/decidim.rb index 989b1f9..9906c80 100644 --- a/config/initializers/decidim.rb +++ b/config/initializers/decidim.rb @@ -403,6 +403,7 @@ config.admin_password_repetition_times = Rails.application.secrets.dig(:decidim, :admin_password, :repetition_times).presence || 5 # Additional optional configurations (see decidim-core/lib/decidim/core.rb) + config.cache_expiry_time = Rails.application.secrets.decidim[:cache_expiry_time].to_i.minutes if Rails.application.secrets.decidim[:cache_expiry_time].present? config.cache_key_separator = Rails.application.secrets.decidim[:cache_key_separator] if Rails.application.secrets.decidim[:cache_key_separator].present? config.expire_session_after = Rails.application.secrets.decidim[:expire_session_after].to_i.minutes if Rails.application.secrets.decidim[:expire_session_after].present? config.enable_remember_me = Rails.application.secrets.decidim[:enable_remember_me].present? unless Rails.application.secrets.decidim[:enable_remember_me] == "auto" diff --git a/config/secrets.yml b/config/secrets.yml index 32f4c2b..c78cdf7 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -32,6 +32,7 @@ decidim_default: &decidim_default base_uploads_path: <%= Decidim::Env.new("DECIDIM_BASE_UPLOADS_PATH").to_json %> default_csv_col_sep: <%= Decidim::Env.new("DECIDIM_DEFAULT_CSV_COL_SEP", ";").to_json %> consent_cookie_name: <%= Decidim::Env.new("DECIDIM_CONSENT_COOKIE_NAME", "decidim-consent").to_json %> + cache_expiry_time: <%= Decidim::Env.new("DECIDIM_CACHE_EXPIRY_TIME", "1440").to_i %> cache_key_separator: <%= Decidim::Env.new("DECIDIM_CACHE_KEY_SEPARATOR", "/").to_json %> expire_session_after: <%= Decidim::Env.new("DECIDIM_EXPIRE_SESSION_AFTER", "30").to_i %> session_timeout_interval: <%= Decidim::Env.new("DECIDIM_SESSION_TIMEOUT_INTERVAL", "10").to_i %> From 9a6c6266f6d64294028175ff4fba8ef66c1ccc64 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 16 Apr 2025 11:51:06 +0200 Subject: [PATCH 10/18] fix: AWS S3 params validation --- config/storage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/storage.yml b/config/storage.yml index 54a7d5c..92684b8 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -12,6 +12,7 @@ amazon: bucket: <%= Rails.application.secrets.dig(:amazon, :bucket) %> access_key_id: <%= Rails.application.secrets.dig(:storage, :amazon, :access_key_id) %> secret_access_key: <%= Rails.application.secrets.dig(:storage, :amazon, :secret_access_key) %> + validate_params: false amazon_instance_profile: service: S3 @@ -21,6 +22,7 @@ amazon_instance_profile: # see config/initalizers/storage.rb for more details # access_key_id: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :access_key_id) %> # secret_access_key: <%= Rails.application.secrets.dig(:storage, :amazon_instance_profile, :secret_access_key) %> + validate_params: false minio: service: S3 @@ -30,6 +32,7 @@ minio: endpoint: <%= Rails.application.secrets.dig(:storage, :minio, :endpoint) %> region: <%= Rails.application.secrets.dig(:storage, :minio, :region) %> force_path_style: true + validate_params: false azure: service: AzureStorage From 15edc5406252ce910152f64f8439f4f00f7612b8 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 16 Apr 2025 12:04:42 +0200 Subject: [PATCH 11/18] feat: add decidim awesome and term customizer --- Gemfile | 4 + Gemfile.lock | 31 +++++++ ...ranslation_sets.decidim_term_customizer.rb | 10 +++ ...er_translations.decidim_term_customizer.rb | 19 +++++ ...zer_constraints.decidim_term_customizer.rb | 18 +++++ ..._awesome_config.decidim_decidim_awesome.rb | 17 ++++ ...e_editor_images.decidim_decidim_awesome.rb | 15 ++++ ...fig_constraints.decidim_decidim_awesome.rb | 14 ++++ ...config_var_type.decidim_decidim_awesome.rb | 13 +++ ...me_vote_weights.decidim_decidim_awesome.rb | 14 ++++ ...al_extra_fields.decidim_decidim_awesome.rb | 15 ++++ ..._awesome_config.decidim_decidim_awesome.rb | 19 +++++ ..._private_fields.decidim_decidim_awesome.rb | 30 +++++++ ...ate_fields_date.decidim_decidim_awesome.rb | 21 +++++ db/schema.rb | 80 ++++++++++++++++++- 15 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20250416095651_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb create mode 100644 db/migrate/20250416095652_create_decidim_term_customizer_translations.decidim_term_customizer.rb create mode 100644 db/migrate/20250416095653_create_decidim_term_customizer_constraints.decidim_term_customizer.rb create mode 100644 db/migrate/20250416095720_create_decidim_awesome_config.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095721_create_awesome_editor_images.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095722_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095723_change_awesome_config_var_type.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095724_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095725_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095726_rename_editor_images_awesome_config.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095727_add_decidim_awesome_proposal_private_fields.decidim_decidim_awesome.rb create mode 100644 db/migrate/20250416095728_add_decidim_awesome_proposal_private_fields_date.decidim_decidim_awesome.rb diff --git a/Gemfile b/Gemfile index b504fdb..fe624fc 100644 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,10 @@ gem "omniauth-saml" # gem "veracode" +# External Decidim gems +gem "decidim-decidim_awesome", git: "https://github.com/OpenSourcePolitics/decidim-module-decidim_awesome.git", branch: "fix/update_packages_dependancies" +gem "decidim-term_customizer", git: "https://github.com/OpenSourcePolitics/decidim-module-term_customizer.git", branch: "backport/fix_database_not_available" + group :development, :test do gem "byebug", "~> 11.0", platform: :mri diff --git a/Gemfile.lock b/Gemfile.lock index d66cf4f..c676579 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,23 @@ +GIT + remote: https://github.com/OpenSourcePolitics/decidim-module-decidim_awesome.git + revision: 5148029a3d2e25873ce86c48448bc862ef283677 + branch: fix/update_packages_dependancies + specs: + decidim-decidim_awesome (0.12.0) + decidim-admin (>= 0.29.1, < 0.30) + decidim-core (>= 0.29.1, < 0.30) + deface (>= 1.5) + sassc (~> 2.3) + +GIT + remote: https://github.com/OpenSourcePolitics/decidim-module-term_customizer.git + revision: f3b55cae4e22713d7c842f0de4c421e9765ad7b0 + branch: backport/fix_database_not_available + specs: + decidim-term_customizer (0.29.0) + decidim-admin (~> 0.29.0) + decidim-core (~> 0.29.0) + GIT remote: https://github.com/decidim/decidim.git revision: af8d33194b3b011e8ae2517bf9cd8476e806c363 @@ -334,6 +354,12 @@ GEM declarative-builder (0.2.0) trailblazer-option (~> 0.1.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.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) @@ -596,6 +622,7 @@ GEM pg_search (2.3.7) activerecord (>= 6.1) activesupport (>= 6.1) + polyglot (0.3.5) premailer (1.27.0) addressable css_parser (>= 1.19.0) @@ -763,6 +790,8 @@ GEM rubyzip (2.3.2) rufus-scheduler (3.9.2) fugit (~> 1.1, >= 1.11.1) + sassc (2.4.0) + ffi (~> 1.9) selenium-webdriver (4.26.0) base64 (~> 0.2) logger (~> 1.4) @@ -889,6 +918,7 @@ DEPENDENCIES decidim-comments! decidim-core! decidim-debates! + decidim-decidim_awesome! decidim-dev! decidim-forms! decidim-meetings! @@ -897,6 +927,7 @@ DEPENDENCIES decidim-proposals! decidim-surveys! decidim-system! + decidim-term_customizer! decidim-verifications! dotenv-rails (~> 2.7) flamegraph diff --git a/db/migrate/20250416095651_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb b/db/migrate/20250416095651_create_decidim_term_customizer_translation_sets.decidim_term_customizer.rb new file mode 100644 index 0000000..7c9feed --- /dev/null +++ b/db/migrate/20250416095651_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/20250416095652_create_decidim_term_customizer_translations.decidim_term_customizer.rb b/db/migrate/20250416095652_create_decidim_term_customizer_translations.decidim_term_customizer.rb new file mode 100644 index 0000000..af44db0 --- /dev/null +++ b/db/migrate/20250416095652_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/20250416095653_create_decidim_term_customizer_constraints.decidim_term_customizer.rb b/db/migrate/20250416095653_create_decidim_term_customizer_constraints.decidim_term_customizer.rb new file mode 100644 index 0000000..f389706 --- /dev/null +++ b/db/migrate/20250416095653_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/20250416095720_create_decidim_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20250416095720_create_decidim_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..4172801 --- /dev/null +++ b/db/migrate/20250416095720_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/20250416095721_create_awesome_editor_images.decidim_decidim_awesome.rb b/db/migrate/20250416095721_create_awesome_editor_images.decidim_decidim_awesome.rb new file mode 100644 index 0000000..5cea52c --- /dev/null +++ b/db/migrate/20250416095721_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/20250416095722_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb b/db/migrate/20250416095722_create_decidim_awesome_config_constraints.decidim_decidim_awesome.rb new file mode 100644 index 0000000..0f06577 --- /dev/null +++ b/db/migrate/20250416095722_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/20250416095723_change_awesome_config_var_type.decidim_decidim_awesome.rb b/db/migrate/20250416095723_change_awesome_config_var_type.decidim_decidim_awesome.rb new file mode 100644 index 0000000..b1af6a4 --- /dev/null +++ b/db/migrate/20250416095723_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/20250416095724_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb b/db/migrate/20250416095724_create_decidim_awesome_vote_weights.decidim_decidim_awesome.rb new file mode 100644 index 0000000..6968673 --- /dev/null +++ b/db/migrate/20250416095724_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/20250416095725_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb b/db/migrate/20250416095725_create_decidim_awesome_proposal_extra_fields.decidim_decidim_awesome.rb new file mode 100644 index 0000000..751a3ce --- /dev/null +++ b/db/migrate/20250416095725_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/20250416095726_rename_editor_images_awesome_config.decidim_decidim_awesome.rb b/db/migrate/20250416095726_rename_editor_images_awesome_config.decidim_decidim_awesome.rb new file mode 100644 index 0000000..4546526 --- /dev/null +++ b/db/migrate/20250416095726_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/20250416095727_add_decidim_awesome_proposal_private_fields.decidim_decidim_awesome.rb b/db/migrate/20250416095727_add_decidim_awesome_proposal_private_fields.decidim_decidim_awesome.rb new file mode 100644 index 0000000..7f39ca8 --- /dev/null +++ b/db/migrate/20250416095727_add_decidim_awesome_proposal_private_fields.decidim_decidim_awesome.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# This migration comes from decidim_decidim_awesome (originally 20240531224204) +class AddDecidimAwesomeProposalPrivateFields < ActiveRecord::Migration[6.0] + class ProposalExtraField < ApplicationRecord + self.table_name = :decidim_awesome_proposal_extra_fields + end + + def change + add_column :decidim_awesome_proposal_extra_fields, :private_body, :string + add_column :decidim_awesome_proposal_extra_fields, :decidim_proposal_type, :string + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_awesome_proposal_extra_fields + SET decidim_proposal_type = 'Decidim::Proposals::Proposal' + SQL + end + end + + remove_index :decidim_awesome_proposal_extra_fields, name: "decidim_awesome_extra_fields_on_proposal" + add_index :decidim_awesome_proposal_extra_fields, + [:decidim_proposal_id, :decidim_proposal_type], + name: "index_decidim_awesome_proposal_extra_fields_on_decidim_proposal" + + change_column_null :decidim_awesome_proposal_extra_fields, :decidim_proposal_id, false + change_column_null :decidim_awesome_proposal_extra_fields, :decidim_proposal_type, false + ProposalExtraField.reset_column_information + end +end diff --git a/db/migrate/20250416095728_add_decidim_awesome_proposal_private_fields_date.decidim_decidim_awesome.rb b/db/migrate/20250416095728_add_decidim_awesome_proposal_private_fields_date.decidim_decidim_awesome.rb new file mode 100644 index 0000000..8831e91 --- /dev/null +++ b/db/migrate/20250416095728_add_decidim_awesome_proposal_private_fields_date.decidim_decidim_awesome.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +# This migration comes from decidim_decidim_awesome (originally 20240729164227) +class AddDecidimAwesomeProposalPrivateFieldsDate < ActiveRecord::Migration[6.1] + class ProposalExtraField < ApplicationRecord + self.table_name = :decidim_awesome_proposal_extra_fields + end + + def change + add_column :decidim_awesome_proposal_extra_fields, :private_body_updated_at, :datetime + + reversible do |direction| + direction.up do + execute <<~SQL.squish + UPDATE decidim_awesome_proposal_extra_fields + SET private_body_updated_at = updated_at + SQL + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b54e419..edccf30 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[7.0].define(version: 2024_09_18_113781) do +ActiveRecord::Schema[7.0].define(version: 2025_04_16_095728) do # These are extensions that must be enabled in order to support this database enable_extension "ltree" enable_extension "pg_trgm" @@ -311,6 +311,56 @@ 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", precision: nil, null: false + t.datetime "updated_at", precision: nil, 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", precision: nil, null: false + t.datetime "updated_at", precision: nil, 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", precision: nil, null: false + t.datetime "updated_at", precision: nil, 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", null: false + t.datetime "updated_at", null: false + t.string "private_body" + t.string "decidim_proposal_type", null: false + t.datetime "private_body_updated_at", precision: nil + t.index ["decidim_proposal_id", "decidim_proposal_type"], name: "index_decidim_awesome_proposal_extra_fields_on_decidim_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", null: false + t.datetime "updated_at", 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" @@ -1473,6 +1523,28 @@ t.index ["templatable_type", "templatable_id"], name: "index_decidim_templates_templatable" 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" @@ -1683,6 +1755,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" @@ -1707,6 +1782,9 @@ 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_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" From c0b58ae2d6b4c33b0019c99af4186a70b29e04b2 Mon Sep 17 00:00:00 2001 From: moustachu Date: Wed, 16 Apr 2025 12:08:15 +0200 Subject: [PATCH 12/18] feat: modify coauthor in proposals file import --- .../admin/imports/_proposals_fields.html.erb | 11 ++++++ config/initializers/extends.rb | 3 ++ .../import/proposal_creator_extends.rb | 38 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 app/views/decidim/proposals/admin/imports/_proposals_fields.html.erb create mode 100644 config/initializers/extends.rb create mode 100644 lib/extends/lib/decidim/proposals/import/proposal_creator_extends.rb diff --git a/app/views/decidim/proposals/admin/imports/_proposals_fields.html.erb b/app/views/decidim/proposals/admin/imports/_proposals_fields.html.erb new file mode 100644 index 0000000..951ed23 --- /dev/null +++ b/app/views/decidim/proposals/admin/imports/_proposals_fields.html.erb @@ -0,0 +1,11 @@ +<% if current_organization.user_groups_enabled? && form.object.user_groups.any? %> +
+ <%#= form.select( + :user_group_id, + form.object.user_groups.map { |g| [g.name, g.id] }, + selected: form.object.user_group_id.presence, + include_blank: current_user.name, + label: true + ) %> +
+<% end %> \ No newline at end of file diff --git a/config/initializers/extends.rb b/config/initializers/extends.rb new file mode 100644 index 0000000..c85e6a9 --- /dev/null +++ b/config/initializers/extends.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require "extends/lib/decidim/proposals/import/proposal_creator_extends" diff --git a/lib/extends/lib/decidim/proposals/import/proposal_creator_extends.rb b/lib/extends/lib/decidim/proposals/import/proposal_creator_extends.rb new file mode 100644 index 0000000..cfd11c3 --- /dev/null +++ b/lib/extends/lib/decidim/proposals/import/proposal_creator_extends.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module ProposalCreatorExtends + extend ActiveSupport::Concern + + included do + def produce + resource.add_coauthor(context[:current_organization]) + resource + end + + def finish! + Decidim.traceability.perform_action!(:create, self.class.resource_klass, context[:current_user], visibility: "admin-only") do + resource.save! + resource + end + publish(resource) + end + + private + + def publish(proposal) + Decidim::EventsManager.publish( + event: "decidim.events.proposals.proposal_published", + event_class: Decidim::Proposals::PublishProposalEvent, + resource: proposal, + followers: proposal.participatory_space.followers, + extra: { + participatory_space: true + } + ) + end + end +end + +Decidim::Proposals::Import::ProposalCreator.class_eval do + include(ProposalCreatorExtends) +end From 5eb58baf8a354e684dfa1e453b30b00ca83f298e Mon Sep 17 00:00:00 2001 From: moustachu Date: Tue, 22 Apr 2025 16:16:37 +0200 Subject: [PATCH 13/18] feat: add admin log in route --- Dockerfile | 3 +- Gemfile | 39 ++++++++++--------- Gemfile.lock | 1 + .../new/admin_sign_in.html.erb.deface | 2 + config/application.rb | 1 + config/environments/development.rb | 2 + config/environments/production.rb | 8 ++-- config/routes.rb | 4 ++ lib/decidim/version.rb | 7 ++++ 9 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 app/overrides/decidim/devise/sessions/new/admin_sign_in.html.erb.deface create mode 100644 lib/decidim/version.rb diff --git a/Dockerfile b/Dockerfile index 69edf4a..d2e6d1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,8 @@ COPY . . RUN bundle exec rake decidim:webpacker:install && \ bundle exec rake assets:precompile && \ - bundle exec rails shakapacker:compile + bundle exec rails shakapacker:compile && \ + bundle exec rails deface:precompile RUN rm -rf node_modules tmp/cache vendor/bundle/spec \ && rm -rf /usr/local/bundle/cache/*.gem \ diff --git a/Gemfile b/Gemfile index fe624fc..8ac3cbd 100644 --- a/Gemfile +++ b/Gemfile @@ -4,25 +4,28 @@ source "https://rubygems.org" ruby RUBY_VERSION -gem "decidim-accountability", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-admin", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-api", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-assemblies", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-blogs", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-budgets", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-comments", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-core", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-debates", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-forms", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-meetings", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-pages", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-participatory_processes", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-proposals", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-surveys", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-system", github: "decidim/decidim", tag: "v0.29.1" -gem "decidim-verifications", github: "decidim/decidim", tag: "v0.29.1" +DECIDIM_TAG = "v0.29.1" + +gem "decidim-accountability", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-admin", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-api", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-assemblies", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-blogs", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-budgets", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-comments", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-core", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-debates", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-forms", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-meetings", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-pages", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-participatory_processes", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-proposals", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-surveys", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-system", github: "decidim/decidim", tag: DECIDIM_TAG +gem "decidim-verifications", github: "decidim/decidim", tag: DECIDIM_TAG gem "bootsnap", "~> 1.4" +gem "deface" gem "puma", ">= 6.3.1" gem "aws-sdk-s3" @@ -48,7 +51,7 @@ gem "decidim-term_customizer", git: "https://github.com/OpenSourcePolitics/decid group :development, :test do gem "byebug", "~> 11.0", platform: :mri - gem "decidim-dev", github: "decidim/decidim", tag: "v0.29.1" + gem "decidim-dev", github: "decidim/decidim", tag: DECIDIM_TAG gem "brakeman", "~> 6.1" gem "parallel_tests", "~> 4.2" diff --git a/Gemfile.lock b/Gemfile.lock index c676579..f14b7eb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -929,6 +929,7 @@ DEPENDENCIES decidim-system! decidim-term_customizer! decidim-verifications! + deface dotenv-rails (~> 2.7) flamegraph letter_opener_web (~> 2.0) diff --git a/app/overrides/decidim/devise/sessions/new/admin_sign_in.html.erb.deface b/app/overrides/decidim/devise/sessions/new/admin_sign_in.html.erb.deface new file mode 100644 index 0000000..3ab60cd --- /dev/null +++ b/app/overrides/decidim/devise/sessions/new/admin_sign_in.html.erb.deface @@ -0,0 +1,2 @@ + + <% if current_organization.sign_in_enabled? || request.env['PATH_INFO'].include?("/admin_sign_in") %> \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index d5da460..40d45c3 100644 --- a/config/application.rb +++ b/config/application.rb @@ -2,6 +2,7 @@ require_relative "boot" +require "decidim/version" require "decidim/rails" # Add the frameworks used by your app that are not loaded by Decidim. diff --git a/config/environments/development.rb b/config/environments/development.rb index b2759d1..60dd43a 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -87,4 +87,6 @@ # Compress the HTML responses with gzip config.middleware.use Rack::Deflater end + + config.deface.enabled = true end diff --git a/config/environments/production.rb b/config/environments/production.rb index dac1caf..068bcaa 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -41,11 +41,7 @@ # Store uploaded files on the local file system (see config/storage.yml for options). config.active_storage.service = Rails.application.secrets.dig(:storage, :provider)&.to_sym || :local - config.active_storage.service_urls_expire_in = if %w(amazon amazon_instance_profile minio).include?(Rails.application.secrets.dig(:storage, :provider)) - Rails.application.secrets.dig(:decidim, :service_urls_expires_in) - else - "120000" - end.to_i.weeks + config.active_storage.service_urls_expire_in = Rails.application.secrets.dig(:decidim, :service_urls_expires_in).to_i.days # Mount Action Cable outside main process or domain. # config.action_cable.mount_path = nil @@ -134,4 +130,6 @@ # # Log error messages when you accidentally call methods on nil. # config.whiny_nils = true + + config.deface.enabled = ENV.fetch("DEFACE_ENABLED", nil) == "true" end diff --git a/config/routes.rb b/config/routes.rb index da13e5e..2a8b9dc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,10 @@ mount Sidekiq::Web => "/sidekiq" end + devise_scope :user do + get "/admin_sign_in", to: "decidim/devise/sessions#new" + end + get "/sign_in_redirect/:provider", to: "decidim/omniauth/switch#redirect" mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? || ENV.fetch("ENABLE_LETTER_OPENER", "0") == "1" diff --git a/lib/decidim/version.rb b/lib/decidim/version.rb new file mode 100644 index 0000000..146146c --- /dev/null +++ b/lib/decidim/version.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module Decidim + def self.version + Decidim::Core.version + end +end From 42d94405c0ee13ddf725d38ab606a5881a835bb9 Mon Sep 17 00:00:00 2001 From: moustachu Date: Tue, 22 Apr 2025 16:17:20 +0200 Subject: [PATCH 14/18] fix: add decidim-awesome JS dependencies --- package-lock.json | 159 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 8 ++- 2 files changed, 156 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index e9dd330..fc74703 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,15 @@ "@decidim/browserslist-config": "file:packages/browserslist-config", "@decidim/core": "file:packages/core", "@decidim/webpacker": "file:packages/webpacker", + "@tarekraafat/autocomplete.js": "10.2.7", "axe-core": "^4.10.2", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.12", "graphql": "^16.9.0", - "graphql-ws": "^5.16.0" + "graphql-ws": "^5.16.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.9", + "leaflet.featuregroup.subgroup": "^1.0.2" }, "devDependencies": { "@decidim/dev": "file:packages/dev", @@ -1456,14 +1462,12 @@ "node_modules/@codemirror/state": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", - "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", - "peer": true + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" }, "node_modules/@codemirror/view": { "version": "6.34.3", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.3.tgz", "integrity": "sha512-Ph5d+u8DxIeSgssXEakaakImkzBV4+slwIbcxl9oc9evexJhImeu/G8TK7+zp+IFK9KuJ0BdSn6kTBJeH2CHvA==", - "peer": true, "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -4593,9 +4597,9 @@ } }, "node_modules/@tarekraafat/autocomplete.js": { - "version": "10.2.9", - "resolved": "https://registry.npmjs.org/@tarekraafat/autocomplete.js/-/autocomplete.js-10.2.9.tgz", - "integrity": "sha512-A7OP3iJDTWeO85M3Vxu391acu9SmDguormHpMZ13khuyM180dKl9O1gAXSDA322XwkYuUU1Ad7WchW1TQNNuDw==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@tarekraafat/autocomplete.js/-/autocomplete.js-10.2.7.tgz", + "integrity": "sha512-iE+dnXI8/LrTaSORrnNdSyXg/bFCbCpz/R5GUdB3ioW+9PVEhglxNcSDQNeCXtrbRG0kOBFUd4unEiwcmqyn8A==", "funding": [ { "type": "opencollective", @@ -4609,7 +4613,8 @@ "type": "patreon", "url": "https://patreon.com/TarekRaafat" } - ] + ], + "license": "Apache-2.0" }, "node_modules/@tiptap/core": { "version": "2.1.13", @@ -7459,6 +7464,15 @@ "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==", + "license": "MIT", + "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", @@ -7768,6 +7782,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==" }, + "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==", + "license": "MIT" + }, "node_modules/element-qsa-scope": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/element-qsa-scope/-/element-qsa-scope-1.1.0.tgz", @@ -9630,6 +9650,34 @@ "url": "https://github.com/sponsors/isaacs" } }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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.13", + "resolved": "https://registry.npmjs.org/formBuilder/-/formBuilder-3.19.13.tgz", + "integrity": "sha512-bap3UF6CVbpBIq/SdtUHDd+tK0HzKdNuk1HzPzA/L/zcM1eONudfCLj9U4Fzoj0zk6Rlc26y8ZzS5cnp5Pl8rQ==", + "license": "MIT", + "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", @@ -10610,6 +10658,22 @@ "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==", + "license": "MIT", + "dependencies": { + "@codemirror/view": "^6.16.0" + }, + "engines": { + "node": ">=16.0.0", + "pnpm": ">=7.0.0" + }, + "peerDependencies": { + "@codemirror/view": ">=6.0.0" + } + }, "node_modules/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", @@ -11277,6 +11341,12 @@ "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==", + "license": "ISC" + }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", @@ -11377,6 +11447,15 @@ "node": ">=0.10.0" } }, + "node_modules/jsrender": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/jsrender/-/jsrender-1.0.15.tgz", + "integrity": "sha512-OodS9veJzdkxj0zqWTEDyHm5MdwpeaBA11X3W06n3wTP7XifCv1JwaNpY6jn0KIltzgm3nM1Gi/tccslMEai1w==", + "license": "MIT", + "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", @@ -11463,6 +11542,12 @@ "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==", + "license": "BSD-2-Clause" + }, "node_modules/leaflet.markercluster": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", @@ -14306,6 +14391,42 @@ "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16025,6 +16146,15 @@ "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==", + "license": "MIT", + "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", @@ -16271,8 +16401,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", @@ -17053,6 +17182,16 @@ "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==", + "license": "MIT", + "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 16f6bdc..f0dfe67 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,15 @@ "@decidim/browserslist-config": "file:packages/browserslist-config", "@decidim/core": "file:packages/core", "@decidim/webpacker": "file:packages/webpacker", + "@tarekraafat/autocomplete.js": "10.2.7", "axe-core": "^4.10.2", + "form-storage": "^1.3.5", + "formBuilder": "^3.19.12", "graphql": "^16.9.0", - "graphql-ws": "^5.16.0" + "graphql-ws": "^5.16.0", + "inline-attacher": "^0.0.7", + "jsrender": "^1.0.9", + "leaflet.featuregroup.subgroup": "^1.0.2" }, "version": "0.1.0", "devDependencies": { From aff8c0e9cf8d72c5301ade42cbf9c6ba2778db68 Mon Sep 17 00:00:00 2001 From: moustachu Date: Tue, 22 Apr 2025 17:28:49 +0200 Subject: [PATCH 15/18] feat: add Google Translate widget --- .../language_chooser_icon.html.erb.deface | 2 ++ .../language_chooser_toggle.html.erb.deface | 2 ++ app/packs/images/icon-language-solid.svg | 1 + .../decidim/decidim_application.scss | 31 +++++++++++++++++++ .../layouts/decidim/_head_extra.html.erb | 11 +++++++ .../decidim/_language_chooser_bar.html.erb | 3 ++ .../decidim/_language_chooser_icon.html.erb | 6 ++++ config/initializers/decidim.rb | 6 ++-- 8 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/overrides/layouts/decidim/header/_main/language_chooser_icon.html.erb.deface create mode 100644 app/overrides/layouts/decidim/header/_main/language_chooser_toggle.html.erb.deface create mode 100644 app/packs/images/icon-language-solid.svg create mode 100644 app/views/layouts/decidim/_head_extra.html.erb create mode 100644 app/views/layouts/decidim/_language_chooser_bar.html.erb create mode 100644 app/views/layouts/decidim/_language_chooser_icon.html.erb diff --git a/app/overrides/layouts/decidim/header/_main/language_chooser_icon.html.erb.deface b/app/overrides/layouts/decidim/header/_main/language_chooser_icon.html.erb.deface new file mode 100644 index 0000000..5152c9d --- /dev/null +++ b/app/overrides/layouts/decidim/header/_main/language_chooser_icon.html.erb.deface @@ -0,0 +1,2 @@ + + <%= render partial: "/layouts/decidim/language_chooser_icon" %> \ No newline at end of file diff --git a/app/overrides/layouts/decidim/header/_main/language_chooser_toggle.html.erb.deface b/app/overrides/layouts/decidim/header/_main/language_chooser_toggle.html.erb.deface new file mode 100644 index 0000000..2b55678 --- /dev/null +++ b/app/overrides/layouts/decidim/header/_main/language_chooser_toggle.html.erb.deface @@ -0,0 +1,2 @@ + + <%= render partial: "/layouts/decidim/language_chooser_bar" %> \ No newline at end of file diff --git a/app/packs/images/icon-language-solid.svg b/app/packs/images/icon-language-solid.svg new file mode 100644 index 0000000..c701c59 --- /dev/null +++ b/app/packs/images/icon-language-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/packs/stylesheets/decidim/decidim_application.scss b/app/packs/stylesheets/decidim/decidim_application.scss index 5b876c8..ae29123 100644 --- a/app/packs/stylesheets/decidim/decidim_application.scss +++ b/app/packs/stylesheets/decidim/decidim_application.scss @@ -6,3 +6,34 @@ // available at https://docs.decidim.org/en/develop/customize/styles.html#_tailwind_css // // By default this is empty. + +header { + .main-bar { + &__logo { + @apply col-span-2; + } + + &__lc-button { + @apply text-secondary justify-self-end xl:col-start-7; + } + } +} + +.language-chooser-bar { + + @apply container items-center py-5 h-24 relative z-40; + + .goog-te-gadget { + @apply w-full text-center; + + select { + @apply block w-full xl:w-2/3 px-4 py-1.5 mx-auto font-sans text-md; + color: var(--secondary); + } + + img { + @apply inline box-content; + } + } +} + diff --git a/app/views/layouts/decidim/_head_extra.html.erb b/app/views/layouts/decidim/_head_extra.html.erb new file mode 100644 index 0000000..92a39c9 --- /dev/null +++ b/app/views/layouts/decidim/_head_extra.html.erb @@ -0,0 +1,11 @@ + + diff --git a/app/views/layouts/decidim/_language_chooser_bar.html.erb b/app/views/layouts/decidim/_language_chooser_bar.html.erb new file mode 100644 index 0000000..9789990 --- /dev/null +++ b/app/views/layouts/decidim/_language_chooser_bar.html.erb @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/app/views/layouts/decidim/_language_chooser_icon.html.erb b/app/views/layouts/decidim/_language_chooser_icon.html.erb new file mode 100644 index 0000000..0136a42 --- /dev/null +++ b/app/views/layouts/decidim/_language_chooser_icon.html.erb @@ -0,0 +1,6 @@ + +
+ +
\ No newline at end of file diff --git a/config/initializers/decidim.rb b/config/initializers/decidim.rb index 9906c80..8484ff4 100644 --- a/config/initializers/decidim.rb +++ b/config/initializers/decidim.rb @@ -389,8 +389,10 @@ # Defines additional content security policies following the structure # Read more: https://docs.decidim.org/en/develop/configure/initializer#_content_security_policy config.content_security_policies_extra = { - "connect-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000), - "img-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000) + "connect-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000 *.gstatic.com *.google.com *.googleapis.com), + "img-src" => %w(http://minio:9000 http://minio http://localhost:9000 https://localhost:3000 *.gstatic.com *.google.com *.googleapis.com), + "script-src" => %w(*.gstatic.com *.google.com *.googleapis.com), + "style-src" => %w(*.gstatic.com *.google.com *.googleapis.com) } # Admin admin password configurations From 0a5b647341d3a50c0f881dec591c3c755793c869 Mon Sep 17 00:00:00 2001 From: moustachu Date: Thu, 26 Jun 2025 17:09:08 +0200 Subject: [PATCH 16/18] feat: tweak cookies categories settings --- config/initializers/decidim.rb | 56 +++++++++++++++++----------------- config/locales/en.yml | 14 +++++++++ 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/config/initializers/decidim.rb b/config/initializers/decidim.rb index 8484ff4..fac98c2 100644 --- a/config/initializers/decidim.rb +++ b/config/initializers/decidim.rb @@ -357,34 +357,34 @@ config.consent_cookie_name = Rails.application.secrets.decidim[:consent_cookie_name] if Rails.application.secrets.decidim[:consent_cookie_name].present? # Defines data consent categories and the data stored in each category. - # config.consent_categories = [ - # { - # slug: "essential", - # mandatory: true, - # items: [ - # { - # type: "cookie", - # name: "_session_id" - # }, - # { - # type: "cookie", - # name: Decidim.consent_cookie_name - # } - # ] - # }, - # { - # slug: "preferences", - # mandatory: false - # }, - # { - # slug: "analytics", - # mandatory: false - # }, - # { - # slug: "marketing", - # mandatory: false - # } - # ] + config.consent_categories = [ + { + slug: "essential", + mandatory: true, + items: [ + { + type: "cookie", + name: "_session_id" + }, + { + type: "cookie", + name: Decidim.consent_cookie_name + }, + { + type: "cookie", + name: "youtube-nocookie" + }, + { + type: "cookie", + name: "google-maps" + }, + { + type: "cookie", + name: "airtable" + } + ] + } + ] # Defines additional content security policies following the structure # Read more: https://docs.decidim.org/en/develop/configure/initializer#_content_security_policy diff --git a/config/locales/en.yml b/config/locales/en.yml index c81dd88..0b337fd 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -5,3 +5,17 @@ en: assembly: fields: promoted: "Promoted" + layouts: + decidim: + data_consent: + details: + items: + airtable: + service: "Airtable" + description: "We need these for airtable" + google-maps: + service: "Google Maps" + description: "We need these for maps" + youtube-nocookie: + service: "YouTube (no cookies)" + description: "We need these for video" \ No newline at end of file From 1e6acf31d6f1098753af9c5efe1d07956bfb416d Mon Sep 17 00:00:00 2001 From: moustachu Date: Thu, 18 Dec 2025 16:21:01 +0100 Subject: [PATCH 17/18] fix: update pre compiled files --- .../api/docs/directive/deprecated/index.html | 21 + .../api/docs/directive/include/index.html | 21 + .../static/api/docs/directive/index.html | 21 + .../api/docs/directive/oneof/index.html | 21 + .../static/api/docs/directive/skip/index.html | 21 + .../api/docs/directive/specifiedby/index.html | 21 + .../docs/enum/__directivelocation/index.html | 21 + .../api/docs/enum/__typekind/index.html | 21 + app/views/static/api/docs/enum/index.html | 21 + app/views/static/api/docs/index.html | 21 + .../input_object/categoryfilter/index.html | 21 + .../input_object/componentfilter/index.html | 21 + .../input_object/componentsort/index.html | 21 + .../static/api/docs/input_object/index.html | 21 + .../participatoryprocessfilter/index.html | 21 + .../participatoryprocesssort/index.html | 21 + .../docs/input_object/postfilter/index.html | 21 + .../api/docs/input_object/postsort/index.html | 21 + .../input_object/proposalfilter/index.html | 21 + .../docs/input_object/proposalsort/index.html | 21 + .../input_object/userentityfilter/index.html | 21 + .../input_object/userentitysort/index.html | 21 + .../amendableentityinterface/index.html | 21 + .../interface/amendableinterface/index.html | 21 + .../interface/attachableinterface/index.html | 21 + .../api/docs/interface/author/index.html | 21 + .../interface/authorableinterface/index.html | 21 + .../categoriescontainerinterface/index.html | 21 + .../categorizableinterface/index.html | 21 + .../coauthorableinterface/index.html | 21 + .../interface/commentableinterface/index.html | 21 + .../interface/componentinterface/index.html | 22 + .../interface/endorsableinterface/index.html | 21 + .../interface/fingerprintinterface/index.html | 21 + .../static/api/docs/interface/index.html | 21 + .../participatoryspaceinterface/index.html | 21 + .../index.html | 21 + .../questionnaireentityinterface/index.html | 21 + .../interface/scopableinterface/index.html | 21 + .../interface/servicesinterface/index.html | 21 + .../interface/timestampsinterface/index.html | 21 + .../interface/traceableinterface/index.html | 21 + .../api/docs/mutation/comment/index.html | 21 + .../api/docs/mutation/commentable/index.html | 21 + .../api/docs/object/__directive/index.html | 21 + .../api/docs/object/__enumvalue/index.html | 21 + .../static/api/docs/object/__field/index.html | 21 + .../api/docs/object/__inputvalue/index.html | 21 + .../api/docs/object/__schema/index.html | 21 + .../static/api/docs/object/__type/index.html | 21 + .../api/docs/object/accountability/index.html | 21 + .../api/docs/object/amendment/index.html | 21 + .../api/docs/object/answeroption/index.html | 21 + .../static/api/docs/object/area/index.html | 21 + .../api/docs/object/areatype/index.html | 21 + .../api/docs/object/assembliestype/index.html | 21 + .../api/docs/object/assembly/index.html | 21 + .../api/docs/object/assemblymember/index.html | 21 + .../api/docs/object/attachment/index.html | 21 + .../static/api/docs/object/blogs/index.html | 21 + .../static/api/docs/object/budget/index.html | 21 + .../docs/object/budgetconnection/index.html | 21 + .../api/docs/object/budgetedge/index.html | 21 + .../static/api/docs/object/budgets/index.html | 21 + .../api/docs/object/category/index.html | 21 + .../static/api/docs/object/comment/index.html | 21 + .../api/docs/object/commentable/index.html | 21 + .../object/commentablemutation/index.html | 21 + .../docs/object/commentmutation/index.html | 21 + .../api/docs/object/component/index.html | 1051 ++++++++++++++++ .../api/docs/object/coordinates/index.html | 21 + .../static/api/docs/object/debate/index.html | 21 + .../docs/object/debateconnection/index.html | 21 + .../api/docs/object/debateedge/index.html | 21 + .../static/api/docs/object/debates/index.html | 21 + .../static/api/docs/object/decidim/index.html | 21 + .../api/docs/object/fingerprint/index.html | 21 + .../api/docs/object/hashtagtype/index.html | 21 + app/views/static/api/docs/object/index.html | 21 + .../object/localizedcustomfields/index.html | 1040 ++++++++++++++++ .../docs/object/localizedstring/index.html | 21 + .../static/api/docs/object/meeting/index.html | 21 + .../api/docs/object/meetingagenda/index.html | 21 + .../docs/object/meetingagendaitem/index.html | 21 + .../docs/object/meetingconnection/index.html | 21 + .../api/docs/object/meetingedge/index.html | 21 + .../api/docs/object/meetings/index.html | 21 + .../api/docs/object/meetingservice/index.html | 21 + .../static/api/docs/object/metric/index.html | 21 + .../api/docs/object/metrichistory/index.html | 21 + .../api/docs/object/organization/index.html | 21 + .../static/api/docs/object/page/index.html | 21 + .../api/docs/object/pageconnection/index.html | 21 + .../api/docs/object/pageedge/index.html | 21 + .../api/docs/object/pageinfo/index.html | 21 + .../static/api/docs/object/pages/index.html | 21 + .../object/participatoryprocess/index.html | 21 + .../participatoryprocessgroup/index.html | 21 + .../participatoryprocessstep/index.html | 21 + .../participatoryprocesstype/index.html | 21 + .../docs/object/participatoryspace/index.html | 21 + .../object/participatoryspacelink/index.html | 21 + .../participatoryspacemanifest/index.html | 21 + .../static/api/docs/object/post/index.html | 21 + .../api/docs/object/postconnection/index.html | 21 + .../api/docs/object/postedge/index.html | 21 + .../static/api/docs/object/project/index.html | 21 + .../api/docs/object/proposal/index.html | 33 + .../docs/object/proposalconnection/index.html | 21 + .../api/docs/object/proposaledge/index.html | 21 + .../api/docs/object/proposals/index.html | 21 + .../quantifiabletranslatedfield/index.html | 21 + .../api/docs/object/question/index.html | 21 + .../api/docs/object/questionnaire/index.html | 21 + .../static/api/docs/object/result/index.html | 21 + .../docs/object/resultconnection/index.html | 21 + .../api/docs/object/resultedge/index.html | 21 + .../static/api/docs/object/scope/index.html | 21 + .../static/api/docs/object/session/index.html | 21 + .../api/docs/object/statistic/index.html | 21 + .../static/api/docs/object/status/index.html | 21 + .../static/api/docs/object/survey/index.html | 21 + .../docs/object/surveyconnection/index.html | 21 + .../api/docs/object/surveyedge/index.html | 21 + .../static/api/docs/object/surveys/index.html | 21 + .../api/docs/object/timelineentry/index.html | 21 + .../api/docs/object/traceversion/index.html | 21 + .../object/translatedcustomfields/index.html | 1080 +++++++++++++++++ .../docs/object/translatedfield/index.html | 21 + .../static/api/docs/object/user/index.html | 21 + .../api/docs/object/usergroup/index.html | 21 + .../api/docs/operation/mutation/index.html | 21 + .../api/docs/operation/query/index.html | 123 +- .../static/api/docs/scalar/boolean/index.html | 21 + .../static/api/docs/scalar/date/index.html | 21 + .../api/docs/scalar/datetime/index.html | 21 + .../static/api/docs/scalar/float/index.html | 21 + .../static/api/docs/scalar/id/index.html | 21 + app/views/static/api/docs/scalar/index.html | 21 + .../static/api/docs/scalar/int/index.html | 21 + .../static/api/docs/scalar/json/index.html | 21 + .../static/api/docs/scalar/string/index.html | 21 + app/views/static/api/docs/union/index.html | 21 + tailwind.config.js | 85 -- 144 files changed, 6175 insertions(+), 136 deletions(-) create mode 100644 app/views/static/api/docs/object/component/index.html create mode 100644 app/views/static/api/docs/object/localizedcustomfields/index.html create mode 100644 app/views/static/api/docs/object/translatedcustomfields/index.html delete mode 100644 tailwind.config.js diff --git a/app/views/static/api/docs/directive/deprecated/index.html b/app/views/static/api/docs/directive/deprecated/index.html index 272c276..d79ee55 100644 --- a/app/views/static/api/docs/directive/deprecated/index.html +++ b/app/views/static/api/docs/directive/deprecated/index.html @@ -193,6 +193,13 @@

+
  • + + Component + +
  • + +
  • Coordinates @@ -249,6 +256,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -578,6 +592,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/directive/include/index.html b/app/views/static/api/docs/directive/include/index.html index f70147e..101c18a 100644 --- a/app/views/static/api/docs/directive/include/index.html +++ b/app/views/static/api/docs/directive/include/index.html @@ -192,6 +192,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -248,6 +255,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -577,6 +591,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/directive/index.html b/app/views/static/api/docs/directive/index.html index 3080c06..69a23ae 100644 --- a/app/views/static/api/docs/directive/index.html +++ b/app/views/static/api/docs/directive/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/directive/oneof/index.html b/app/views/static/api/docs/directive/oneof/index.html index f0f7807..ea2c650 100644 --- a/app/views/static/api/docs/directive/oneof/index.html +++ b/app/views/static/api/docs/directive/oneof/index.html @@ -168,6 +168,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -224,6 +231,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -553,6 +567,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/directive/skip/index.html b/app/views/static/api/docs/directive/skip/index.html index e2f8435..2fe8010 100644 --- a/app/views/static/api/docs/directive/skip/index.html +++ b/app/views/static/api/docs/directive/skip/index.html @@ -192,6 +192,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -248,6 +255,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -577,6 +591,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/directive/specifiedby/index.html b/app/views/static/api/docs/directive/specifiedby/index.html index 5000cf8..1a279d5 100644 --- a/app/views/static/api/docs/directive/specifiedby/index.html +++ b/app/views/static/api/docs/directive/specifiedby/index.html @@ -190,6 +190,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -246,6 +253,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -575,6 +589,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/enum/__directivelocation/index.html b/app/views/static/api/docs/enum/__directivelocation/index.html index fed90df..c8e2ceb 100644 --- a/app/views/static/api/docs/enum/__directivelocation/index.html +++ b/app/views/static/api/docs/enum/__directivelocation/index.html @@ -260,6 +260,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -316,6 +323,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -645,6 +659,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/enum/__typekind/index.html b/app/views/static/api/docs/enum/__typekind/index.html index 856b108..266c361 100644 --- a/app/views/static/api/docs/enum/__typekind/index.html +++ b/app/views/static/api/docs/enum/__typekind/index.html @@ -205,6 +205,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -261,6 +268,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -590,6 +604,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/enum/index.html b/app/views/static/api/docs/enum/index.html index 1a45cff..9205bd1 100644 --- a/app/views/static/api/docs/enum/index.html +++ b/app/views/static/api/docs/enum/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/index.html b/app/views/static/api/docs/index.html index 60f8b15..3544412 100644 --- a/app/views/static/api/docs/index.html +++ b/app/views/static/api/docs/index.html @@ -661,6 +661,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -717,6 +724,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -1046,6 +1060,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/categoryfilter/index.html b/app/views/static/api/docs/input_object/categoryfilter/index.html index 17e31a8..fec14e8 100644 --- a/app/views/static/api/docs/input_object/categoryfilter/index.html +++ b/app/views/static/api/docs/input_object/categoryfilter/index.html @@ -171,6 +171,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -227,6 +234,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -556,6 +570,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/componentfilter/index.html b/app/views/static/api/docs/input_object/componentfilter/index.html index 1afbf4d..9569cd3 100644 --- a/app/views/static/api/docs/input_object/componentfilter/index.html +++ b/app/views/static/api/docs/input_object/componentfilter/index.html @@ -207,6 +207,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -263,6 +270,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -592,6 +606,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/componentsort/index.html b/app/views/static/api/docs/input_object/componentsort/index.html index 1d0ea73..74eb98b 100644 --- a/app/views/static/api/docs/input_object/componentsort/index.html +++ b/app/views/static/api/docs/input_object/componentsort/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/index.html b/app/views/static/api/docs/input_object/index.html index defd9f7..7bdd0c5 100644 --- a/app/views/static/api/docs/input_object/index.html +++ b/app/views/static/api/docs/input_object/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html b/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html index 6a24a62..043d975 100644 --- a/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html +++ b/app/views/static/api/docs/input_object/participatoryprocessfilter/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/participatoryprocesssort/index.html b/app/views/static/api/docs/input_object/participatoryprocesssort/index.html index cbcaaab..6fc847d 100644 --- a/app/views/static/api/docs/input_object/participatoryprocesssort/index.html +++ b/app/views/static/api/docs/input_object/participatoryprocesssort/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/postfilter/index.html b/app/views/static/api/docs/input_object/postfilter/index.html index d51bdda..639dc75 100644 --- a/app/views/static/api/docs/input_object/postfilter/index.html +++ b/app/views/static/api/docs/input_object/postfilter/index.html @@ -202,6 +202,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -258,6 +265,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -587,6 +601,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/postsort/index.html b/app/views/static/api/docs/input_object/postsort/index.html index b858381..5391456 100644 --- a/app/views/static/api/docs/input_object/postsort/index.html +++ b/app/views/static/api/docs/input_object/postsort/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/proposalfilter/index.html b/app/views/static/api/docs/input_object/proposalfilter/index.html index ea018c8..6ec223d 100644 --- a/app/views/static/api/docs/input_object/proposalfilter/index.html +++ b/app/views/static/api/docs/input_object/proposalfilter/index.html @@ -190,6 +190,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -246,6 +253,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -575,6 +589,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/proposalsort/index.html b/app/views/static/api/docs/input_object/proposalsort/index.html index 3be929f..0b1126a 100644 --- a/app/views/static/api/docs/input_object/proposalsort/index.html +++ b/app/views/static/api/docs/input_object/proposalsort/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/userentityfilter/index.html b/app/views/static/api/docs/input_object/userentityfilter/index.html index 3bb865d..dc4c70a 100644 --- a/app/views/static/api/docs/input_object/userentityfilter/index.html +++ b/app/views/static/api/docs/input_object/userentityfilter/index.html @@ -197,6 +197,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -253,6 +260,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -582,6 +596,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/input_object/userentitysort/index.html b/app/views/static/api/docs/input_object/userentitysort/index.html index 0df2f7e..a205b3c 100644 --- a/app/views/static/api/docs/input_object/userentitysort/index.html +++ b/app/views/static/api/docs/input_object/userentitysort/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/amendableentityinterface/index.html b/app/views/static/api/docs/interface/amendableentityinterface/index.html index 0b5c517..acfc0b4 100644 --- a/app/views/static/api/docs/interface/amendableentityinterface/index.html +++ b/app/views/static/api/docs/interface/amendableentityinterface/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/amendableinterface/index.html b/app/views/static/api/docs/interface/amendableinterface/index.html index b275a28..43e5497 100644 --- a/app/views/static/api/docs/interface/amendableinterface/index.html +++ b/app/views/static/api/docs/interface/amendableinterface/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/attachableinterface/index.html b/app/views/static/api/docs/interface/attachableinterface/index.html index 739ebd9..751658a 100644 --- a/app/views/static/api/docs/interface/attachableinterface/index.html +++ b/app/views/static/api/docs/interface/attachableinterface/index.html @@ -181,6 +181,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -237,6 +244,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -566,6 +580,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/author/index.html b/app/views/static/api/docs/interface/author/index.html index 4e4e9d6..e93841f 100644 --- a/app/views/static/api/docs/interface/author/index.html +++ b/app/views/static/api/docs/interface/author/index.html @@ -219,6 +219,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -275,6 +282,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -604,6 +618,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/authorableinterface/index.html b/app/views/static/api/docs/interface/authorableinterface/index.html index cf2ad5b..563b88a 100644 --- a/app/views/static/api/docs/interface/authorableinterface/index.html +++ b/app/views/static/api/docs/interface/authorableinterface/index.html @@ -178,6 +178,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -234,6 +241,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -563,6 +577,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/categoriescontainerinterface/index.html b/app/views/static/api/docs/interface/categoriescontainerinterface/index.html index 8eaaae7..68fe9f8 100644 --- a/app/views/static/api/docs/interface/categoriescontainerinterface/index.html +++ b/app/views/static/api/docs/interface/categoriescontainerinterface/index.html @@ -197,6 +197,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -253,6 +260,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -582,6 +596,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/categorizableinterface/index.html b/app/views/static/api/docs/interface/categorizableinterface/index.html index c47cb47..552386a 100644 --- a/app/views/static/api/docs/interface/categorizableinterface/index.html +++ b/app/views/static/api/docs/interface/categorizableinterface/index.html @@ -180,6 +180,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -236,6 +243,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -565,6 +579,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/coauthorableinterface/index.html b/app/views/static/api/docs/interface/coauthorableinterface/index.html index fde4f17..e00b563 100644 --- a/app/views/static/api/docs/interface/coauthorableinterface/index.html +++ b/app/views/static/api/docs/interface/coauthorableinterface/index.html @@ -188,6 +188,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -244,6 +251,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -573,6 +587,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/commentableinterface/index.html b/app/views/static/api/docs/interface/commentableinterface/index.html index 7eb02ad..4eae551 100644 --- a/app/views/static/api/docs/interface/commentableinterface/index.html +++ b/app/views/static/api/docs/interface/commentableinterface/index.html @@ -259,6 +259,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -315,6 +322,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -644,6 +658,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/componentinterface/index.html b/app/views/static/api/docs/interface/componentinterface/index.html index ee387c6..a6df2fe 100644 --- a/app/views/static/api/docs/interface/componentinterface/index.html +++ b/app/views/static/api/docs/interface/componentinterface/index.html @@ -7,6 +7,7 @@

  • Accountability
  • Blogs
  • Budgets
  • +
  • Component
  • Debates
  • Meetings
  • Pages
  • @@ -201,6 +202,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -257,6 +265,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -586,6 +601,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/endorsableinterface/index.html b/app/views/static/api/docs/interface/endorsableinterface/index.html index f55c495..ae47291 100644 --- a/app/views/static/api/docs/interface/endorsableinterface/index.html +++ b/app/views/static/api/docs/interface/endorsableinterface/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/fingerprintinterface/index.html b/app/views/static/api/docs/interface/fingerprintinterface/index.html index e7f80b4..bc28cff 100644 --- a/app/views/static/api/docs/interface/fingerprintinterface/index.html +++ b/app/views/static/api/docs/interface/fingerprintinterface/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/index.html b/app/views/static/api/docs/interface/index.html index 4d6cbb6..8ce80d9 100644 --- a/app/views/static/api/docs/interface/index.html +++ b/app/views/static/api/docs/interface/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/participatoryspaceinterface/index.html b/app/views/static/api/docs/interface/participatoryspaceinterface/index.html index e5f3854..f2d557a 100644 --- a/app/views/static/api/docs/interface/participatoryspaceinterface/index.html +++ b/app/views/static/api/docs/interface/participatoryspaceinterface/index.html @@ -236,6 +236,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -292,6 +299,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -621,6 +635,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html b/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html index cbf3389..6b2ed84 100644 --- a/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html +++ b/app/views/static/api/docs/interface/participatoryspaceresourceableinterface/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/questionnaireentityinterface/index.html b/app/views/static/api/docs/interface/questionnaireentityinterface/index.html index aab53d5..f68b5d8 100644 --- a/app/views/static/api/docs/interface/questionnaireentityinterface/index.html +++ b/app/views/static/api/docs/interface/questionnaireentityinterface/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/scopableinterface/index.html b/app/views/static/api/docs/interface/scopableinterface/index.html index acaed0a..2a892f5 100644 --- a/app/views/static/api/docs/interface/scopableinterface/index.html +++ b/app/views/static/api/docs/interface/scopableinterface/index.html @@ -182,6 +182,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -238,6 +245,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -567,6 +581,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/servicesinterface/index.html b/app/views/static/api/docs/interface/servicesinterface/index.html index a0464a1..28de8a7 100644 --- a/app/views/static/api/docs/interface/servicesinterface/index.html +++ b/app/views/static/api/docs/interface/servicesinterface/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/timestampsinterface/index.html b/app/views/static/api/docs/interface/timestampsinterface/index.html index 2ebcf2b..11024f9 100644 --- a/app/views/static/api/docs/interface/timestampsinterface/index.html +++ b/app/views/static/api/docs/interface/timestampsinterface/index.html @@ -186,6 +186,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -242,6 +249,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -571,6 +585,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/interface/traceableinterface/index.html b/app/views/static/api/docs/interface/traceableinterface/index.html index 91274de..ab9eb36 100644 --- a/app/views/static/api/docs/interface/traceableinterface/index.html +++ b/app/views/static/api/docs/interface/traceableinterface/index.html @@ -184,6 +184,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -240,6 +247,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -569,6 +583,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/mutation/comment/index.html b/app/views/static/api/docs/mutation/comment/index.html index e657e5a..6e7c83c 100644 --- a/app/views/static/api/docs/mutation/comment/index.html +++ b/app/views/static/api/docs/mutation/comment/index.html @@ -201,6 +201,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -257,6 +264,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -586,6 +600,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/mutation/commentable/index.html b/app/views/static/api/docs/mutation/commentable/index.html index cd778ed..7964547 100644 --- a/app/views/static/api/docs/mutation/commentable/index.html +++ b/app/views/static/api/docs/mutation/commentable/index.html @@ -242,6 +242,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -298,6 +305,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -627,6 +641,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__directive/index.html b/app/views/static/api/docs/object/__directive/index.html index c71d47e..cfb5768 100644 --- a/app/views/static/api/docs/object/__directive/index.html +++ b/app/views/static/api/docs/object/__directive/index.html @@ -238,6 +238,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -294,6 +301,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -623,6 +637,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__enumvalue/index.html b/app/views/static/api/docs/object/__enumvalue/index.html index 430d43a..0181283 100644 --- a/app/views/static/api/docs/object/__enumvalue/index.html +++ b/app/views/static/api/docs/object/__enumvalue/index.html @@ -185,6 +185,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -241,6 +248,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -570,6 +584,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__field/index.html b/app/views/static/api/docs/object/__field/index.html index b6920cc..fe39101 100644 --- a/app/views/static/api/docs/object/__field/index.html +++ b/app/views/static/api/docs/object/__field/index.html @@ -215,6 +215,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -271,6 +278,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -600,6 +614,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__inputvalue/index.html b/app/views/static/api/docs/object/__inputvalue/index.html index 9260142..7f378db 100644 --- a/app/views/static/api/docs/object/__inputvalue/index.html +++ b/app/views/static/api/docs/object/__inputvalue/index.html @@ -196,6 +196,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -252,6 +259,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -581,6 +595,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__schema/index.html b/app/views/static/api/docs/object/__schema/index.html index f257218..c7f0d03 100644 --- a/app/views/static/api/docs/object/__schema/index.html +++ b/app/views/static/api/docs/object/__schema/index.html @@ -200,6 +200,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -256,6 +263,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -585,6 +599,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/__type/index.html b/app/views/static/api/docs/object/__type/index.html index 583970f..fde732a 100644 --- a/app/views/static/api/docs/object/__type/index.html +++ b/app/views/static/api/docs/object/__type/index.html @@ -281,6 +281,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -337,6 +344,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -666,6 +680,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/accountability/index.html b/app/views/static/api/docs/object/accountability/index.html index 3f45b14..942853e 100644 --- a/app/views/static/api/docs/object/accountability/index.html +++ b/app/views/static/api/docs/object/accountability/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/amendment/index.html b/app/views/static/api/docs/object/amendment/index.html index 3d36419..a59c7eb 100644 --- a/app/views/static/api/docs/object/amendment/index.html +++ b/app/views/static/api/docs/object/amendment/index.html @@ -207,6 +207,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -263,6 +270,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -592,6 +606,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/answeroption/index.html b/app/views/static/api/docs/object/answeroption/index.html index 4b4f2bb..5a87801 100644 --- a/app/views/static/api/docs/object/answeroption/index.html +++ b/app/views/static/api/docs/object/answeroption/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/area/index.html b/app/views/static/api/docs/object/area/index.html index 4313b5e..51301ef 100644 --- a/app/views/static/api/docs/object/area/index.html +++ b/app/views/static/api/docs/object/area/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/areatype/index.html b/app/views/static/api/docs/object/areatype/index.html index 7e3e881..aac71a3 100644 --- a/app/views/static/api/docs/object/areatype/index.html +++ b/app/views/static/api/docs/object/areatype/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/assembliestype/index.html b/app/views/static/api/docs/object/assembliestype/index.html index 9916849..162ffc2 100644 --- a/app/views/static/api/docs/object/assembliestype/index.html +++ b/app/views/static/api/docs/object/assembliestype/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/assembly/index.html b/app/views/static/api/docs/object/assembly/index.html index c364f7e..64866a4 100644 --- a/app/views/static/api/docs/object/assembly/index.html +++ b/app/views/static/api/docs/object/assembly/index.html @@ -545,6 +545,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -601,6 +608,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -930,6 +944,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/assemblymember/index.html b/app/views/static/api/docs/object/assemblymember/index.html index 0c73952..bc03b9f 100644 --- a/app/views/static/api/docs/object/assemblymember/index.html +++ b/app/views/static/api/docs/object/assemblymember/index.html @@ -237,6 +237,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -293,6 +300,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -622,6 +636,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/attachment/index.html b/app/views/static/api/docs/object/attachment/index.html index d93d039..f86f75a 100644 --- a/app/views/static/api/docs/object/attachment/index.html +++ b/app/views/static/api/docs/object/attachment/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/blogs/index.html b/app/views/static/api/docs/object/blogs/index.html index 51b676f..fe73dd5 100644 --- a/app/views/static/api/docs/object/blogs/index.html +++ b/app/views/static/api/docs/object/blogs/index.html @@ -293,6 +293,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -349,6 +356,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -678,6 +692,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/budget/index.html b/app/views/static/api/docs/object/budget/index.html index 9abeb35..c348618 100644 --- a/app/views/static/api/docs/object/budget/index.html +++ b/app/views/static/api/docs/object/budget/index.html @@ -231,6 +231,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -287,6 +294,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -616,6 +630,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/budgetconnection/index.html b/app/views/static/api/docs/object/budgetconnection/index.html index 2184f1b..0bff047 100644 --- a/app/views/static/api/docs/object/budgetconnection/index.html +++ b/app/views/static/api/docs/object/budgetconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/budgetedge/index.html b/app/views/static/api/docs/object/budgetedge/index.html index 9dd74a8..07f6321 100644 --- a/app/views/static/api/docs/object/budgetedge/index.html +++ b/app/views/static/api/docs/object/budgetedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/budgets/index.html b/app/views/static/api/docs/object/budgets/index.html index c467f89..e5d0cc6 100644 --- a/app/views/static/api/docs/object/budgets/index.html +++ b/app/views/static/api/docs/object/budgets/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/category/index.html b/app/views/static/api/docs/object/category/index.html index e1d7cac..c17e8e5 100644 --- a/app/views/static/api/docs/object/category/index.html +++ b/app/views/static/api/docs/object/category/index.html @@ -188,6 +188,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -244,6 +251,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -573,6 +587,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/comment/index.html b/app/views/static/api/docs/object/comment/index.html index de96e47..ee9b738 100644 --- a/app/views/static/api/docs/object/comment/index.html +++ b/app/views/static/api/docs/object/comment/index.html @@ -324,6 +324,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -380,6 +387,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -709,6 +723,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/commentable/index.html b/app/views/static/api/docs/object/commentable/index.html index 09f6737..ff59174 100644 --- a/app/views/static/api/docs/object/commentable/index.html +++ b/app/views/static/api/docs/object/commentable/index.html @@ -252,6 +252,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -308,6 +315,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -637,6 +651,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/commentablemutation/index.html b/app/views/static/api/docs/object/commentablemutation/index.html index 52093fb..4d5b5cd 100644 --- a/app/views/static/api/docs/object/commentablemutation/index.html +++ b/app/views/static/api/docs/object/commentablemutation/index.html @@ -216,6 +216,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -272,6 +279,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -601,6 +615,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/commentmutation/index.html b/app/views/static/api/docs/object/commentmutation/index.html index 5ca73f0..6edf4b8 100644 --- a/app/views/static/api/docs/object/commentmutation/index.html +++ b/app/views/static/api/docs/object/commentmutation/index.html @@ -181,6 +181,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -237,6 +244,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -566,6 +580,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/component/index.html b/app/views/static/api/docs/object/component/index.html new file mode 100644 index 0000000..ee863c5 --- /dev/null +++ b/app/views/static/api/docs/object/component/index.html @@ -0,0 +1,1051 @@ +

    +Component

    +

    A base component with no particular specificities.

    +

    +Implements

    + +

    +Fields

    +
    + id (ID!) +
    +

    The Component's unique ID

    +
    +
    +
    + name (TranslatedField!) +
    +

    The name of this component.

    +
    +
    +
    + weight (Int!) +
    +

    The weight of the component

    +
    +
    +
    + participatorySpace (ParticipatorySpace!) +
    +

    The participatory space in which this component belongs to.

    +
    +
    + + + +
    + +
    diff --git a/app/views/static/api/docs/object/coordinates/index.html b/app/views/static/api/docs/object/coordinates/index.html index 6782da6..6735550 100644 --- a/app/views/static/api/docs/object/coordinates/index.html +++ b/app/views/static/api/docs/object/coordinates/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/debate/index.html b/app/views/static/api/docs/object/debate/index.html index bf7cec9..1841090 100644 --- a/app/views/static/api/docs/object/debate/index.html +++ b/app/views/static/api/docs/object/debate/index.html @@ -333,6 +333,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -389,6 +396,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -718,6 +732,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/debateconnection/index.html b/app/views/static/api/docs/object/debateconnection/index.html index 3f5307a..356950a 100644 --- a/app/views/static/api/docs/object/debateconnection/index.html +++ b/app/views/static/api/docs/object/debateconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/debateedge/index.html b/app/views/static/api/docs/object/debateedge/index.html index 93604eb..98cc044 100644 --- a/app/views/static/api/docs/object/debateedge/index.html +++ b/app/views/static/api/docs/object/debateedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/debates/index.html b/app/views/static/api/docs/object/debates/index.html index dcce680..671a815 100644 --- a/app/views/static/api/docs/object/debates/index.html +++ b/app/views/static/api/docs/object/debates/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/decidim/index.html b/app/views/static/api/docs/object/decidim/index.html index 4dac0f5..27128eb 100644 --- a/app/views/static/api/docs/object/decidim/index.html +++ b/app/views/static/api/docs/object/decidim/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/fingerprint/index.html b/app/views/static/api/docs/object/fingerprint/index.html index 1fb353c..3d6b037 100644 --- a/app/views/static/api/docs/object/fingerprint/index.html +++ b/app/views/static/api/docs/object/fingerprint/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/hashtagtype/index.html b/app/views/static/api/docs/object/hashtagtype/index.html index 22c0337..6ac6064 100644 --- a/app/views/static/api/docs/object/hashtagtype/index.html +++ b/app/views/static/api/docs/object/hashtagtype/index.html @@ -171,6 +171,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -227,6 +234,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -556,6 +570,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/index.html b/app/views/static/api/docs/object/index.html index db1d67a..6ebde8f 100644 --- a/app/views/static/api/docs/object/index.html +++ b/app/views/static/api/docs/object/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/localizedcustomfields/index.html b/app/views/static/api/docs/object/localizedcustomfields/index.html new file mode 100644 index 0000000..e222ffb --- /dev/null +++ b/app/views/static/api/docs/object/localizedcustomfields/index.html @@ -0,0 +1,1040 @@ +

    +LocalizedCustomFields

    +

    Represents a particular translation of a LocalizedCustomFieldsType

    +

    +Fields

    +
    + locale (String!) +
    +

    The standard locale of this translation.

    +
    +
    +
    + fields (JSON) +
    +

    The fields of this translation.

    +
    +
    +
    + machineTranslated (Boolean!) +
    +

    Whether this string is machine translated or not.

    +
    +
    + + + +
    + +
    diff --git a/app/views/static/api/docs/object/localizedstring/index.html b/app/views/static/api/docs/object/localizedstring/index.html index 9625f3e..cb69b7a 100644 --- a/app/views/static/api/docs/object/localizedstring/index.html +++ b/app/views/static/api/docs/object/localizedstring/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meeting/index.html b/app/views/static/api/docs/object/meeting/index.html index e99e45f..72603c7 100644 --- a/app/views/static/api/docs/object/meeting/index.html +++ b/app/views/static/api/docs/object/meeting/index.html @@ -481,6 +481,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -537,6 +544,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -866,6 +880,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetingagenda/index.html b/app/views/static/api/docs/object/meetingagenda/index.html index 0ffb050..df2b956 100644 --- a/app/views/static/api/docs/object/meetingagenda/index.html +++ b/app/views/static/api/docs/object/meetingagenda/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetingagendaitem/index.html b/app/views/static/api/docs/object/meetingagendaitem/index.html index 29ed89c..d539237 100644 --- a/app/views/static/api/docs/object/meetingagendaitem/index.html +++ b/app/views/static/api/docs/object/meetingagendaitem/index.html @@ -225,6 +225,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -281,6 +288,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -610,6 +624,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetingconnection/index.html b/app/views/static/api/docs/object/meetingconnection/index.html index 2bd7f6d..005f7fa 100644 --- a/app/views/static/api/docs/object/meetingconnection/index.html +++ b/app/views/static/api/docs/object/meetingconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetingedge/index.html b/app/views/static/api/docs/object/meetingedge/index.html index 506642c..7e58022 100644 --- a/app/views/static/api/docs/object/meetingedge/index.html +++ b/app/views/static/api/docs/object/meetingedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetings/index.html b/app/views/static/api/docs/object/meetings/index.html index d5fd911..ada05eb 100644 --- a/app/views/static/api/docs/object/meetings/index.html +++ b/app/views/static/api/docs/object/meetings/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/meetingservice/index.html b/app/views/static/api/docs/object/meetingservice/index.html index bda00bb..36b56fc 100644 --- a/app/views/static/api/docs/object/meetingservice/index.html +++ b/app/views/static/api/docs/object/meetingservice/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/metric/index.html b/app/views/static/api/docs/object/metric/index.html index 5b07dfb..b38723e 100644 --- a/app/views/static/api/docs/object/metric/index.html +++ b/app/views/static/api/docs/object/metric/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/metrichistory/index.html b/app/views/static/api/docs/object/metrichistory/index.html index b44b4cd..699ee1a 100644 --- a/app/views/static/api/docs/object/metrichistory/index.html +++ b/app/views/static/api/docs/object/metrichistory/index.html @@ -176,6 +176,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -232,6 +239,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -561,6 +575,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/organization/index.html b/app/views/static/api/docs/object/organization/index.html index 5b5542c..7a203d5 100644 --- a/app/views/static/api/docs/object/organization/index.html +++ b/app/views/static/api/docs/object/organization/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/page/index.html b/app/views/static/api/docs/object/page/index.html index d8974d6..fb01c4b 100644 --- a/app/views/static/api/docs/object/page/index.html +++ b/app/views/static/api/docs/object/page/index.html @@ -194,6 +194,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -250,6 +257,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -579,6 +593,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/pageconnection/index.html b/app/views/static/api/docs/object/pageconnection/index.html index d9daadc..f524c76 100644 --- a/app/views/static/api/docs/object/pageconnection/index.html +++ b/app/views/static/api/docs/object/pageconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/pageedge/index.html b/app/views/static/api/docs/object/pageedge/index.html index cb85414..c4cd415 100644 --- a/app/views/static/api/docs/object/pageedge/index.html +++ b/app/views/static/api/docs/object/pageedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/pageinfo/index.html b/app/views/static/api/docs/object/pageinfo/index.html index 2671bf4..95580d3 100644 --- a/app/views/static/api/docs/object/pageinfo/index.html +++ b/app/views/static/api/docs/object/pageinfo/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/pages/index.html b/app/views/static/api/docs/object/pages/index.html index 2cddc13..0b2fabf 100644 --- a/app/views/static/api/docs/object/pages/index.html +++ b/app/views/static/api/docs/object/pages/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryprocess/index.html b/app/views/static/api/docs/object/participatoryprocess/index.html index b11af7a..1aa4ea9 100644 --- a/app/views/static/api/docs/object/participatoryprocess/index.html +++ b/app/views/static/api/docs/object/participatoryprocess/index.html @@ -419,6 +419,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -475,6 +482,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -804,6 +818,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryprocessgroup/index.html b/app/views/static/api/docs/object/participatoryprocessgroup/index.html index 13b8ef1..9ec87e9 100644 --- a/app/views/static/api/docs/object/participatoryprocessgroup/index.html +++ b/app/views/static/api/docs/object/participatoryprocessgroup/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryprocessstep/index.html b/app/views/static/api/docs/object/participatoryprocessstep/index.html index 1fd8a08..bedfbda 100644 --- a/app/views/static/api/docs/object/participatoryprocessstep/index.html +++ b/app/views/static/api/docs/object/participatoryprocessstep/index.html @@ -225,6 +225,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -281,6 +288,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -610,6 +624,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryprocesstype/index.html b/app/views/static/api/docs/object/participatoryprocesstype/index.html index 0612170..3862f89 100644 --- a/app/views/static/api/docs/object/participatoryprocesstype/index.html +++ b/app/views/static/api/docs/object/participatoryprocesstype/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryspace/index.html b/app/views/static/api/docs/object/participatoryspace/index.html index 7915de9..1f06d98 100644 --- a/app/views/static/api/docs/object/participatoryspace/index.html +++ b/app/views/static/api/docs/object/participatoryspace/index.html @@ -234,6 +234,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -290,6 +297,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -619,6 +633,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryspacelink/index.html b/app/views/static/api/docs/object/participatoryspacelink/index.html index b504f7d..3e12abf 100644 --- a/app/views/static/api/docs/object/participatoryspacelink/index.html +++ b/app/views/static/api/docs/object/participatoryspacelink/index.html @@ -195,6 +195,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -251,6 +258,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -580,6 +594,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/participatoryspacemanifest/index.html b/app/views/static/api/docs/object/participatoryspacemanifest/index.html index 415a552..a4aba91 100644 --- a/app/views/static/api/docs/object/participatoryspacemanifest/index.html +++ b/app/views/static/api/docs/object/participatoryspacemanifest/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/post/index.html b/app/views/static/api/docs/object/post/index.html index 77e65d6..3cb59e6 100644 --- a/app/views/static/api/docs/object/post/index.html +++ b/app/views/static/api/docs/object/post/index.html @@ -323,6 +323,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -379,6 +386,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -708,6 +722,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/postconnection/index.html b/app/views/static/api/docs/object/postconnection/index.html index 391e1b9..562443c 100644 --- a/app/views/static/api/docs/object/postconnection/index.html +++ b/app/views/static/api/docs/object/postconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/postedge/index.html b/app/views/static/api/docs/object/postedge/index.html index f6eac1c..074a6c9 100644 --- a/app/views/static/api/docs/object/postedge/index.html +++ b/app/views/static/api/docs/object/postedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/project/index.html b/app/views/static/api/docs/object/project/index.html index 47e3616..9b5e82a 100644 --- a/app/views/static/api/docs/object/project/index.html +++ b/app/views/static/api/docs/object/project/index.html @@ -315,6 +315,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -371,6 +378,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -700,6 +714,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/proposal/index.html b/app/views/static/api/docs/object/proposal/index.html index b5b3d89..227fa08 100644 --- a/app/views/static/api/docs/object/proposal/index.html +++ b/app/views/static/api/docs/object/proposal/index.html @@ -125,6 +125,18 @@

    The total amount of votes the proposal has received

    +
    + bodyFields (TranslatedCustomFields) +
    +

    Custom fields for this proposal

    +
    +
    +
    + voteWeights (JSON) +
    +

    The corresponding weights count to the proposal votes

    +
    +
    createdAt (DateTime)
    @@ -447,6 +459,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -503,6 +522,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -832,6 +858,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/proposalconnection/index.html b/app/views/static/api/docs/object/proposalconnection/index.html index 073f87a..926d51d 100644 --- a/app/views/static/api/docs/object/proposalconnection/index.html +++ b/app/views/static/api/docs/object/proposalconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/proposaledge/index.html b/app/views/static/api/docs/object/proposaledge/index.html index adaf2d7..ef36e86 100644 --- a/app/views/static/api/docs/object/proposaledge/index.html +++ b/app/views/static/api/docs/object/proposaledge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/proposals/index.html b/app/views/static/api/docs/object/proposals/index.html index 921a415..e03d081 100644 --- a/app/views/static/api/docs/object/proposals/index.html +++ b/app/views/static/api/docs/object/proposals/index.html @@ -293,6 +293,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -349,6 +356,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -678,6 +692,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html b/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html index 00ee2e5..9dc0500 100644 --- a/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html +++ b/app/views/static/api/docs/object/quantifiabletranslatedfield/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/question/index.html b/app/views/static/api/docs/object/question/index.html index a5b1473..2f0259f 100644 --- a/app/views/static/api/docs/object/question/index.html +++ b/app/views/static/api/docs/object/question/index.html @@ -236,6 +236,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -292,6 +299,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -621,6 +635,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/questionnaire/index.html b/app/views/static/api/docs/object/questionnaire/index.html index fd59514..911e8cb 100644 --- a/app/views/static/api/docs/object/questionnaire/index.html +++ b/app/views/static/api/docs/object/questionnaire/index.html @@ -224,6 +224,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -280,6 +287,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -609,6 +623,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/result/index.html b/app/views/static/api/docs/object/result/index.html index ebd7b9c..78a7aa2 100644 --- a/app/views/static/api/docs/object/result/index.html +++ b/app/views/static/api/docs/object/result/index.html @@ -356,6 +356,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -412,6 +419,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -741,6 +755,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/resultconnection/index.html b/app/views/static/api/docs/object/resultconnection/index.html index 29b5127..f610003 100644 --- a/app/views/static/api/docs/object/resultconnection/index.html +++ b/app/views/static/api/docs/object/resultconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/resultedge/index.html b/app/views/static/api/docs/object/resultedge/index.html index 565cbdd..0bf31a1 100644 --- a/app/views/static/api/docs/object/resultedge/index.html +++ b/app/views/static/api/docs/object/resultedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/scope/index.html b/app/views/static/api/docs/object/scope/index.html index e7b711e..0181dd1 100644 --- a/app/views/static/api/docs/object/scope/index.html +++ b/app/views/static/api/docs/object/scope/index.html @@ -188,6 +188,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -244,6 +251,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -573,6 +587,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/session/index.html b/app/views/static/api/docs/object/session/index.html index 118c09e..99ccea8 100644 --- a/app/views/static/api/docs/object/session/index.html +++ b/app/views/static/api/docs/object/session/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/statistic/index.html b/app/views/static/api/docs/object/statistic/index.html index 54f46da..800f9dc 100644 --- a/app/views/static/api/docs/object/statistic/index.html +++ b/app/views/static/api/docs/object/statistic/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/status/index.html b/app/views/static/api/docs/object/status/index.html index 849525b..119bcc0 100644 --- a/app/views/static/api/docs/object/status/index.html +++ b/app/views/static/api/docs/object/status/index.html @@ -213,6 +213,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -269,6 +276,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -598,6 +612,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/survey/index.html b/app/views/static/api/docs/object/survey/index.html index 885dde6..e5cdc38 100644 --- a/app/views/static/api/docs/object/survey/index.html +++ b/app/views/static/api/docs/object/survey/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/surveyconnection/index.html b/app/views/static/api/docs/object/surveyconnection/index.html index f7fdf79..9d102e4 100644 --- a/app/views/static/api/docs/object/surveyconnection/index.html +++ b/app/views/static/api/docs/object/surveyconnection/index.html @@ -183,6 +183,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -239,6 +246,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -568,6 +582,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/surveyedge/index.html b/app/views/static/api/docs/object/surveyedge/index.html index 18abd29..c0f4cfa 100644 --- a/app/views/static/api/docs/object/surveyedge/index.html +++ b/app/views/static/api/docs/object/surveyedge/index.html @@ -177,6 +177,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -233,6 +240,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -562,6 +576,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/surveys/index.html b/app/views/static/api/docs/object/surveys/index.html index d24616f..3070c78 100644 --- a/app/views/static/api/docs/object/surveys/index.html +++ b/app/views/static/api/docs/object/surveys/index.html @@ -272,6 +272,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -328,6 +335,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -657,6 +671,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/timelineentry/index.html b/app/views/static/api/docs/object/timelineentry/index.html index 9d75c28..03f477d 100644 --- a/app/views/static/api/docs/object/timelineentry/index.html +++ b/app/views/static/api/docs/object/timelineentry/index.html @@ -207,6 +207,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -263,6 +270,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -592,6 +606,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/traceversion/index.html b/app/views/static/api/docs/object/traceversion/index.html index b6873f4..f9d9e1c 100644 --- a/app/views/static/api/docs/object/traceversion/index.html +++ b/app/views/static/api/docs/object/traceversion/index.html @@ -189,6 +189,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -245,6 +252,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -574,6 +588,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/translatedcustomfields/index.html b/app/views/static/api/docs/object/translatedcustomfields/index.html new file mode 100644 index 0000000..adaa888 --- /dev/null +++ b/app/views/static/api/docs/object/translatedcustomfields/index.html @@ -0,0 +1,1080 @@ +

    +TranslatedCustomFields

    +

    A translated field

    +

    +Fields

    +
    + locales ([String]) +
    +

    Lists all the locales in which this translation is available

    +
    +
    +
    + translations ([LocalizedCustomFields]!) +
    +

    All the localized custom fields for this translation.

    + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    locales + [String!] + +

    A list of locales to scope the translations to.

    +
    +
    +
    +
    + translation (JSON) +
    +

    Returns a single translation given a locale.

    + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    locale + String! + +

    A locale to search for

    +
    +
    +
    + + + +
    + +
    diff --git a/app/views/static/api/docs/object/translatedfield/index.html b/app/views/static/api/docs/object/translatedfield/index.html index 3cd87a3..b8d4e2b 100644 --- a/app/views/static/api/docs/object/translatedfield/index.html +++ b/app/views/static/api/docs/object/translatedfield/index.html @@ -223,6 +223,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -279,6 +286,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -608,6 +622,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/user/index.html b/app/views/static/api/docs/object/user/index.html index 042b419..972e147 100644 --- a/app/views/static/api/docs/object/user/index.html +++ b/app/views/static/api/docs/object/user/index.html @@ -230,6 +230,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -286,6 +293,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -615,6 +629,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/object/usergroup/index.html b/app/views/static/api/docs/object/usergroup/index.html index 1a8cda3..d0ad770 100644 --- a/app/views/static/api/docs/object/usergroup/index.html +++ b/app/views/static/api/docs/object/usergroup/index.html @@ -230,6 +230,13 @@

  • +
  • + + Component + +
  • + +
  • Coordinates @@ -286,6 +293,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -615,6 +629,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/operation/mutation/index.html b/app/views/static/api/docs/operation/mutation/index.html index 26c5cec..5ec0738 100644 --- a/app/views/static/api/docs/operation/mutation/index.html +++ b/app/views/static/api/docs/operation/mutation/index.html @@ -165,6 +165,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -221,6 +228,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -550,6 +564,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/operation/query/index.html b/app/views/static/api/docs/operation/query/index.html index 5303f3c..1ac6b67 100644 --- a/app/views/static/api/docs/operation/query/index.html +++ b/app/views/static/api/docs/operation/query/index.html @@ -257,15 +257,15 @@

    - participatoryProcessGroups ([ParticipatoryProcessGroup!]!) + assembliesTypes ([AssembliesType!]!)
    -

    Lists all participatory process groups

    +

    Lists all assemblies types

    - participatoryProcessGroup (ParticipatoryProcessGroup) + assembliesType (AssembliesType)
    -

    Finds a participatory process group

    +

    Finds an assemblies type group

    @@ -281,7 +281,7 @@

    ID!

    @@ -289,15 +289,44 @@

    - participatoryProcessTypes ([ParticipatoryProcessType!]!) + assemblies ([Assembly!])
    -

    List all participatory process types

    +

    Lists all assemblies

    +

    -

    The ID of the Participatory process group

    +

    The ID of the Assemblies type

    + + + + + + + + + + + + + + + + + + + +
    ArgumentTypeDescription
    filter + ParticipatoryProcessFilter + +

    This argument lets you filter the results

    +
    order + ParticipatoryProcessSort + +

    This argument lets you order the results

    +
    - participatoryProcessType (ParticipatoryProcessType) + assembly (Assembly)
    -

    Finds a participatory process type

    +

    Finds an assembly

    @@ -310,10 +339,10 @@

    @@ -373,15 +402,15 @@

    - assembliesTypes ([AssembliesType!]!) + participatoryProcessGroups ([ParticipatoryProcessGroup!]!)
    -

    Lists all assemblies types

    +

    Lists all participatory process groups

    - assembliesType (AssembliesType) + participatoryProcessGroup (ParticipatoryProcessGroup)
    -

    Finds an assemblies type group

    +

    Finds a participatory process group

    id - ID! + ID -

    The ID of the participatory process type

    +

    The ID of the participatory space

    @@ -397,7 +426,7 @@

    ID!

    @@ -405,44 +434,15 @@

    - assemblies ([Assembly!]) + participatoryProcessTypes ([ParticipatoryProcessType!]!)
    -

    Lists all assemblies

    -

    -

    The ID of the Assemblies type

    +

    The ID of the Participatory process group

    - - - - - - - - - - - - - - - - - - - -
    ArgumentTypeDescription
    filter - ParticipatoryProcessFilter - -

    This argument lets you filter the results

    -
    order - ParticipatoryProcessSort - -

    This argument lets you order the results

    -
    +

    List all participatory process types

    - assembly (Assembly) + participatoryProcessType (ParticipatoryProcessType)
    -

    Finds an assembly

    +

    Finds a participatory process type

    @@ -455,10 +455,10 @@

    @@ -627,6 +627,13 @@

    +
  • + + Component + +
  • + +
  • Coordinates @@ -683,6 +690,13 @@

  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -1012,6 +1026,13 @@

  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/boolean/index.html b/app/views/static/api/docs/scalar/boolean/index.html index 9008e17..af1d3e1 100644 --- a/app/views/static/api/docs/scalar/boolean/index.html +++ b/app/views/static/api/docs/scalar/boolean/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/date/index.html b/app/views/static/api/docs/scalar/date/index.html index 94b6b33..bffb575 100644 --- a/app/views/static/api/docs/scalar/date/index.html +++ b/app/views/static/api/docs/scalar/date/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/datetime/index.html b/app/views/static/api/docs/scalar/datetime/index.html index c5d2d75..0350a70 100644 --- a/app/views/static/api/docs/scalar/datetime/index.html +++ b/app/views/static/api/docs/scalar/datetime/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/float/index.html b/app/views/static/api/docs/scalar/float/index.html index 01061db..c33214d 100644 --- a/app/views/static/api/docs/scalar/float/index.html +++ b/app/views/static/api/docs/scalar/float/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/id/index.html b/app/views/static/api/docs/scalar/id/index.html index b3df030..742e2de 100644 --- a/app/views/static/api/docs/scalar/id/index.html +++ b/app/views/static/api/docs/scalar/id/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/index.html b/app/views/static/api/docs/scalar/index.html index 3839ee0..391206a 100644 --- a/app/views/static/api/docs/scalar/index.html +++ b/app/views/static/api/docs/scalar/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/int/index.html b/app/views/static/api/docs/scalar/int/index.html index ea74307..9c675dc 100644 --- a/app/views/static/api/docs/scalar/int/index.html +++ b/app/views/static/api/docs/scalar/int/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/json/index.html b/app/views/static/api/docs/scalar/json/index.html index cf144a5..a1f89eb 100644 --- a/app/views/static/api/docs/scalar/json/index.html +++ b/app/views/static/api/docs/scalar/json/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/scalar/string/index.html b/app/views/static/api/docs/scalar/string/index.html index aa8a2e7..7bd7bf5 100644 --- a/app/views/static/api/docs/scalar/string/index.html +++ b/app/views/static/api/docs/scalar/string/index.html @@ -163,6 +163,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -219,6 +226,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -548,6 +562,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/app/views/static/api/docs/union/index.html b/app/views/static/api/docs/union/index.html index b510a09..ae8fe18 100644 --- a/app/views/static/api/docs/union/index.html +++ b/app/views/static/api/docs/union/index.html @@ -164,6 +164,13 @@
  • +
  • + + Component + +
  • + +
  • Coordinates @@ -220,6 +227,13 @@
  • +
  • + + LocalizedCustomFields + +
  • + +
  • LocalizedString @@ -549,6 +563,13 @@
  • +
  • + + TranslatedCustomFields + +
  • + +
  • TranslatedField diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 8c9fd16..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,85 +0,0 @@ -// This file is automatically generated. -// Do not edit this file, it will be overwritten -// -// If you want to modify it, follow instructions from -// https://docs.decidim.org/en/develop/customize/styles -// - -const { inherit, current, transparent, white } = require("tailwindcss/colors") - -const withOpacity = - (variable) => - ({ opacityValue }) => - opacityValue === undefined - ? `rgb(var(${variable}))` - : `rgb(var(${variable}) / ${opacityValue})`; - -module.exports = { - // This content is generated automatically by decidim:webpacker:install task, it - // should not be updated manually. - // The array must contain all the decidim modules active in the application - content: ['/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-core','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-comments','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-accountability','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-admin','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-api','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-assemblies','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-blogs','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-budgets','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-debates','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-forms','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-generators','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-meetings','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-pages','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-participatory_processes','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-proposals','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-sortitions','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-surveys','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-system','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-verifications','/Users/quentinchampenois/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bundler/gems/decidim-af8d33194b3b/decidim-dev','.'].flatMap(directory => [ - `${directory}/app/views/**/*.html.erb`, - `${directory}/app/cells/**/*.{rb,erb}`, - `${directory}/app/helpers/**/*.rb`, - `${directory}/app/packs/**/*.js`, - `${directory}/lib/**/*.rb` - ]), - // Comment out the next line to disable purging the tailwind styles - // safelist: [{ pattern: /.*/ }], - theme: { - colors: { - inherit, - current, - transparent, - white, - primary: withOpacity("--primary-rgb"), - secondary: withOpacity("--secondary-rgb"), - tertiary: withOpacity("--tertiary-rgb"), - success: "#28A745", - alert: "#ED1C24", - warning: "#FFB703", - black: "#020203", - gray: { - DEFAULT: "#6B7280CC", // 80% opacity - 2: "#3E4C5C", - 3: "#E1E5EF", - 4: "#242424", - 5: "#F6F8FA" - }, - background: { - DEFAULT: "#F3F4F7", - 2: "#FAFBFC", - 3: "#EFEFEF", - 4: "#E4EEFF99" // 60% opacity - } - }, - container: { - center: true, - padding: { - DEFAULT: "1rem", - lg: "4rem" - } - }, - fontFamily: { - sans: ["Source Sans Pro", "ui-sans-serif", "system-ui", "sans-serif"] - }, - fontSize: { - xs: ["13px", "16px"], - sm: ["14px", "18px"], - md: ["16px", "20px"], - lg: ["18px", "23px"], - xl: ["20px", "25px"], - "2xl": ["24px", "30px"], - "3xl": ["32px", "40px"], - "4xl": ["36px", "45px"], - "5xl": ["48px", "60px"] - }, - extend: { - transitionProperty: { - 'top': 'top', - } - } - }, - plugins: [require("@tailwindcss/typography")] -} From 23f2755764d2e13197b990243ec04f25b5c7caf0 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Wed, 11 Feb 2026 12:16:42 +0100 Subject: [PATCH 18/18] update commit number in gemfile --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index f14b7eb..900ed8d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: https://github.com/OpenSourcePolitics/decidim-module-decidim_awesome.git - revision: 5148029a3d2e25873ce86c48448bc862ef283677 + revision: 002f1c933b05ed4d93b7c0dd68b4a476c8cb1d4d branch: fix/update_packages_dependancies specs: decidim-decidim_awesome (0.12.0)
  • id - ID + ID! -

    The ID of the participatory space

    +

    The ID of the participatory process type