decidim-decidim_awesome 0.11.4 → 0.12.3

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -6
  3. data/README.md +33 -39
  4. data/Rakefile +12 -0
  5. data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
  6. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
  7. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +4 -4
  8. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
  9. data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal_cell.rb +3 -5
  10. data/app/commands/concerns/decidim/decidim_awesome/system/{register_organization_override.rb → create_organization_override.rb} +1 -1
  11. data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +4 -4
  12. data/app/commands/decidim/decidim_awesome/admin/create_constraint.rb +1 -1
  13. data/app/commands/decidim/decidim_awesome/create_editor_image.rb +2 -2
  14. data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
  15. data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +41 -0
  16. data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
  17. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
  18. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -10
  19. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
  20. data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
  21. data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
  22. data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
  23. data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
  24. data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
  25. data/app/forms/concerns/decidim/decidim_awesome/proposals/{proposal_wizard_create_step_form_override.rb → proposal_form_customizations.rb} +1 -1
  26. data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
  27. data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +2 -2
  28. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +13 -0
  29. data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +1 -1
  30. data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
  31. data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
  32. data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
  33. data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
  34. data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
  35. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
  36. data/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss +1 -0
  37. data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
  38. data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +10 -6
  39. data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
  40. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
  41. data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
  42. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
  43. data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
  44. data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
  45. data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
  46. data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
  47. data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
  48. data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
  49. data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
  50. data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
  51. data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
  52. data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
  53. data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
  54. data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
  55. data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
  56. data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
  57. data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
  58. data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
  59. data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
  60. data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
  61. data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
  62. data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
  63. data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
  64. data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
  65. data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
  66. data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
  67. data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
  68. data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
  69. data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
  70. data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
  71. data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
  72. data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
  73. data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
  74. data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
  75. data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
  76. data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
  77. data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
  78. data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
  79. data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
  80. data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
  81. data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
  82. data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
  83. data/app/packs/src/vendor/hashcash.js +83 -0
  84. data/app/packs/src/vendor/sha1.js +143 -0
  85. data/app/packs/src/vendor/stamp.js +50 -0
  86. data/app/packs/stylesheets/decidim/decidim_awesome/admin/admin_accountability.scss +67 -0
  87. data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
  88. data/app/permissions/decidim/decidim_awesome/permissions.rb +3 -2
  89. data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
  90. data/app/uploaders/decidim/decidim_awesome/image_uploader.rb +12 -0
  91. data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +5 -4
  92. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
  93. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
  94. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
  95. data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
  96. data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
  97. data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
  98. data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
  99. data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
  100. data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
  101. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
  102. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
  103. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +1 -1
  104. data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
  105. data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
  106. data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
  107. data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
  108. data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
  109. data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
  110. data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
  111. data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
  112. data/app/views/decidim/decidim_awesome/admin/shared/_filters_with_date.html.erb +41 -32
  113. data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
  114. data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +5 -0
  115. data/app/views/decidim/decidim_awesome/map_component/map/_map_template.html.erb +1 -1
  116. data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
  117. data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
  118. data/config/assets.rb +3 -1
  119. data/config/i18n-tasks.yml +1 -0
  120. data/config/locales/ca.yml +69 -30
  121. data/config/locales/cs.yml +68 -29
  122. data/config/locales/de.yml +67 -28
  123. data/config/locales/en.yml +81 -32
  124. data/config/locales/es.yml +68 -29
  125. data/config/locales/eu.yml +31 -31
  126. data/config/locales/fr.yml +82 -31
  127. data/config/locales/ja.yml +31 -31
  128. data/lib/decidim/decidim_awesome/admin_engine.rb +8 -5
  129. data/lib/decidim/decidim_awesome/awesome.rb +49 -27
  130. data/lib/decidim/decidim_awesome/checksums.yml +47 -42
  131. data/lib/decidim/decidim_awesome/context_analyzers/request_analyzer.rb +2 -2
  132. data/lib/decidim/decidim_awesome/engine.rb +16 -6
  133. data/lib/decidim/decidim_awesome/menu.rb +151 -138
  134. data/lib/decidim/decidim_awesome/test/initializer.rb +4 -1
  135. data/lib/decidim/decidim_awesome/test/shared_examples/box_label_editor_examples.rb +14 -14
  136. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +2 -4
  137. data/lib/decidim/decidim_awesome/test/shared_examples/custom_fields_examples.rb +8 -8
  138. data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +6 -6
  139. data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +5 -4
  140. data/lib/decidim/decidim_awesome/test/shared_examples/scoped_admins_examples.rb +5 -5
  141. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +16 -9
  142. data/lib/decidim/decidim_awesome/version.rb +2 -2
  143. data/lib/decidim/decidim_awesome.rb +0 -1
  144. data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -5
  145. data/package.json +9 -18
  146. metadata +82 -26
  147. data/app/jobs/decidim/decidim_awesome/migrate_legacy_images_job.rb +0 -107
  148. data/app/uploaders/decidim/cw/decidim_awesome/image_uploader.rb +0 -26
  149. data/config/rubocop/disabled.yml +0 -11
  150. data/config/rubocop/faker.yml +0 -480
  151. data/config/rubocop/rails.yml +0 -88
  152. data/config/rubocop/rspec.yml +0 -65
  153. data/config/rubocop/ruby.yml +0 -1210
  154. data/lib/decidim/decidim_awesome/content_parsers/editor_images_parser.rb +0 -39
  155. data/lib/tasks/decidim_awesome_active_storage_migrations_tasks.rake +0 -35
  156. /data/{app/middleware/decidim/decidim_awesome → lib/decidim/decidim_awesome/middleware}/current_config.rb +0 -0
