decidim-core 0.29.0.rc4 → 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
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