decidim-core 0.29.0.rc4 → 0.29.0

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/address/online.erb +2 -2
  3. data/app/cells/decidim/address_cell.rb +4 -0
  4. data/app/cells/decidim/nav_links/show.erb +3 -3
  5. data/app/cells/decidim/resource_types_filter/show.erb +11 -12
  6. data/app/controllers/concerns/decidim/paginable.rb +1 -1
  7. data/app/helpers/decidim/menu_helper.rb +1 -1
  8. data/app/helpers/decidim/paginate_helper.rb +3 -5
  9. data/app/models/decidim/component.rb +4 -1
  10. data/app/packs/src/decidim/a11y.js +11 -15
  11. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +7 -3
  12. data/app/packs/src/decidim/input_character_counter.js +1 -1
  13. data/app/packs/stylesheets/decidim/_dropdown.scss +9 -9
  14. data/app/packs/stylesheets/decidim/_forms.scss +4 -4
  15. data/app/packs/stylesheets/decidim/_tooltip.scss +10 -10
  16. data/app/packs/stylesheets/decidim/editor.scss +1 -1
  17. data/app/presenters/decidim/menu_item_presenter.rb +1 -1
  18. data/app/services/decidim/open_data_exporter.rb +8 -7
  19. data/app/views/decidim/pages/_tabbed.html.erb +3 -3
  20. data/app/views/decidim/shared/_filters.html.erb +5 -5
  21. data/app/views/decidim/shared/_orders.html.erb +3 -2
  22. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
  23. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  24. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
  25. data/config/locales/ca.yml +3 -3
  26. data/config/locales/cs.yml +14 -0
  27. data/config/locales/fi-plain.yml +3 -3
  28. data/config/locales/fi.yml +28 -28
  29. data/config/locales/sv.yml +72 -64
  30. data/db/migrate/20181025082245_add_timestamps_to_components.rb +5 -1
  31. data/lib/decidim/core/test/shared_examples/follows_examples.rb +8 -3
  32. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +5 -5
  33. data/lib/decidim/core/version.rb +1 -1
  34. data/lib/tasks/upgrade/decidim_fix_categorization.rake +100 -0
  35. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3394fbf408e9109f688cd6e8fa7439096050219d59f5ac6328f6be21a51c752d
4
- data.tar.gz: b39954abe8812022859ab60690a82dc89078868cfe89b567ea1a2499d7cb7aa0
3
+ metadata.gz: 37f39b870aa9a840fbf4c415858b3210d520511f8efb0327bb90e8aa0126f243
4
+ data.tar.gz: 16fa93602fc35d288ddeef831f50f3e3878714ea4fae6547064c9be0a148fad0
5
5
  SHA512:
6
- metadata.gz: 9402884a433f7bd1d3498bc70429be6704f56c2e3eb4fdb4769ea076d1c9473ee555b5580d142cb7560b6a1ea54d027415ec9821303466fb56c8bfa1889ea611
7
- data.tar.gz: 4fcd613c47e4d1a8eed16ef0f3217afa43b4a648f49dbe6a787cb82e7919ef2ba290b1c07b2e39da7d91098620046221b2552eaddc091982eacc03e1f4141db1
6
+ metadata.gz: 0ae69c163d580612c4a8f4f4cf8d9c460aebc24270a67f4a245d25f4fceb2988075664aab8f97977ae19b75d90c42e1cdb03ad2591bd546c5acf9f8562d5852f
7
+ data.tar.gz: 23132fff12f59d0bb72b073e6729ccb5f439f5c59493d8a3f8f7026dbb45cf20e56f1cac34b07bc8a2d10e757b4cd6efe60bc93180f22d2a4764db597913a1b6
@@ -5,8 +5,8 @@
5
5
  <div class="address">
6
6
  <div class="address__location"><%= t(model.type_of_meeting, scope: "decidim.meetings.meetings.filters.type_values") %></div>
7
7
  <% if display_online_meeting_url? %>