@@ -12,7 +12,7 @@
12
12
  <div class="date_info">
13
13
  <%= t("decidim.decidim_awesome.admin.proposal_custom_fields.private_data_last_update", time_ago: time_ago_in_words(proposal.extra_fields.private_body_updated_at)) if proposal.extra_fields.private_body.present? %>
14
14
  <%= t("decidim.decidim_awesome.admin.proposal_custom_fields.private_data_last_remove", time_ago: time_ago_in_words(proposal.extra_fields.private_body_updated_at)) if proposal.extra_fields.private_body.blank? %>
15
- <%= link_to t("decidim.decidim_awesome.admin.proposal_custom_fields.remove_private_data"), decidim_admin_decidim_awesome.maintenance_path(:private_data) if proposal.extra_fields.private_body_updated_at && proposal.extra_fields.private_body_updated_at < Decidim::DecidimAwesome.private_data_expiration_time.ago %>
15
+ <%= link_to t("decidim.decidim_awesome.admin.proposal_custom_fields.remove_private_data"), decidim_admin_decidim_awesome.private_data_path if proposal.extra_fields.private_body_updated_at && proposal.extra_fields.private_body_updated_at < Decidim::DecidimAwesome.private_data_expiration_time.ago %>
16
16
  </div>
17
17
  <% end %>
18
18
  </div>
@@ -1,5 +1,7 @@
1
1
  <div class="filters__section p-4 flex mb-0">
2
- <div class="fcell filter self-start">
2
+ <div class="fcell filter dropdown__container">
3
+ <!-- Label added to align the button vertically with other inputs -->
4
+ <label class="form-label">&nbsp;</label>
3
5
  <ul class="dropdown menu" data-dropdown-menu data-close-on-click-inside="false">
4
6
  <li>
5
7
  <a href="#" class="dropdown button button__sm button__secondary">
@@ -10,38 +12,45 @@
10
12
  </li>
11
13
  </ul>
12
14
  </div>
15
+
13
16
  <div class="fcell search">
14
- <%= search_form_for(query, url: url_for, html: { class: "form-defaults form" }) do |form| %>
15
- <%= applied_filters_hidden_field_tags %>
16
- <div class="input-group flex items-center">
17
- <%= form.search_field(
18
- search_field_predicate,
19
- class: "input-group-field shadow-md border-alert",
20
- label: false,
21
- placeholder: t(search_field_predicate,
22
- collection: collection_name,
23
- scope: "decidim.admin.filters.search_placeholder")
24
- ) %>
25
- <div class="input-group-button">
26
- <button type="submit" class="text-secondary py-2 px-4 rounded-r focus:outline-none outline-none">
27
- <%= icon "search-line", class: "fill-secondary w-4 h-4", aria_label: t("search_label", scope: "decidim.admin.filters") %>
28
- </button>
29
- </div>
30
- </div>
31
- <div class="input-group flex mt-4 w-full justify-center">
32
- <div class="input-group-field flex flex-col w-full">
33
- <%= form.label t("search_field_start_date", scope: "decidim.admin.filters.label") %>
34
- <%= form.date_field(:created_at_gteq,
35
- class: "input-group-field",
36
- label: false,
37
- datepicker: true) %>
38
- </div>
39
- <div class="input-group-field flex flex-col w-full">
40
- <%= form.label t("search_field_end_date", scope: "decidim.admin.filters.label") %>
41
- <%= form.date_field(:created_at_lteq,
42
- class: "input-group-field",
43
- label: false,
44
- datepicker: true) %>
17
+ <%= search_form_for(query, url: url_for, html: { class: "form form-defaults" }) do |form| %>
18
+ <%= hidden_field_tag :admins, params[:admins] %>
19
+ <div class="form__wrapper">
20
+ <div class="card">
21
+ <div class="card-section">
22
+ <div class="grid grid-cols-4 gap-x-4">
23
+ <div class="row column search-field">
24
+ <%= form.label search_field_predicate, t("decidim.search.term_input_placeholder"), class: "form-label" %>
25
+ <%= form.search_field(
26
+ search_field_predicate,
27
+ class: "input-group-field",
28
+ placeholder: t("decidim.search.term_input_placeholder"),
29
+ label: false
30
+ ) %>
31
+ </div>
32
+ <div class="row column datepicker_field">
33
+ <%= form.label :created_at_gteq, t("search_field_start_date", scope: "decidim.admin.filters.label"), class: "form-label" %>
34
+ <%= form.date_field(:created_at_gteq,
35
+ class: "input-group-field",
36
+ label: false) %>
37
+ </div>
38
+
39
+ <div class="row column datepicker_field">
40
+ <%= form.label :created_at_lteq, t("search_field_end_date", scope: "decidim.admin.filters.label"), class: "form-label" %>
41
+ <%= form.date_field(:created_at_lteq,
42
+ class: "input-group-field",
43
+ label: false) %>
44
+ </div>
45
+ <div class="row column search-button-container">
46
+ <!-- Label added to align the button vertically with other inputs -->
47
+ <label class="form-label">&nbsp;</label>
48
+ <button type="submit" class="button button__sm button__secondary" aria-label="<%= t("decidim.search.term_input_placeholder") %>">
49
+ <%= icon "search-line", class: "!fill-white w-4 h-4" %>
50
+ </button>
51
+ </div>
52
+ </div>
53
+ </div>
45
54
  </div>
