From c5ea0d1e56e1652f498ab4008438d2fd0ba1d583 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:29:45 +0200 Subject: [PATCH 01/14] delete files because of namespacing --- .../application_helper.rb | 10 ------- .../ephemeral_authorization_handler/admin.rb | 10 ------- .../admin_engine.rb | 27 ----------------- .../ephemeral_authorization_handler/engine.rb | 29 ------------------- 4 files changed, 76 deletions(-) delete mode 100644 app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb delete mode 100644 lib/decidim/ephemeral_authorization_handler/admin.rb delete mode 100644 lib/decidim/ephemeral_authorization_handler/admin_engine.rb delete mode 100644 lib/decidim/ephemeral_authorization_handler/engine.rb diff --git a/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb b/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb deleted file mode 100644 index e339557..0000000 --- a/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -module Decidim - module EphemeralAuthorizationHandler - # Custom helpers, scoped to the ephemeral_authorization_handler engine. - # - module ApplicationHelper - end - end -end diff --git a/lib/decidim/ephemeral_authorization_handler/admin.rb b/lib/decidim/ephemeral_authorization_handler/admin.rb deleted file mode 100644 index 430862a..0000000 --- a/lib/decidim/ephemeral_authorization_handler/admin.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -module Decidim - module EphemeralAuthorizationHandler - # This module contains all the domain logic associated to Decidim's EphemeralAuthorizationHandler - # component admin panel. - module Admin - end - end -end diff --git a/lib/decidim/ephemeral_authorization_handler/admin_engine.rb b/lib/decidim/ephemeral_authorization_handler/admin_engine.rb deleted file mode 100644 index 0863a9d..0000000 --- a/lib/decidim/ephemeral_authorization_handler/admin_engine.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -module Decidim - module EphemeralAuthorizationHandler - # This is the engine that runs on the public interface of `EphemeralAuthorizationHandler`. - class AdminEngine < ::Rails::Engine - isolate_namespace Decidim::EphemeralAuthorizationHandler::Admin - - paths["db/migrate"] = nil - paths["lib/tasks"] = nil - - routes do - # Add admin engine routes here - # resources :ephemeral_authorization_handler do - # collection do - # resources :exports, only: [:create] - # end - # end - # root to: "ephemeral_authorization_handler#index" - end - - def load_seed - nil - end - end - end -end diff --git a/lib/decidim/ephemeral_authorization_handler/engine.rb b/lib/decidim/ephemeral_authorization_handler/engine.rb deleted file mode 100644 index 4ac7430..0000000 --- a/lib/decidim/ephemeral_authorization_handler/engine.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require "rails" -require "decidim/core" - -module Decidim - module EphemeralAuthorizationHandler - # This is the engine that runs on the public interface of ephemeral_authorization_handler. - class Engine < ::Rails::Engine - isolate_namespace Decidim::EphemeralAuthorizationHandler - - routes do - # Add engine routes here - # resources :ephemeral_authorization_handler - # root to: "ephemeral_authorization_handler#index" - end - - initializer "EphemeralAuthorizationHandler.shakapacker.assets_path" do - Decidim.register_assets_path File.expand_path("app/packs", root) - end - - initializer "EphemeralAuthorizationHandler.data_migrate", after: "decidim_core.data_migrate" do - DataMigrate.configure do |config| - config.data_migrations_path << root.join("db/data").to_s - end - end - end - end -end From 9f7243a0abf26f1f2ba80a3315601510a77887bd Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:31:57 +0200 Subject: [PATCH 02/14] feat: recreate deleted files namespaced in verification --- .../verification/application_helper.rb | 42 +++++++++++++++++++ .../verification/admin.rb | 12 ++++++ .../verification/admin_engine.rb | 29 +++++++++++++ .../verification/engine.rb | 38 +++++++++++++++++ .../verification/workflow.rb | 10 +++++ 5 files changed, 131 insertions(+) create mode 100644 app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb create mode 100644 lib/decidim/ephemeral_authorization_handler/verification/admin.rb create mode 100644 lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb create mode 100644 lib/decidim/ephemeral_authorization_handler/verification/engine.rb create mode 100644 lib/decidim/ephemeral_authorization_handler/verification/workflow.rb diff --git a/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb b/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb new file mode 100644 index 0000000..49697ae --- /dev/null +++ b/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + # Custom helpers, scoped to the ephemeral_authorization_handler engine. + # + module ApplicationHelper + def phone_country_options(selected = nil) + options_for_select(sorted_countries, selected) + end + + def sorted_countries + unsorted = ISO3166::Country.all.map do |c| + next if Decidim::EphemeralAuthorizationHandler.default_countries&.include?(c.alpha2) + + generate_data(c) + end + unshift_defaults(unsorted) + end + + private + + def generate_data(country) + [ + "#{country.iso_short_name} (+#{country.country_code})", + country.alpha2, + { data: { flag_image: image_pack_path("media/images/#{country.alpha2.downcase}.svg") } } + ] + end + + def unshift_defaults(unsorted) + Decidim::EphemeralAuthorizationHandler.default_countries&.reverse&.each do |alph2| + country = ISO3166::Country.find_country_by_alpha2(alph2) + unsorted.unshift(generate_data(country)) + end + unsorted + end + end + end + end +end diff --git a/lib/decidim/ephemeral_authorization_handler/verification/admin.rb b/lib/decidim/ephemeral_authorization_handler/verification/admin.rb new file mode 100644 index 0000000..f4c1e55 --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/verification/admin.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + # This module contains all the domain logic associated to Decidim's EphemeralAuthorizationHandler + # component admin panel. + module Admin + end + end + end +end diff --git a/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb b/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb new file mode 100644 index 0000000..e0956b2 --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + # This is the engine that runs on the public interface of `EphemeralAuthorizationHandler`. + class AdminEngine < ::Rails::Engine + isolate_namespace Decidim::EphemeralAuthorizationHandler::Verification::Admin + + paths["db/migrate"] = nil + paths["lib/tasks"] = nil + + # routes do + # Add admin engine routes here + # resources :ephemeral_authorization_handler do + # collection do + # resources :exports, only: [:create] + # end + # end + # root to: "ephemeral_authorization_handler#index" + # end + + def load_seed + nil + end + end + end + end +end diff --git a/lib/decidim/ephemeral_authorization_handler/verification/engine.rb b/lib/decidim/ephemeral_authorization_handler/verification/engine.rb new file mode 100644 index 0000000..19da369 --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/verification/engine.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require "rails" +require "decidim/core" +require "countries" + +module Decidim + module EphemeralAuthorizationHandler + module Verification + # This is the engine that runs on the public interface of ephemeral_authorization_handler. + class Engine < ::Rails::Engine + isolate_namespace Decidim::EphemeralAuthorizationHandler::Verification + + routes do + resource :authorizations, only: [:new, :edit], as: :authorization do + get :sms, to: "authorizations#sms" + get :verify_sms_code, to: "authorizations#verify_sms_code" + post :verify, to: "authorizations#verify" + post :verify_submitted_code, to: "authorizations#verify_submitted_code" + get :renew, on: :collection + end + + root to: "authorizations#new" + end + + initializer "EphemeralAuthorizationHandler.shakapacker.assets_path" do + Decidim.register_assets_path File.expand_path("app/packs", root) + end + + initializer "EphemeralAuthorizationHandler.data_migrate", after: "decidim_core.data_migrate" do + DataMigrate.configure do |config| + config.data_migrations_path << root.join("db/data").to_s + end + end + end + end + end +end diff --git a/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb b/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb new file mode 100644 index 0000000..773c939 --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +Decidim::Verifications.register_workflow(:ephemeral_authorization_handler) do |workflow| + workflow.ephemeral = true + workflow.engine = Decidim::EphemeralAuthorizationHandler::Verification::Engine + workflow.admin_engine = Decidim::EphemeralAuthorizationHandler::Verification::AdminEngine + workflow.expires_in = 1.month + workflow.renewable = true + workflow.time_between_renewals = 1.day +end From fa0362aab69de7d5e8a92d6050deba280e27d468 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:32:52 +0200 Subject: [PATCH 03/14] feat: update gems --- Gemfile | 2 +- Gemfile.lock | 5 +++++ decidim-ephemeral_authorization_handler.gemspec | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index babeaed..0a603c4 100644 --- a/Gemfile +++ b/Gemfile @@ -7,8 +7,8 @@ ruby RUBY_VERSION gem "decidim", "~> 0.31.2" gem "decidim-ephemeral_authorization_handler", path: "." -gem "puma", ">= 6.3.1" gem "bootsnap", "~> 1.4" +gem "puma", ">= 6.3.1" group :development, :test do gem "byebug", "~> 11.0", platform: :mri diff --git a/Gemfile.lock b/Gemfile.lock index d8c952c..f75f1cc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,6 +2,7 @@ PATH remote: . specs: decidim-ephemeral_authorization_handler (1.0.0) + countries (~> 5.1, >= 5.1.2) decidim-core (~> 0.31) GEM @@ -140,6 +141,8 @@ GEM commonmarker (0.23.12) concurrent-ruby (1.3.6) connection_pool (2.5.5) + countries (5.7.2) + unaccent (~> 0.3) crack (1.0.1) bigdecimal rexml @@ -506,6 +509,7 @@ GEM rails (>= 3.2.0) io-console (0.8.2) irb (1.17.0) + nokogiri (~> 1.11) pp (>= 0.6.0) prism (>= 1.3.0) rdoc (>= 4.0.0) @@ -906,6 +910,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) + unaccent (0.4.0) unicode-display_width (3.2.0) unicode-emoji (~> 4.1) unicode-emoji (4.2.0) diff --git a/decidim-ephemeral_authorization_handler.gemspec b/decidim-ephemeral_authorization_handler.gemspec index 24aa359..8f5b514 100644 --- a/decidim-ephemeral_authorization_handler.gemspec +++ b/decidim-ephemeral_authorization_handler.gemspec @@ -30,5 +30,6 @@ Gem::Specification.new do |s| end end + s.add_dependency "countries", "~> 5.1", ">= 5.1.2" s.add_dependency "decidim-core", Decidim::EphemeralAuthorizationHandler.decidim_version end From 688312b1938de71ac75f892752beee93a347052a Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:34:07 +0200 Subject: [PATCH 04/14] feat: update controllers and concerns --- ...ephemeral_authorization_handler_concern.rb | 23 +++ .../verification/authorizations_controller.rb | 158 ++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb create mode 100644 app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb diff --git a/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb b/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb new file mode 100644 index 0000000..29472ca --- /dev/null +++ b/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + module EphemeralAuthorizationHandlerConcern + extend ActiveSupport::Concern + + included do + layout "decidim/application" + + def init_sessions!(options = {}) + session[:auth_attempt] = options + end + + def auth_session + (session[:auth_attempt].presence || {}).with_indifferent_access + end + end + end + end + end +end diff --git a/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb b/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb new file mode 100644 index 0000000..63e0167 --- /dev/null +++ b/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb @@ -0,0 +1,158 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + class AuthorizationsController < ::Decidim::ApplicationController + include FormFactory + include EphemeralAuthorizationHandlerConcern + include Decidim::Verifications::Renewable + + helper Decidim::EphemeralAuthorizationHandler::Verification::ApplicationHelper + + def new + return redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path if user_signed_in? + + action = current_user.extended_data.dig("onboarding", "action") + if requested_component.permissions[action]["authorization_handlers"].keys.include?("ephemeral_authorization_handler") + redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path + else + redirect_to decidim_verifications.onboarding_pending_authorizations_path + end + end + + def renew + redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path + end + + def sms + @form = form(Decidim::EphemeralAuthorizationHandler::Verification::SmsCodeForm).instance + end + + def verify_sms_code + @form = form(::Decidim::EphemeralAuthorizationHandler::Verification::VerificationCodeForm).instance + end + + def verify + form = form(Decidim::EphemeralAuthorizationHandler::Verification::SmsCodeForm).from_params(params) + + SendSmsVerification.call(form, current_user) do + on(:ok) do |result, expires_at, formatted_phone_number| + init_sessions!({ code: result, expires_at: expires_at, formatted_phone_number:, phone_number: params["sms_code"]["phone_number"], + phone_country: params["sms_code"]["phone_country"], strategy: :sms }) + flash[:notice] = I18n.t("success", scope: "decidim.ephemeral_authorization_handler.sms", phone_number: phone_number) + redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path + end + + on(:invalid) do |_error_code| + flash.now[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.sms") + redirect_to decidim_ephemeral_authorization_handler.root_path + end + end + end + + def edit; end + + def verify_submitted_code + return redirect_to decidim_ephemeral_authorization_handler.new_authorization_path if auth_session.blank? + + if auth_session[:code] == params[:verification_code][:verification] + # if there is a duplicated authorization associated + # to an ephemeral user and the current user is also ephemeral + # the session is transferred to the user with the existing authorization + if transferable_user? + handler.user = authorization.user + Authorization.create_or_update_from(handler) + handler.user.update(last_sign_in_at: Time.current, deleted_at: nil) + sign_out(current_user) + sign_in(handler.user) + redirect_to handler.user.extended_data.dig("onboarding", "redirect_path") + elsif transferable_handler? + # if there is an existing authorization that can be transferred + handler.user = current_user + transfer = proceed_transfer(authorization, handler) + handle_transfer(transfer) + else + # create Authorization + new_authorization = Decidim::Authorization.find_or_initialize_by( + user: current_user, + name: "ephemeral_authorization_handler" + ) + new_authorization.attributes = { + granted_at: Time.current, + unique_id: auth_session[:formatted_phone_number], + metadata: { phone_number: auth_session[:formatted_phone_number] }, + verification_metadata: {}, + verification_attachment: nil + } + new_authorization.save! + init_sessions! + flash[:notice] = I18n.t("success", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code") + # redirect for ephemeral user or signed_in user + redirect_to current_user.extended_data.dig("onboarding", "redirect_path") || decidim_verifications.authorizations_path + end + else + # invalid code + flash[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code") + redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path + end + end + + def transferable_user? + authorization.present? && [authorization.user, current_user].all?(&:ephemeral?) + end + + def transferable_handler? + authorization.present? && (authorization.user.deleted? || authorization.user.ephemeral?) + end + + def proceed_transfer(authorization, handler) + authorization.transfer!(handler) + rescue Decidim::AuthorizationTransfer::DisabledError + Decidim::Verifications::AuthorizeUser.register_conflict + redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path + end + + def handle_transfer(transfer) + if transfer + message = t("authorizations.create.success", scope: "decidim.verifications") + if transfer.records.any? + flash[:html_safe] = true + message = <<~HTML +

#{CGI.escapeHTML(message)}

+

#{CGI.escapeHTML(t("authorizations.create.transferred", scope: "decidim.verifications"))}