8
- <a href="<%= model.online_meeting_url %>" target="_blank" rel="noopener noreferrer" class="address__hints underline break-all">
9
- <%= model.online_meeting_url %>
8
+ <a href="<%= online_meeting_url %>" target="_blank" rel="noopener noreferrer" class="address__hints underline break-all">
9
+ <%= online_meeting_url %>
10
10
  <% end %>
11
11
  </a>
12
12
  </div>
@@ -43,6 +43,10 @@ module Decidim
43
43
  HTML
44
44
  end
45
45
 
46
+ def online_meeting_url
47
+ URI::Parser.new.escape(model.online_meeting_url)
48
+ end
49
+
46
50
  def display_online_meeting_url?
47
51
  return true unless model.respond_to?(:online?)
48
52
  return true unless model.respond_to?(:iframe_access_level_allowed_for_user?)
@@ -1,12 +1,12 @@
1
1
  <div class="participatory-space__nav-container">
2
- <button id="dropdown-trigger-participatory-space" data-component="dropdown" data-target="dropdown-menu-participatory-space" data-auto-close="true" data-scroll-to-menu="true">
2
+ <button id="dropdown-trigger-participatory-space" data-component="dropdown" data-target="dropdown-menu-participatory-space" data-auto-close="true" data-scroll-to-menu="true" data-open-md="true">
3
3
  <span><%= t("decidim.searches.filters.jump_to") %></span>
4
4
  <%= icon "arrow-down-s-line" %>
5
5
  <%= icon "arrow-up-s-line" %>
6
6
  </button>
7
- <ul id="dropdown-menu-participatory-space" class="participatory-space__nav" aria-hidden="true">
7
+ <ul id="dropdown-menu-participatory-space" class="participatory-space__nav">
8
8
  <% model.each do |item| %>
9
- <li>
9
+ <li role="menuitem">
10
10
  <%= link_to item[:url], class: "participatory-space__nav-item" do %>
11
11
  <%= item[:name] %>
12
12
  <%= icon "arrow-right-line" %>
@@ -1,5 +1,5 @@
1
1
  <div id="<%= id %>" class="filter-container">
2
- <button id="dropdown-trigger-resource" data-component="dropdown" data-target="dropdown-menu-resource" data-auto-close="true">
2
+ <button id="dropdown-trigger-resource" data-component="dropdown" data-target="dropdown-menu-resource" data-open-md="true">
3
3
  <% resource_types.each do |resource_type| %>
4
4
  <span data-value="<%= resource_type[0] %>" class="<%= "is-active" if filter_param == resource_type[0] %>">
5
5
  <%= text_with_resource_icon(*resource_type) %>
@@ -8,15 +8,14 @@
8
8
  <%= icon "arrow-down-s-line" %>
9
9
  <%= icon "arrow-up-s-line" %>
10
10
  </button>
11
- <%= filter_form_for filter, form_path, :class => "new_filter", :id => "dropdown-menu-resource", "aria-hidden" => true do |form| %>
12
- <%= form.collection_radio_buttons(
13
- filter_param_key,
14
- resource_types,
15
- :first,
16
- :last,
17
- { checked: filter_param }
18
- ) do |builder|
19
- builder.label { builder.radio_button(class: "reset-defaults", hidden: true) + content_tag(:span, text_with_resource_icon(builder.value, builder.text), class: "filter") }
20
- end %>
21
- <% end %>
11
+ <ul id="dropdown-menu-resource">
12
+ <% resource_types.each do |resource_type| %>
13
+ <li role="menuitem">
14
+ <%= link_to decidim.last_activities_path(filter: { with_resource_type: resource_type[0] } ), class: "filter#{" is-active" if filter_param == resource_type[0]}" do %>
15
+ <span class="sr-only"><%= resource_type[1] %></span>
16
+ <%= text_with_resource_icon(*resource_type) %>
17
+ <% end %>
18
+ </li>
19
+ <% end %>
20
+ </ul>
22
21
  </div>
@@ -7,7 +7,7 @@ module Decidim
7
7
  module Paginable
8
8
  extend ActiveSupport::Concern
9
9
 
10
- OPTIONS = [10, 20, 50, 100].freeze
10
+ OPTIONS = [25, 50, 100].freeze
11
11
 
12
12
  included do
13
13
  helper_method :per_page, :page_offset