46
55
  </div>
47
56
  <% end %>
@@ -7,12 +7,12 @@
7
7
  <div>
8
8
  <div class="instructions">
9
9
  <%= t("decidim.decidim_awesome.amendments.modal.explanation_html",
10
- proposal_link: present(@proposal).proposal_path + "#comments") %>
10
+ proposal_link: present(@proposal).proposal_path + "#comments") %>
11
11
 
12
12
  <% emendations = @proposal.emendations.not_hidden.where(decidim_amendments: { state: Decidim::Amendment.states["evaluating"] }) %>
13
13
  <% if current_component.current_settings&.amendments_visibility == "all" && emendations %>
14
14
  <%= t("decidim.decidim_awesome.amendments.modal.current_amendment_html",
15
- amendment_link: present(emendations&.first).proposal_path) %>
15
+ amendment_link: present(emendations&.first).proposal_path) %>
16
16
  <% end %>
17
17
  </div>
18
18
  </div>
@@ -0,0 +1,5 @@
1
+
2
+ <% if defined?(awesome_hashcash_bits) && awesome_hashcash_bits(zone) %>
3
+ <% append_javascript_pack_tag("decidim_decidim_awesome_hashcash") %>
4
+ <%= hashcash_hidden_field_tag %>
5
+ <% end %>
@@ -78,7 +78,7 @@
78
78
  <script>
79
79
  window.AwesomeMap = window.AwesomeMap || {};
80
80
  window.AwesomeMap.categories = <%= current_categories(categories).to_json.html_safe %>;
81
- window.AwesomeMapProposalTexts = <%= Decidim::Proposals::Proposal::STATES.to_h { |state, _| [state, t("decidim.proposals.answers.#{state}")] }.to_json.html_safe %>;
81
+ window.AwesomeMapProposalTexts = <%= Decidim::Proposals::ProposalState.pluck(:token).index_with { |state| t("decidim.proposals.answers.#{state}") }.to_json.html_safe %>;
82
82
  window.AwesomeMapMeetingTypes = <%= Decidim::Meetings::Meeting::TYPE_OF_MEETING.to_h { |type, _| [type, Decidim.icons.all[type.to_s]["icon"]] }.to_json.html_safe %>;
83
83
  window.AwesomeMapMeetingTexts = <%= Decidim::Meetings::Meeting::TYPE_OF_MEETING.to_h { |type, _| [type, t("decidim.meetings.meetings.filters.type_values.#{type}")] }.to_json.html_safe %>;
84
84
  </script>
@@ -4,7 +4,7 @@ window.DecidimAwesome.currentLocale = "<%= current_locale %>";
4
4
  window.DecidimAwesome.version = "<%= Decidim::DecidimAwesome::VERSION %>";
5
5
  window.DecidimAwesome.editorUploaderPath = "<%= decidim_decidim_awesome.editor_images_path %>";
6
6
  window.DecidimAwesome.renameScopeLabelPath = "<%= decidim_admin_decidim_awesome.rename_scope_label_path %>";