+ #{transfer.presenter.records_list_html} + HTML + end + + flash[:notice] = message + redirect_to transfer.user.extended_data["onboarding"]["redirect_path"] + else + flash[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code") + redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path + end + end + + def authorization + Decidim::Authorization.find_by( + user: Decidim::User.where.not(id: current_user.id).where(organization: current_user.organization), + name: "ephemeral_authorization_handler", + unique_id: auth_session[:formatted_phone_number] + ) + end + + private + + def handler + @handler ||= ::EphemeralAuthorizationHandler.new(phone_number: auth_session[:phone_number], phone_country: auth_session[:phone_country]) + end + + def requested_component + path = current_user.extended_data.dig("onboarding", "redirect_path") + id = URI.parse(path).path.match(%r{/f/(\d+)/})&.captures&.first + Decidim::Component.find(id) + end + end + end + end +end From 2d6d08ace1a3cf16c87716fa7ca7e49a3fd2c467 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:34:27 +0200 Subject: [PATCH 05/14] feat: add commands --- .../verification/base_verification.rb | 38 ++++++++++++ .../verification/send_sms_verification.rb | 59 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb create mode 100644 app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb diff --git a/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb b/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb new file mode 100644 index 0000000..77a7da2 --- /dev/null +++ b/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + class BaseVerification < Decidim::Command + def initialize(user) + @user = user + end + + protected + + def verification_code + @verification_code ||= generate_code + end + + def generate_code + code = SecureRandom.random_number(10**auth_code_length).to_s + add_zeros(code) + end + + def auth_code_length + ::Decidim::EphemeralAuthorizationHandler.auth_code_length + end + + def add_zeros(code) + return code if code.length == auth_code_length + + ("0" * (auth_code_length - code.length)) + code + end + + def expires_at + @expires_at ||= Time.zone.now + Decidim::EphemeralAuthorizationHandler.code_ttl + end + end + end + end +end diff --git a/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb b/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb new file mode 100644 index 0000000..0c5baad --- /dev/null +++ b/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + class SendSmsVerification < BaseVerification + def initialize(form, user) + @form = form + @user = user + end + + def call + result = send_sms_verification! + + if result + broadcast(:ok, verification_code, expires_at, phone_number) + else + broadcast(:invalid) + end + end + + private + + attr_reader :form, :user + + delegate :current_organization, to: :form + + def send_sms_verification! + gateway.deliver_code + + gateway.code + rescue StandardError => e + Rails.logger.error e.message + + false + end + + def gateway + @gateway ||= + if Decidim.config.sms_gateway_service == "Decidim::Sms::Twilio::Gateway" + Decidim.config.sms_gateway_service.constantize.new(phone_number, verification_code, organization: current_organization) + elsif Decidim.config.sms_gateway_service.nil? + Decidim::Verifications::Sms::ExampleGateway.new(phone_number, verification_code) + else + Decidim.config.sms_gateway_service.constantize.new(phone_number, verification_code) + end + end + + def phone_with_country_code(country_code, phone_number) + PhoneNumberFormatter.new(phone_number:, iso_country_code: country_code).format + end + + def phone_number + @phone_number ||= phone_with_country_code(form.phone_country, form.phone_number) + end + end + end + end +end From 9b59c76e15eb8e1de993ca1a136c555482a9d5de Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:35:05 +0200 Subject: [PATCH 06/14] feat: add forms --- .../verification/sms_code_form.rb | 15 +++++++++++++++ .../verification/verification_code_form.rb | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb create mode 100644 app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb diff --git a/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb b/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb new file mode 100644 index 0000000..bbe3c2b --- /dev/null +++ b/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + class SmsCodeForm < Form + attribute :phone_number, Integer + attribute :phone_country, String + + validates :phone_country, presence: true + validates :phone_number, numericality: { greater_than: 0 }, presence: true + end + end + end +end diff --git a/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb b/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb new file mode 100644 index 0000000..107ece5 --- /dev/null +++ b/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + module Verification + class VerificationCodeForm < Form + attribute :verification, String + attribute :current_locale, String + attribute :organization, Decidim::Organization + + validates :verification, presence: true + end + end + end +end From 8f6d8d1ff37b6fee9acbe19a8bfaec3503300a3e Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:35:26 +0200 Subject: [PATCH 07/14] feat: add services --- .../ephemeral_authorization_handler.rb | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/services/ephemeral_authorization_handler.rb diff --git a/app/services/ephemeral_authorization_handler.rb b/app/services/ephemeral_authorization_handler.rb new file mode 100644 index 0000000..1f8a2fe --- /dev/null +++ b/app/services/ephemeral_authorization_handler.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class EphemeralAuthorizationHandler < Decidim::AuthorizationHandler + # Define the attributes you need for this authorization handler. Attributes + # are defined using Decidim::AttributeObject + attribute :phone_number, Integer + attribute :phone_country, String + + validates :phone_country, presence: true + validates :phone_number, numericality: { greater_than: 0 }, presence: true + + # If you need to store any of the defined attributes in the authorization you + # can do it here. + # + # You must return a Hash that will be serialized to the authorization when + # it is created, and available though authorization.metadata + def metadata + super.merge(phone_number:, phone_country:) + end + + # If set, enforces the handler to validate the uniqueness of the field + def unique_id + return nil if phone_number.blank? + + Decidim::EphemeralAuthorizationHandler::PhoneNumberFormatter.new(phone_number:, iso_country_code: phone_country).format + end + + def self.ephemeral? + true + end +end From d190f2649d9d75beebd1adc34ce68212ac52d91a Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:35:58 +0200 Subject: [PATCH 08/14] feat: add views --- .../verification/authorizations/sms.html.erb | 28 ++++++++++++++ .../authorizations/verify_sms_code.html.erb | 38 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb create mode 100644 app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb diff --git a/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb new file mode 100644 index 0000000..e359ffe --- /dev/null +++ b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb @@ -0,0 +1,28 @@ +
+
+

<%= t(".welcome", organization: translated_attribute(current_organization.name)).html_safe %>

+
+
+
+
+ <%= decidim_form_for(@form, url: verify_authorization_path, method: :post, class: "block") do |form| %> +
+
+ <%= form.select :phone_country, phone_country_options(form.object.phone_country), { id: "omniauth_country", include_blank: true }, class: "country-select" %> +
+
+ <%= form.number_field :phone_number, class: "w-full" %> +
+
+
+
+ <%= form.submit t(".submit"), class:"button button__sm md:button__lg button__secondary w-40" %> +
+
+ <% end %> +
+
+
+
+<%= append_javascript_pack_tag "decidim_ephemeral_authorization_handler" %> +<%= append_javascript_pack_tag "decidim_select_country" %> diff --git a/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb new file mode 100644 index 0000000..f33c8e4 --- /dev/null +++ b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb @@ -0,0 +1,38 @@ +
+
+

<%= t(".welcome", organization: translated_attribute(current_organization.name)).html_safe %>

+
+
+ +
+
+

<%= t(".enter_code") %>

+ + <%= decidim_form_for(@form, url: verify_submitted_code_authorization_path, method: :post, class: "form-defaults") do |form| %> +
+
+ <% Decidim::EphemeralAuthorizationHandler.auth_code_length.times do |ind| %> +
+ " autocomplete="off" aria-label="<%= t(".inputs", count: ind + 1) %>"> +
+ <% end %> +
+
+ + <%= form.hidden_field :verification %> +
+ <%= form.submit t(".submit"), class:"button button__sm md:button__lg button__secondary w-40" %> +
+
+ <% end %> +

+ <%= t(".have_not_received") %> + <%= link_to t(".resend_code"), sms_authorization_path %> +