@@ -57,7 +57,7 @@ module Decidim
57
57
  self,
58
58
  element_class: "font-semibold underline",
59
59
  active_class: "is-active",
60
- container_options: { class: "space-y-4 break-inside-avoid" },
60
+ container_options: { class: "space-y-4 break-inside-avoid", role: :menu },
61
61
  label: t("layouts.decidim.footer.decidim_title")
62
62
  )
63
63
  end
@@ -11,16 +11,14 @@ module Decidim
11
11
  def decidim_paginate(collection, paginate_params = {})
12
12
  return if collection.total_pages <= 1
13
13
 
14
+ per_page = (params[:per_page] || paginate_params[:per_page] || Decidim::Paginable::OPTIONS.first).to_i
15
+
14
16
  content_tag :div, class: "flex flex-col-reverse md:flex-row items-center justify-between gap-1 py-8 md:py-16", data: { pagination: "" } do
15
17
  template = ""
16
- template += render(partial: "decidim/shared/results_per_page", formats: [:html]) if collection.total_pages.positive?
18
+ template += render(partial: "decidim/shared/results_per_page", locals: { per_page: }, formats: [:html]) if collection.total_pages.positive?
17
19
  template += paginate collection, window: 2, outer_window: 1, theme: "decidim", params: paginate_params
18
20
  template.html_safe
19
21
  end
20
22
  end
21
-
22
- def per_page
23
- params[:per_page].to_i || Decidim::Paginable::OPTIONS.first
24
- end
25
23
  end
26
24
  end
@@ -14,7 +14,10 @@ module Decidim
14
14
 
15
15
  belongs_to :participatory_space, polymorphic: true
16
16
 
17
- default_scope { order(arel_table[:weight].asc, arel_table[:manifest_name].asc) }
17
+ scope :registered_component_manifests, -> { where(manifest_name: Decidim.component_registry.manifests.collect(&:name)) }
18
+ scope :registered_space_manifests, -> { where(participatory_space_type: Decidim.participatory_space_registry.manifests.collect(&:model_class_name)) }
19
+
20
+ default_scope { registered_component_manifests.registered_space_manifests.order(arel_table[:weight].asc, arel_table[:manifest_name].asc) }
18
21
 
19
22
  delegate :organization, :categories, to: :participatory_space
20
23
 
@@ -59,7 +59,6 @@ const createDropdown = (component) => {
59
59
  const dropdownOptions = {};
60
60
  dropdownOptions.dropdown = component.dataset.target;
61
61
  dropdownOptions.hover = component.dataset.hover === "true";
62
- dropdownOptions.isOpen = component.dataset.open === "true";
63
62
  dropdownOptions.autoClose = component.dataset.autoClose === "true";
64
63
 
65
64
  // This snippet allows to disable the dropdown based on the current viewport
@@ -78,6 +77,17 @@ const createDropdown = (component) => {
78
77
  return
79
78
  }
80
79
 
80
+ dropdownOptions.isOpen = component.dataset.open === "true";
81
+
82
+ const isOpen = Object.keys(screens).some((key) => {
83
+ if (!isScreenSize(key)) {
84
+ return false;
85
+ }
86
+ return Boolean(component.dataset[`open-${key}`.replace(/-([a-z])/g, (str) => str[1].toUpperCase())]);
87
+ });
88
+
89
+ dropdownOptions.isOpen = dropdownOptions.isOpen || isOpen;
90
+
81
91
  if (!component.id) {
82
92
  // when component has no id, we enforce to have it one
83
93
  component.id = `dropdown-${Math.random().toString(36).substring(7)}`
@@ -104,20 +114,6 @@ const createDropdown = (component) => {
104
114
  });
105
115
  }
106
116
 
107
- // Disable focus on children elements so we can pass the AXE accessibility tests
108
- const dropdownMenu = document.getElementById(dropdownOptions.dropdown);
109
- if (dropdownMenu.getAttribute("aria-hidden") === "true") {
110
- dropdownMenu.
111
- querySelectorAll("a, input, button").
112
- forEach((element) => { element.tabIndex = -1 })
113
- }
114
-
115
- component.addEventListener("click", () => {
116
- dropdownMenu.
117
- querySelectorAll("a, input, button").
118
- forEach((element) => { element.tabIndex = 0 })
119
- })
120
-
121
117
  Dropdowns.render(component.id, dropdownOptions);