7
- window.DecidimAwesome.texts = {
7
+ window.DecidimAwesome.i18n = {
8
8
  "dragAndDropImage": "<%= j t(".drag_and_drop_image") %>",
9
9
  "autosavedSuccess": "<%= j t(".autosaved_success") %>",
10
10
  "autosavedError": "<%= j t(".autosaved_error") %>",
@@ -18,7 +18,7 @@ window.DecidimAwesome.texts = {
18
18
  "selectDeselectAll": "<%= j t(".select_deselect_all") %>",
19
19
  "officialAuthor": "<%= j t("decidim.blogs.models.post.fields.official_blog_post") %>",
20
20
  }
21
- window.DecidimAwesome.formBuilderLangsLocation = "<%= j Decidim::DecidimAwesome.form_builder_langs_location %>";
21
+ window.DecidimAwesome.formBuilderLangsLocation = "<%= decidim_decidim_awesome.form_builder_i18n_path(locale: nil) %>";
22
22
  <% if defined?(questionnaire) && questionnaire&.id %>
23
23
  window.DecidimAwesome.current_questionnaire = "edit_questionnaire_<%= questionnaire.id %>";
24
24
  <% if defined? visitor_already_answered? %>
@@ -1,19 +1,10 @@
1
1
  <%= render "layouts/decidim/decidim_awesome/admin/base" do %>
2
2
  <div class="item_show__header">
3
3
  <h2 class="item_show__header-title">
4
- <%= t("layouts.decidim.decidim_awesome.admin.maintenance.title", title: t(current_view, scope: "layouts.decidim.decidim_awesome.admin.maintenance.titles")) %>
5
-
6
- <% available_views.each do |view, parts| %>
7
- <% next if view == current_view %>
8
-
9
- <%= link_to parts[:path], class: "button button__secondary button__xs tiny button--title" do %>
10
- <%= icon parts[:icon] %>
11
- <%= parts[:title] %>
12
- <% end %>
13
- <% end %>
4
+ <%= t("layouts.decidim.decidim_awesome.admin.maintenance.title", title: t(controller_name, scope: "layouts.decidim.decidim_awesome.admin.maintenance.titles")) %>
14
5
  </h2>
15
6
  </div>
16
- <div class="card">
7
+ <div class="card mb-8">
17
8
  <%= yield %>
18
9
  </div>
19
10
  <% end %>
data/config/assets.rb CHANGED
@@ -8,9 +8,11 @@ Decidim::Webpacker.register_entrypoints(
8
8
  # override the Decidim entry point for decidim so we can define a custom createEditor method
9
9
  decidim_editor: "#{base_path}/app/packs/entrypoints/decidim_editor.js",
10
10
  decidim_decidim_awesome: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome.js",
11
+ decidim_decidim_awesome_hashcash: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js",
11
12
  decidim_admin_decidim_awesome: "#{base_path}/app/packs/entrypoints/decidim_admin_decidim_awesome.js",
12
13
  decidim_admin_decidim_awesome_global: "#{base_path}/app/packs/entrypoints/decidim_admin_decidim_awesome_global.js",
13
14
  decidim_decidim_awesome_map: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome_map.js",
14
15
  decidim_decidim_awesome_custom_fields: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome_custom_fields.js",
15
- decidim_decidim_awesome_iframe: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome_iframe.scss"
16
+ decidim_decidim_awesome_iframe: "#{base_path}/app/packs/entrypoints/decidim_decidim_awesome_iframe.scss",
17
+ decidim_admin_decidim_awesome_search_form: "#{base_path}/app/packs/entrypoints/decidim_admin_decidim_awesome_search_form.scss"
16
18
  )
@@ -12,6 +12,7 @@ data:
12
12
  - "<%= %x[bundle info decidim-blogs --path].chomp %>/config/locales/%{locale}.yml"
13
13
 
14
14
  ignore_unused:
15
+ - "active_hashcash.*"
15
16
  - "decidim.admin.actions.manage"
16
17
  - "decidim.admin.filters.admin_accountability.*"
17
18
  - "decidim.admin.filters.search_placeholder.*"
@@ -1,4 +1,7 @@
1
1
  ca:
2
+ active_hashcash:
3
+ submit_filter: Filtra
4
+ waiting_label: Esperant verificació...
2
5
  activemodel:
3
6
  attributes:
4
7
  config:
@@ -10,6 +13,10 @@ ca:
10
13
  force_authorization_after_login: Forçar autorització després d'iniciat sessió/registre
11
14
  force_authorization_help_text: Text d'ajuda per la pàgina d'autorització
12
15
  force_authorization_with_any_method: Permetre l'accés si es concedeix alguna de les autoritzacions (per defecte, totes són necessàries)
16
+ hashcash_login: Activa la protecció HashCash antibot per usuaris existents (inici sessió)
17
+ hashcash_login_bits: Nombre de bits per l'algoritme Hashcash (inici sessió)
18
+ hashcash_signup: Activa la protecció HashCash antibot per usuaris existents (registre)
19
+ hashcash_signup_bits: Nombre de bits per l'algoritme Hashcash (registre)
13
20
  intergram_auto_no_response: Un missatge que s'envia un minut després que la usuària hagi enviat el seu primer missatge i no s'hagi rebut cap resposta
14
21
  intergram_auto_response: Un missatge que s'envia immediatament després que la usuària enviï el seu primer missatge
15
22
  intergram_chat_id: ID de xat
@@ -130,7 +137,7 @@ ca:
130
137
  sort_orders_enabled: Opcions d'ordenació actives
131
138
  voting_cards_box_title: Títol per la cabina de votació
132
139
  voting_cards_box_title_help: L'opció per defecte és 'Votar a aquesta proposta'. Utilitzeu '-' per amagar-la.
133
- voting_cards_instructions: Instruccions d'ajuda en el suport/votació (finestra modal que es pot tancar).
140
+ voting_cards_instructions: Instruccions d'ajuda en el suport/votació (finestra modal que es pot tancar)
134
141
  voting_cards_instructions_help: L'opció per defecte és 'Llegeix les normes de la votació amb atenció per entendre com s'utilitzarà el teu vot per %{organization}"
135
142
  voting_cards_show_abstain: Afegeix l'opció d'abstenció
136
143
  voting_cards_show_modal_help: Mostra la finestra modal d'instruccions/ajuda quan es faci clic al suport
@@ -264,6 +271,15 @@ ca:
264
271
  drag_and_drop_supported: Quan es pugin imatges, es pot fer a través del mètode de "arrossegar i deixar anar". Les imatges seran pujades al servidor i inserides com recursos externs (no es fa servir codificació en línia base64).
265
272
  force_authorization_after_login: 'Si està habilitat, les usuàries seran redireccionades a la pàgina d''autorització després de l''inici de sessió o registre si algunes de les autoritzacions especificades no són concedides. Això és útil si voleu forçar les usuàries a que es verifiquin a través d''una autorització específica abans que puguin iniciar sessió en qualsevol moment (per exemple: per prevenir spam).'
266
273
  force_authorization_help_text: Afegeix un text personalitzat per explicar per què cal l'autorització. Assegureu-vos també d'afegir un mode de contacte en cas que les usuàries necessitin ajuda.
274
+ hashcash_i18n_key: 'Podeu personalitzar el text del botó que es mostra als usuaris a les pàgines d''iniciar sessió/registre amb la clau i18n %{key}'
275
+ hashcash_login: |
276
+ Protegeix les aplicacions Rails contra bots i atacs de força bruta sense molestar els humans.
277
+ Hashcash és un sistema de prova de treball que requereix que els usuaris resolguin un trencaclosques computacional (realitzat automàticament pel navegador) abans de poder registrar-se.
278
+ hashcash_login_bits: Aquest paràmetre defineix el nombre de bits que l'algoritme Hashcash utilitzarà per generar la prova de treball. Es recomana utilitzar un valor entre 16 (fàcil) i 30 (extremadament difícil) bits. El valor per defecte per als formularis d'inici de sessió és %{bits} bits.
279
+ hashcash_signup: |
280
+ Protegeix les aplicacions Rails contra bots i atacs de força bruta sense molestar els humans.
281
+ Hashcash és un sistema de prova de treball que requereix que els usuaris resolguin un trencaclosques computacional (realitzat automàticament pel navegador) abans de poder registrar-se.
282
+ hashcash_signup_bits: Aquest paràmetre defineix el nombre de bits que l'algoritme Hashcash utilitzarà per generar la prova de treball. Es recomana utilitzar un valor entre 16 (fàcil) i 30 (extremadament difícil) bits. El valor per defecte per als formularis de registre és %{bits} bits.
267
283
  intergram_about: Intergram utilitza el Telegram Messenger per gestionar un widget de xat en viu de suport incrustat a la part inferior de la pàgina.
268
284
  intergram_config: 'Convida a la <a href="https://web.telegram.org/#/im?p=@IntergramBot">@Intergram bot</a> al teu grup o comença un xat amb ella directament. <a href="https://github.com/idoco/intergram#embed-intergram-in-your-website-with-these-2-simple-steps">+ info</a>'
269
285
  original_editor_override: Desde la versió 0.26, és possible (per administradors només) pujar imatges als editors de text enriquit. Per tant, les opcions d'imatges disponibles en aquesta pàgina només afecten a la part pública de la web (les administradores sempre ho tenen activat).
@@ -398,37 +414,25 @@ ca:
398
414
  update:
399
415
  error: 'Error en actualitzar la redirecció: %{error}'
400
416
  success: Redirecció actualitzada correctament
401
- maintenance:
402
- private_data:
403
- component: Espai / Component
404
- confirm_delete: Segur que voleu suprimir totes les dades privades d'aquest recurs? Aquesta acció no es pot desfer.
405
- delete: Esborrar-ho tot
406
- destroying_private_data: Les dades privades de %{title} s'han programat per ser destruïdes. Si us plau, torneu a comprovar d'aquí a uns minuts.
407
- done: Fet
417
+ hashcash:
418
+ filters:
419
+ ip_addresses: Veure les adreces IP
420
+ stamps: Veure els segells de Hashcash
421
+ index:
422
+ bits: Bits
423
+ created_at: Creada el
408
424
  help_html: |
409
- Aquesta eina permet esborrar totes les dades privades d'un espai o component participatiu concret. Aquesta acció és irreversible i eliminarà totes les dades privades de la base de dades.
410
- <br><br>
411
- <strong>Què es consideren dades privades?</strong>
412
- <br>
413
- Les dades privades són qualsevol informació que no està disponible públicament i només és accessible per als administradors. Això, de moment, inclou la informació del camps personalitzats privats.
414
- <br><br>
415
- <strong>Què passa quan suprimeixo dades privades?</strong>
416
- <br>
417
- Quan suprimiu les dades privades, tota la informació privada de l'espai o component participatiu seleccionat s'eliminarà permanentment de la base de dades. Un registre d'aquesta acció s'emmagatzemarà al sistema amb finalitats d'auditoria (pero no les dades en si).
425
+ Aquesta pàgina mostra els segells Hashcash que s'han detectat al sistema. Hashcash és un sistema de prova de treball que requereix que els usuaris resolguin un trencaclosques computacional (realitzat automàticament pel navegador) abans de poder registrar-se.
418
426
  <br><br>
419
- <strong>Què passa amb les dades públiques?</strong>
420
- <br>
421
- Les dades públiques no es veuran afectades per aquesta acció. Només s'eliminaran les dades privades.
422
- <br><br>
423
- <strong>Hi ha un temps mínim d'espera abans de suprimir les dades privades?</strong>
424
- <br>
425
- Sí, no podeu suprimir dades privades si l'última actualització va ser fa menys de %{time_ago}. Podeu canviar aquesta configuració al fitxer inicialitzador.
426
- items_count: Total afectats
427
- last_date: Última actualització
428
- no_data: No s'han trobat dades privades més antigues que fa %{time_ago}
429
- not_destroyable: Aquest recurs encara no es pot destruir
430
- removing: Eliminant...
431
- time_ago: "fa %{time}"
427
+ Cada entrada d'aquesta llista representa un segell Hashcash que ha estat generat per un usuari cada vegada que s'ha registrat o ha iniciat la sessió.
428
+ ip_address: Adreça IP
429
+ no_data: No s'han trobat segells de Hashcash
430
+ request_path: Ruta de la sol·licitud
431
+ ip_addresses:
432
+ help_html: Aquesta pàgina enumera totes les adreces IP que s'han detectat al sistema, ordenades pel nombre de segells Hashcash que han generat. <br><br> Cada segell és una acció d'inici de sessió o de registre per part d'un usuari. Podeu utilitzar aquesta informació per detectar activitats sospitoses.
433
+ ip_address: Adreça IP
434
+ no_data: No s'han trobat adreces IP
435
+ stamps: Segells hashcash
432
436
  menu:
433
437
  admins: Administradores acotades
434
438
  custom_redirects: Redireccions personalitzades
@@ -436,6 +440,7 @@ ca:
436
440
  livechat: Xat en directe
437
441
  maintenance:
438
442
  checks: Compatibilitat de sistema
443
+ hashcash: Segells hashcash
439
444
  maintenance: Manteniment
440
445
  private_data: Dades privades
441
446
  menu_hacks: Retocs al menú
@@ -472,6 +477,8 @@ ca:
472
477
  title: Bloc de menú global a la home
473
478
  menu:
474
479
  title: Menú principal
480
+ mobile_menu:
481
+ title: Menú mòbil
475
482
  new: Nou ítem
476
483
  remove: Eliminar addició
477
484
  remove_hack: Eliminar retoc
@@ -487,6 +494,37 @@ ca:
487
494
  verification_modal:
488
495
  authorizations_for: Autoritzacions per a %{user}
489
496
  close: Tanca
497
+ private_data:
498
+ private_data:
499
+ component: Espai / Component
500
+ confirm_delete: Segur que voleu suprimir totes les dades privades d'aquest recurs? Aquesta acció no es pot desfer.
501
+ delete: Esborrar-ho tot
502
+ destroying: Les dades privades de %{title} s'han programat per ser destruïdes. Si us plau, torneu a comprovar d'aquí a uns minuts.
503
+ done: Fet
504
+ help_html: |
505
+ Aquesta eina permet esborrar totes les dades privades d'un espai o component participatiu concret. Aquesta acció és irreversible i eliminarà totes les dades privades de la base de dades.
506
+ <br><br>
507
+ <strong>Què es consideren dades privades?</strong>
508
+ <br>
509
+ Les dades privades són qualsevol informació que no està disponible públicament i només és accessible per als administradors. Això, de moment, inclou la informació del camps personalitzats privats.
510
+ <br><br>
511
+ <strong>Què passa quan suprimeixo dades privades?</strong>
512
+ <br>
513
+ Quan suprimiu les dades privades, tota la informació privada de l'espai o component participatiu seleccionat s'eliminarà permanentment de la base de dades. Un registre d'aquesta acció s'emmagatzemarà al sistema amb finalitats d'auditoria (pero no les dades en si).
514
+ <br><br>
515
+ <strong>Què passa amb les dades públiques?</strong>
516
+ <br>
517
+ Les dades públiques no es veuran afectades per aquesta acció. Només s'eliminaran les dades privades.
518
+ <br><br>
519
+ <strong>Hi ha un temps mínim d'espera abans de suprimir les dades privades?</strong>
520
+ <br>
521
+ Sí, no podeu suprimir dades privades si l'última actualització va ser fa menys de %{time_ago}. Podeu canviar aquesta configuració al fitxer inicialitzador.
522
+ items_count: Total afectats
523
+ last_date: Última actualització
524
+ no_data: No s'han trobat dades privades més antigues que fa %{time_ago}
525
+ not_destroyable: Aquest recurs encara no es pot destruir
526
+ removing: Eliminant...
527
+ time_ago: "fa %{time}"
490
528
  proposal_custom_fields:
491
529
  menu:
492
530
  title: Camps públics
@@ -640,6 +678,7 @@ ca:
640
678
  title: 'Eines de manteniment: %{title}'
641
679
  titles:
642
680
  checks: Anàlisi de compatibilitat amb el sistema
681
+ hashcash: Segells hashcash
643
682
  private_data: Neteja de dades privades
644
683
  awesome_config:
645
684
  amendments: Esmenes
@@ -1,4 +1,7 @@
1
1
  cs:
2
+ active_hashcash:
3
+ submit_filter: Filtr
4
+ waiting_label: Čekání na ověření...
2
5
  activemodel:
3
6
  attributes:
4
7
  config:
@@ -10,6 +13,10 @@ cs:
10
13
  force_authorization_after_login: Vynutit autorizaci po přihlášení/registraci
11
14
  force_authorization_help_text: Text nápovědy pro autorizační stránku
12
15
  force_authorization_with_any_method: Povolit přístup, pokud je udělen některou z autorizací (ve výchozím nastavení jsou vyžadovány vše)
16
+ hashcash_login: Povolit ochranu Hashcash bota pro existující uživatele (přihlášení)
17
+ hashcash_login_bits: Počet bitů pro hashcash algoritmus (přihlášení)
18
+ hashcash_signup: Povolit ochranu Hashcash bota pro nové uživatele (registrace)
19
+ hashcash_signup_bits: Počet bitů pro Hashcash algoritmus (přihlášení)
13
20
  intergram_auto_no_response: Zpráva, která je odeslána jednu minutu poté, co uživatel odešle svou první zprávu a nebyla obdržena odpověď
14
21
  intergram_auto_response: Zpráva, která je odeslána okamžitě poté, co uživatel odešle svou první zprávu
15
22
  intergram_chat_id: ID Chatu
@@ -264,6 +271,15 @@ cs:
264
271
  drag_and_drop_supported: Při nahrávání obrázků je podporováno vložení přetažením. Obrázky budou nahrány na server a vloženy jako externí zdroje (nepoužívá base64 inline kódování).
265
272
  force_authorization_after_login: 'Pokud je povoleno, uživatelé budou po přihlášení nebo registraci přesměrováni na autorizační stránku, pokud nejsou uděleny některé z zadaných autorizací. To je užitečné, pokud chcete donutit uživatele k ověření pomocí specifické autorizace, než se budou moci vůbec přihlásit (např.: zabránit spamu).'
266
273
  force_authorization_help_text: Přidejte vlastní text, který vysvětlí proč je potřeba autorizace. Také se ujistěte, že přidáte kontaktní metodu pro případ, že uživatelé potřebují pomoc.
274
+ hashcash_i18n_key: 'Text, který je zobrazen uživatelům v tlačítkách pro přihlášení / registraci pomocí klíče i18n: %{key}'
275
+ hashcash_login: |
276
+ Chraňte aplikace proti botům a brute force útokům, aniž by to obtěžovalo lidi.
277
+ Hashcash je proof-of-work systém, který vyžaduje, aby uživatelé vyřešili počítačovou hádanku (kterou provádí prohlížeč) před tím, než se mohou zaregistrovat.
278
+ hashcash_login_bits: Tento parametr definuje počet bitů, které bude používat algoritmus Hashcash pro generování důkazu práce. Doporučuje se použít hodnotu mezi 16 (jednoduchými) a 30 (extrémně těžkými) bity. Výchozí hodnota pro přihlašovací formuláře je %{bits} bity.
279
+ hashcash_signup: |
280
+ Chraňte aplikace proti botům a brute force útokům, aniž by to obtěžovalo lidi.
281
+ Hashcash je proof-of-work systém, který vyžaduje, aby uživatelé vyřešili počítačovou hádanku (kterou provádí prohlížeč) před tím, než se mohou zaregistrovat.
282
+ hashcash_signup_bits: Tento parametr definuje počet bitů, které bude používat algoritmus Hashcash pro generování důkazu práce. Doporučuje se použít hodnotu mezi 16 (jednoduchými) a 30 (extrémně těžkými) bity. Výchozí hodnota pro registrační formuláře je %{bits} bity.
267
283
  intergram_about: Intergram používá Telegram messenger pro zpracování widgetu live podpory v dolní části stránky.
268
284
  intergram_config: 'Pozvěte <a href="https://web.telegram.org/#/im?p=@IntergramBot">@Intergram bota</a> do vaší skupiny nebo začněte chatovat přímo. <a href="https://github.com/idoco/intergram#embed-intergram-in-your-website-with-these-2-simple-steps">+ info</a>'
269
285
  original_editor_override: Od verze 0.26 je možné nahrávat obrázky do editorů (pouze pro administrátory). Proto zde nastavení obrázků ovlivňuje pouze veřejné editory (správce je bude mít vždy k dispozici).
@@ -398,37 +414,25 @@ cs:
398
414
  update:
399
415
  error: Chyba aktualizace přesměrování! %{error}
400
416
  success: Přesměrování úspěšně aktualizováno
401
- maintenance:
402
- private_data:
403
- component: Prostor / komponenta
404
- confirm_delete: Opravdu chcete odstranit všechna soukromá data tohoto zdroje? Tuto akci nelze vrátit zpět.
405
- delete: Odstranit vše
406
- destroying_private_data: Soukromá data pro %{title} jsou nastavena na zničení. Zkontrolujte prosím znovu za několik minut.
407
- done: Hotovo
417
+ hashcash:
418
+ filters:
419
+ ip_addresses: Zobrazit IP adresy
420
+ stamps: Zobrazit Hashcash razítka
421
+ index:
422
+ bits: Bity
423
+ created_at: Vytvořeno
408
424
  help_html: |
409
- Tento nástroj umožňuje odstranit všechna soukromá data pro konkrétní participační prostor nebo komponentu. Tato akce je nevratná a odstraní všechna soukromá data z databáze.
410
- <br><br>
411
- <strong>Co je považováno za soukromá data?</strong>
412
- <br>
413
- Soukromá data jsou jakékoliv informace, které nejsou veřejně dostupné a jsou přístupné pouze správcům. To v současné době zahrnuje informace o soukromých vlastních polích.
414
- <br><br>
415
- <strong>Co se stane, když smažu soukromá data?</strong>
416
- <br>
417
- Když smažete soukromá data, všechny soukromé informace pro vybraný participační prostor nebo součást budou trvale odstraněny z databáze. Protokol této akce bude uložen v systému pro účely auditu.
425
+ Tato stránka zobrazuje hashcash razítka, která byla zjištěna v systému. Hashcash je systém potvrzující práci, který vyžaduje, aby uživatelé vyřešili počítačovou hádanku (kterou provádí prohlížeč) před tím, než se mohou zaregistrovat.
418
426
  <br><br>
419
- <strong>Co se stane s veřejnými daty?</strong>
420
- <br>
421
- Veřejná data nebudou touto akcí dotčena. Budou odstraněna pouze soukromá data.
422
- <br><br>
423
- <strong>Je minimální čas počkat před odstraněním soukromých dat?</strong>
424
- <br>
425
- Ano, nemůžete smazat soukromá data, pokud byla poslední aktualizace menší než před %{time_ago}. Tuto konfiguraci můžete změnit v souboru inicializátoru.
426
- items_count: Dotčené celkem
427
- last_date: Poslední aktualizace
428
- no_data: Nejsou nalezena žádná soukromá data starší než před %{time_ago}
429
- not_destroyable: Tento zdroj zatím nelze zničit
430
- removing: Odstraňování...
431
- time_ago: "Před %{time}"
427
+ Každá položka v tomto seznamu představuje hashcash razítko, které bylo vygenerováno uživatelem pokaždé, když se zaregistroval nebo se přihlásil.
428
+ ip_address: IP adresa
429
+ no_data: Nenalezena žádná Hashcash razítka
430
+ request_path: Cesta požadavku
431
+ ip_addresses:
432
+ help_html: Tato stránka obsahuje všechny IP adresy, které byly v systému zjištěny podle počtu Hashcash razítek, které vygenerovaly. <br><br> Každé razítko je buď přihlášení nebo registrace uživatelem. Tyto informace můžete použít k detekci podezřelé aktivity.
433
+ ip_address: IP adresa
434
+ no_data: Nebyly nalezeny žádné IP adresy
435
+ stamps: Hashcash razítka
432
436
  menu:
433
437
  admins: Škálovaní administrátoři
434
438
  custom_redirects: Vlastní přesměrování
@@ -436,6 +440,7 @@ cs:
436
440
  livechat: Live Chat
437
441
  maintenance:
438
442
  checks: Systémová kompatibilita
443
+ hashcash: Hashcash razítka
439
444
  maintenance: Údržba
440
445
  private_data: Soukromá data
441
446
  menu_hacks: Vylepšení menu
@@ -472,6 +477,8 @@ cs:
472
477
  title: Blok Globální menu
473
478
  menu:
474
479
  title: Hlavní menu
480
+ mobile_menu:
481
+ title: Mobilní menu
475
482
  new: Nová položka
476
483
  remove: Odstranit přidání
477
484
  remove_hack: Odstranit přizpůsobení
@@ -487,6 +494,37 @@ cs:
487
494
  verification_modal:
488
495
  authorizations_for: Autorizace pro %{user}
489
496
  close: Zavřít
497
+ private_data:
498
+ private_data:
499
+ component: Prostor / komponenta
500
+ confirm_delete: Opravdu chcete odstranit všechna soukromá data tohoto zdroje? Tuto akci nelze vrátit zpět.
501
+ delete: Odstranit vše
502
+ destroying: Soukromá data pro %{title} jsou nastavena na zničení. Zkontrolujte prosím znovu za několik minut.
503
+ done: Hotovo
504
+ help_html: |
505
+ Tento nástroj umožňuje odstranit všechna soukromá data pro konkrétní participační prostor nebo komponentu. Tato akce je nevratná a odstraní všechna soukromá data z databáze.
506
+ <br><br>
507
+ <strong>Co je považováno za soukromá data?</strong>
508
+ <br>
509
+ Soukromá data jsou jakékoliv informace, které nejsou veřejně dostupné a jsou přístupné pouze správcům. To v současné době zahrnuje informace o soukromých vlastních polích.
510
+ <br><br>
511
+ <strong>Co se stane, když smažu soukromá data?</strong>
512
+ <br>
513
+ Když smažete soukromá data, všechny soukromé informace pro vybraný participační prostor nebo součást budou trvale odstraněny z databáze. Protokol této akce bude uložen v systému pro účely auditu.
514
+ <br><br>
515
+ <strong>Co se stane s veřejnými daty?</strong>
516
+ <br>
517
+ Veřejná data nebudou touto akcí dotčena. Budou odstraněna pouze soukromá data.
518
+ <br><br>
519
+ <strong>Je minimální čas počkat před odstraněním soukromých dat?</strong>
520
+ <br>
521
+ Ano, nemůžete smazat soukromá data, pokud byla poslední aktualizace menší než před %{time_ago}. Tuto konfiguraci můžete změnit v souboru inicializátoru.
522
+ items_count: Celkový dopad
523
+ last_date: Poslední aktualizace
524
+ no_data: Nejsou nalezena žádná soukromá data starší než před %{time_ago}
525
+ not_destroyable: Tento zdroj zatím nelze zničit
526
+ removing: Odstraňování...
527
+ time_ago: "Před %{time}"
490
528
  proposal_custom_fields:
491
529
  menu:
492
530
  title: Veřejná pole
@@ -640,6 +678,7 @@ cs:
640
678
  title: 'Nástroj údržby: %{title}'
641
679
  titles:
642
680
  checks: Kontroly kompatibility systému
681
+ hashcash: Hashcash razítka
643
682
  private_data: Vymazání soukromých údajů
644
683
  awesome_config:
645
684
  amendments: Pozměňovací návrhy