decidim-core 0.28.5 → 0.28.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +5 -3
  3. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  4. data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
  5. data/app/cells/decidim/user_activity/show.erb +1 -1
  6. data/app/commands/decidim/create_omniauth_registration.rb +14 -8
  7. data/app/commands/decidim/search.rb +14 -0
  8. data/app/controllers/decidim/profiles_controller.rb +2 -2
  9. data/app/controllers/decidim/reports_controller.rb +1 -1
  10. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  11. data/app/forms/decidim/account_form.rb +5 -2
  12. data/app/helpers/decidim/orders_helper.rb +2 -1
  13. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  14. data/app/models/decidim/user.rb +0 -4
  15. data/app/models/decidim/user_base_entity.rb +4 -0
  16. data/app/packs/src/decidim/index.js +4 -2
  17. data/app/packs/src/decidim/map/provider/here.js +1 -1
  18. data/app/packs/stylesheets/decidim/_hashtags.scss +5 -0
  19. data/app/packs/stylesheets/decidim/_header.scss +20 -2
  20. data/app/packs/stylesheets/decidim/application.scss +1 -0
  21. data/app/presenters/decidim/log/user_presenter.rb +1 -0
  22. data/app/services/decidim/base_diff_renderer.rb +2 -0
  23. data/app/services/decidim/static_map_generator.rb +1 -1
  24. data/app/views/decidim/last_activities/index.html.erb +1 -1
  25. data/app/views/decidim/reported_mailer/hide.html.erb +1 -1
  26. data/app/views/decidim/reported_mailer/report.html.erb +1 -1
  27. data/app/views/decidim/searches/_count.html.erb +1 -1
  28. data/app/views/decidim/searches/_filters.html.erb +40 -38
  29. data/app/views/decidim/shared/_orders.html.erb +2 -2
  30. data/config/locales/ar.yml +44 -13
  31. data/config/locales/bg.yml +17 -8
  32. data/config/locales/bs-BA.yml +2 -0
  33. data/config/locales/ca-IT.yml +2115 -0
  34. data/config/locales/ca.yml +56 -13
  35. data/config/locales/cs.yml +57 -15
  36. data/config/locales/de.yml +51 -8
  37. data/config/locales/el.yml +14 -2
  38. data/config/locales/en.yml +43 -0
  39. data/config/locales/eo.yml +2 -0
  40. data/config/locales/es-MX.yml +56 -13
  41. data/config/locales/es-PY.yml +60 -17
  42. data/config/locales/es.yml +61 -18
  43. data/config/locales/eu.yml +114 -73
  44. data/config/locales/fi-plain.yml +46 -11
  45. data/config/locales/fi.yml +48 -13
  46. data/config/locales/fr-CA.yml +52 -9
  47. data/config/locales/fr.yml +51 -8
  48. data/config/locales/ga-IE.yml +6 -0
  49. data/config/locales/gl.yml +29 -2
  50. data/config/locales/hu.yml +16 -9
  51. data/config/locales/id-ID.yml +28 -3
  52. data/config/locales/is-IS.yml +14 -1
  53. data/config/locales/it.yml +44 -14
  54. data/config/locales/ja.yml +55 -10
  55. data/config/locales/lb.yml +27 -7
  56. data/config/locales/lt.yml +8 -2
  57. data/config/locales/lv.yml +22 -2
  58. data/config/locales/nl.yml +27 -5
  59. data/config/locales/no.yml +20 -0
  60. data/config/locales/pl.yml +14 -5
  61. data/config/locales/pt-BR.yml +17 -7
  62. data/config/locales/pt.yml +20 -0
  63. data/config/locales/ro-RO.yml +232 -73
  64. data/config/locales/ru.yml +29 -1
  65. data/config/locales/sk.yml +34 -6
  66. data/config/locales/sl.yml +4 -0
  67. data/config/locales/sr-CS.yml +2 -0
  68. data/config/locales/sv.yml +28 -9
  69. data/config/locales/tr-TR.yml +26 -7
  70. data/config/locales/uk.yml +16 -1
  71. data/config/locales/zh-CN.yml +22 -2
  72. data/config/locales/zh-TW.yml +10 -0
  73. data/lib/decidim/attributes/time_with_zone.rb +5 -1
  74. data/lib/decidim/content_parsers/blob_parser.rb +10 -8
  75. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  76. data/lib/decidim/core/test/shared_examples/reports_examples.rb +48 -6
  77. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +26 -0
  78. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +26 -0
  79. data/lib/decidim/core/version.rb +1 -1
  80. data/lib/decidim/map/provider/dynamic_map/here.rb +1 -40
  81. data/lib/decidim/map/provider/static_map/here.rb +34 -0
  82. data/lib/decidim/nicknamizable.rb +1 -1
  83. data/lib/decidim/reportable.rb +6 -2
  84. data/lib/decidim/translatable_attributes.rb +5 -1
  85. data/lib/decidim/view_model.rb +1 -0
  86. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +23 -20
  87. metadata +8 -7
  88. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +0 -212