122
118
  }
123
119
 
@@ -36,10 +36,14 @@ const initializeTabs = (container) => {
36
36
  updateTabsState(container);
37
37
  });
38
38
 
39
- uploadsContainer.addEventListener("DOMSubtreeModified", () => {
40
- updateTabsState(container);
41
- console.log("DOMSubtreeModified");
39
+ const observer = new MutationObserver((mutationsList) => {
40
+ mutationsList.forEach((mutation) => {
41
+ if (mutation.type === "childList") {
42
+ updateTabsState(container);
43
+ }
44
+ });
42
45
  });
46
+ observer.observe(uploadsContainer, {childList: true, subtree: true});
43
47
 
44
48
  updateTabsState(container);
45
49
  };
@@ -74,7 +74,7 @@ export default class InputCharacterCounter {
74
74
 
75
75
  // If input is a hidden for WYSIWYG editor add it at the end
76
76
  if (this.$input.parent().is(".editor")) {
77
- this.$input.parent().after(this.$target);
77
+ this.$input.parent().append(container);
78
78
  } else {
79
79
  const wrapper = document.createElement("span")
80
80
  wrapper.className = "input-character-counter"
@@ -72,6 +72,15 @@
72
72
  .dropdown {
73
73
  @apply absolute border-2 border-gray-3 rounded min-w-max p-4 drop-shadow-md text-left z-10;
74
74
 
75
+ /*
76
+ NOTE: the calculated value is the sum of the arrow offset position plus the half of the arrow size:
77
+ - offset position: 20%
78
+ - arrow size: 1.5rem
79
+ */
80
+ --arrow-offset: 20%;
81
+ --arrow-size: 1.5rem;
82
+ --arrow-visible-size: var(--arrow-size) * 0.5;
83
+
75
84
  & > * {
76
85
  @apply relative z-10 p-3.5 first:pt-1.5 last:pb-1.5;
77
86
  }
@@ -90,15 +99,6 @@
90
99
  }
91
100
  }
92
101
 
93
- /*
94
- NOTE: the calculated value is the sum of the arrow offset position plus the half of the arrow size:
95
- - offset position: 20%
96
- - arrow size: 1.5rem
97
- */
98
- --arrow-offset: 20%;
99
- --arrow-size: 1.5rem;
100
- --arrow-visible-size: var(--arrow-size) * 0.5;
101
-
102
102
  &__bottom {
103
103
  @apply top-full right-0 mt-3 translate-x-[calc(var(--arrow-offset)-var(--arrow-visible-size))] before:content-[''] before:absolute before:right-[var(--arrow-offset)] before:-top-2 before:w-[var(--arrow-size)] before:h-[var(--arrow-size)] before:rotate-45 before:bg-white before:rounded before:border-2 before:border-gray-3 after:content-[''] after:absolute after:left-0 after:top-0 after:w-full after:h-full after:bg-white;
104
104
  }
@@ -53,16 +53,16 @@
53
53
  }
54
54
 
55
55
  select {
56
- &:not(.reset-defaults) {
57
- @apply pr-8;
58
- }
59
-
60
56
  @apply appearance-none;
61
57
 
62
58
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 12 8'%3e%3cpath fill='%233E4C5C' d='M5.99962 4.97656L10.1246 0.851562L11.303 2.0299L5.99962 7.33323L0.696289 2.0299L1.87462 0.851562L5.99962 4.97656Z'/%3e%3c/svg%3e");
63
59
  background-position: right 1rem center;
64
60
  background-repeat: no-repeat;
65
61
  background-size: 0.75rem;
62
+
63
+ &:not(.reset-defaults) {
64
+ @apply pr-8;
65
+ }
66
66
  }
67
67
  }
68
68
 