+
+
+
+
+<%= append_javascript_pack_tag "decidim_ephemeral_authorization_handler" %> From a08497b9e945997768f32b2c9e54e26a9a7c9146 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:36:50 +0200 Subject: [PATCH 09/14] feat: add and update files in lib --- .../ephemeral_authorization_handler.rb | 23 +++++++++++++--- .../phone_number_formatter.rb | 27 +++++++++++++++++++ .../verification.rb | 6 +++++ 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb create mode 100644 lib/decidim/ephemeral_authorization_handler/verification.rb diff --git a/lib/decidim/ephemeral_authorization_handler.rb b/lib/decidim/ephemeral_authorization_handler.rb index 757a8f6..d548c27 100644 --- a/lib/decidim/ephemeral_authorization_handler.rb +++ b/lib/decidim/ephemeral_authorization_handler.rb @@ -1,12 +1,29 @@ # frozen_string_literal: true -require "decidim/ephemeral_authorization_handler/admin" -require "decidim/ephemeral_authorization_handler/engine" -require "decidim/ephemeral_authorization_handler/admin_engine" +require_relative "ephemeral_authorization_handler/verification" +require_relative "ephemeral_authorization_handler/version" module Decidim # This namespace holds the logic of the `EphemeralAuthorizationHandler` component. This component # allows users to create ephemeral_authorization_handler in a participatory space. module EphemeralAuthorizationHandler + include ActiveSupport::Configurable + + autoload :PhoneNumberFormatter, "decidim/ephemeral_authorization_handler/phone_number_formatter" + + # Default configuration digits to generate the auth code. + config_accessor :auth_code_length do + 4 + end + + # The country or countries to be selected in country selection + # during sms verification/authentication. The default is being set to nil + config_accessor :default_countries do + nil + end + + config_accessor :code_ttl do + 5.minutes + end end end diff --git a/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb b/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb new file mode 100644 index 0000000..a523877 --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Decidim + module EphemeralAuthorizationHandler + class PhoneNumberFormatter + def initialize(phone_number:, iso_country_code:) + @phone_number = phone_number + @iso_country_code = iso_country_code + end + + def format + "#{phone_country_code}#{phone_number}" + end + + def phone_country_code + country = ISO3166::Country.find_country_by_alpha2(iso_country_code) + return nil unless country + + "+#{country.country_code}" + end + + private + + attr_reader :phone_number, :iso_country_code + end + end +end diff --git a/lib/decidim/ephemeral_authorization_handler/verification.rb b/lib/decidim/ephemeral_authorization_handler/verification.rb new file mode 100644 index 0000000..48c1b2d --- /dev/null +++ b/lib/decidim/ephemeral_authorization_handler/verification.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +require_relative "verification/admin" +require_relative "verification/admin_engine" +require_relative "verification/engine" +require_relative "verification/workflow" From 3500586b074009d5ccc82366a1a6c21f382c9e69 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:40:46 +0200 Subject: [PATCH 10/14] feat: add and update files linked to style and js --- ...decidim_ephemeral_authorization_handler.js | 2 + .../entrypoints/decidim_select_country.js | 22 + .../flags/ac.svg | 76 + .../flags/ad.svg | 150 + .../flags/ae.svg | 6 + .../flags/af.svg | 81 + .../flags/ag.svg | 14 + .../flags/ai.svg | 758 ++ .../flags/al.svg | 5 + .../flags/am.svg | 5 + .../flags/ao.svg | 13 + .../flags/aq.svg | 5 + .../flags/ar.svg | 32 + .../flags/as.svg | 72 + .../flags/at.svg | 6 + .../flags/au.svg | 8 + .../flags/aw.svg | 186 + .../flags/ax.svg | 18 + .../flags/az.svg | 8 + .../flags/ba.svg | 12 + .../flags/bb.svg | 6 + .../flags/bd.svg | 4 + .../flags/be.svg | 7 + .../flags/bf.svg | 7 + .../flags/bg.svg | 7 + .../flags/bh.svg | 4 + .../flags/bi.svg | 15 + .../flags/bj.svg | 14 + .../flags/bl.svg | 7 + .../flags/bm.svg | 97 + .../flags/bn.svg | 36 + .../flags/bo.svg | 676 ++ .../flags/bq.svg | 5 + .../flags/br.svg | 45 + .../flags/bs.svg | 13 + .../flags/bt.svg | 89 + .../flags/bv.svg | 13 + .../flags/bw.svg | 7 + .../flags/by.svg | 20 + .../flags/bz.svg | 145 + .../flags/ca.svg | 4 + .../flags/cc.svg | 19 + .../flags/cd.svg | 5 + .../flags/cefta.svg | 13 + .../flags/cf.svg | 15 + .../flags/cg.svg | 12 + .../flags/ch.svg | 9 + .../flags/ci.svg | 7 + .../flags/ck.svg | 9 + .../flags/cl.svg | 13 + .../flags/cm.svg | 15 + .../flags/cn.svg | 11 + .../flags/co.svg | 7 + .../flags/cp.svg | 7 + .../flags/cr.svg | 7 + .../flags/cu.svg | 13 + .../flags/cv.svg | 13 + .../flags/cw.svg | 14 + .../flags/cx.svg | 15 + .../flags/cy.svg | 6 + .../flags/cz.svg | 5 + .../flags/de.svg | 5 + .../flags/dg.svg | 129 + .../flags/dj.svg | 13 + .../flags/dk.svg | 5 + .../flags/dm.svg | 152 + .../flags/do.svg | 6745 +++++++++++++++++ .../flags/dz.svg | 5 + .../flags/ea.svg | 544 ++ .../flags/ec.svg | 138 + .../flags/ee.svg | 7 + .../flags/eg.svg | 38 + .../flags/eh.svg | 16 + .../flags/er.svg | 8 + .../flags/es-ct.svg | 4 + .../flags/es-ga.svg | 187 + .../flags/es.svg | 544 ++ .../flags/et.svg | 14 + .../flags/eu.svg | 28 + .../flags/fi.svg | 5 + .../flags/fj.svg | 120 + .../flags/fk.svg | 90 + .../flags/fm.svg | 11 + .../flags/fo.svg | 12 + .../flags/fr.svg | 7 + .../flags/ga.svg | 7 + .../flags/gb-eng.svg | 5 + .../flags/gb-nir.svg | 132 + .../flags/gb-sct.svg | 4 + .../flags/gb-wls.svg | 9 + .../flags/gb.svg | 7 + .../flags/gd.svg | 27 + .../flags/ge.svg | 6 + .../flags/gf.svg | 7 + .../flags/gg.svg | 9 + .../flags/gh.svg | 6 + .../flags/gi.svg | 32 + .../flags/gl.svg | 4 + .../flags/gm.svg | 14 + .../flags/gn.svg | 7 + .../flags/gp.svg | 7 + .../flags/gq.svg | 23 + .../flags/gr.svg | 16 + .../flags/gs.svg | 133 + .../flags/gt.svg | 220 + .../flags/gu.svg | 23 + .../flags/gw.svg | 13 + .../flags/gy.svg | 9 + .../flags/hk.svg | 30 + .../flags/hm.svg | 8 + .../flags/hn.svg | 18 + .../flags/hr.svg | 58 + .../flags/ht.svg | 116 + .../flags/hu.svg | 7 + .../flags/ic.svg | 7 + .../flags/id.svg | 4 + .../flags/ie.svg | 7 + .../flags/il.svg | 14 + .../flags/im.svg | 36 + .../flags/in.svg | 25 + .../flags/io.svg | 129 + .../flags/iq.svg | 10 + .../flags/ir.svg | 219 + .../flags/is.svg | 12 + .../flags/it.svg | 7 + .../flags/je.svg | 45 + .../flags/jm.svg | 8 + .../flags/jo.svg | 16 + .../flags/jp.svg | 11 + .../flags/ke.svg | 23 + .../flags/kg.svg | 15 + .../flags/kh.svg | 61 + .../flags/ki.svg | 36 + .../flags/km.svg | 16 + .../flags/kn.svg | 14 + .../flags/kp.svg | 15 + .../flags/kr.svg | 24 + .../flags/kw.svg | 13 + .../flags/ky.svg | 109 + .../flags/kz.svg | 23 + .../flags/la.svg | 12 + .../flags/lb.svg | 15 + .../flags/lc.svg | 8 + .../flags/li.svg | 43 + .../flags/lk.svg | 22 + .../flags/lr.svg | 14 + .../flags/ls.svg | 8 + .../flags/lt.svg | 7 + .../flags/lu.svg | 5 + .../flags/lv.svg | 6 + .../flags/ly.svg | 13 + .../flags/ma.svg | 4 + .../flags/mc.svg | 6 + .../flags/md.svg | 70 + .../flags/me.svg | 116 + .../flags/mf.svg | 7 + .../flags/mg.svg | 7 + .../flags/mh.svg | 7 + .../flags/mk.svg | 5 + .../flags/ml.svg | 7 + .../flags/mm.svg | 12 + .../flags/mn.svg | 14 + .../flags/mo.svg | 9 + .../flags/mp.svg | 86 + .../flags/mq.svg | 7 + .../flags/mr.svg | 6 + .../flags/ms.svg | 33 + .../flags/mt.svg | 49 + .../flags/mu.svg | 8 + .../flags/mv.svg | 6 + .../flags/mw.svg | 10 + .../flags/mx.svg | 382 + .../flags/my.svg | 7 + .../flags/mz.svg | 21 + .../flags/na.svg | 16 + .../flags/nc.svg | 13 + .../flags/ne.svg | 6 + .../flags/nf.svg | 9 + .../flags/ng.svg | 6 + .../flags/ni.svg | 129 + .../flags/nl.svg | 5 + .../flags/no.svg | 7 + .../flags/np.svg | 13 + .../flags/nr.svg | 12 + .../flags/nu.svg | 10 + .../flags/nz.svg | 36 + .../flags/om.svg | 115 + .../flags/pa.svg | 14 + .../flags/pe.svg | 244 + .../flags/pf.svg | 19 + .../flags/pg.svg | 9 + .../flags/ph.svg | 6 + .../flags/pk.svg | 15 + .../flags/pl.svg | 6 + .../flags/pm.svg | 7 + .../flags/pn.svg | 53 + .../flags/pr.svg | 13 + .../flags/ps.svg | 15 + .../flags/pt.svg | 57 + .../flags/pw.svg | 11 + .../flags/py.svg | 157 + .../flags/qa.svg | 4 + .../flags/re.svg | 7 + .../flags/ro.svg | 7 + .../flags/rs.svg | 292 + .../flags/ru.svg | 7 + .../flags/rw.svg | 13 + .../flags/sa.svg | 26 + .../flags/sb.svg | 13 + .../flags/sc.svg | 7 + .../flags/sd.svg | 13 + .../flags/se.svg | 4 + .../flags/sg.svg | 13 + .../flags/sh.svg | 76 + .../flags/si.svg | 18 + .../flags/sj.svg | 7 + .../flags/sk.svg | 9 + .../flags/sl.svg | 7 + .../flags/sm.svg | 75 + .../flags/sn.svg | 8 + .../flags/so.svg | 11 + .../flags/sr.svg | 6 + .../flags/ss.svg | 8 + .../flags/st.svg | 16 + .../flags/sv.svg | 594 ++ .../flags/sx.svg | 56 + .../flags/sy.svg | 6 + .../flags/sz.svg | 34 + .../flags/ta.svg | 76 + .../flags/tc.svg | 50 + .../flags/td.svg | 7 + .../flags/tf.svg | 15 + .../flags/tg.svg | 14 + .../flags/th.svg | 7 + .../flags/tj.svg | 22 + .../flags/tk.svg | 5 + .../flags/tl.svg | 13 + .../flags/tm.svg | 205 + .../flags/tn.svg | 13 + .../flags/to.svg | 10 + .../flags/tr.svg | 8 + .../flags/tt.svg | 5 + .../flags/tv.svg | 9 + .../flags/tw.svg | 34 + .../flags/tz.svg | 13 + .../flags/ua.svg | 6 + .../flags/ug.svg | 30 + .../flags/um.svg | 15 + .../flags/un.svg | 16 + .../flags/us.svg | 10 + .../flags/uy.svg | 28 + .../flags/uz.svg | 30 + .../flags/va.svg | 479 ++ .../flags/vc.svg | 8 + .../flags/ve.svg | 26 + .../flags/vg.svg | 63 + .../flags/vi.svg | 28 + .../flags/vn.svg | 11 + .../flags/vu.svg | 21 + .../flags/wf.svg | 7 + .../flags/ws.svg | 7 + .../flags/xk.svg | 8 + .../flags/xx.svg | 4 + .../flags/ye.svg | 7 + .../flags/yt.svg | 7 + .../flags/za.svg | 17 + .../flags/zm.svg | 27 + .../flags/zw.svg | 21 + .../verification.js | 112 + .../ephemeral_authorization_handler.scss | 77 + app/packs/vendor/slim-select/slimselect.css | 1 + app/packs/vendor/slim-select/slimselect.js | 1970 +++++ config/assets.rb | 3 +- 273 files changed, 20514 insertions(+), 1 deletion(-) create mode 100644 app/packs/entrypoints/decidim_select_country.js create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg create mode 100644 app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg create mode 100644 app/packs/src/decidim/ephemeral_authorization_handler/verification.js create mode 100644 app/packs/vendor/slim-select/slimselect.css create mode 100644 app/packs/vendor/slim-select/slimselect.js diff --git a/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js b/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js index a516e90..bf39514 100644 --- a/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js +++ b/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js @@ -1,2 +1,4 @@ // Images require.context("../images", true) + +import "src/decidim/ephemeral_authorization_handler/verification" diff --git a/app/packs/entrypoints/decidim_select_country.js b/app/packs/entrypoints/decidim_select_country.js new file mode 100644 index 0000000..90e22f7 --- /dev/null +++ b/app/packs/entrypoints/decidim_select_country.js @@ -0,0 +1,22 @@ +import SlimSelect from "vendor/slim-select/slimselect" + +document.addEventListener("DOMContentLoaded", () => { + document.querySelectorAll(".country-select").forEach((select) => { + const data = []; + select.querySelectorAll("option").forEach((opt) => { + if (opt.value.length < 1) { + return; + } + + data.push({ + text: opt.textContent, + value: opt.value, + selected: opt.selected, + innerHTML: ` ${opt.textContent}` + }); + }); + + /* eslint-disable no-new */ + new SlimSelect({select, data}); + }); +}); diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg new file mode 100644 index 0000000..1a6d508 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg new file mode 100644 index 0000000..726f981 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg new file mode 100644 index 0000000..b7acdbd --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg new file mode 100644 index 0000000..6e75539 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg new file mode 100644 index 0000000..3bce748 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg new file mode 100644 index 0000000..cf91b39 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg @@ -0,0 +1,758 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg new file mode 100644 index 0000000..4e7098f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg new file mode 100644 index 0000000..99fa4dc --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg new file mode 100644 index 0000000..4dc39f6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg new file mode 100644 index 0000000..53840cc --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg new file mode 100644 index 0000000..d1810f2 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg new file mode 100644 index 0000000..88e2ca5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg new file mode 100644 index 0000000..c282508 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg new file mode 100644 index 0000000..407fef4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg new file mode 100644 index 0000000..e840233 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg new file mode 100644 index 0000000..9f04648 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg new file mode 100644 index 0000000..8e56ef5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg new file mode 100644 index 0000000..7c30421 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg new file mode 100644 index 0000000..420a688 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg new file mode 100644 index 0000000..16b794d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg new file mode 100644 index 0000000..327f28f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg new file mode 100644 index 0000000..4713822 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg new file mode 100644 index 0000000..b100dd0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg new file mode 100644 index 0000000..7a2ea54 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg new file mode 100644 index 0000000..a37bc67 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg new file mode 100644 index 0000000..871c57e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg new file mode 100644 index 0000000..15803ff --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg new file mode 100644 index 0000000..330d5ec --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg new file mode 100644 index 0000000..19f15fa --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg new file mode 100644 index 0000000..391e226 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg @@ -0,0 +1,676 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg new file mode 100644 index 0000000..0e6bc76 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg new file mode 100644 index 0000000..354a701 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg new file mode 100644 index 0000000..b26d476 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg new file mode 100644 index 0000000..cea6006 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg new file mode 100644 index 0000000..86431fc --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg new file mode 100644 index 0000000..a1c8db0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg new file mode 100644 index 0000000..20ae52b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg new file mode 100644 index 0000000..fbc6d7c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg new file mode 100644 index 0000000..f1b2c96 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg new file mode 100644 index 0000000..c4457de --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg new file mode 100644 index 0000000..e106ddd --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg new file mode 100644 index 0000000..d66e18b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg new file mode 100644 index 0000000..fd30063 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg new file mode 100644 index 0000000..a290234 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg new file mode 100644 index 0000000..b42d670 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg new file mode 100644 index 0000000..e400f0c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg new file mode 100644 index 0000000..18e547b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg new file mode 100644 index 0000000..50218c8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg new file mode 100644 index 0000000..d06f656 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg new file mode 100644 index 0000000..2416236 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg new file mode 100644 index 0000000..ebd0a0f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg new file mode 100644 index 0000000..b3efb07 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg new file mode 100644 index 0000000..5a409ee --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg new file mode 100644 index 0000000..31cf99c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg new file mode 100644 index 0000000..381985a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg new file mode 100644 index 0000000..4294b5b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg new file mode 100644 index 0000000..39fa9b0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg new file mode 100644 index 0000000..b72473a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg new file mode 100644 index 0000000..7913de3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg new file mode 100644 index 0000000..b08334b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg new file mode 100644 index 0000000..8ba6750 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg new file mode 100644 index 0000000..674d7ef --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg new file mode 100644 index 0000000..563277f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg new file mode 100644 index 0000000..7fa4dd8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg new file mode 100644 index 0000000..e8114b3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg new file mode 100644 index 0000000..5ff29a7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg new file mode 100644 index 0000000..d55c9b6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg new file mode 100644 index 0000000..65b7885 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg new file mode 100644 index 0000000..36ea288 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg new file mode 100644 index 0000000..728538b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg new file mode 100644 index 0000000..8743371 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg new file mode 100644 index 0000000..2705295 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg new file mode 100644 index 0000000..4d85911 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg new file mode 100644 index 0000000..cc52c84 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg new file mode 100644 index 0000000..815e0f8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg new file mode 100644 index 0000000..7075040 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg new file mode 100644 index 0000000..1bb04ec --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg new file mode 100644 index 0000000..470be2d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg new file mode 100644 index 0000000..2d7cd98 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg new file mode 100644 index 0000000..8aeee57 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg new file mode 100644 index 0000000..baa9668 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg new file mode 100644 index 0000000..898f669 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg new file mode 100644 index 0000000..1be6191 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg new file mode 100644 index 0000000..76edab4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg new file mode 100644 index 0000000..12e3b67 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg new file mode 100644 index 0000000..e34b224 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg new file mode 100644 index 0000000..f50cd32 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg new file mode 100644 index 0000000..6e15fd0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg new file mode 100644 index 0000000..dbac25e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg new file mode 100644 index 0000000..dad1107 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg new file mode 100644 index 0000000..453898b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg new file mode 100644 index 0000000..f8752d9 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg new file mode 100644 index 0000000..e40a838 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg new file mode 100644 index 0000000..a6497de --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg new file mode 100644 index 0000000..64a69e8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg new file mode 100644 index 0000000..eb5a52e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg new file mode 100644 index 0000000..2fbcb19 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg new file mode 100644 index 0000000..40d6ad4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg new file mode 100644 index 0000000..1b38158 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg new file mode 100644 index 0000000..ba2acf2 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg new file mode 100644 index 0000000..599741e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg new file mode 100644 index 0000000..7e0692c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg new file mode 100644 index 0000000..be45324 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg new file mode 100644 index 0000000..a5584ff --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg @@ -0,0 +1,23 @@ + + + + + + + + + + G + U + A + M + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg new file mode 100644 index 0000000..9e0aeeb --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg new file mode 100644 index 0000000..f4d9b8a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg new file mode 100644 index 0000000..e32924f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg new file mode 100644 index 0000000..c0748d3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg new file mode 100644 index 0000000..6f92950 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg new file mode 100644 index 0000000..70115ae --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg new file mode 100644 index 0000000..9cddb29 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg new file mode 100644 index 0000000..baddf7f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg new file mode 100644 index 0000000..81e6ee2 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg new file mode 100644 index 0000000..3b7c8fc --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg new file mode 100644 index 0000000..049be14 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg new file mode 100644 index 0000000..d9d8213 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg new file mode 100644 index 0000000..ce1243c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg new file mode 100644 index 0000000..53c29b3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg new file mode 100644 index 0000000..c0ed2af --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg new file mode 100644 index 0000000..6891785 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg new file mode 100644 index 0000000..c937a36 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg new file mode 100644 index 0000000..b0828a4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg new file mode 100644 index 0000000..20a8bfd --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg new file mode 100644 index 0000000..b65965c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg new file mode 100644 index 0000000..e03a342 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg new file mode 100644 index 0000000..df0ce75 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg new file mode 100644 index 0000000..90af6c4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg new file mode 100644 index 0000000..ad190f5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg new file mode 100644 index 0000000..1d237fe --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg new file mode 100644 index 0000000..984e84e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg new file mode 100644 index 0000000..c469370 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg new file mode 100644 index 0000000..fda3a53 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg new file mode 100644 index 0000000..f96b06c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg new file mode 100644 index 0000000..b405e45 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg new file mode 100644 index 0000000..39fa999 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg new file mode 100644 index 0000000..d55aa19 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg new file mode 100644 index 0000000..103af5b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg new file mode 100644 index 0000000..64776c3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg new file mode 100644 index 0000000..cd7ea9d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg new file mode 100644 index 0000000..f8b8b6d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg new file mode 100644 index 0000000..46bbc6c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg new file mode 100644 index 0000000..d557d31 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg new file mode 100644 index 0000000..416c0f0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg new file mode 100644 index 0000000..0025221 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg new file mode 100644 index 0000000..e701650 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg new file mode 100644 index 0000000..90ec5d2 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg new file mode 100644 index 0000000..c31d2bf --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg new file mode 100644 index 0000000..6a9e75e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg new file mode 100644 index 0000000..7324a87 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg new file mode 100644 index 0000000..7ce56ef --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg new file mode 100644 index 0000000..9cb6c9e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg new file mode 100644 index 0000000..a806572 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg new file mode 100644 index 0000000..b56cce0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg new file mode 100644 index 0000000..0e5ae11 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg new file mode 100644 index 0000000..5fa2d24 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg new file mode 100644 index 0000000..46351e5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg new file mode 100644 index 0000000..4f5cae7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg new file mode 100644 index 0000000..6f6b716 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg new file mode 100644 index 0000000..3527782 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg new file mode 100644 index 0000000..56cb072 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg new file mode 100644 index 0000000..6b70cc7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg new file mode 100644 index 0000000..d94f688 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg new file mode 100644 index 0000000..750b396 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg new file mode 100644 index 0000000..e9cc291 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg new file mode 100644 index 0000000..a1e52d9 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg new file mode 100644 index 0000000..676e801 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg new file mode 100644 index 0000000..82d7a3b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg new file mode 100644 index 0000000..10450f9 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg new file mode 100644 index 0000000..113aae5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg new file mode 100644 index 0000000..4219195 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg new file mode 100644 index 0000000..773a432 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg new file mode 100644 index 0000000..dab81a6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg new file mode 100644 index 0000000..3b9202b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg new file mode 100644 index 0000000..9679540 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg new file mode 100644 index 0000000..39a82b8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg new file mode 100644 index 0000000..ecdb4a3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg new file mode 100644 index 0000000..81eb35f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg new file mode 100644 index 0000000..64d2aa0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg new file mode 100644 index 0000000..4faaf49 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg new file mode 100644 index 0000000..a5f2a15 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg new file mode 100644 index 0000000..a2f9819 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg new file mode 100644 index 0000000..c7db7dd --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg new file mode 100644 index 0000000..4067baf --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg new file mode 100644 index 0000000..8ae592a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg new file mode 100644 index 0000000..5be12ed --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg new file mode 100644 index 0000000..658c87e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg new file mode 100644 index 0000000..eeb29a3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg new file mode 100644 index 0000000..1b35cdb --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg new file mode 100644 index 0000000..1080add --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg new file mode 100644 index 0000000..65489e1 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg new file mode 100644 index 0000000..0babde6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg new file mode 100644 index 0000000..0fa5145 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg new file mode 100644 index 0000000..42bfcee --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg new file mode 100644 index 0000000..972792f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg new file mode 100644 index 0000000..964b421 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg new file mode 100644 index 0000000..ddd1dc1 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg new file mode 100644 index 0000000..afd2e4a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg new file mode 100644 index 0000000..77547c7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg new file mode 100644 index 0000000..bfbf01f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg new file mode 100644 index 0000000..bd493c3 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg new file mode 100644 index 0000000..6c56aa4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg new file mode 100644 index 0000000..fda0f7b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg new file mode 100644 index 0000000..86ad291 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg new file mode 100644 index 0000000..f4d27ef --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg new file mode 100644 index 0000000..2c6c5d9 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg new file mode 100644 index 0000000..6fcf86b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg new file mode 100644 index 0000000..f450a9c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg new file mode 100644 index 0000000..9a46b36 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg new file mode 100644 index 0000000..c00a1a5 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg new file mode 100644 index 0000000..0e41780 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg new file mode 100644 index 0000000..c0d3d08 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg new file mode 100644 index 0000000..131b069 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg new file mode 100644 index 0000000..223fc49 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg new file mode 100644 index 0000000..bb2799c --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg new file mode 100644 index 0000000..a1953fa --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg new file mode 100644 index 0000000..a07baf7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg new file mode 100644 index 0000000..0892990 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg new file mode 100644 index 0000000..7c0673d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg new file mode 100644 index 0000000..4d4337a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg new file mode 100644 index 0000000..5e71c40 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg new file mode 100644 index 0000000..73804d8 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg new file mode 100644 index 0000000..2259f31 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg new file mode 100644 index 0000000..752dd3d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg new file mode 100644 index 0000000..bcc90d6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg new file mode 100644 index 0000000..29636ae --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg new file mode 100644 index 0000000..02ef495 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg new file mode 100644 index 0000000..b68ad23 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg new file mode 100644 index 0000000..dbdb716 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg new file mode 100644 index 0000000..9fadf85 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg new file mode 100644 index 0000000..4572f4e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg new file mode 100644 index 0000000..8d763cb --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg new file mode 100644 index 0000000..1e93a61 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg new file mode 100644 index 0000000..563c97b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg new file mode 100644 index 0000000..65bab13 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg new file mode 100644 index 0000000..1f11e92 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg new file mode 100644 index 0000000..3c72f09 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg new file mode 100644 index 0000000..7367688 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg new file mode 100644 index 0000000..d072337 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg new file mode 100644 index 0000000..a92804f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg new file mode 100644 index 0000000..14adbe0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg new file mode 100644 index 0000000..675210e --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg new file mode 100644 index 0000000..78f3b9d --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg new file mode 100644 index 0000000..ca74eec --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg new file mode 100644 index 0000000..a339eb1 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg new file mode 100644 index 0000000..f9c5e1b --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg new file mode 100644 index 0000000..7b91838 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg new file mode 100644 index 0000000..b04c3c4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg new file mode 100644 index 0000000..73b6245 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg new file mode 100644 index 0000000..1634d71 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg new file mode 100644 index 0000000..8c6a532 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg new file mode 100644 index 0000000..6a03dc4 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg new file mode 100644 index 0000000..450f6f0 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg new file mode 100644 index 0000000..77bb549 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg new file mode 100644 index 0000000..39023a9 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg new file mode 100644 index 0000000..8a0941f --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg new file mode 100644 index 0000000..c557e3a --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg new file mode 100644 index 0000000..32f4377 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg new file mode 100644 index 0000000..b0cc4c7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg new file mode 100644 index 0000000..0e758a7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg new file mode 100644 index 0000000..0edc0c7 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg new file mode 100644 index 0000000..34515ce --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg new file mode 100644 index 0000000..61f0ed6 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg new file mode 100644 index 0000000..e84f439 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg new file mode 100644 index 0000000..0c1f3af --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg new file mode 100644 index 0000000..84c99c2 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg new file mode 100644 index 0000000..64e8d48 --- /dev/null +++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/packs/src/decidim/ephemeral_authorization_handler/verification.js b/app/packs/src/decidim/ephemeral_authorization_handler/verification.js new file mode 100644 index 0000000..9f958b6 --- /dev/null +++ b/app/packs/src/decidim/ephemeral_authorization_handler/verification.js @@ -0,0 +1,112 @@ +$(() => { + const verificationInputs = document.querySelectorAll("#verification input[type='number']"); + const verificationForm = document.querySelector("#verification").closest("form"); + verificationInputs.forEach((input, ind) => { + input.setAttribute("maxlength", "1"); + input.addEventListener("click", () => { + input.select(); + }) + input.addEventListener("input", () => { + const val = input.value + + if (val.trim() === "") { + return + } + + if (val.length > 1) { + let jj = 0; + for (let ii = ind; ii < verificationInputs.length; ii += 1) { + if (jj > val.length) { + return; + } + if (val.substr(jj, 1)) { + verificationInputs[ii].value = val.substr(jj, 1); + verificationInputs[ii].focus(); + jj += 1 + } + } + } else { + if (!(/\d/).test(val)) { + input.value = "" + return + } + + if (verificationInputs[ind].value.trim() !== "") { + verificationInputs[ind].value = val; + } + + const nextInput = verificationInputs[ind + 1]; + + if (nextInput) { + nextInput.focus(); + nextInput.select(); + } else { + verificationForm.querySelector("button[type='submit']").focus(); + } + } + }) + + input.addEventListener("paste", (event) => { + const clipboardData = event.clipboardData || window.clipboardData; + const pastedData = clipboardData.getData("text").trim(); + + // find the first empty input field and paste the data there + let jj = 0; + for (let ii = ind; ii < verificationInputs.length; ii += 1) { + if (jj > pastedData.length) { + return; + } + if (pastedData.substr(jj, 1)) { + verificationInputs[ii].value = pastedData.substr(jj, 1); + verificationInputs[ii].focus(); + jj += 1 + } + } + }); + }); + const fieldsvalid = () => { + let allFieldsFilled = true; + verificationInputs.forEach((input) => { + if (input.value.trim() === "") { + allFieldsFilled = false; + } + }); + return allFieldsFilled + }; + + const togglevalidity = (item) => { + if (item.classList.contains("is-invisible")) { + item.classList.remove("is-invisible") + item.classList.add("is-visible") + } else { + item.classList.remove("is-visible") + item.classList.add("is-invisible") + } + } + + const setVerificationField = () => { + let combinedValue = ""; + verificationInputs.forEach((input) => { + combinedValue += input.value.trim(); + }); + document.querySelector('input[name="verification_code[verification]"]').value = combinedValue + }; + + const makeFieldsInvalid = () => { + verificationInputs.forEach((input) => { + input.classList.add("is-invalid-input") + }) + togglevalidity(document.querySelector("#verification-error")) + } + + const form = document.querySelector(".new_verification_code"); + $(form).on("submit", (ev) => { + setVerificationField(); + if (fieldsvalid()) { + return; + } + + ev.preventDefault(); + makeFieldsInvalid(); + }); +}) diff --git a/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss b/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss index 6c21537..5741b32 100644 --- a/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss +++ b/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss @@ -1 +1,78 @@ /* css for decidim_ephemeral_authorization_handler */ + +@import "vendor/slim-select/slimselect"; + +.ss-main.country-select{ + .ss-single-selected{ + padding: 10px; + font-size: 16px; + line-height: 0.75rem; + height: 2.4375rem; + border: 1px solid black; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05); + } + + .ss-single-selected, + .ss-option{ + .country-flag img{ + position: relative; + display: inline-block; + width: 1rem; + margin: -.1rem .5rem 0 0; + } + } +} + +form input[type='number']::-webkit-outer-spin-button, +form input[type='number']::-webkit-inner-spin-button{ + -webkit-appearance: none; + margin: 0; +} + +/* css for decidim_admin_multi_factor */ +.sms-card { + margin-bottom: 30px; + background: rgb(243 244 247 / var(--tw-bg-opacity, 1)); + border: 1px solid #e8e8e8; + border-radius: 4px; + overflow: visible; + overflow-wrap: break-word; + hyphens: auto; + padding: 1.5rem; + width: 100%; + margin: auto; +} +.flex-digits{ + display: flex; + justify-content: space-between; + width: 40%; + margin: auto; + + .flex-digits-input{ + display: flex; + flex: 0 0 auto; + + input[type=number] { + -moz-appearance: textfield; + } + + input[type=number]::-webkit-outer-spin-button, + input[type=number]::-webkit-inner-spin-button{ + -webkit-appearance: none; + margin: 0; + } + + input{ + margin: 0 auto; + height: 2.5rem; + width: 3rem; + text-align: center; + + + //@include breakpoint(smallmedium up){ + // height: 3rem; + // width: 3rem; + //} + } + } +} diff --git a/app/packs/vendor/slim-select/slimselect.css b/app/packs/vendor/slim-select/slimselect.css new file mode 100644 index 0000000..f6c6e6d --- /dev/null +++ b/app/packs/vendor/slim-select/slimselect.css @@ -0,0 +1 @@ +.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:bold}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s, margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0px;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:3px 5px 3px 0px;color:#fff;background-color:#5897fb;border-radius:4px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s, opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0px;opacity:0;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px}.ss-content .ss-search.ss-hide input{height:0px;opacity:0;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0px;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:bold;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0px}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:bold}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option:hover,.ss-content .ss-list .ss-option.ss-highlighted{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,0.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c} diff --git a/app/packs/vendor/slim-select/slimselect.js b/app/packs/vendor/slim-select/slimselect.js new file mode 100644 index 0000000..d4941c1 --- /dev/null +++ b/app/packs/vendor/slim-select/slimselect.js @@ -0,0 +1,1970 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["SlimSelect"] = factory(); + else + root["SlimSelect"] = factory(); +})(window, function() { + return /******/ (function(modules) { // webpackBootstrap + /******/ // The module cache + /******/ var installedModules = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if(installedModules[moduleId]) { + /******/ return installedModules[moduleId].exports; + /******/ } + /******/ // Create a new module (and put it into the cache) + /******/ var module = installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {} + /******/ }; + /******/ + /******/ // Execute the module function + /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + /******/ + /******/ // Flag the module as loaded + /******/ module.l = true; + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ } + /******/ + /******/ + /******/ // expose the modules object (__webpack_modules__) + /******/ __webpack_require__.m = modules; + /******/ + /******/ // expose the module cache + /******/ __webpack_require__.c = installedModules; + /******/ + /******/ // define getter function for harmony exports + /******/ __webpack_require__.d = function(exports, name, getter) { + /******/ if(!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); + /******/ } + /******/ }; + /******/ + /******/ // define __esModule on exports + /******/ __webpack_require__.r = function(exports) { + /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { + /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); + /******/ } + /******/ Object.defineProperty(exports, '__esModule', { value: true }); + /******/ }; + /******/ + /******/ // create a fake namespace object + /******/ // mode & 1: value is a module id, require it + /******/ // mode & 2: merge all properties of value into the ns + /******/ // mode & 4: return value when already ns object + /******/ // mode & 8|1: behave like require + /******/ __webpack_require__.t = function(value, mode) { + /******/ if(mode & 1) value = __webpack_require__(value); + /******/ if(mode & 8) return value; + /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; + /******/ var ns = Object.create(null); + /******/ __webpack_require__.r(ns); + /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); + /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); + /******/ return ns; + /******/ }; + /******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function(module) { + /******/ var getter = module && module.__esModule ? + /******/ function getDefault() { return module['default']; } : + /******/ function getModuleExports() { return module; }; + /******/ __webpack_require__.d(getter, 'a', getter); + /******/ return getter; + /******/ }; + /******/ + /******/ // Object.prototype.hasOwnProperty.call + /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; + /******/ + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + /******/ + /******/ + /******/ // Load entry module and return exports + /******/ return __webpack_require__(__webpack_require__.s = 2); + /******/ }) + /************************************************************************/ + /******/ ([ + /* 0 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + exports.kebabCase = exports.highlight = exports.isValueInArrayOfObjects = exports.debounce = exports.putContent = exports.ensureElementInView = exports.hasClassInTree = void 0; + function hasClassInTree(element, className) { + function hasClass(e, c) { + if (!(!c || !e || !e.classList || !e.classList.contains(c))) { + return e; + } + return null; + } + function parentByClass(e, c) { + if (!e || e === document) { + return null; + } + else if (hasClass(e, c)) { + return e; + } + else { + return parentByClass(e.parentNode, c); + } + } + return hasClass(element, className) || parentByClass(element, className); + } + exports.hasClassInTree = hasClassInTree; + function ensureElementInView(container, element) { + var cTop = container.scrollTop + container.offsetTop; + var cBottom = cTop + container.clientHeight; + var eTop = element.offsetTop; + var eBottom = eTop + element.clientHeight; + if (eTop < cTop) { + container.scrollTop -= (cTop - eTop); + } + else if (eBottom > cBottom) { + container.scrollTop += (eBottom - cBottom); + } + } + exports.ensureElementInView = ensureElementInView; + function putContent(el, currentPosition, isOpen) { + var height = el.offsetHeight; + var rect = el.getBoundingClientRect(); + var elemTop = (isOpen ? rect.top : rect.top - height); + var elemBottom = (isOpen ? rect.bottom : rect.bottom + height); + if (elemTop <= 0) { + return 'below'; + } + if (elemBottom >= window.innerHeight) { + return 'above'; + } + return (isOpen ? currentPosition : 'below'); + } + exports.putContent = putContent; + function debounce(func, wait, immediate) { + if (wait === void 0) { wait = 100; } + if (immediate === void 0) { immediate = false; } + var timeout; + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var context = self; + var later = function () { + timeout = null; + if (!immediate) { + func.apply(context, args); + } + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + func.apply(context, args); + } + }; + } + exports.debounce = debounce; + function isValueInArrayOfObjects(selected, key, value) { + if (!Array.isArray(selected)) { + return selected[key] === value; + } + for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { + var s = selected_1[_i]; + if (s && s[key] && s[key] === value) { + return true; + } + } + return false; + } + exports.isValueInArrayOfObjects = isValueInArrayOfObjects; + function highlight(str, search, className) { + var completedString = str; + var regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*").concat(originalTextFoundByRegex, "")); + return completedString; + } + exports.highlight = highlight; + function kebabCase(str) { + var result = str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, function (match) { return '-' + match.toLowerCase(); }); + return (str[0] === str[0].toUpperCase()) + ? result.substring(1) + : result; + } + exports.kebabCase = kebabCase; + (function () { + var w = window; + if (typeof w.CustomEvent === 'function') { + return; + } + function CustomEvent(event, params) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + } + CustomEvent.prototype = w.Event.prototype; + w.CustomEvent = CustomEvent; + })(); + + + /***/ }), + /* 1 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + exports.validateOption = exports.validateData = exports.Data = void 0; + var Data = (function () { + function Data(info) { + this.contentOpen = false; + this.contentPosition = 'below'; + this.isOnChangeEnabled = true; + this.main = info.main; + this.searchValue = ''; + this.data = []; + this.filtered = null; + this.parseSelectData(); + this.setSelectedFromSelect(); + } + Data.prototype.newOption = function (info) { + return { + id: (info.id ? info.id : String(Math.floor(Math.random() * 100000000))), + value: (info.value ? info.value : ''), + text: (info.text ? info.text : ''), + innerHTML: (info.innerHTML ? info.innerHTML : ''), + selected: (info.selected ? info.selected : false), + display: (info.display !== undefined ? info.display : true), + disabled: (info.disabled ? info.disabled : false), + placeholder: (info.placeholder ? info.placeholder : false), + "class": (info["class"] ? info["class"] : undefined), + data: (info.data ? info.data : {}), + mandatory: (info.mandatory ? info.mandatory : false) + }; + }; + Data.prototype.add = function (data) { + this.data.push({ + id: String(Math.floor(Math.random() * 100000000)), + value: data.value, + text: data.text, + innerHTML: '', + selected: false, + display: true, + disabled: false, + placeholder: false, + "class": undefined, + mandatory: data.mandatory, + data: {} + }); + }; + Data.prototype.parseSelectData = function () { + this.data = []; + var nodes = this.main.select.element.childNodes; + for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { + var n = nodes_1[_i]; + if (n.nodeName === 'OPTGROUP') { + var node = n; + var optgroup = { + label: node.label, + options: [] + }; + var options = n.childNodes; + for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { + var o = options_1[_a]; + if (o.nodeName === 'OPTION') { + var option = this.pullOptionData(o); + optgroup.options.push(option); + if (option.placeholder && option.text.trim() !== '') { + this.main.config.placeholderText = option.text; + } + } + } + this.data.push(optgroup); + } + else if (n.nodeName === 'OPTION') { + var option = this.pullOptionData(n); + this.data.push(option); + if (option.placeholder && option.text.trim() !== '') { + this.main.config.placeholderText = option.text; + } + } + } + }; + Data.prototype.pullOptionData = function (option) { + return { + id: (option.dataset ? option.dataset.id : false) || String(Math.floor(Math.random() * 100000000)), + value: option.value, + text: option.text, + innerHTML: option.innerHTML, + selected: option.selected, + disabled: option.disabled, + placeholder: option.dataset.placeholder === 'true', + "class": option.className, + style: option.style.cssText, + data: option.dataset, + mandatory: (option.dataset ? option.dataset.mandatory === 'true' : false) + }; + }; + Data.prototype.setSelectedFromSelect = function () { + if (this.main.config.isMultiple) { + var options = this.main.select.element.options; + var newSelected = []; + for (var _i = 0, options_2 = options; _i < options_2.length; _i++) { + var o = options_2[_i]; + if (o.selected) { + var newOption = this.getObjectFromData(o.value, 'value'); + if (newOption && newOption.id) { + newSelected.push(newOption.id); + } + } + } + this.setSelected(newSelected, 'id'); + } + else { + var element = this.main.select.element; + if (element.selectedIndex !== -1) { + var option = element.options[element.selectedIndex]; + var value = option.value; + this.setSelected(value, 'value'); + } + } + }; + Data.prototype.setSelected = function (value, type) { + if (type === void 0) { type = 'id'; } + for (var _i = 0, _a = this.data; _i < _a.length; _i++) { + var d = _a[_i]; + if (d.hasOwnProperty('label')) { + if (d.hasOwnProperty('options')) { + var options = d.options; + if (options) { + for (var _b = 0, options_3 = options; _b < options_3.length; _b++) { + var o = options_3[_b]; + if (o.placeholder) { + continue; + } + o.selected = this.shouldBeSelected(o, value, type); + } + } + } + } + else { + d.selected = this.shouldBeSelected(d, value, type); + } + } + }; + Data.prototype.shouldBeSelected = function (option, value, type) { + if (type === void 0) { type = 'id'; } + if (Array.isArray(value)) { + for (var _i = 0, value_1 = value; _i < value_1.length; _i++) { + var v = value_1[_i]; + if (type in option && String(option[type]) === String(v)) { + return true; + } + } + } + else { + if (type in option && String(option[type]) === String(value)) { + return true; + } + } + return false; + }; + Data.prototype.getSelected = function () { + var value = { text: '', placeholder: this.main.config.placeholderText }; + var values = []; + for (var _i = 0, _a = this.data; _i < _a.length; _i++) { + var d = _a[_i]; + if (d.hasOwnProperty('label')) { + if (d.hasOwnProperty('options')) { + var options = d.options; + if (options) { + for (var _b = 0, options_4 = options; _b < options_4.length; _b++) { + var o = options_4[_b]; + if (o.selected) { + if (!this.main.config.isMultiple) { + value = o; + } + else { + values.push(o); + } + } + } + } + } + } + else { + if (d.selected) { + if (!this.main.config.isMultiple) { + value = d; + } + else { + values.push(d); + } + } + } + } + if (this.main.config.isMultiple) { + return values; + } + return value; + }; + Data.prototype.addToSelected = function (value, type) { + if (type === void 0) { type = 'id'; } + if (this.main.config.isMultiple) { + var values = []; + var selected = this.getSelected(); + if (Array.isArray(selected)) { + for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { + var s = selected_1[_i]; + values.push(s[type]); + } + } + values.push(value); + this.setSelected(values, type); + } + }; + Data.prototype.removeFromSelected = function (value, type) { + if (type === void 0) { type = 'id'; } + if (this.main.config.isMultiple) { + var values = []; + var selected = this.getSelected(); + for (var _i = 0, selected_2 = selected; _i < selected_2.length; _i++) { + var s = selected_2[_i]; + if (String(s[type]) !== String(value)) { + values.push(s[type]); + } + } + this.setSelected(values, type); + } + }; + Data.prototype.onDataChange = function () { + if (this.main.onChange && this.isOnChangeEnabled) { + this.main.onChange(JSON.parse(JSON.stringify(this.getSelected()))); + } + }; + Data.prototype.getObjectFromData = function (value, type) { + if (type === void 0) { type = 'id'; } + for (var _i = 0, _a = this.data; _i < _a.length; _i++) { + var d = _a[_i]; + if (type in d && String(d[type]) === String(value)) { + return d; + } + if (d.hasOwnProperty('options')) { + var optgroupObject = d; + if (optgroupObject.options) { + for (var _b = 0, _c = optgroupObject.options; _b < _c.length; _b++) { + var oo = _c[_b]; + if (String(oo[type]) === String(value)) { + return oo; + } + } + } + } + } + return null; + }; + Data.prototype.search = function (search) { + this.searchValue = search; + if (search.trim() === '') { + this.filtered = null; + return; + } + var searchFilter = this.main.config.searchFilter; + var valuesArray = this.data.slice(0); + search = search.trim(); + var filtered = valuesArray.map(function (obj) { + if (obj.hasOwnProperty('options')) { + var optgroupObj = obj; + var options = []; + if (optgroupObj.options) { + options = optgroupObj.options.filter(function (opt) { + return searchFilter(opt, search); + }); + } + if (options.length !== 0) { + var optgroup = Object.assign({}, optgroupObj); + optgroup.options = options; + return optgroup; + } + } + if (obj.hasOwnProperty('text')) { + var optionObj = obj; + if (searchFilter(optionObj, search)) { + return obj; + } + } + return null; + }); + this.filtered = filtered.filter(function (info) { return info; }); + }; + return Data; + }()); + exports.Data = Data; + function validateData(data) { + if (!data) { + console.error('Data must be an array of objects'); + return false; + } + var isValid = false; + var errorCount = 0; + for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { + var d = data_1[_i]; + if (d.hasOwnProperty('label')) { + if (d.hasOwnProperty('options')) { + var optgroup = d; + var options = optgroup.options; + if (options) { + for (var _a = 0, options_5 = options; _a < options_5.length; _a++) { + var o = options_5[_a]; + isValid = validateOption(o); + if (!isValid) { + errorCount++; + } + } + } + } + } + else { + var option = d; + isValid = validateOption(option); + if (!isValid) { + errorCount++; + } + } + } + return errorCount === 0; + } + exports.validateData = validateData; + function validateOption(option) { + if (option.text === undefined) { + console.error('Data object option must have at least have a text value. Check object: ' + JSON.stringify(option)); + return false; + } + return true; + } + exports.validateOption = validateOption; + + + /***/ }), + /* 2 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + var config_1 = __webpack_require__(3); + var select_1 = __webpack_require__(4); + var slim_1 = __webpack_require__(5); + var data_1 = __webpack_require__(1); + var helper_1 = __webpack_require__(0); + var SlimSelect = (function () { + function SlimSelect(info) { + var _this = this; + this.ajax = null; + this.addable = null; + this.beforeOnChange = null; + this.onChange = null; + this.beforeOpen = null; + this.afterOpen = null; + this.beforeClose = null; + this.afterClose = null; + this.windowScroll = (0, helper_1.debounce)(function (e) { + if (_this.data.contentOpen) { + if ((0, helper_1.putContent)(_this.slim.content, _this.data.contentPosition, _this.data.contentOpen) === 'above') { + _this.moveContentAbove(); + } + else { + _this.moveContentBelow(); + } + } + }); + this.documentClick = function (e) { + if (e.target && !(0, helper_1.hasClassInTree)(e.target, _this.config.id)) { + _this.close(); + } + }; + var selectElement = this.validate(info); + if (selectElement.dataset.ssid) { + this.destroy(selectElement.dataset.ssid); + } + if (info.ajax) { + this.ajax = info.ajax; + } + if (info.addable) { + this.addable = info.addable; + } + this.config = new config_1.Config({ + select: selectElement, + isAjax: (info.ajax ? true : false), + showSearch: info.showSearch, + searchPlaceholder: info.searchPlaceholder, + searchText: info.searchText, + searchingText: info.searchingText, + searchFocus: info.searchFocus, + searchHighlight: info.searchHighlight, + searchFilter: info.searchFilter, + closeOnSelect: info.closeOnSelect, + showContent: info.showContent, + placeholderText: info.placeholder, + allowDeselect: info.allowDeselect, + allowDeselectOption: info.allowDeselectOption, + hideSelectedOption: info.hideSelectedOption, + deselectLabel: info.deselectLabel, + isEnabled: info.isEnabled, + valuesUseText: info.valuesUseText, + showOptionTooltips: info.showOptionTooltips, + selectByGroup: info.selectByGroup, + limit: info.limit, + timeoutDelay: info.timeoutDelay, + addToBody: info.addToBody + }); + this.select = new select_1.Select({ + select: selectElement, + main: this + }); + this.data = new data_1.Data({ main: this }); + this.slim = new slim_1.Slim({ main: this }); + if (this.select.element.parentNode) { + this.select.element.parentNode.insertBefore(this.slim.container, this.select.element.nextSibling); + } + if (info.data) { + this.setData(info.data); + } + else { + this.render(); + } + document.addEventListener('click', this.documentClick); + if (this.config.showContent === 'auto') { + window.addEventListener('scroll', this.windowScroll, false); + } + if (info.beforeOnChange) { + this.beforeOnChange = info.beforeOnChange; + } + if (info.onChange) { + this.onChange = info.onChange; + } + if (info.beforeOpen) { + this.beforeOpen = info.beforeOpen; + } + if (info.afterOpen) { + this.afterOpen = info.afterOpen; + } + if (info.beforeClose) { + this.beforeClose = info.beforeClose; + } + if (info.afterClose) { + this.afterClose = info.afterClose; + } + if (!this.config.isEnabled) { + this.disable(); + } + } + SlimSelect.prototype.validate = function (info) { + var select = (typeof info.select === 'string' ? document.querySelector(info.select) : info.select); + if (!select) { + throw new Error('Could not find select element'); + } + if (select.tagName !== 'SELECT') { + throw new Error('Element isnt of type select'); + } + return select; + }; + SlimSelect.prototype.selected = function () { + if (this.config.isMultiple) { + var selected = this.data.getSelected(); + var outputSelected = []; + for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) { + var s = selected_1[_i]; + outputSelected.push(s.value); + } + return outputSelected; + } + else { + var selected = this.data.getSelected(); + return (selected ? selected.value : ''); + } + }; + SlimSelect.prototype.set = function (value, type, close, render) { + if (type === void 0) { type = 'value'; } + if (close === void 0) { close = true; } + if (render === void 0) { render = true; } + if (this.config.isMultiple && !Array.isArray(value)) { + this.data.addToSelected(value, type); + } + else { + this.data.setSelected(value, type); + } + this.select.setValue(); + this.data.onDataChange(); + this.render(); + if (this.config.hideSelectedOption && this.config.isMultiple && this.data.getSelected().length === this.data.data.length) { + close = true; + } + if (close) { + this.close(); + } + }; + SlimSelect.prototype.setSelected = function (value, type, close, render) { + if (type === void 0) { type = 'value'; } + if (close === void 0) { close = true; } + if (render === void 0) { render = true; } + this.set(value, type, close, render); + }; + SlimSelect.prototype.setData = function (data) { + var isValid = (0, data_1.validateData)(data); + if (!isValid) { + console.error('Validation problem on: #' + this.select.element.id); + return; + } + var newData = JSON.parse(JSON.stringify(data)); + var selected = this.data.getSelected(); + for (var i = 0; i < newData.length; i++) { + if (!newData[i].value && !newData[i].placeholder) { + newData[i].value = newData[i].text; + } + } + if (this.config.isAjax && selected) { + if (this.config.isMultiple) { + var reverseSelected = selected.reverse(); + for (var _i = 0, reverseSelected_1 = reverseSelected; _i < reverseSelected_1.length; _i++) { + var r = reverseSelected_1[_i]; + newData.unshift(r); + } + } + else { + newData.unshift(selected); + for (var i = 0; i < newData.length; i++) { + if (!newData[i].placeholder && newData[i].value === selected.value && newData[i].text === selected.text) { + newData.splice(i, 1); + } + } + var hasPlaceholder = false; + for (var i = 0; i < newData.length; i++) { + if (newData[i].placeholder) { + hasPlaceholder = true; + } + } + if (!hasPlaceholder) { + newData.unshift({ text: '', placeholder: true }); + } + } + } + this.select.create(newData); + this.data.parseSelectData(); + this.data.setSelectedFromSelect(); + }; + SlimSelect.prototype.addData = function (data) { + var isValid = (0, data_1.validateData)([data]); + if (!isValid) { + console.error('Validation problem on: #' + this.select.element.id); + return; + } + this.data.add(this.data.newOption(data)); + this.select.create(this.data.data); + this.data.parseSelectData(); + this.data.setSelectedFromSelect(); + this.render(); + }; + SlimSelect.prototype.open = function () { + var _this = this; + if (!this.config.isEnabled) { + return; + } + if (this.data.contentOpen) { + return; + } + if (this.config.hideSelectedOption && this.config.isMultiple && this.data.getSelected().length === this.data.data.length) { + return; + } + if (this.beforeOpen) { + this.beforeOpen(); + } + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.plus.classList.add('ss-cross'); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-down'); + this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-up'); + } + this.slim[(this.config.isMultiple ? 'multiSelected' : 'singleSelected')].container.classList.add((this.data.contentPosition === 'above' ? this.config.openAbove : this.config.openBelow)); + if (this.config.addToBody) { + var containerRect = this.slim.container.getBoundingClientRect(); + this.slim.content.style.top = (containerRect.top + containerRect.height + window.scrollY) + 'px'; + this.slim.content.style.left = (containerRect.left + window.scrollX) + 'px'; + this.slim.content.style.width = containerRect.width + 'px'; + } + this.slim.content.classList.add(this.config.open); + if (this.config.showContent.toLowerCase() === 'up') { + this.moveContentAbove(); + } + else if (this.config.showContent.toLowerCase() === 'down') { + this.moveContentBelow(); + } + else { + if ((0, helper_1.putContent)(this.slim.content, this.data.contentPosition, this.data.contentOpen) === 'above') { + this.moveContentAbove(); + } + else { + this.moveContentBelow(); + } + } + if (!this.config.isMultiple) { + var selected = this.data.getSelected(); + if (selected) { + var selectedId = selected.id; + var selectedOption = this.slim.list.querySelector('[data-id="' + selectedId + '"]'); + if (selectedOption) { + (0, helper_1.ensureElementInView)(this.slim.list, selectedOption); + } + } + } + setTimeout(function () { + _this.data.contentOpen = true; + if (_this.config.searchFocus) { + _this.slim.search.input.focus(); + } + if (_this.afterOpen) { + _this.afterOpen(); + } + }, this.config.timeoutDelay); + }; + SlimSelect.prototype.close = function () { + var _this = this; + if (!this.data.contentOpen) { + return; + } + if (this.beforeClose) { + this.beforeClose(); + } + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.container.classList.remove(this.config.openAbove); + this.slim.multiSelected.container.classList.remove(this.config.openBelow); + this.slim.multiSelected.plus.classList.remove('ss-cross'); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.container.classList.remove(this.config.openAbove); + this.slim.singleSelected.container.classList.remove(this.config.openBelow); + this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-down'); + this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-up'); + } + this.slim.content.classList.remove(this.config.open); + this.data.contentOpen = false; + this.search(''); + setTimeout(function () { + _this.slim.content.removeAttribute('style'); + _this.data.contentPosition = 'below'; + if (_this.config.isMultiple && _this.slim.multiSelected) { + _this.slim.multiSelected.container.classList.remove(_this.config.openAbove); + _this.slim.multiSelected.container.classList.remove(_this.config.openBelow); + } + else if (_this.slim.singleSelected) { + _this.slim.singleSelected.container.classList.remove(_this.config.openAbove); + _this.slim.singleSelected.container.classList.remove(_this.config.openBelow); + } + _this.slim.search.input.blur(); + if (_this.afterClose) { + _this.afterClose(); + } + }, this.config.timeoutDelay); + }; + SlimSelect.prototype.moveContentAbove = function () { + var selectHeight = 0; + if (this.config.isMultiple && this.slim.multiSelected) { + selectHeight = this.slim.multiSelected.container.offsetHeight; + } + else if (this.slim.singleSelected) { + selectHeight = this.slim.singleSelected.container.offsetHeight; + } + var contentHeight = this.slim.content.offsetHeight; + var height = selectHeight + contentHeight - 1; + this.slim.content.style.margin = '-' + height + 'px 0 0 0'; + this.slim.content.style.height = (height - selectHeight + 1) + 'px'; + this.slim.content.style.transformOrigin = 'center bottom'; + this.data.contentPosition = 'above'; + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.container.classList.remove(this.config.openBelow); + this.slim.multiSelected.container.classList.add(this.config.openAbove); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.container.classList.remove(this.config.openBelow); + this.slim.singleSelected.container.classList.add(this.config.openAbove); + } + }; + SlimSelect.prototype.moveContentBelow = function () { + this.data.contentPosition = 'below'; + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.container.classList.remove(this.config.openAbove); + this.slim.multiSelected.container.classList.add(this.config.openBelow); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.container.classList.remove(this.config.openAbove); + this.slim.singleSelected.container.classList.add(this.config.openBelow); + } + }; + SlimSelect.prototype.enable = function () { + this.config.isEnabled = true; + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.container.classList.remove(this.config.disabled); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.container.classList.remove(this.config.disabled); + } + this.select.triggerMutationObserver = false; + this.select.element.disabled = false; + this.slim.search.input.disabled = false; + this.select.triggerMutationObserver = true; + }; + SlimSelect.prototype.disable = function () { + this.config.isEnabled = false; + if (this.config.isMultiple && this.slim.multiSelected) { + this.slim.multiSelected.container.classList.add(this.config.disabled); + } + else if (this.slim.singleSelected) { + this.slim.singleSelected.container.classList.add(this.config.disabled); + } + this.select.triggerMutationObserver = false; + this.select.element.disabled = true; + this.slim.search.input.disabled = true; + this.select.triggerMutationObserver = true; + }; + SlimSelect.prototype.search = function (value) { + if (this.data.searchValue === value) { + return; + } + this.slim.search.input.value = value; + if (this.config.isAjax) { + var master_1 = this; + this.config.isSearching = true; + this.render(); + if (this.ajax) { + this.ajax(value, function (info) { + master_1.config.isSearching = false; + if (Array.isArray(info)) { + info.unshift({ text: '', placeholder: true }); + master_1.setData(info); + master_1.data.search(value); + master_1.render(); + } + else if (typeof info === 'string') { + master_1.slim.options(info); + } + else { + master_1.render(); + } + }); + } + } + else { + this.data.search(value); + this.render(); + } + }; + SlimSelect.prototype.setSearchText = function (text) { + this.config.searchText = text; + }; + SlimSelect.prototype.render = function () { + if (this.config.isMultiple) { + this.slim.values(); + } + else { + this.slim.placeholder(); + this.slim.deselect(); + } + this.slim.options(); + }; + SlimSelect.prototype.destroy = function (id) { + if (id === void 0) { id = null; } + var slim = (id ? document.querySelector('.' + id + '.ss-main') : this.slim.container); + var select = (id ? document.querySelector("[data-ssid=".concat(id, "]")) : this.select.element); + if (!slim || !select) { + return; + } + document.removeEventListener('click', this.documentClick); + if (this.config.showContent === 'auto') { + window.removeEventListener('scroll', this.windowScroll, false); + } + select.style.display = ''; + delete select.dataset.ssid; + var el = select; + el.slim = null; + if (slim.parentElement) { + slim.parentElement.removeChild(slim); + } + if (this.config.addToBody) { + var slimContent = (id ? document.querySelector('.' + id + '.ss-content') : this.slim.content); + if (!slimContent) { + return; + } + document.body.removeChild(slimContent); + } + }; + return SlimSelect; + }()); + exports["default"] = SlimSelect; + + + /***/ }), + /* 3 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + exports.Config = void 0; + var Config = (function () { + function Config(info) { + this.id = ''; + this.isMultiple = false; + this.isAjax = false; + this.isSearching = false; + this.showSearch = true; + this.searchFocus = true; + this.searchHighlight = false; + this.closeOnSelect = true; + this.showContent = 'auto'; + this.searchPlaceholder = 'Search'; + this.searchText = 'No Results'; + this.searchingText = 'Searching...'; + this.placeholderText = 'Select Value'; + this.allowDeselect = false; + this.allowDeselectOption = false; + this.hideSelectedOption = false; + this.deselectLabel = 'x'; + this.isEnabled = true; + this.valuesUseText = false; + this.showOptionTooltips = false; + this.selectByGroup = false; + this.limit = 0; + this.timeoutDelay = 200; + this.addToBody = false; + this.main = 'ss-main'; + this.singleSelected = 'ss-single-selected'; + this.arrow = 'ss-arrow'; + this.multiSelected = 'ss-multi-selected'; + this.add = 'ss-add'; + this.plus = 'ss-plus'; + this.values = 'ss-values'; + this.value = 'ss-value'; + this.valueText = 'ss-value-text'; + this.valueDelete = 'ss-value-delete'; + this.content = 'ss-content'; + this.open = 'ss-open'; + this.openAbove = 'ss-open-above'; + this.openBelow = 'ss-open-below'; + this.search = 'ss-search'; + this.searchHighlighter = 'ss-search-highlight'; + this.addable = 'ss-addable'; + this.list = 'ss-list'; + this.optgroup = 'ss-optgroup'; + this.optgroupLabel = 'ss-optgroup-label'; + this.optgroupLabelSelectable = 'ss-optgroup-label-selectable'; + this.option = 'ss-option'; + this.optionSelected = 'ss-option-selected'; + this.highlighted = 'ss-highlighted'; + this.disabled = 'ss-disabled'; + this.hide = 'ss-hide'; + this.id = 'ss-' + Math.floor(Math.random() * 100000); + this.style = info.select.style.cssText; + this["class"] = info.select.className.split(' '); + this.isMultiple = info.select.multiple; + this.isAjax = info.isAjax; + this.showSearch = (info.showSearch === false ? false : true); + this.searchFocus = (info.searchFocus === false ? false : true); + this.searchHighlight = (info.searchHighlight === true ? true : false); + this.closeOnSelect = (info.closeOnSelect === false ? false : true); + if (info.showContent) { + this.showContent = info.showContent; + } + this.isEnabled = (info.isEnabled === false ? false : true); + if (info.searchPlaceholder) { + this.searchPlaceholder = info.searchPlaceholder; + } + if (info.searchText) { + this.searchText = info.searchText; + } + if (info.searchingText) { + this.searchingText = info.searchingText; + } + if (info.placeholderText) { + this.placeholderText = info.placeholderText; + } + this.allowDeselect = (info.allowDeselect === true ? true : false); + this.allowDeselectOption = (info.allowDeselectOption === true ? true : false); + this.hideSelectedOption = (info.hideSelectedOption === true ? true : false); + if (info.deselectLabel) { + this.deselectLabel = info.deselectLabel; + } + if (info.valuesUseText) { + this.valuesUseText = info.valuesUseText; + } + if (info.showOptionTooltips) { + this.showOptionTooltips = info.showOptionTooltips; + } + if (info.selectByGroup) { + this.selectByGroup = info.selectByGroup; + } + if (info.limit) { + this.limit = info.limit; + } + if (info.searchFilter) { + this.searchFilter = info.searchFilter; + } + if (info.timeoutDelay != null) { + this.timeoutDelay = info.timeoutDelay; + } + this.addToBody = (info.addToBody === true ? true : false); + } + Config.prototype.searchFilter = function (opt, search) { + return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1; + }; + return Config; + }()); + exports.Config = Config; + + + /***/ }), + /* 4 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + exports.Select = void 0; + var helper_1 = __webpack_require__(0); + var Select = (function () { + function Select(info) { + this.triggerMutationObserver = true; + this.element = info.select; + this.main = info.main; + if (this.element.disabled) { + this.main.config.isEnabled = false; + } + this.addAttributes(); + this.addEventListeners(); + this.mutationObserver = null; + this.addMutationObserver(); + var el = this.element; + el.slim = info.main; + } + Select.prototype.setValue = function () { + if (!this.main.data.getSelected()) { + return; + } + if (this.main.config.isMultiple) { + var selected = this.main.data.getSelected(); + var options = this.element.options; + for (var _i = 0, options_1 = options; _i < options_1.length; _i++) { + var o = options_1[_i]; + o.selected = false; + for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) { + var s = selected_1[_a]; + if (s.value === o.value) { + o.selected = true; + } + } + } + } + else { + var selected = this.main.data.getSelected(); + this.element.value = (selected ? selected.value : ''); + } + this.main.data.isOnChangeEnabled = false; + this.element.dispatchEvent(new CustomEvent('change', { bubbles: true })); + this.main.data.isOnChangeEnabled = true; + }; + Select.prototype.addAttributes = function () { + this.element.tabIndex = -1; + this.element.style.display = 'none'; + this.element.dataset.ssid = this.main.config.id; + this.element.setAttribute('aria-hidden', 'true'); + }; + Select.prototype.addEventListeners = function () { + var _this = this; + this.element.addEventListener('change', function (e) { + _this.main.data.setSelectedFromSelect(); + _this.main.render(); + }); + }; + Select.prototype.addMutationObserver = function () { + var _this = this; + if (this.main.config.isAjax) { + return; + } + this.mutationObserver = new MutationObserver(function (mutations) { + if (!_this.triggerMutationObserver) { + return; + } + _this.main.data.parseSelectData(); + _this.main.data.setSelectedFromSelect(); + _this.main.render(); + mutations.forEach(function (mutation) { + if (mutation.attributeName === 'class') { + _this.main.slim.updateContainerDivClass(_this.main.slim.container); + } + }); + }); + this.observeMutationObserver(); + }; + Select.prototype.observeMutationObserver = function () { + if (!this.mutationObserver) { + return; + } + this.mutationObserver.observe(this.element, { + attributes: true, + childList: true, + characterData: true + }); + }; + Select.prototype.disconnectMutationObserver = function () { + if (this.mutationObserver) { + this.mutationObserver.disconnect(); + } + }; + Select.prototype.create = function (data) { + this.element.innerHTML = ''; + for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { + var d = data_1[_i]; + if (d.hasOwnProperty('options')) { + var optgroupObject = d; + var optgroupEl = document.createElement('optgroup'); + optgroupEl.label = optgroupObject.label; + if (optgroupObject.options) { + for (var _a = 0, _b = optgroupObject.options; _a < _b.length; _a++) { + var oo = _b[_a]; + optgroupEl.appendChild(this.createOption(oo)); + } + } + this.element.appendChild(optgroupEl); + } + else { + this.element.appendChild(this.createOption(d)); + } + } + }; + Select.prototype.createOption = function (info) { + var optionEl = document.createElement('option'); + optionEl.value = info.value !== '' ? info.value : info.text; + optionEl.innerHTML = info.innerHTML || info.text; + if (info.selected) { + optionEl.selected = info.selected; + } + if (info.display === false) { + optionEl.style.display = 'none'; + } + if (info.disabled) { + optionEl.disabled = true; + } + if (info.placeholder) { + optionEl.setAttribute('data-placeholder', 'true'); + } + if (info.mandatory) { + optionEl.setAttribute('data-mandatory', 'true'); + } + if (info["class"]) { + info["class"].split(' ').forEach(function (optionClass) { + optionEl.classList.add(optionClass); + }); + } + if (info.data && typeof info.data === 'object') { + Object.keys(info.data).forEach(function (key) { + optionEl.setAttribute('data-' + (0, helper_1.kebabCase)(key), info.data[key]); + }); + } + return optionEl; + }; + return Select; + }()); + exports.Select = Select; + + + /***/ }), + /* 5 */ + /***/ (function(module, exports, __webpack_require__) { + + "use strict"; + + exports.__esModule = true; + exports.Slim = void 0; + var helper_1 = __webpack_require__(0); + var data_1 = __webpack_require__(1); + var Slim = (function () { + function Slim(info) { + this.main = info.main; + this.container = this.containerDiv(); + this.content = this.contentDiv(); + this.search = this.searchDiv(); + this.list = this.listDiv(); + this.options(); + this.singleSelected = null; + this.multiSelected = null; + if (this.main.config.isMultiple) { + this.multiSelected = this.multiSelectedDiv(); + if (this.multiSelected) { + this.container.appendChild(this.multiSelected.container); + } + } + else { + this.singleSelected = this.singleSelectedDiv(); + this.container.appendChild(this.singleSelected.container); + } + if (this.main.config.addToBody) { + this.content.classList.add(this.main.config.id); + document.body.appendChild(this.content); + } + else { + this.container.appendChild(this.content); + } + this.content.appendChild(this.search.container); + this.content.appendChild(this.list); + } + Slim.prototype.containerDiv = function () { + var container = document.createElement('div'); + container.style.cssText = this.main.config.style; + this.updateContainerDivClass(container); + return container; + }; + Slim.prototype.updateContainerDivClass = function (container) { + this.main.config["class"] = this.main.select.element.className.split(' '); + container.className = ''; + container.classList.add(this.main.config.id); + container.classList.add(this.main.config.main); + for (var _i = 0, _a = this.main.config["class"]; _i < _a.length; _i++) { + var c = _a[_i]; + if (c.trim() !== '') { + container.classList.add(c); + } + } + }; + Slim.prototype.singleSelectedDiv = function () { + var _this = this; + var container = document.createElement('div'); + container.classList.add(this.main.config.singleSelected); + var placeholder = document.createElement('span'); + placeholder.classList.add('placeholder'); + container.appendChild(placeholder); + var deselect = document.createElement('span'); + deselect.innerHTML = this.main.config.deselectLabel; + deselect.classList.add('ss-deselect'); + deselect.onclick = function (e) { + e.stopPropagation(); + if (!_this.main.config.isEnabled) { + return; + } + _this.main.set(''); + }; + container.appendChild(deselect); + var arrowContainer = document.createElement('span'); + arrowContainer.classList.add(this.main.config.arrow); + var arrowIcon = document.createElement('span'); + arrowIcon.classList.add('arrow-down'); + arrowContainer.appendChild(arrowIcon); + container.appendChild(arrowContainer); + container.onclick = function () { + if (!_this.main.config.isEnabled) { + return; + } + _this.main.data.contentOpen ? _this.main.close() : _this.main.open(); + }; + return { + container: container, + placeholder: placeholder, + deselect: deselect, + arrowIcon: { + container: arrowContainer, + arrow: arrowIcon + } + }; + }; + Slim.prototype.placeholder = function () { + var selected = this.main.data.getSelected(); + if (selected === null || (selected && selected.placeholder)) { + var placeholder = document.createElement('span'); + placeholder.classList.add(this.main.config.disabled); + placeholder.innerHTML = this.main.config.placeholderText; + if (this.singleSelected) { + this.singleSelected.placeholder.innerHTML = placeholder.outerHTML; + } + } + else { + var selectedValue = ''; + if (selected) { + selectedValue = selected.innerHTML && this.main.config.valuesUseText !== true ? selected.innerHTML : selected.text; + } + if (this.singleSelected) { + this.singleSelected.placeholder.innerHTML = (selected ? selectedValue : ''); + } + } + }; + Slim.prototype.deselect = function () { + if (this.singleSelected) { + if (!this.main.config.allowDeselect) { + this.singleSelected.deselect.classList.add('ss-hide'); + return; + } + if (this.main.selected() === '') { + this.singleSelected.deselect.classList.add('ss-hide'); + } + else { + this.singleSelected.deselect.classList.remove('ss-hide'); + } + } + }; + Slim.prototype.multiSelectedDiv = function () { + var _this = this; + var container = document.createElement('div'); + container.classList.add(this.main.config.multiSelected); + var values = document.createElement('div'); + values.classList.add(this.main.config.values); + container.appendChild(values); + var add = document.createElement('div'); + add.classList.add(this.main.config.add); + var plus = document.createElement('span'); + plus.classList.add(this.main.config.plus); + plus.onclick = function (e) { + if (_this.main.data.contentOpen) { + _this.main.close(); + e.stopPropagation(); + } + }; + add.appendChild(plus); + container.appendChild(add); + container.onclick = function (e) { + if (!_this.main.config.isEnabled) { + return; + } + var target = e.target; + if (!target.classList.contains(_this.main.config.valueDelete)) { + _this.main.data.contentOpen ? _this.main.close() : _this.main.open(); + } + }; + return { + container: container, + values: values, + add: add, + plus: plus + }; + }; + Slim.prototype.values = function () { + if (!this.multiSelected) { + return; + } + var currentNodes = this.multiSelected.values.childNodes; + var selected = this.main.data.getSelected(); + var exists; + var nodesToRemove = []; + for (var _i = 0, currentNodes_1 = currentNodes; _i < currentNodes_1.length; _i++) { + var c = currentNodes_1[_i]; + exists = true; + for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) { + var s = selected_1[_a]; + if (String(s.id) === String(c.dataset.id)) { + exists = false; + } + } + if (exists) { + nodesToRemove.push(c); + } + } + for (var _b = 0, nodesToRemove_1 = nodesToRemove; _b < nodesToRemove_1.length; _b++) { + var n = nodesToRemove_1[_b]; + n.classList.add('ss-out'); + this.multiSelected.values.removeChild(n); + } + currentNodes = this.multiSelected.values.childNodes; + for (var s = 0; s < selected.length; s++) { + exists = false; + for (var _c = 0, currentNodes_2 = currentNodes; _c < currentNodes_2.length; _c++) { + var c = currentNodes_2[_c]; + if (String(selected[s].id) === String(c.dataset.id)) { + exists = true; + } + } + if (!exists) { + if (currentNodes.length === 0 || !HTMLElement.prototype.insertAdjacentElement) { + this.multiSelected.values.appendChild(this.valueDiv(selected[s])); + } + else if (s === 0) { + this.multiSelected.values.insertBefore(this.valueDiv(selected[s]), currentNodes[s]); + } + else { + currentNodes[s - 1].insertAdjacentElement('afterend', this.valueDiv(selected[s])); + } + } + } + if (selected.length === 0) { + var placeholder = document.createElement('span'); + placeholder.classList.add(this.main.config.disabled); + placeholder.innerHTML = this.main.config.placeholderText; + this.multiSelected.values.innerHTML = placeholder.outerHTML; + } + }; + Slim.prototype.valueDiv = function (optionObj) { + var _this = this; + var value = document.createElement('div'); + value.classList.add(this.main.config.value); + value.dataset.id = optionObj.id; + var text = document.createElement('span'); + text.classList.add(this.main.config.valueText); + text.innerHTML = (optionObj.innerHTML && this.main.config.valuesUseText !== true ? optionObj.innerHTML : optionObj.text); + value.appendChild(text); + if (!optionObj.mandatory) { + var deleteSpan = document.createElement('span'); + deleteSpan.classList.add(this.main.config.valueDelete); + deleteSpan.innerHTML = this.main.config.deselectLabel; + deleteSpan.onclick = function (e) { + e.preventDefault(); + e.stopPropagation(); + var shouldUpdate = false; + if (!_this.main.beforeOnChange) { + shouldUpdate = true; + } + if (_this.main.beforeOnChange) { + var selected = _this.main.data.getSelected(); + var currentValues = JSON.parse(JSON.stringify(selected)); + for (var i = 0; i < currentValues.length; i++) { + if (currentValues[i].id === optionObj.id) { + currentValues.splice(i, 1); + } + } + var beforeOnchange = _this.main.beforeOnChange(currentValues); + if (beforeOnchange !== false) { + shouldUpdate = true; + } + } + if (shouldUpdate) { + _this.main.data.removeFromSelected(optionObj.id, 'id'); + _this.main.render(); + _this.main.select.setValue(); + _this.main.data.onDataChange(); + } + }; + value.appendChild(deleteSpan); + } + return value; + }; + Slim.prototype.contentDiv = function () { + var container = document.createElement('div'); + container.classList.add(this.main.config.content); + return container; + }; + Slim.prototype.searchDiv = function () { + var _this = this; + var container = document.createElement('div'); + var input = document.createElement('input'); + var addable = document.createElement('div'); + container.classList.add(this.main.config.search); + var searchReturn = { + container: container, + input: input + }; + if (!this.main.config.showSearch) { + container.classList.add(this.main.config.hide); + input.readOnly = true; + } + input.type = 'search'; + input.placeholder = this.main.config.searchPlaceholder; + input.tabIndex = 0; + input.setAttribute('aria-label', this.main.config.searchPlaceholder); + input.setAttribute('autocapitalize', 'off'); + input.setAttribute('autocomplete', 'off'); + input.setAttribute('autocorrect', 'off'); + input.onclick = function (e) { + setTimeout(function () { + var target = e.target; + if (target.value === '') { + _this.main.search(''); + } + }, 10); + }; + input.onkeydown = function (e) { + if (e.key === 'ArrowUp') { + _this.main.open(); + _this.highlightUp(); + e.preventDefault(); + } + else if (e.key === 'ArrowDown') { + _this.main.open(); + _this.highlightDown(); + e.preventDefault(); + } + else if (e.key === 'Tab') { + if (!_this.main.data.contentOpen) { + setTimeout(function () { _this.main.close(); }, _this.main.config.timeoutDelay); + } + else { + _this.main.close(); + } + } + else if (e.key === 'Enter') { + e.preventDefault(); + } + }; + input.onkeyup = function (e) { + var target = e.target; + if (e.key === 'Enter') { + if (_this.main.addable && e.ctrlKey) { + addable.click(); + e.preventDefault(); + e.stopPropagation(); + return; + } + var highlighted = _this.list.querySelector('.' + _this.main.config.highlighted); + if (highlighted) { + highlighted.click(); + } + } + else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') { + } + else if (e.key === 'Escape') { + _this.main.close(); + } + else { + if (_this.main.config.showSearch && _this.main.data.contentOpen) { + _this.main.search(target.value); + } + else { + input.value = ''; + } + } + e.preventDefault(); + e.stopPropagation(); + }; + input.onfocus = function () { _this.main.open(); }; + container.appendChild(input); + if (this.main.addable) { + addable.classList.add(this.main.config.addable); + addable.innerHTML = '+'; + addable.onclick = function (e) { + if (_this.main.addable) { + e.preventDefault(); + e.stopPropagation(); + var inputValue = _this.search.input.value; + if (inputValue.trim() === '') { + _this.search.input.focus(); + return; + } + var addableValue = _this.main.addable(inputValue); + var addableValueStr_1 = ''; + if (!addableValue) { + return; + } + if (typeof addableValue === 'object') { + var validValue = (0, data_1.validateOption)(addableValue); + if (validValue) { + _this.main.addData(addableValue); + addableValueStr_1 = (addableValue.value ? addableValue.value : addableValue.text); + } + } + else { + _this.main.addData(_this.main.data.newOption({ + text: addableValue, + value: addableValue + })); + addableValueStr_1 = addableValue; + } + _this.main.search(''); + setTimeout(function () { + _this.main.set(addableValueStr_1, 'value', false, false); + }, 100); + if (_this.main.config.closeOnSelect) { + setTimeout(function () { + _this.main.close(); + }, 100); + } + } + }; + container.appendChild(addable); + searchReturn.addable = addable; + } + return searchReturn; + }; + Slim.prototype.highlightUp = function () { + var highlighted = this.list.querySelector('.' + this.main.config.highlighted); + var prev = null; + if (highlighted) { + prev = highlighted.previousSibling; + while (prev !== null) { + if (prev.classList.contains(this.main.config.disabled)) { + prev = prev.previousSibling; + continue; + } + else { + break; + } + } + } + else { + var allOptions = this.list.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); + prev = allOptions[allOptions.length - 1]; + } + if (prev && prev.classList.contains(this.main.config.optgroupLabel)) { + prev = null; + } + if (prev === null) { + var parent_1 = highlighted.parentNode; + if (parent_1.classList.contains(this.main.config.optgroup)) { + if (parent_1.previousSibling) { + var prevNodes = parent_1.previousSibling.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); + if (prevNodes.length) { + prev = prevNodes[prevNodes.length - 1]; + } + } + } + } + if (prev) { + if (highlighted) { + highlighted.classList.remove(this.main.config.highlighted); + } + prev.classList.add(this.main.config.highlighted); + (0, helper_1.ensureElementInView)(this.list, prev); + } + }; + Slim.prototype.highlightDown = function () { + var highlighted = this.list.querySelector('.' + this.main.config.highlighted); + var next = null; + if (highlighted) { + next = highlighted.nextSibling; + while (next !== null) { + if (next.classList.contains(this.main.config.disabled)) { + next = next.nextSibling; + continue; + } + else { + break; + } + } + } + else { + next = this.list.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); + } + if (next === null && highlighted !== null) { + var parent_2 = highlighted.parentNode; + if (parent_2.classList.contains(this.main.config.optgroup)) { + if (parent_2.nextSibling) { + var sibling = parent_2.nextSibling; + next = sibling.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')'); + } + } + } + if (next) { + if (highlighted) { + highlighted.classList.remove(this.main.config.highlighted); + } + next.classList.add(this.main.config.highlighted); + (0, helper_1.ensureElementInView)(this.list, next); + } + }; + Slim.prototype.listDiv = function () { + var list = document.createElement('div'); + list.classList.add(this.main.config.list); + list.setAttribute('role', 'listbox'); + return list; + }; + Slim.prototype.options = function (content) { + if (content === void 0) { content = ''; } + var data = this.main.data.filtered || this.main.data.data; + this.list.innerHTML = ''; + if (content !== '') { + var searching = document.createElement('div'); + searching.classList.add(this.main.config.option); + searching.classList.add(this.main.config.disabled); + searching.innerHTML = content; + this.list.appendChild(searching); + return; + } + if (this.main.config.isAjax && this.main.config.isSearching) { + var searching = document.createElement('div'); + searching.classList.add(this.main.config.option); + searching.classList.add(this.main.config.disabled); + searching.innerHTML = this.main.config.searchingText; + this.list.appendChild(searching); + return; + } + if (data.length === 0) { + var noResults = document.createElement('div'); + noResults.classList.add(this.main.config.option); + noResults.classList.add(this.main.config.disabled); + noResults.innerHTML = this.main.config.searchText; + this.list.appendChild(noResults); + return; + } + var _loop_1 = function (d) { + if (d.hasOwnProperty('label')) { + var item = d; + var optgroupEl_1 = document.createElement('div'); + optgroupEl_1.classList.add(this_1.main.config.optgroup); + var optgroupLabel = document.createElement('div'); + optgroupLabel.classList.add(this_1.main.config.optgroupLabel); + if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) { + optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable); + } + optgroupLabel.innerHTML = item.label; + optgroupEl_1.appendChild(optgroupLabel); + var options = item.options; + if (options) { + for (var _a = 0, options_1 = options; _a < options_1.length; _a++) { + var o = options_1[_a]; + optgroupEl_1.appendChild(this_1.option(o)); + } + if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) { + var master_1 = this_1; + optgroupLabel.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + for (var _i = 0, _a = optgroupEl_1.children; _i < _a.length; _i++) { + var childEl = _a[_i]; + if (childEl.className.indexOf(master_1.main.config.option) !== -1) { + childEl.click(); + } + } + }); + } + } + this_1.list.appendChild(optgroupEl_1); + } + else { + this_1.list.appendChild(this_1.option(d)); + } + }; + var this_1 = this; + for (var _i = 0, data_2 = data; _i < data_2.length; _i++) { + var d = data_2[_i]; + _loop_1(d); + } + }; + Slim.prototype.option = function (data) { + if (data.placeholder) { + var placeholder = document.createElement('div'); + placeholder.classList.add(this.main.config.option); + placeholder.classList.add(this.main.config.hide); + return placeholder; + } + var optionEl = document.createElement('div'); + optionEl.classList.add(this.main.config.option); + optionEl.setAttribute('role', 'option'); + if (data["class"]) { + data["class"].split(' ').forEach(function (dataClass) { + optionEl.classList.add(dataClass); + }); + } + if (data.style) { + optionEl.style.cssText = data.style; + } + var selected = this.main.data.getSelected(); + optionEl.dataset.id = data.id; + if (this.main.config.searchHighlight && this.main.slim && data.innerHTML && this.main.slim.search.input.value.trim() !== '') { + optionEl.innerHTML = (0, helper_1.highlight)(data.innerHTML, this.main.slim.search.input.value, this.main.config.searchHighlighter); + } + else if (data.innerHTML) { + optionEl.innerHTML = data.innerHTML; + } + if (this.main.config.showOptionTooltips && optionEl.textContent) { + optionEl.setAttribute('title', optionEl.textContent); + } + var master = this; + optionEl.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + var element = this; + var elementID = element.dataset.id; + if (data.selected === true && master.main.config.allowDeselectOption) { + var shouldUpdate = false; + if (!master.main.beforeOnChange || !master.main.config.isMultiple) { + shouldUpdate = true; + } + if (master.main.beforeOnChange && master.main.config.isMultiple) { + var selectedValues = master.main.data.getSelected(); + var currentValues = JSON.parse(JSON.stringify(selectedValues)); + for (var i = 0; i < currentValues.length; i++) { + if (currentValues[i].id === elementID) { + currentValues.splice(i, 1); + } + } + var beforeOnchange = master.main.beforeOnChange(currentValues); + if (beforeOnchange !== false) { + shouldUpdate = true; + } + } + if (shouldUpdate) { + if (master.main.config.isMultiple) { + master.main.data.removeFromSelected(elementID, 'id'); + master.main.render(); + master.main.select.setValue(); + master.main.data.onDataChange(); + } + else { + master.main.set(''); + } + } + } + else { + if (data.disabled || data.selected) { + return; + } + if (master.main.config.limit && Array.isArray(selected) && master.main.config.limit <= selected.length) { + return; + } + if (master.main.beforeOnChange) { + var value = void 0; + var objectInfo = JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID))); + objectInfo.selected = true; + if (master.main.config.isMultiple) { + value = JSON.parse(JSON.stringify(selected)); + value.push(objectInfo); + } + else { + value = JSON.parse(JSON.stringify(objectInfo)); + } + var beforeOnchange = master.main.beforeOnChange(value); + if (beforeOnchange !== false) { + master.main.set(elementID, 'id', master.main.config.closeOnSelect); + } + } + else { + master.main.set(elementID, 'id', master.main.config.closeOnSelect); + } + } + }); + var isSelected = selected && (0, helper_1.isValueInArrayOfObjects)(selected, 'id', data.id); + if (data.disabled || isSelected) { + optionEl.onclick = null; + if (!master.main.config.allowDeselectOption) { + optionEl.classList.add(this.main.config.disabled); + } + if (master.main.config.hideSelectedOption) { + optionEl.classList.add(this.main.config.hide); + } + } + if (isSelected) { + optionEl.classList.add(this.main.config.optionSelected); + } + else { + optionEl.classList.remove(this.main.config.optionSelected); + } + return optionEl; + }; + return Slim; + }()); + exports.Slim = Slim; + + + /***/ }) + /******/ ])["default"]; +}); diff --git a/config/assets.rb b/config/assets.rb index 396b6d7..60eaeda 100644 --- a/config/assets.rb +++ b/config/assets.rb @@ -4,6 +4,7 @@ Decidim::Shakapacker.register_path("#{base_path}/app/packs") Decidim::Shakapacker.register_entrypoints( - decidim_ephemeral_authorization_handler: "#{base_path}/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js" + decidim_ephemeral_authorization_handler: "#{base_path}/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js", + decidim_select_country: "#{base_path}/app/packs/entrypoints/decidim_select_country.js" ) Decidim::Shakapacker.register_stylesheet_import("stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler") From 995637afc195d3d69e999faee820e47b0d8b7813 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:41:33 +0200 Subject: [PATCH 11/14] feat: add and update locales files --- config/i18n-tasks.yml | 9 +++++++++ config/locales/de.yml | 40 ++++++++++++++++++++++++++++++++++++++++ config/locales/en.yml | 31 +++++++++++++++++++++++++++++++ config/locales/fr.yml | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 config/locales/de.yml create mode 100644 config/locales/fr.yml diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index 32a2efb..d4024e7 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -8,3 +8,12 @@ ignore_unused: ignore_missing: - decidim.participatory_processes.scopes.global + - decidim.forms.errors.error + - decidim.verifications.authorizations.create.success + - decidim.verifications.authorizations.create.transferred + - decidim.ephemeral_authorization_handler.sms.success + - decidim.ephemeral_authorization_handler.sms.error + - decidim.ephemeral_authorization_handler.verification.authorizations.sms.* + - decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code.* + - decidim.authorization_handlers.ephemeral_authorization_handler.* + - decidim.components.ephemeral_authorization_handler.* diff --git a/config/locales/de.yml b/config/locales/de.yml new file mode 100644 index 0000000..0a5d26e --- /dev/null +++ b/config/locales/de.yml @@ -0,0 +1,40 @@ +--- +de: + decidim: + authorization_handlers: + ephemeral_authorization_handler: + explanation: Lassen Sie sich verifizieren, indem Sie einen an Ihr Mobiltelefon + gesendeten Code eingeben. + fields: + phone_number: telefonnummer + name: Ephemere Autorisierungsbearbeiter per SMS + components: + ephemeral_authorization_handler: + name: Ephemere Autorisierungsbearbeiter + ephemeral_authorization_handler: + sms: + error: Ein Fehler ist aufgetreten und wurde protokolliert. Bitte versuchen + Sie es erneut. Wenn der Fehler weiterhin besteht, wenden Sie sich bitte + an den Plattform-Support, um weitere Unterstützung zu erhalten. + success: Verifizierungscode an %{phone_number} gesendet. + verification: + authorizations: + sms: + error: Es ist ein Fehler aufgetreten, der protokolliert wurde. Bitte versuchen + Sie es erneut. Sollte der Fehler weiterhin bestehen, wenden Sie sich + bitte an den Plattform-Support, um weitere Hilfe zu erhalten. + have_not_received: Haben Sie ihn nicht erhalten? + resend_code: Code erneut senden + submit: Absenden + success: Bestätigungscode wurde gesendet an %{phone_number}. + welcome: Willkommen auf der
%{organization}-Plattform! + verify_sms_code: + enter_code: 'Bitte geben Sie den Code ein:' + error: Der eingegebene Code ist ungültig + have_not_received: Haben Sie ihn nicht erhalten? + inputs: Ziffer %{count} + instruction: Sie sollten den Code an %{contact_info} erhalten haben. + resend_code: Code erneut senden + submit: Absenden + success: Verifizierung erfolgreich + welcome: Willkommen auf der
%{organization}-Plattform! diff --git a/config/locales/en.yml b/config/locales/en.yml index b1fc940..b195905 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,6 +1,37 @@ --- en: decidim: + authorization_handlers: + ephemeral_authorization_handler: + explanation: Get verified by entering a code sent to your mobile phone + fields: + phone_number: phone number + name: Ephemeral Authorization via SMS components: ephemeral_authorization_handler: name: EphemeralAuthorizationHandler + ephemeral_authorization_handler: + sms: + error: An error occurred which has been logged, please try again. If the error + persists, please contact the platform support for further help. + success: Verification code sent to %{phone_number}. + verification: + authorizations: + sms: + error: An error occurred which has been logged, please try again. If the + error persists, please contact the platform support for further help. + have_not_received: You have not received it? + resend_code: Resend code + submit: Submit + success: Verification code sent to %{phone_number}. + welcome: Welcome to the
%{organization} platform! + verify_sms_code: + enter_code: 'Please enter the code:' + error: The code entered is not valid + have_not_received: You have not received it? + inputs: digit number %{count} + instruction: You should have received the code to %{contact_info} + resend_code: Resend code + submit: Submit + success: Verification successful + welcome: Welcome to the
%{organization} platform! diff --git a/config/locales/fr.yml b/config/locales/fr.yml new file mode 100644 index 0000000..a4ce823 --- /dev/null +++ b/config/locales/fr.yml @@ -0,0 +1,38 @@ +--- +fr: + decidim: + authorization_handlers: + ephemeral_authorization_handler: + explanation: Obtenir une vérification en saisissant un code envoyé sur votre + téléphone portable + fields: + phone_number: numéro de téléphone + name: Autorisation Ephémère par SMS + components: + ephemeral_authorization_handler: + name: Autorisation Ephémère + ephemeral_authorization_handler: + sms: + error: Une erreur est survenue, veuillez réessayer. Si l'erreur persiste, + veuillez contacter le support de la plateforme pour plus d'aide. + success: Code de vérification envoyé à %{phone_number}. + verification: + authorizations: + sms: + error: Une erreur est survenue, veuillez réessayer. Si l'erreur persiste, + veuillez contacter le support de la plateforme pour plus d'aide. + have_not_received: Vous ne l'avez pas reçu? + resend_code: Renvoyer le code + submit: Soumettre + success: Code de vérification envoyé à %{phone_number}. + welcome: Bienvenue sur la plateforme
%{organization} !. + verify_sms_code: + enter_code: 'Veuillez saisir le code :' + error: Le code saisi n'est pas valide + have_not_received: Vous ne l'avez pas reçu? + inputs: nombre de chiffres %{count} + instruction: Vous devriez avoir reçu le code au %{contact_info} + resend_code: Renvoyer le code + submit: Soumettre + success: Vérification réussie + welcome: Bienvenue sur la plateforme
%{organization} ! From 8b386ac58583d1a00c7f6f84b3043d6f17c60199 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 17:42:07 +0200 Subject: [PATCH 12/14] test: add and update test files --- .../test/factories.rb | 18 +- spec/factories.rb | 1 + spec/forms/sms_code_form_spec.rb | 55 ++++++ spec/forms/verification_code_form_spec.rb | 42 +++++ spec/i18n_spec.rb | 32 ++++ .../version_spec.rb | 6 +- spec/permissions/admin/permissions_spec.rb | 6 +- .../ephemeral_authorization_handler_spec.rb | 67 +++++++ .../ephemeral_user_authorization_spec.rb | 169 ++++++++++++++++++ ...er_manages_ephemeral_authorization_spec.rb | 77 ++++++++ 10 files changed, 460 insertions(+), 13 deletions(-) create mode 100644 spec/forms/sms_code_form_spec.rb create mode 100644 spec/forms/verification_code_form_spec.rb create mode 100644 spec/i18n_spec.rb create mode 100644 spec/services/ephemeral_authorization_handler_spec.rb create mode 100644 spec/system/ephemeral_user_authorization_spec.rb create mode 100644 spec/system/user_manages_ephemeral_authorization_spec.rb diff --git a/lib/decidim/ephemeral_authorization_handler/test/factories.rb b/lib/decidim/ephemeral_authorization_handler/test/factories.rb index 307b304..d36e001 100644 --- a/lib/decidim/ephemeral_authorization_handler/test/factories.rb +++ b/lib/decidim/ephemeral_authorization_handler/test/factories.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require "decidim/components/namer" +# require "decidim/components/namer" require "decidim/core/test/factories" -FactoryBot.define do - factory :ephemeral_authorization_handler_component, parent: :component do - name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :ephemeral_authorization_handler).i18n_name } - manifest_name :ephemeral_authorization_handler - participatory_space { create(:participatory_process, :with_steps) } - end +# FactoryBot.define do +# factory :ephemeral_authorization_handler_component, parent: :component do +# name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :ephemeral_authorization_handler).i18n_name } +# manifest_name :ephemeral_authorization_handler +# participatory_space { create(:participatory_process, :with_steps) } +# end - # Add engine factories here -end +# Add engine factories here +# end diff --git a/spec/factories.rb b/spec/factories.rb index 12421ad..54e7ae5 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true require "decidim/ephemeral_authorization_handler/test/factories" +require "decidim/proposals/test/factories" diff --git a/spec/forms/sms_code_form_spec.rb b/spec/forms/sms_code_form_spec.rb new file mode 100644 index 0000000..229b14c --- /dev/null +++ b/spec/forms/sms_code_form_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim + module EphemeralAuthorizationHandler + module Verification + describe SmsCodeForm do + subject { form } + let(:form) do + described_class.from_params( + attributes + ) + end + + let(:phone_number) { "0123456789" } + let(:phone_country) { "BR" } + let(:attributes) do + { + phone_number:, + phone_country: + } + end + + context "when everything is OK" do + it { is_expected.to be_valid } + end + + context "when there is no phone number" do + let(:phone_number) { nil } + + it "is invalid" do + expect(subject).not_to be_valid + end + end + + context "when there is no phone country" do + let(:phone_country) { nil } + + it "is invalid" do + expect(subject).not_to be_valid + end + end + + context "with invalid phone number format" do + let(:phone_number) { "-1234567" } + + it "is invalid" do + expect(subject).not_to be_valid + end + end + end + end + end +end diff --git a/spec/forms/verification_code_form_spec.rb b/spec/forms/verification_code_form_spec.rb new file mode 100644 index 0000000..a4b7c92 --- /dev/null +++ b/spec/forms/verification_code_form_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require "spec_helper" + +module Decidim + module EphemeralAuthorizationHandler + module Verification + describe VerificationCodeForm do + subject { form } + let(:form) do + described_class.from_params( + attributes + ) + end + + let(:verification) { "0123" } + let(:current_locale) { "en" } + let(:organization) { create(:organization) } + + let(:attributes) do + { + verification:, + current_locale:, + organization: + } + end + + context "when everything is OK" do + it { is_expected.to be_valid } + end + + context "when there is no verification code" do + let(:verification) { nil } + + it "is invalid" do + expect(subject).not_to be_valid + end + end + end + end + end +end diff --git a/spec/i18n_spec.rb b/spec/i18n_spec.rb new file mode 100644 index 0000000..6991f01 --- /dev/null +++ b/spec/i18n_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "i18n/tasks" + +describe "I18n sanity" do + let(:locales) do + "en, fr, de" + end + + let(:i18n) { I18n::Tasks::BaseTask.new(locales: locales.split(",")) } + let(:missing_keys) { i18n.missing_keys } + let(:unused_keys) { i18n.unused_keys } + let(:non_normalized_paths) { i18n.non_normalized_paths } + + it "does not have missing keys" do + expect(missing_keys).to be_empty, "#{missing_keys.inspect} are missing" + end + + # it "does not have unused keys" do + # expect(unused_keys).to be_empty, "#{unused_keys.inspect} are unused" + # end + + unless ENV["SKIP_NORMALIZATION"] + it "is normalized" do + error_message = "The following files need to be normalized:\n" \ + "#{non_normalized_paths.map { |path| " #{path}" }.join("\n")}\n" \ + "Please run `bundle exec i18n-tasks normalize --locales #{locales}` to fix them" + + expect(non_normalized_paths).to be_empty, error_message + end + end +end diff --git a/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb b/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb index b38d28b..c8eec42 100644 --- a/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb +++ b/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb @@ -7,7 +7,11 @@ module Decidim subject { described_class } it "has version" do - expect(subject.version).to eq("0.31.2") + expect(subject.version).to eq("1.0.0") + end + + it "has decidim_version" do + expect(subject.decidim_version).to eq("~> 0.31") end end end diff --git a/spec/permissions/admin/permissions_spec.rb b/spec/permissions/admin/permissions_spec.rb index ed270f0..5101f23 100644 --- a/spec/permissions/admin/permissions_spec.rb +++ b/spec/permissions/admin/permissions_spec.rb @@ -6,7 +6,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin describe Permissions do subject { described_class.new(user, permission_action, context).permissions.allowed? } - let(:organization) { create :organization } + let(:organization) { create(:organization) } let(:context) do { current_organization: organization @@ -18,7 +18,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin let(:permission_action) { Decidim::PermissionAction.new(**action) } context "when user is admin" do - let(:user) { create :user, :admin, organization: organization } + let(:user) { create(:user, :admin, organization: organization) } it { is_expected.to be_truthy } @@ -32,7 +32,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin end context "when user is not admin" do - let(:user) { create :user, organization: organization } + let(:user) { create(:user, organization: organization) } it_behaves_like "permission is not set" end diff --git a/spec/services/ephemeral_authorization_handler_spec.rb b/spec/services/ephemeral_authorization_handler_spec.rb new file mode 100644 index 0000000..ddb0c12 --- /dev/null +++ b/spec/services/ephemeral_authorization_handler_spec.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe EphemeralAuthorizationHandler do + subject do + described_class.new( + phone_number:, + phone_country: + ) + end + + let(:phone_number) { "+0640123422" } + let(:phone_country) { "BR" } + + context "when everything is valid" do + it "is valid" do + expect(subject).to be_valid + end + end + + context "when phone number is nil" do + let(:phone_number) { nil } + + it "is invalid" do + expect(subject).to be_invalid + end + end + + context "when phone country is nil" do + let(:phone_country) { nil } + + it "is invalid" do + expect(subject).to be_invalid + end + end + + context "when invalid phone number format" do + let(:phone_number) { "-1234567" } + + it "is invalid" do + expect(subject).not_to be_valid + end + end + + describe "unique_id" do + context "when there is a phone number" do + it "returns a formatted phone number as unique id" do + expect(subject.unique_id).to eq("+55640123422") + end + end + + context "when there is a no phone number" do + let(:phone_number) { nil } + + it "returns nil as unique id" do + expect(subject.unique_id).to be_nil + end + end + end + + describe "ephemeral" do + it "returns true" do + expect(described_class.ephemeral?).to be true + end + end +end diff --git a/spec/system/ephemeral_user_authorization_spec.rb b/spec/system/ephemeral_user_authorization_spec.rb new file mode 100644 index 0000000..8f47750 --- /dev/null +++ b/spec/system/ephemeral_user_authorization_spec.rb @@ -0,0 +1,169 @@ +# frozen_string_literal: true + +require "spec_helper" + +# rubocop:disable RSpec/DescribeClass +describe "Ephemeral user authorization" do + # rubocop:enable RSpec/DescribeClass + include_context "with a component" + + let(:manifest_name) { "proposals" } + let!(:organization) do + create(:organization, available_authorizations: %w(ephemeral_authorization_handler)) + end + + let!(:proposal) { create(:proposal, component:) } + let(:permissions) do + { create: { authorization_handlers: { ephemeral_authorization_handler: {} } } } + end + + let!(:component) do + create( + :proposal_component, + :with_creation_enabled, + manifest:, + participatory_space:, + permissions: + ) + end + + before do + switch_to_host(organization.host) + end + + context "when not signed in" do + before do + visit main_component_path(component) + # rubocop:disable RSpec/AnyInstance + allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234") + # rubocop:enable RSpec/AnyInstance + end + + context "and data does not match any user" do + it "creates an ephemeral user and allows to create a new proposal" do + ephemeral_users_count = Decidim::User.ephemeral.size + ephemeral_authorizations_count = Decidim::Authorization.where(name: "ephemeral_authorization_handler").size + click_on "New proposal" + # on sms form + expect(page).to have_content "Phone country" + expect(page).to have_content "Phone number" + fill_in "Phone number", with: "0123456789" + click_on "Submit" + # on verify_sms_code form + expect(page).to have_content("Please enter the code:") + fill_in "digit1", with: 1 + fill_in "digit2", with: 2 + fill_in "digit3", with: 3 + fill_in "digit4", with: 4 + # fill the hidden input that allows to verify code + page.execute_script(<<~JS) + document.querySelector('input[name="verification_code[verification]"]').value = '1234'; + JS + click_on "Submit" + expect(page).to have_content("Verification successful") + expect(page).to have_content("Create new proposal") + # new ephemeral user and new authorization created + expect(Decidim::User.ephemeral.reload.size).to eq(ephemeral_users_count + 1) + expect(Decidim::Authorization.where(name: "ephemeral_authorization_handler").reload.size).to eq(ephemeral_authorizations_count + 1) + end + end + + context "when the current user is ephemeral" do + before do + click_on "New proposal" + ephemeral_verification_process + end + + context "when data matches an existing ephemeral user" do + it "the ephemeral user is able to recover its session" do + ephemeral_users_count = Decidim::User.ephemeral.size + ephemeral_authorizations_count = Decidim::Authorization.where(name: "ephemeral_authorization_handler").size + fill_in :proposal_title, with: "This is a new proposal" + fill_in :proposal_body, with: "The proposal includes a lot of ideas" + click_on "Continue" + + expect(page).to have_content "Proposal successfully created. Saved as a Draft." + + accept_confirm do + find("#main-bar [data-close]").click + end + sleep 2 + visit main_component_path(component) + sleep 2 + click_on "New proposal" + ephemeral_verification_process + # retrieving draft proposal + expect(page).to have_content "Edit proposal draft" + expect(page).to have_field :proposal_title, with: "This is a new proposal" + expect(page).to have_field :proposal_body, with: "The proposal includes a lot of ideas" + # new ephemeral user created but no new authorization as it is transferred + expect(Decidim::User.ephemeral.reload.size).to eq(ephemeral_users_count + 1) + expect(Decidim::Authorization.where(name: "ephemeral_authorization_handler").reload.size).to eq(ephemeral_authorizations_count) + end + end + end + end + + context "when a regular user tries to create a new proposal" do + # default code is +376 + let!(:first_authorization) { create(:authorization, :granted, user: ephemeral_user, name: "ephemeral_authorization_handler", unique_id: "+376123456789") } + let!(:ephemeral_user) { create(:user, :ephemeral, organization:) } + let!(:proposal) { create(:proposal, component:, users: [ephemeral_user]) } + let(:user) { create(:user, :confirmed, organization:) } + + before do + login_as user, scope: :user + visit main_component_path(component) + # rubocop:disable RSpec/AnyInstance + allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234") + # rubocop:enable RSpec/AnyInstance + click_on "New proposal" + end + + it "redirects to sms verification form" do + expect(page).to have_content "Phone country" + expect(page).to have_content "Phone number" + end + + context "and verifies with the same data than an exisiting ephemeral user" do + before do + fill_in "Phone number", with: "0123456789" + click_on "Submit" + fill_in "digit1", with: 1 + fill_in "digit2", with: 2 + fill_in "digit3", with: 3 + fill_in "digit4", with: 4 + page.execute_script(<<~JS) + document.querySelector('input[name="verification_code[verification]"]').value = '1234'; + JS + end + + it "transfers the authorization" do + expect { click_on "Submit" }.not_to change(Decidim::Authorization, :count) + sleep 2 + expect(Decidim::Authorization.where(user: ephemeral_user)).to be_blank + expect(first_authorization.reload.user).to eq(user) + end + + it "transfers the authorship of the proposal" do + expect(proposal.authors).to contain_exactly(ephemeral_user) + click_on "Submit" + sleep 2 + expect(proposal.reload.authors).to contain_exactly(user) + end + end + end + + def ephemeral_verification_process + fill_in "Phone number", with: "0123456789" + click_on "Submit" + fill_in "digit1", with: 1 + fill_in "digit2", with: 2 + fill_in "digit3", with: 3 + fill_in "digit4", with: 4 + page.execute_script(<<~JS) + document.querySelector('input[name="verification_code[verification]"]').value = '1234'; + JS + click_on "Submit" + end +end diff --git a/spec/system/user_manages_ephemeral_authorization_spec.rb b/spec/system/user_manages_ephemeral_authorization_spec.rb new file mode 100644 index 0000000..6ba827b --- /dev/null +++ b/spec/system/user_manages_ephemeral_authorization_spec.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +require "spec_helper" + +# rubocop:disable RSpec/DescribeClass +describe "User manages ephemeral authorization" do + # rubocop:enable RSpec/DescribeClass + let!(:organization) do + create(:organization, available_authorizations: ["ephemeral_authorization_handler"]) + end + + let(:user) { create(:user, :confirmed) } + + before do + switch_to_host(organization.host) + login_as user, scope: :user + + visit decidim.account_path + click_on "Authorizations" + end + + it "displays the authorization item" do + within ".authorizations-list" do + expect(page).to have_content("Ephemeral Authorization via SMS") + expect(page).to have_content("Get verified by entering a code sent to your mobile phone") + end + end + + context "when accessing ephemeral authorization" do + before do + click_on "Ephemeral Authorization via SMS" + # rubocop:disable RSpec/AnyInstance + allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234") + # rubocop:enable RSpec/AnyInstance + end + + it "displays sms form" do + expect(page).to have_content "Phone country" + expect(page).to have_content "Phone number" + end + + it "allows user to fill sms form and verify_sms_code, and redirect to authorizations page" do + fill_in "Phone number", with: "0123456789" + click_on "Submit" + + expect(page).to have_content("Please enter the code:") + find('input[name="digit1"]').set(1) + find('input[name="digit2"]').set(2) + find('input[name="digit3"]').set(3) + find('input[name="digit4"]').set(4) + # fill the hidden input that allows to verify code + page.execute_script(<<~JS) + document.querySelector('input[name="verification_code[verification]"]').value = '1234'; + JS + click_on "Submit" + expect(page).to have_content("Participant settings - Authorizations") + expect(page).to have_content("Verification successful") + end + + it "displays an error message if verification code is false" do + fill_in "Phone number", with: "0123456789" + click_on "Submit" + + expect(page).to have_content("Please enter the code:") + find('input[name="digit1"]').set(0) + find('input[name="digit2"]').set(0) + find('input[name="digit3"]').set(0) + find('input[name="digit4"]').set(0) + # fill the hidden input that allows to verify code + page.execute_script(<<~JS) + document.querySelector('input[name="verification_code[verification]"]').value = '0000'; + JS + click_on "Submit" + expect(page).to have_content("The code entered is not valid") + end + end +end From a4508989451b34941cb49c2405632b795129bcd0 Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Mon, 27 Apr 2026 18:09:56 +0200 Subject: [PATCH 13/14] ci: update ci to remove problematic files linked to intiatives --- .github/workflows/ci_ephemeral_authorization_handler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci_ephemeral_authorization_handler.yml b/.github/workflows/ci_ephemeral_authorization_handler.yml index 316c8d6..54f075f 100644 --- a/.github/workflows/ci_ephemeral_authorization_handler.yml +++ b/.github/workflows/ci_ephemeral_authorization_handler.yml @@ -60,6 +60,10 @@ jobs: npm- - run: bundle exec rake test_app name: Create test app + - run: | + rm -f ./spec/decidim_dummy_app/app/services/dummy_signature_handler.rb + rm -f ./spec/decidim_dummy_app/app/services/dummy_sms_mobile_phone_validator.rb + name: Remove Initiative-dependent dummy files - run: mkdir -p ./spec/decidim_dummy_app/tmp/screenshots name: Create the screenshots folder - uses: nanasess/setup-chromedriver@v2 From 2e18eaf2e12688ae2000238e95b9707a5ffec9dd Mon Sep 17 00:00:00 2001 From: stephanie rousset Date: Tue, 28 Apr 2026 12:37:12 +0200 Subject: [PATCH 14/14] fix: add missing french translation --- config/locales/fr.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a4ce823..0620c31 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -36,3 +36,7 @@ fr: submit: Soumettre success: Vérification réussie welcome: Bienvenue sur la plateforme
%{organization} ! + layouts: + decidim: + header: + confirm_close_ephemeral_session: Si vous quittez la page, votre session temporaire sera fermée. Toutefois, votre progression et votre activité seront enregistrées. Si vous avez terminé votre activité, cliquez sur OK.