decidim-decidim_awesome 0.12.0 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/README.md +24 -14
- data/Rakefile +12 -0
- data/app/cells/concerns/decidim/decidim_awesome/global_menu_cell_override.rb +14 -2
- data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -4
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/show.erb +3 -3
- data/app/cells/decidim/decidim_awesome/voting/voting_cards_proposal/vote_block_for.erb +1 -1
- data/app/controllers/concerns/decidim/decidim_awesome/admin/maintenance_context.rb +0 -28
- data/app/controllers/concerns/decidim/decidim_awesome/needs_hashcash.rb +41 -0
- data/app/controllers/concerns/decidim/decidim_awesome/not_found_redirect.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +2 -2
- data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +0 -4
- data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +2 -1
- data/app/controllers/decidim/decidim_awesome/admin/custom_redirects_controller.rb +1 -2
- data/app/controllers/decidim/decidim_awesome/admin/hashcash_controller.rb +39 -0
- data/app/controllers/decidim/decidim_awesome/admin/menu_hacks_controller.rb +1 -1
- data/app/controllers/decidim/decidim_awesome/admin/{maintenance_controller.rb → private_data_controller.rb} +9 -9
- data/app/controllers/decidim/decidim_awesome/utils_controller.rb +17 -0
- data/app/forms/concerns/decidim/decidim_awesome/proposals/proposal_form_override.rb +7 -1
- data/app/forms/decidim/decidim_awesome/admin/config_form.rb +13 -0
- data/app/helpers/decidim/decidim_awesome/admin/config_constraints_helpers.rb +1 -1
- data/app/helpers/decidim/decidim_awesome/map_helper.rb +4 -2
- data/app/models/decidim/decidim_awesome/paper_trail_version.rb +1 -1
- data/app/overrides/decidim/devise/registrations/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/sessions/new/add_hashcash.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_custom_styles.html.erb.deface +3 -0
- data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +0 -2
- data/app/packs/entrypoints/decidim_decidim_awesome_hashcash.js +4 -0
- data/app/packs/src/decidim/decidim_awesome/admin/auto_edit.js +10 -6
- data/app/packs/src/decidim/decidim_awesome/admin/custom_fields_builder.js +4 -2
- data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +6 -3
- data/app/packs/src/decidim/decidim_awesome/awesome_map/api/proposals_fetcher.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controllers/proposals_controller.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/awesome_map/controls_ui.js +6 -6
- data/app/packs/src/decidim/decidim_awesome/awesome_map/load_map.js +1 -1
- data/app/packs/src/decidim/decidim_awesome/forms/autosave.js +3 -3
- data/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js +1 -113
- data/app/packs/src/decidim/decidim_awesome/proposals/images.js +1 -1
- data/app/packs/src/vendor/form_builder_langs/ar-SA.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/ar-TN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ca-ES.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/cs-CZ.lang +105 -0
- data/app/packs/src/vendor/form_builder_langs/da-DK.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/de-DE.lang +109 -0
- data/app/packs/src/vendor/form_builder_langs/el-GR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/en-US.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/es-ES.lang +103 -0
- data/app/packs/src/vendor/form_builder_langs/fa-IR.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/fi-FI.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/fr-FR.lang +117 -0
- data/app/packs/src/vendor/form_builder_langs/he-IL.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/hi-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/hu-HU.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/id-ID.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/it-IT.lang +107 -0
- data/app/packs/src/vendor/form_builder_langs/ja-JP.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/my-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/nb-NO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/nl-NL.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/pl-PL.lang +122 -0
- data/app/packs/src/vendor/form_builder_langs/pt-BR.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/pu-IN.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/qz-MM.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/ro-RO.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/ru-RU.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/sl-SI.lang +110 -0
- data/app/packs/src/vendor/form_builder_langs/th-TH.lang +111 -0
- data/app/packs/src/vendor/form_builder_langs/tr-TR.lang +115 -0
- data/app/packs/src/vendor/form_builder_langs/uk-UA.lang +108 -0
- data/app/packs/src/vendor/form_builder_langs/vi-VN.lang +94 -0
- data/app/packs/src/vendor/form_builder_langs/zh-CN.lang +100 -0
- data/app/packs/src/vendor/form_builder_langs/zh-TW.lang +94 -0
- data/app/packs/src/vendor/hashcash.js +83 -0
- data/app/packs/src/vendor/sha1.js +143 -0
- data/app/packs/src/vendor/stamp.js +50 -0
- data/app/packs/stylesheets/decidim/decidim_awesome/forms/autosave.scss +2 -12
- data/app/presenters/decidim/decidim_awesome/private_data_presenter.rb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_accountability/index.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +6 -5
- data/app/views/decidim/decidim_awesome/admin/checks/index.html.erb +6 -6
- data/app/views/decidim/decidim_awesome/admin/config/_autoedit_box_label.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/config/_constraints.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_admins.html.erb +4 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_editors.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/config/_form_proposal_custom_fields.html.erb +4 -4
- data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +3 -3
- data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +40 -2
- data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/admin/hashcash/_filters.html.erb +55 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/index.html.erb +33 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/ip_addresses.html.erb +29 -0
- data/app/views/decidim/decidim_awesome/admin/hashcash/show.html.erb +42 -0
- data/app/views/decidim/decidim_awesome/admin/menu_hacks/index.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/admin/{maintenance/show.html.erb → private_data/index.html.erb} +2 -3
- data/app/views/decidim/decidim_awesome/admin/proposals/_private_body.html.erb +1 -1
- data/app/views/decidim/decidim_awesome/amendments/_modal.html.erb +2 -2
- data/app/views/decidim/decidim_awesome/hashcash/_hidden_field.html.erb +5 -0
- data/app/views/layouts/decidim/decidim_awesome/_awesome_config.html.erb +2 -2
- data/app/views/layouts/decidim/decidim_awesome/admin/maintenance.html.erb +2 -11
- data/config/assets.rb +1 -0
- data/config/i18n-tasks.yml +1 -0
- data/config/locales/ca.yml +69 -30
- data/config/locales/cs.yml +68 -29
- data/config/locales/de.yml +67 -28
- data/config/locales/en.yml +81 -32
- data/config/locales/es.yml +68 -29
- data/config/locales/eu.yml +31 -31
- data/config/locales/fr.yml +82 -31
- data/config/locales/ja.yml +31 -31
- data/lib/decidim/decidim_awesome/admin_engine.rb +8 -5
- data/lib/decidim/decidim_awesome/awesome.rb +29 -7
- data/lib/decidim/decidim_awesome/checksums.yml +15 -40
- data/lib/decidim/decidim_awesome/engine.rb +11 -2
- data/lib/decidim/decidim_awesome/menu.rb +151 -138
- data/lib/decidim/decidim_awesome/test/initializer.rb +4 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -3
- data/lib/decidim/decidim_awesome/test/shared_examples/editor_examples.rb +2 -1
- data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +8 -1
- data/lib/decidim/decidim_awesome/version.rb +1 -1
- data/lib/tasks/decidim_awesome_upgrade_tasks.rake +4 -1
- data/package.json +3 -4
- metadata +68 -10
- data/config/rubocop/disabled.yml +0 -11
- data/config/rubocop/faker.yml +0 -480
- data/config/rubocop/rails.yml +0 -88
- data/config/rubocop/rspec.yml +0 -65
- data/config/rubocop/ruby.yml +0 -1210
@@ -2,7 +2,7 @@
|
|
2
2
|
<% if config_enabled? :auto_save_forms %>
|
3
3
|
<div class="row column">
|
4
4
|
<%= form.check_box :auto_save_forms %>
|
5
|
-
<span class="help-text mb-4"
|
5
|
+
<span class="help-text mb-4">
|
6
6
|
<%= t("help.auto_save_forms", scope: "decidim.decidim_awesome.admin.config.form") %>
|
7
7
|
</span>
|
8
8
|
<%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :auto_save_forms, constraints: constraints_for(:auto_save_forms) }) %>
|
@@ -11,9 +11,47 @@
|
|
11
11
|
<% if config_enabled? :user_timezone %>
|
12
12
|
<div class="row column">
|
13
13
|
<%= form.check_box :user_timezone %>
|
14
|
-
<span class="help-text mb-4"
|
14
|
+
<span class="help-text mb-4">
|
15
15
|
<%= t("help.user_timezone", scope: "decidim.decidim_awesome.admin.config.form") %>
|
16
16
|
</span>
|
17
17
|
</div>
|
18
18
|
<% end %>
|
19
|
+
|
20
|
+
<% if config_enabled?(:hashcash_login, :hashcash_signup) %>
|
21
|
+
<div class="row column">
|
22
|
+
<% if config_enabled? :hashcash_signup %>
|
23
|
+
<div>
|
24
|
+
<%= form.check_box :hashcash_signup %>
|
25
|
+
<span class="help-text mb-4">
|
26
|
+
<%= t("help.hashcash_signup", scope: "decidim.decidim_awesome.admin.config.form") %>
|
27
|
+
</span>
|
28
|
+
</div>
|
29
|
+
<div>
|
30
|
+
<%= form.number_field :hashcash_signup_bits %>
|
31
|
+
<span class="help-text mb-4">
|
32
|
+
<%= t("help.hashcash_signup_bits", scope: "decidim.decidim_awesome.admin.config.form", bits: Decidim::DecidimAwesome.hashcash_signup_bits) %>
|
33
|
+
</span>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
36
|
+
|
37
|
+
<% if config_enabled? :hashcash_login %>
|
38
|
+
<div>
|
39
|
+
<%= form.check_box :hashcash_login %>
|
40
|
+
<span class="help-text mb-4">
|
41
|
+
<%= t("help.hashcash_login", scope: "decidim.decidim_awesome.admin.config.form") %>
|
42
|
+
</span>
|
43
|
+
</div>
|
44
|
+
<div>
|
45
|
+
<%= form.number_field :hashcash_login_bits %>
|
46
|
+
<span class="help-text mb-4">
|
47
|
+
<%= t("help.hashcash_login_bits", scope: "decidim.decidim_awesome.admin.config.form", bits: Decidim::DecidimAwesome.hashcash_login_bits) %>
|
48
|
+
</span>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
<p class="help-text pt-0 pb-4 label">
|
53
|
+
<%= t("help.hashcash_i18n_key", scope: "decidim.decidim_awesome.admin.config.form", key: "<code>active_hashcash.waiting_label</code>").html_safe %>
|
54
|
+
</p>
|
55
|
+
</div>
|
56
|
+
<% end %>
|
19
57
|
</div>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
<% if config_enabled? :force_authorization_after_login %>
|
5
5
|
<div>
|
6
|
-
<%= form.select :force_authorization_after_login, available_authorizations.map {|workflow| [workflow.fullname, workflow.name]}, { include_blank: false }, { multiple: true } %>
|
6
|
+
<%= form.select :force_authorization_after_login, available_authorizations.map { |workflow| [workflow.fullname, workflow.name] }, { include_blank: false }, { multiple: true } %>
|
7
7
|
<p class="help-text"><%= t("help.force_authorization_after_login", scope: "decidim.decidim_awesome.admin.config.form") %></p>
|
8
8
|
|
9
9
|
<%= form.check_box :force_authorization_with_any_method %>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<div class="fcell search mb-4">
|
2
|
+
<%= form_tag nil, method: :get, class: "form form-defaults" do %>
|
3
|
+
<div class="form__wrapper block bg-gray-5 p-4">
|
4
|
+
<div class="grid grid-cols-3 gap-x-4 pt-4">
|
5
|
+
<div class="content-end">
|
6
|
+
<%= label_tag :created_from do %>
|
7
|
+
<%= t("created_at", scope: "decidim.decidim_awesome.admin.hashcash.index") + " ≥" %>
|
8
|
+
<%= date_field_tag :created_from, params[:created_from], autocomplete: :off %>
|
9
|
+
<% end %>
|
10
|
+
</div>
|
11
|
+
<div class="content-end">
|
12
|
+
<%= label_tag :created_from do %>
|
13
|
+
<%= t("created_at", scope: "decidim.decidim_awesome.admin.hashcash.index") + " ≤" %>
|
14
|
+
<%= date_field_tag :created_to, params[:created_to], autocomplete: :off %>
|
15
|
+
<% end %>
|
16
|
+
</div>
|
17
|
+
<div class="content-end grid grid-cols-2 gap-x-4 pt-8">
|
18
|
+
<div>
|
19
|
+
<%= label_tag :bits_from do %>
|
20
|
+
<%= t("bits", scope: "decidim.decidim_awesome.admin.hashcash.index") + " ≥" %>
|
21
|
+
<%= number_field_tag :bits_from, params[:bits_from], autocomplete: :off %>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
<div>
|
25
|
+
<%= label_tag :bits_to do %>
|
26
|
+
<%= t("bits", scope: "decidim.decidim_awesome.admin.hashcash.index") + " ≤" %>
|
27
|
+
<%= number_field_tag :bits_to, params[:bits_to], autocomplete: :off %>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div class="grid grid-cols-3 gap-x-4 py-4">
|
34
|
+
<div class="content-end">
|
35
|
+
<%= label_tag :ip_address_starts_with, t("ip_address", scope: "decidim.decidim_awesome.admin.hashcash.index") %>
|
36
|
+
<%= text_field_tag :ip_address_starts_with, params[:ip_address_starts_with], autocomplete: :off %>
|
37
|
+
</div>
|
38
|
+
<div class="content-end">
|
39
|
+
<%= label_tag :request_path_starts_with, t("request_path", scope: "decidim.decidim_awesome.admin.hashcash.index") %>
|
40
|
+
<%= text_field_tag :request_path_starts_with, params[:request_path_starts_with], autocomplete: :off %>
|
41
|
+
</div>
|
42
|
+
<div class="content-end">
|
43
|
+
<div class="grid grid-cols-2 gap-x-4 mb-[4px]">
|
44
|
+
<%= submit_tag t("active_hashcash.submit_filter"), class: "button button__sm button__secondary" %>
|
45
|
+
<% if params[:action] == "index" %>
|
46
|
+
<%= link_to t(".ip_addresses"), ip_addresses_hashcashes_path, class: "button button__sm button__transparent-secondary" %>
|
47
|
+
<% else %>
|
48
|
+
<%= link_to t(".stamps"), hashcashes_path, class: "button button__sm button__transparent-secondary" %>
|
49
|
+
<% end %>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
55
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<div class="mb-8">
|
2
|
+
<p class="help-text"><%= t(".help_html") %>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<%= render "filters" %>
|
6
|
+
|
7
|
+
<% if stamps.empty? %>
|
8
|
+
<div class="callout warning"><%= t(".no_data") %></div>
|
9
|
+
<% else %>
|
10
|
+
<div class="table-scroll">
|
11
|
+
<table class="table-list">
|
12
|
+
<thead>
|
13
|
+
<tr>
|
14
|
+
<th><%= t(".created_at") %></th>
|
15
|
+
<th><%= t(".ip_address") %></th>
|
16
|
+
<th><%= t(".request_path") %></th>
|
17
|
+
<th><%= t(".bits") %></th>
|
18
|
+
</tr>
|
19
|
+
</thead>
|
20
|
+
|
21
|
+
<tbody>
|
22
|
+
<% stamps.each do |stamp| %>
|
23
|
+
<tr>
|
24
|
+
<td><%= link_to stamp.created_at, hashcash_path(stamp) %></td>
|
25
|
+
<td><%= stamp.ip_address %></td>
|
26
|
+
<td><%= stamp.request_path %></td>
|
27
|
+
<td><%= stamp.bits %></td>
|
28
|
+
</tr>
|
29
|
+
<% end %>
|
30
|
+
</tbody>
|
31
|
+
</table>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div class="mb-8">
|
2
|
+
<p class="help-text"><%= t(".help_html") %>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<%= render "filters" %>
|
6
|
+
|
7
|
+
<% if addresses.empty? %>
|
8
|
+
<div class="callout warning"><%= t(".no_data") %></div>
|
9
|
+
<% else %>
|
10
|
+
<div class="table-scroll">
|
11
|
+
<table class="table-list">
|
12
|
+
<thead>
|
13
|
+
<tr>
|
14
|
+
<th><%= t(".ip_address") %></th>
|
15
|
+
<th><%= t(".stamps") %></th>
|
16
|
+
</tr>
|
17
|
+
</thead>
|
18
|
+
|
19
|
+
<tbody>
|
20
|
+
<% addresses.each do |address, count| %>
|
21
|
+
<tr>
|
22
|
+
<td><%= link_to address, hashcashes_path(ip_address_starts_with: address) %></td>
|
23
|
+
<td><%= number_with_delimiter count %></td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<div>
|
2
|
+
<h3 class="h3"><%= stamp %></h3>
|
3
|
+
<dl class="divide-y divide-gray-100">
|
4
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
5
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:created_at) %></dt>
|
6
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= l stamp.created_at %></dd>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
10
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:resource) %></dt>
|
11
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= stamp.resource %></dd>
|
12
|
+
</div>
|
13
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
14
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:bits) %></dt>
|
15
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= stamp.bits %></dd>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
19
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:ip_address) %></dt>
|
20
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= stamp.ip_address %></dd>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
24
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:request_path) %></dt>
|
25
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= stamp.request_path %></dd>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="px-4 py-6 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
|
29
|
+
<dt class="font-semibold"><%= stamp.class.human_attribute_name(:context) %></dt>
|
30
|
+
<dd mt-1 class="sm:col-span-2 sm:mt-0"><%= stamp.context %></dd>
|
31
|
+
</div>
|
32
|
+
</dl>
|
33
|
+
|
34
|
+
<div class="grid grid-cols-4 gap-x-4 mb-[4px]">
|
35
|
+
<button class="button button__sm button__transparent-secondary">
|
36
|
+
<%= link_to t("decidim.decidim_awesome.admin.hashcash.filters.stamps"), hashcashes_path %>
|
37
|
+
</button>
|
38
|
+
<button class="button button__sm button__transparent-secondary">
|
39
|
+
<%= link_to t("decidim.decidim_awesome.admin.hashcash.filters.ip_addresses"), ip_addresses_hashcashes_path %>
|
40
|
+
</button>
|
41
|
+
</div>
|
42
|
+
</div>
|
@@ -22,12 +22,12 @@
|
|
22
22
|
<td><%= item.label %></td>
|
23
23
|
<td><%= item.url %></td>
|
24
24
|
<td><%= item.position %></td>
|
25
|
-
<td><%= target_options.invert[item.try(:target)||""] %></td>
|
25
|
+
<td><%= target_options.invert[item.try(:target) || ""] %></td>
|
26
26
|
<td><%= visibility_options.invert[item.try(:visibility)] %></td>
|
27
27
|
<td class="table-list__actions">
|
28
28
|
<%= icon_link_to "pencil-line", decidim_admin_decidim_awesome.edit_menu_hack_path(params[:menu_id], md5(item.url)), t(".edit"), class: "action-icon--edit" %>
|
29
29
|
<% if item.respond_to?(:overrided?) %>
|
30
|
-
<%= icon_link_to "close-circle-line", decidim_admin_decidim_awesome.menu_hack_path(params[:menu_id], md5(item.url)), t(".remove#{
|
30
|
+
<%= icon_link_to "close-circle-line", decidim_admin_decidim_awesome.menu_hack_path(params[:menu_id], md5(item.url)), t(".remove#{"_hack" if item.overrided?}"), method: :delete, class: "action-icon--remove", data: { confirm: t(".confirm_destroy") } %>
|
31
31
|
<% else %>
|
32
32
|
<span class="action-icon">
|
33
33
|
<%= icon "close-circle-line", class: "action-icon action-icon--disabled", role: "img" %>
|
data/app/views/decidim/decidim_awesome/admin/{maintenance → private_data}/_private_data.html.erb
RENAMED
@@ -5,7 +5,7 @@
|
|
5
5
|
<% if collection.empty? %>
|
6
6
|
<div class="callout warning"><%= t(".no_data", time_ago:) %></div>
|
7
7
|
<% else %>
|
8
|
-
<div class="table-scroll autorefresh" data-url="<%=
|
8
|
+
<div class="table-scroll autorefresh" data-url="<%= private_data_path.split("?").first %>">
|
9
9
|
<table class="table-list">
|
10
10
|
<thead>
|
11
11
|
<tr>
|
@@ -27,7 +27,7 @@
|
|
27
27
|
<% if item.locked? %>
|
28
28
|
<span class="loading-spinner primary" title="<%= t(".removing") %>"></span>
|
29
29
|
<% elsif item.destroyable? %>
|
30
|
-
<%= link_to
|
30
|
+
<%= link_to private_datum_path(item), method: :delete, class: "button button__primary button__xs tiny", data: { confirm: t(".confirm_delete") } do %>
|
31
31
|
<%= icon "delete-bin-line" %>
|
32
32
|
<%= t(".delete") %>
|
33
33
|
<% end %>
|
@@ -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.
|
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>
|
@@ -7,12 +7,12 @@
|
|
7
7
|
<div>
|
8
8
|
<div class="instructions">
|
9
9
|
<%= t("decidim.decidim_awesome.amendments.modal.explanation_html",
|
10
|
-
|
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
|
-
|
15
|
+
amendment_link: present(emendations&.first).proposal_path) %>
|
16
16
|
<% end %>
|
17
17
|
</div>
|
18
18
|
</div>
|
@@ -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.
|
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 = "<%=
|
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(
|
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,6 +8,7 @@ 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",
|
data/config/i18n-tasks.yml
CHANGED
@@ -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.*"
|
data/config/locales/ca.yml
CHANGED
@@ -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
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
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
|
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
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
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
|