@@ -1,6 +1,16 @@
1
1
  [role="tooltip"] {
2
2
  @apply absolute bg-black z-10 px-4 py-2 w-max max-w-xs rounded text-left text-white;
3
3
 
4
+ /*
5
+ NOTE: the calculated value is the sum of the arrow offset position plus the half of the arrow size:
6
+ - offset position: 20%
7
+ - arrow size: 16px
8
+ */
9
+ --arrow-offset: 20%;
10
+ --arrow-size: 16px;
11
+ --arrow-visible-size: var(--arrow-size) * 0.5;
12
+ --arrow-margin: var(--arrow-visible-size) * 1.4142135623730951; // due to the rotation, the margin is SQRT2 times the visible size
13
+
4
14
  & > * {
5
15
  @apply relative z-20;
6
16
  }
@@ -41,16 +51,6 @@
41
51
  }
42
52
  }
43
53
 
44
- /*
45
- NOTE: the calculated value is the sum of the arrow offset position plus the half of the arrow size:
46
- - offset position: 20%
47
- - arrow size: 16px
48
- */
49
- --arrow-offset: 20%;
50
- --arrow-size: 16px;
51
- --arrow-visible-size: var(--arrow-size) * 0.5;
52
- --arrow-margin: var(--arrow-visible-size) * 1.4142135623730951; // due to the rotation, the margin is SQRT2 times the visible size
53
-
54
54
  &.top {
55
55
  @apply -translate-x-[calc(100%-var(--arrow-offset))] -translate-y-[calc(100%+var(--arrow-margin))] before:content-[''] before:absolute before:-z-10 before:right-[calc(var(--arrow-offset)-var(--arrow-visible-size))] before:-bottom-[var(--arrow-visible-size)] before:w-[var(--arrow-size)] before:h-[var(--arrow-size)] before:rotate-45 before:bg-black before:rounded-br;
56
56
  }
@@ -21,7 +21,7 @@
21
21
  }
22
22
 