@@ -20,19 +20,19 @@ module Decidim
20
20
  # https://github.com/rails/rails/blob/a7e379896552ce43b822385c03c37f2bd47739d3/activestorage/config/routes.rb#L5-L14
21
21
  BLOB_REGEX = %r{
22
22
  # Group 1: Host part
23
- (
23
+ (?<host_part>
24
24
  # Group 2: Domain and subpath part
25
- https?://((?!/rails).)+
25
+ #{URI::DEFAULT_PARSER.make_regexp(%w(https http))}
26
26
  )?
27
27
  /rails/active_storage
28
28
  # Group 3: Blob path, representation path or disk service path
29
- /(blobs/redirect|blobs/proxy|blobs|representations/redirect|representations/proxy|representations|disk)
29
+ /(?<type_part>blobs/redirect|blobs/proxy|blobs|representations/redirect|representations/proxy|representations|disk)
30
30
  # Group 4: Signed ID for blobs or encoded key for disk service
31
- /([^/]+)
31
+ /(?<key_part>[^/]+)
32
32
  # Group 5: Variation part (only for representations)
33
33
  (
34
34
  # Group 6: Variation key for representations
35
- /([\w.=-]+)
35
+ /(?<variation_part>[\w.=-]+)
36
36
  )?
37
37
  # Group 7: Filename
38
38
  /([\w.=-]+)
@@ -46,8 +46,10 @@ module Decidim
46
46
 
47
47
  def replace_blobs(text)
48
48
  text.gsub(BLOB_REGEX) do |match|
49
- type_part = Regexp.last_match(3)
50
- key_part = Regexp.last_match(4)
49
+ named_captures = Regexp.last_match.named_captures
50
+
51
+ type_part = named_captures["type_part"]
52
+ key_part = named_captures["key_part"]
51
53
 
52
54
  variation_key = nil
53
55
  blob =
@@ -59,7 +61,7 @@ module Decidim
59
61
  # Representation or blob
60
62
  if type_part.start_with?("representations")
61
63
  # Representation
62
- variation_part = Regexp.last_match(6)
64
+ variation_part = named_captures["variation_part"]
63
65
  variation_key = generate_variation_key(variation_part)
64
66
  end
65
67
 
@@ -49,7 +49,7 @@ module Decidim
49
49
 
50
50
  def existing_mentionables
51
51
  @existing_mentionables ||= mentionable_class.where(
52
- "decidim_organization_id = ? AND LOWER(nickname) IN (?)",
52
+ "decidim_organization_id = ? AND nickname IN (?)",
53
53
  current_organization.id,
54
54
  content_nicknames
55
55
  )
@@ -33,17 +33,47 @@ shared_examples "higher user role hides" do
33
33
  before do
34
34
  login_as user, scope: :user
35
35
  end
36
- around do |example|
37
- previous = Capybara.raise_server_errors
38
36
 
39
- Capybara.raise_server_errors = false
40
- example.run
41
- Capybara.raise_server_errors = previous
37
+ it "reports the resource" do
38
+ visit reportable_path
39
+
40
+ expect(page).to have_css(%(button[data-dialog-open="flagModal"]))
41
+ find(%(button[data-dialog-open="flagModal"])).click
42
+ expect(page).to have_css(".flag-modal", visible: :visible)
43
+
44
+ within ".flag-modal" do
45
+ find(:css, "input[name='report[hide]']").set(true)
46
+ click_on "Hide"
47
+ end
48
+
49
+ sleep(1)
50
+
51
+ expect(page).to have_current_path(reportable_index_path, ignore_query: true)
52
+
53
+ expect(reportable.reload).to be_hidden
42
54
  end
55
+ end
56
+ end
57
+
58
+ shared_examples "higher user role hides resource with comments" do
59
+ context "and the admin hides a resource with comments" do
60
+ let!(:comments) { create_list(:comment, 2, body: "Dummy comment", commentable: reportable, author: user) }
61
+
62
+ before do
63
+ login_as user, scope: :user
64
+ Decidim::Ai::SpamDetection.create_reporting_user!
65
+ end
66
+
67
+ it "hides the resource" do
68
+ visit decidim.search_path
69
+ expect(page).to have_content(translated(comments.first.body))
70
+ expect(page).to have_content(translated(comments.second.body))
43
71
 
44
- it "reports the resource" do
45
72
  visit reportable_path
46
73
 
74
+ expect(page).to have_content(translated(comments.first.body))
75
+ expect(page).to have_content(translated(comments.second.body))
76
+
47
77
  expect(page).to have_css(%(button[data-dialog-open="flagModal"]))
48
78
  find(%(button[data-dialog-open="flagModal"])).click
49
79
  expect(page).to have_css(".flag-modal", visible: :visible)
@@ -53,7 +83,19 @@ shared_examples "higher user role hides" do
53
83
  click_button "Hide"
54
84
  end
55
85
 
86
+ sleep(1)
87
+
88
+ expect(page).to have_current_path(reportable_index_path, ignore_query: true)
89
+
90
+ perform_enqueued_jobs
91
+
56
92
  expect(reportable.reload).to be_hidden
93
+ expect(comments.first.reload).to be_hidden
94
+ expect(comments.second.reload).to be_hidden
95
+
96
+ visit decidim.search_path
97
+ expect(page).not_to have_content(translated(comments.first.body))
98
+ expect(page).not_to have_content(translated(comments.second.body))
57
99
  end
58
100
  end
59
101
  end
@@ -8,6 +8,7 @@ shared_examples "an uncommentable component" do
8
8
  manifest:,
9
9
  participatory_space:)
10
10
  end
11
+ let!(:comment) { create(:comment, commentable: resources.first) }
11
12
 
12
13
  it "does not displays comments count" do
13
14
  component.update!(settings: { comments_enabled: false })
@@ -18,4 +19,29 @@ shared_examples "an uncommentable component" do
18
19
  expect(page).not_to have_link(resource_locator(ressource).path)
19
20
  end
20
21
  end
22
+
23
+ describe "when search a comment in the global search" do
24
+ it "does displays the comments" do
25
+ visit decidim.root_path
26
+
27
+ within ".main-bar__search" do
28
+ fill_in "term", with: comment.body["en"]
29
+ find("input#input-search").native.send_keys :enter
30
+ end
31
+
32
+ expect(page).to have_content("1 Results for the search")
33
+ end
34
+
35
+ it "does not displays the comment when comments are disable" do
36
+ component.update!(settings: { comments_enabled: false })
37
+ visit decidim.root_path
38
+
39
+ within ".main-bar__search" do
40
+ fill_in "term", with: comment.body["en"]
41
+ find("input#input-search").native.send_keys :enter
42
+ end
43
+
44
+ expect(page).to have_content("0 Results for the search")
45
+ end
46
+ end
21
47
  end
@@ -2,6 +2,32 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
+ shared_examples "a version of a hidden object" do
6
+ before do
7
+ visit resource_path
8
+ click_on "see other versions"
9
+ click_on("Version 1 of #{hidden_object.reload.versions.size}")
10
+ end
11
+
12
+ around do |example|
13
+ previous = Capybara.raise_server_errors
14
+
15
+ Capybara.raise_server_errors = false
16
+ example.run
17
+ Capybara.raise_server_errors = previous
18
+ end
19
+
20
+ it "shows an error page" do
21
+ expect(page).to have_content("Changes at")
22
+
23
+ create(:moderation, reportable: hidden_object, hidden_at: 1.day.ago)
24
+
25
+ visit current_path
26
+
27
+ expect(page).to have_content(ActiveRecord::RecordNotFound)
28
+ end
29
+ end
30
+
5
31
  shared_examples "versions controller" do
6
32
  let(:base_params) do
7
33
  if resource.is_a?(Decidim::Participable)
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-core version.
5
5
  module Core
6
6
  def self.version
7
- "0.28.5"
7
+ "0.28.6"
8
8
  end
9
9
  end
10
10
  end
@@ -49,46 +49,7 @@ module Decidim
49
49
  private
50
50
 
51
51
  def language_code
52
- primary = I18n.locale.to_s
53
- secondary = primary.split("-")[0]
54
- available_language_codes[primary] || available_language_codes[secondary] || ""
55
- end
56
-
57
- def available_language_codes
58
- @available_language_codes ||= {
59
- "ar" => "ara", # Arabic
60
- "eu" => "baq", # Basque
61
- "ca" => "cat", # Catalan
62
- "zh" => "chi", # Chinese (simplified)
63
- # "" => "cht", # Chinese (traditional)
64
- "cs" => "cze", # Czech
65
- "da" => "dan", # Danish
66
- "nl" => "dut", # Dutch
67
- "en" => "eng", # English
68
- "fi" => "fin", # Finnish
69
- "fr" => "fre", # French
70
- "de" => "ger", # German
71
- "ga" => "gle", # Gaelic
72
- "el" => "gre", # Greek
73
- "he" => "heb", # Hebrew
74
- "hi" => "hin", # Hindi
75
- "id" => "ind", # Indonesian
76
- "it" => "ita", # Italian
77
- "no" => "nor", # Norwegian
78
- "fa" => "per", # Persian
79
- "pl" => "pol", # Polish
80
- "pt" => "por", # Portuguese
81
- "ru" => "rus", # Russian
82
- "si" => "sin", # Sinhalese
83
- "es" => "spa", # Spanish
84
- "sv" => "swe", # Swedish
85
- "th" => "tha", # Thai
86
- "tr" => "tur", # Turkish
87
- "uk" => "ukr", # Ukrainian
88
- "ur" => "urd", # Urdu
89
- "vi" => "vie", # Vietnamese
90
- "cy" => "wel" # Welsh
91
- }
52
+ I18n.locale.to_s
92
53
  end
93
54
  end
94
55
  end
@@ -6,8 +6,42 @@ module Decidim
6
6
  module StaticMap
7
7
  # The static map utility class for the HERE maps service
8
8
  class Here < ::Decidim::Map::StaticMap
9
+ def url(latitude:, longitude:, options: {})
10
+ map_url = configuration.fetch(:url, nil)
11
+ return super unless map_url
12
+
13
+ return super unless map_url.include?("mia/v3")
14
+
15
+ w = options[:width] || Decidim::Map::StaticMap::DEFAULT_SIZE
16
+ h = options[:height] || Decidim::Map::StaticMap::DEFAULT_SIZE
17
+
18
+ params = {
19
+ apiKey: configuration[:api_key],
20
+ overlay: "point:#{latitude},#{longitude};icon=cp;size=large|#{latitude},#{longitude};style=circle;width=50m;color=%231B9D2C60"
21
+ }
22
+
23
+ URI.parse("#{map_url}:radius=90/#{w}x#{h}/png8").tap do |uri|
24
+ uri.query = URI.encode_www_form(params)
25
+ end.to_s
26
+ end
27
+
9
28
  # @See Decidim::Map::StaticMap#url_params
10
29
  def url_params(latitude:, longitude:, options: {})
30
+ ActiveSupport::Deprecation.warn(
31
+ <<~DEPRECATION.strip
32
+ Please use a V3 version HERE maps.
33
+ For further information, see:
34
+ https://www.here.com/docs/bundle/map-image-migration-guide-v3/page/README.html
35
+ Also make sure your Decidim.maps configurations are using the
36
+ up to date format.
37
+ You need to change:
38
+ static_url = "https://image.maps.ls.hereapi.com/mia/1.6/mapview" if static_provider == "here" && static_url.blank?
39
+ to:
40
+ static_url = "https://image.maps.hereapi.com/mia/v3/base/mc/overlay" if static_provider == "here"
41
+ in your config/initializers/decidim.rb file.
42
+ DEPRECATION
43
+ )
44
+
11
45
  params = {
12
46
  c: "#{latitude}, #{longitude}",
13
47
  z: options[:zoom] || Decidim::Map::StaticMap::DEFAULT_ZOOM,
@@ -52,7 +52,7 @@ module Decidim
52
52
  candidate = name
53
53
 
54
54
  2.step do |n|
55
- return candidate if Decidim::UserBaseEntity.where("nickname ILIKE ?", candidate.downcase).where(scope).empty?
55
+ return candidate if Decidim::UserBaseEntity.where(nickname: candidate.downcase).where(scope).empty?
56
56
 
57
57
  candidate = numbered_variation_of(name, n)
58
58
  end
@@ -53,8 +53,12 @@ module Decidim
53
53
  # Public: The reported content url
54
54
  #
55
55
  # Returns String
56
- def reported_content_url
57
- raise NotImplementedError
56
+ def reported_content_url(options = {})
57
+ if hidden?
58
+ ResourceLocatorPresenter.new(self).index(options)
59
+ else
60
+ ResourceLocatorPresenter.new(self).url(options)
61
+ end
58
62
  end
59
63
 
60
64
  # Public: The collection of attribute names that are considered
@@ -62,7 +62,7 @@ module Decidim
62
62
  final = super(value)
63
63
  return unless final # Do not set the `nil` values for the parent hash
64
64
 
65
- final = value_type.serialize(final) if value_type
65
+ final = value_type.serialize(final) if value_type && !attachment?(final)
66
66
 
67
67
  public_send("#{name}=", field.merge(locale => final))
68
68
  end
@@ -127,5 +127,9 @@ module Decidim
127
127
  locale.to_s == try(:default_locale).to_s ||
128
128
  locale.to_s == try(:current_organization).try(:default_locale).to_s
129
129
  end
130
+
131
+ def attachment?(value)
132
+ value.is_a?(String) && value.include?(ActiveStorage.routes_prefix)
133
+ end
130
134
  end
131
135
  end
@@ -19,6 +19,7 @@ module Decidim
19
19
  include Decidim::SanitizeHelper
20
20
 
21
21
  delegate :current_organization, to: :controller
22
+ delegate_missing_to :view_context
22
23
 
23
24
  cache :show, if: :perform_caching?, expires_in: :cache_expiry_time do
24
25
  cache_hash
@@ -2,37 +2,40 @@
2
2
 
3
3
  namespace :decidim do
4
4
  namespace :upgrade do
5
- desc "Modify nicknames with random numbers when exists similar ones case insensitively"
6
- task fix_nickname_uniqueness: :environment do
7
- logger = Logger.new($stdout)
8
- logger.info("Updating conflicting user nicknames...")
5
+ desc "Modifies nickname of the user to lower case"
6
+ task fix_nickname_casing: :environment do
7
+ logger.info("Fixing user nicknames case...")
9
8
 
10
- # list of users already changed in the process
11
9
  has_changed = []
10
+ Decidim::UserBaseEntity.not_deleted.find_each do |user|
11
+ user.nickname.downcase!
12
12
 
13
- Decidim::User.not_deleted.find_each do |user|
14
- next if has_changed.include? user.id
15
-
16
- Decidim::User.where(organization: user.organization)
17
- .where("nickname ILIKE ?", user.nickname.downcase)
18
- .where.not(id: has_changed + [user.id])
19
- .not_deleted
20
- .order(:created_at)
21
- .each do |similar_user|
22
- # change her nickname to the lowercased one with numbers if needed
23
- begin
24
- update_user_nickname(similar_user, Decidim::UserBaseEntity.nicknamize(similar_user.nickname, organization: similar_user.organization))
25
- rescue ActiveRecord::RecordInvalid => e
26
- logger.warn("User ID (#{similar_user.id}) : #{e}")
13
+ begin
14
+ if user.nickname_changed?
15
+ user.save!
16
+ has_changed << user.id
27
17
  end
28
- has_changed.append(similar_user.id)
18
+ rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
19
+ update_user_nickname(user, Decidim::UserBaseEntity.nicknamize(user.nickname, organization: user.organization))
20
+ has_changed << user.id
21
+ rescue ActiveRecord::RecordInvalid # rubocop:disable Lint/DuplicateRescueException
22
+ logger.warn("User ID (#{user.id}) : #{e}")
29
23
  end
30
24
  end
31
25
  logger.info("Process terminated, #{has_changed.count} users nickname have been updated.")
32
26
  end
33
27
 
28
+ desc "Modifies nicknames with random numbers when exists similar ones case-insensitively"
29
+ task fix_nickname_uniqueness: :environment do
30
+ Rake::Task["decidim:upgrade:fix_nickname_casing"].execute
31
+ end
32
+
34
33
  private
35
34
 
35
+ def logger
36
+ @logger ||= Logger.new($stdout)
37
+ end
38
+
36
39
  def send_notification_to(user)
37
40
  Decidim::EventsManager.publish(
38
41
  event: "decidim.events.nickname_event",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.5
4
+ version: 0.28.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-02-12 00:00:00.000000000 Z
13
+ date: 2025-04-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: concurrent-ruby
@@ -764,28 +764,28 @@ dependencies:
764
764
  requirements:
765
765
  - - '='
766
766
  - !ruby/object:Gem::Version
767
- version: 0.28.5
767
+ version: 0.28.6
768
768
  type: :development
769
769
  prerelease: false
770
770
  version_requirements: !ruby/object:Gem::Requirement
771
771
  requirements:
772
772
  - - '='
773
773
  - !ruby/object:Gem::Version
774
- version: 0.28.5
774
+ version: 0.28.6
775
775
  - !ruby/object:Gem::Dependency
776
776
  name: decidim-dev
777
777
  requirement: !ruby/object:Gem::Requirement
778
778
  requirements:
779
779
  - - '='
780
780
  - !ruby/object:Gem::Version
781
- version: 0.28.5
781
+ version: 0.28.6
782
782
  type: :development
783
783
  prerelease: false
784
784
  version_requirements: !ruby/object:Gem::Requirement
785
785
  requirements:
786
786
  - - '='
787
787
  - !ruby/object:Gem::Version
788
- version: 0.28.5
788
+ version: 0.28.6
789
789
  description: Adds core features so other engines can hook into the framework.
790
790
  email:
791
791
  - josepjaume@gmail.com
@@ -1682,7 +1682,6 @@ files:
1682
1682
  - app/packs/src/decidim/user_registrations.js
1683
1683
  - app/packs/src/decidim/utilities/text.js
1684
1684
  - app/packs/src/decidim/vendor/jquery-tmpl.js
1685
- - app/packs/src/decidim/vendor/leaflet-tilelayer-here.js
1686
1685
  - app/packs/src/decidim/vendor/modernizr.js
1687
1686
  - app/packs/src/decidim/vendor/tribute.js
1688
1687
  - app/packs/src/decidim/vizzs/areachart.js
@@ -1708,6 +1707,7 @@ files:
1708
1707
  - app/packs/stylesheets/decidim/_fonts.scss
1709
1708
  - app/packs/stylesheets/decidim/_footer.scss
1710
1709
  - app/packs/stylesheets/decidim/_forms.scss
1710
+ - app/packs/stylesheets/decidim/_hashtags.scss
1711
1711
  - app/packs/stylesheets/decidim/_header.scss
1712
1712
  - app/packs/stylesheets/decidim/_hero.scss
1713
1713
  - app/packs/stylesheets/decidim/_home.scss
@@ -2142,6 +2142,7 @@ files:
2142
2142
  - config/locales/bg.yml
2143
2143
  - config/locales/bn-BD.yml
2144
2144
  - config/locales/bs-BA.yml
2145
+ - config/locales/ca-IT.yml
2145
2146
  - config/locales/ca.yml
2146
2147
  - config/locales/cs-CZ.yml
2147
2148
  - config/locales/cs.yml