23
23
  .editor-container {
24
- @apply editor-props editor-suggestions-props flex flex-col mb-6 border editor-border;
24
+ @apply editor-props editor-suggestions-props flex flex-col mt-4 border editor-border;
25
25
 
26
26
  &.editor-disabled {
27
27
  .editor-input .ProseMirror {
@@ -26,7 +26,7 @@ module Decidim
26
26
  delegate :content_tag, :safe_join, :link_to, :active_link_to_class, :is_active_link?, :icon, to: :@view
27
27
 
28
28
  def render
29
- content_tag :li, class: link_wrapper_classes do
29
+ content_tag :li, role: :menuitem, class: link_wrapper_classes do
30
30
  output = if url == "#"
31
31
  [content_tag(:span, composed_label, class: "sidebar-menu__item-disabled")]
32
32
  else
@@ -51,13 +51,14 @@ module Decidim
51
51
  headers.push(*exporter.headers)
52
52
  exported = exporter.export
53
53
 
54
- tmpfile = Tempfile.new("#{export_manifest.name}-#{component.id}-")
55
- tmpfile.write(exported.read)
56
- # Do not delete the file when the reference is deleted
57
- ObjectSpace.undefine_finalizer(tmpfile)
58
- tmpfile.close
59
-
60
- collection.push(tmpfile.path)
54
+ tmpdir = Dir::Tmpname.create(export_manifest.name.to_s) do
55
+ # just get an empty file name
56
+ end
57
+ filename = File.join(tmpdir, "#{component.id}.csv")
58
+ Dir.mkdir(tmpdir)
59
+ File.write(filename, exported.read)
60
+
61
+ collection.push(filename)
61
62
  end
62
63
  end
63
64
  end
@@ -11,16 +11,16 @@
11
11
 
12
12
  <div class="vertical-tabs">
13
13
  <nav>
14
- <button id="dropdown-trigger-pages" data-component="dropdown" data-target="dropdown-menu-pages" data-auto-close="true">
14
+ <button id="dropdown-trigger-pages" data-component="dropdown" data-target="dropdown-menu-pages" data-open-md="true" data-auto-close="true">
15
15
  <span>
16
16
  <%= translated_attribute(page.title) %>
17
17
  </span>
18
18
  <%= icon "arrow-down-s-line" %>
19
19
  <%= icon "arrow-up-s-line" %>
20
20
  </button>
21
- <ul id="dropdown-menu-pages" class="vertical-tabs__list" aria-hidden="true">
21
+ <ul id="dropdown-menu-pages" class="vertical-tabs__list" role="menu">
22
22
  <% pages.each do |sibling| %>
23
- <li class="<%= "is-active" if page == sibling %>">
23
+ <li class="<%= "is-active" if page == sibling %>" role="menuitem">
24
24
  <%= link_to translated_attribute(sibling.title), page_path(sibling.slug) %>
25
25
  </li>
26
26
  <% end %>
@@ -4,7 +4,7 @@
4
4
  <% if filter_sections.present? || local_assigns.has_key?(:search_variable) %>
5
5
  <%= filter_form_for filter, url_for, class: "new_filter self-stretch", data: { filters: "", component: "accordion" } do |form| %>
6
6
 
7
- <button id="dropdown-trigger-filters" data-component="dropdown" data-target="dropdown-menu-filters">
7
+ <button id="dropdown-trigger-filters" data-component="dropdown" data-target="dropdown-menu-filters" data-open-md="true">
8
8
  <%= icon "arrow-down-s-line" %>
9
9
  <%= icon "arrow-up-s-line" %>
10
10
  <span>
@@ -12,14 +12,14 @@
12
12
  </span>
13
13
  </button>
14
14
 
15
- <div id="dropdown-menu-filters" aria-hidden="true">
15
+ <div id="dropdown-menu-filters">
16
16
  <% if local_assigns.has_key?(:skip_to_id) %>
17
- <%= link_to t("skip", scope: "decidim.shared.filter_form_help"), "##{skip_to_id}", class: "filter-skip" %>
17
+ <%= link_to t("skip", scope: "decidim.shared.filter_form_help"), "##{skip_to_id}", class: "filter-skip", role: "menuitem" %>
18
18
  <% end %>
19
- <p class="filter-help"><%= t("help", scope: "decidim.shared.filter_form_help") %></p>
19
+ <p class="filter-help" role="menuitem" aria-disabled="true"><%= t("help", scope: "decidim.shared.filter_form_help") %></p>
20
20
 
21
21
  <% if local_assigns.has_key?(:search_variable) %>
22
- <div class="filter-search filter-container">
22
+ <div class="filter-search filter-container" role="menuitem">
23
23
  <%= form.search_field search_variable,
24
24
  label: false,
25
25
  placeholder: search_label,
@@ -1,13 +1,14 @@
1
- <button class="order-by__button" id="dropdown-trigger-order" data-component="dropdown" data-target="dropdown-menu-order" data-open="false">
1
+ <button class="order-by__button" id="dropdown-trigger-order" data-component="dropdown" data-target="dropdown-menu-order" data-open-md="true">
2
2
  <%= icon "arrow-down-s-line" %>
3
3
  <%= icon "arrow-up-s-line" %>
4
4
  <span><%= t("#{i18n_scope}.label") %></span>
5
5
  </button>
6
- <div id="dropdown-menu-order" class="order-by" aria-hidden="true">
6
+ <div id="dropdown-menu-order" class="order-by">
7
7
  <% orders.each do |order_name| %>
8
8
  <%= order_link order_name,
9
9
  i18n_scope:,
10
10
  title: t("#{i18n_scope}.label"),
11
+ role: :menuitem,
11
12
  class: "button button__sm button__text-secondary #{order_name == order ? "underline font-bold" : "font-normal"}" %>
12
13
  <% end %>
13
14
  </div>
@@ -1,4 +1,4 @@
1
- <div class="filter-container">
1
+ <div class="filter-container" role="menuitem">
2
2
  <button id="trigger-menu-<%= id %>" data-controls="panel-dropdown-menu-<%= id %>" data-open="false" data-open-md="true">
3
3
  <%= icon "arrow-down-s-line" %>
4
4
  <%= icon "arrow-up-s-line" %>
@@ -1,4 +1,4 @@
1
- <div class="filter-container">
1
+ <div class="filter-container" role="menuitem">
2
2
  <button id="trigger-menu-<%= id %>" data-controls="panel-dropdown-menu-<%= id %>" data-open="false" data-open-md="true">
3
3
  <%= icon "arrow-down-s-line" %>
4
4
  <%= icon "arrow-up-s-line" %>
@@ -10,12 +10,12 @@
10
10
 
11
11
  <div class="vertical-tabs">
12
12
  <nav aria-label="menu-vertical">
13
- <button id="dropdown-trigger-profile" data-component="dropdown" data-target="dropdown-menu-profile">
13
+ <button id="dropdown-trigger-profile" data-open-md="true" data-component="dropdown" data-target="dropdown-menu-profile">
14
14
  <span><%= user_menu.active_item&.label || t("decidim.searches.filters.jump_to") %></span>
15
15
  <%= icon "arrow-down-s-line" %>
16
16
  <%= icon "arrow-up-s-line" %>
17
17
  </button>
18
- <ul id="dropdown-menu-profile" class="vertical-tabs__list" aria-hidden="true">
18
+ <ul id="dropdown-menu-profile" class="vertical-tabs__list">
19
19
  <%= user_menu.render %>
20
20
  </ul>
21
21
  </nav>
@@ -532,8 +532,8 @@ ca:
532
532
  html_content: Contingut HTML
533
533
  name: Bloc HTML
534
534
  last_activity:
535
- name: Última activitat
536
- title: Última activitat
535
+ name: Darrera activitat
536
+ title: Darrera activitat
537
537
  view_all: Veure-ho tot
538
538
  last_activity_settings_form:
539
539
  max_last_activity_users: Número màxim d'avatars de participants amb activitat recent a mostrar
@@ -1049,7 +1049,7 @@ ca:
1049
1049
  last_activities:
1050
1050
  all: Tots els tipus d'activitats
1051
1051
  index:
1052
- last_activity: Última activitat
1052
+ last_activity: Darrera activitat
1053
1053
  name: Darreres activitats
1054
1054
  no_activities_warning: No hi ha res a mostrar per a aquest tipus d'activitat.
1055
1055
  linked_resource_from:
@@ -383,6 +383,7 @@ cs:
383
383
  wizard_step_form:
384
384
  steps:
385
385
  '1': Vytvořte svůj pozměňovací návrh
386
+ '2': Publikovat svůj pozměňovací návrh
386
387
  anonymous_user: Anonymní
387
388
  application:
388
389
  document:
@@ -618,6 +619,7 @@ cs:
618
619
  complete_profile: Dokončit profil
619
620
  nickname_help: Váš alias v %{organization}. Může obsahovat pouze písmena, číslice, '-' a '_'.
620
621
  sign_up: Prosím, vyplňte svůj profil
622
+ subtitle: Vyplňte prosím následující formulář pro dokončení vytvoření účtu
621
623
  username_help: Veřejné jméno, které se zobrazí ve vašich příspěvcích. S cílem zaručit anonymitu může být jakékoliv jméno.
622
624
  registrations:
623
625
  create:
@@ -627,6 +629,8 @@ cs:
627
629
  log_in: Přihlásit
628
630
  newsletter: Chci dostávat příležitostný zpravodaj s relevantními informacemi
629
631
  newsletter_title: Povolení kontaktu
632
+ sign_up: Vytvořit účet
633
+ subtitle: Pro účast na platformě vytvořte účet.
630
634
  terms: podmínky poskytování služeb
631
635
  tos_agreement: Přihlášením souhlasíte s %{link}.
632
636
  tos_title: Smluvní podmínky
@@ -636,6 +640,7 @@ cs:
636
640
  are_you_new?: Jste na platformě poprvé?
637
641
  register: Vytvořit účet
638
642
  sign_in_disabled: Můžete přistupovat pomocí externího účtu.
643
+ sign_up_disabled: Vytvoření účtu je zakázáno, pro přístup můžete použít existující účet.
639
644
  user:
640
645
  timed_out: Byli jste neaktivní příliš dlouho a byli jste automaticky odhlášeni ze služby. Pokud chcete pokračovat v používání služby, přihlaste se prosím znovu.
641
646
  shared:
@@ -913,10 +918,16 @@ cs:
913
918
  create:
914
919
  button: Sledovat
915
920
  error: Při sledování tohoto zdroje došlo k chybě.
921
+ participatory_space: Sleduje <span>%{resource_name}</span>
916
922
  destroy:
917
923
  button: Ukončit sledování
918
924
  error: Při sledování tohoto zdroje došlo k chybě.
919
925
  forms:
926
+ attachment_link:
927
+ explanation: Pokyny pro odkazy na přílohy
928
+ help_messages:
929
+ - Akceptovány jsou pouze správné formáty URL.
930
+ - Vezměte prosím na vědomí, že odkazy musí být veřejné, aby k nim měli přístup všichni účastníci.
920
931
  errors:
921
932
  decidim/user:
922
933
  password: Heslo je příliš krátké.
@@ -1272,9 +1283,11 @@ cs:
1272
1283
  same_language: Obsah byl zveřejněn ve vašem preferovaném jazyce (%{language}), proto se v tomto e-mailu nezobrazuje automatický překlad.
1273
1284
  translated_text: 'Automaticky přeložený text:'
1274
1285
  notifications:
1286
+ action_error: Při aktualizaci oznámení došlo k chybě.
1275
1287
  no_notifications: Zatím žádné oznámení.
1276
1288
  show:
1277
1289
  missing_event: Jejda, toto oznámení patří k položce, která již není k dispozici. Můžete ho zahodit.
1290
+ moderated: Obsah upraven
1278
1291
  notifications_digest_mailer:
1279
1292
  header:
1280
1293
  daily: Denní výběr oznámení
@@ -1882,6 +1895,7 @@ cs:
1882
1895
  long_words: obsahuje slova, která jsou příliš dlouhá (přes 35 znaků)
1883
1896
  must_start_with_caps: musí začínat velkým písmenem
1884
1897
  nesting_too_deep: nemůže být uvnitř podkategorie
1898
+ not_found: se nepodařilo najít. Vytvořili jste si účet již dříve?
1885
1899
  not_locked: nebyl uzamčen
1886
1900
  not_saved:
1887
1901
  one: 'Při zpracování vašeho požadavku došlo k chybě:'
@@ -1287,7 +1287,7 @@ fi-pl:
1287
1287
  name: Offline
1288
1288
  show:
1289
1289
  message_1: Verkkoyhteytesi näyttää olevan poissa käytöstä tällä hetkellä.
1290
- message_2: Yritä myöhemmin uudelleen.
1290
+ message_2: Yritä myöhemmin uudestaan.
1291
1291
  retry: Yritä uudestaan
1292
1292
  open_data:
1293
1293
  not_available_yet: Avoimet datatiedostot eivät ole vielä käytettävissä, yritä uudelleen muutaman minuutin kuluttua.
@@ -1384,7 +1384,7 @@ fi-pl:
1384
1384
  manage_user_group_admins: Hallinnoi ylläpitäjiä
1385
1385
  manage_user_group_users: Hallinnoi jäseniä
1386
1386
  message: Viesti
1387
- resend_email_confirmation_instructions: Lähetä sähköpostin vahvistusohjeet uudelleen
1387
+ resend_email_confirmation_instructions: Lähetä sähköpostin vahvistusohjeet uudestaan
1388
1388
  confirmation_instructions_sent: Sähköpostivahvistuksen ohjeet lähetetty.
1389
1389
  create_user_group: Luo ryhmä
1390
1390
  edit_profile: Muokkaa profiilia
@@ -1837,7 +1837,7 @@ fi-pl:
1837
1837
  errors:
1838
1838
  messages:
1839
1839
  allowed_file_content_types: 'ainoastaan seuraavat tiedostomuodot on sallittu: %{types}'
1840
- already_confirmed: on jo vahvistettu, yritä kirjautua sisään uudelleen
1840
+ already_confirmed: on jo vahvistettu, yritä kirjautua sisään uudestaan
1841
1841
  blank: ei voi olla tyhjä
1842
1842
  cannot_be_blank: ei voi olla tyhjä
1843
1843
  confirmation: ei täsmää kentän %{attribute} kanssa