decidim-templates 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +31 -0
  4. data/Rakefile +9 -0
  5. data/app/assets/config/decidim_templates_manifest.css +3 -0
  6. data/app/assets/config/decidim_templates_manifest.js +0 -0
  7. data/app/assets/images/decidim/templates/icon.svg +1 -0
  8. data/app/assets/stylesheets/decidim/templates/templates.scss +14 -0
  9. data/app/commands/decidim/templates/admin/apply_questionnaire_template.rb +74 -0
  10. data/app/commands/decidim/templates/admin/copy_questionnaire_template.rb +79 -0
  11. data/app/commands/decidim/templates/admin/create_questionnaire_template.rb +34 -0
  12. data/app/commands/decidim/templates/admin/destroy_template.rb +41 -0
  13. data/app/commands/decidim/templates/admin/update_template.rb +35 -0
  14. data/app/controllers/decidim/templates/admin/application_controller.rb +34 -0
  15. data/app/controllers/decidim/templates/admin/concerns/templatable.rb +46 -0
  16. data/app/controllers/decidim/templates/admin/questionnaire_templates/questionnaires_controller.rb +38 -0
  17. data/app/controllers/decidim/templates/admin/questionnaire_templates_controller.rb +156 -0
  18. data/app/controllers/decidim/templates/application_controller.rb +13 -0
  19. data/app/forms/decidim/templates/admin/template_form.rb +17 -0
  20. data/app/helpers/decidim/templates/admin/templates_helper.rb +32 -0
  21. data/app/helpers/decidim/templates/application_helper.rb +10 -0
  22. data/app/models/concerns/decidim/templates/templatable.rb +24 -0
  23. data/app/models/decidim/templates/application_record.rb +10 -0
  24. data/app/models/decidim/templates/template.rb +33 -0
  25. data/app/permissions/decidim/templates/admin/permissions.rb +26 -0
  26. data/app/views/decidim/templates/admin/questionnaire_templates/_choose.html.erb +35 -0
  27. data/app/views/decidim/templates/admin/questionnaire_templates/_form.html.erb +16 -0
  28. data/app/views/decidim/templates/admin/questionnaire_templates/_preview.html.erb +73 -0
  29. data/app/views/decidim/templates/admin/questionnaire_templates/edit.html.erb +20 -0
  30. data/app/views/decidim/templates/admin/questionnaire_templates/index.html.erb +52 -0
  31. data/app/views/decidim/templates/admin/questionnaire_templates/new.html.erb +7 -0
  32. data/app/views/decidim/templates/admin/questionnaire_templates/preview.js.erb +11 -0
  33. data/app/views/layouts/decidim/admin/templates.html.erb +21 -0
  34. data/config/locales/am-ET.yml +1 -0
  35. data/config/locales/ar.yml +1 -0
  36. data/config/locales/bg.yml +1 -0
  37. data/config/locales/ca.yml +60 -0
  38. data/config/locales/cs.yml +60 -0
  39. data/config/locales/da.yml +1 -0
  40. data/config/locales/de.yml +54 -0
  41. data/config/locales/el.yml +1 -0
  42. data/config/locales/en.yml +61 -0
  43. data/config/locales/eo.yml +1 -0
  44. data/config/locales/es-MX.yml +60 -0
  45. data/config/locales/es-PY.yml +60 -0
  46. data/config/locales/es.yml +60 -0
  47. data/config/locales/et.yml +1 -0
  48. data/config/locales/eu.yml +1 -0
  49. data/config/locales/fi-plain.yml +60 -0
  50. data/config/locales/fi.yml +60 -0
  51. data/config/locales/fr-CA.yml +60 -0
  52. data/config/locales/fr.yml +60 -0
  53. data/config/locales/ga-IE.yml +1 -0
  54. data/config/locales/gl.yml +1 -0
  55. data/config/locales/hr.yml +1 -0
  56. data/config/locales/hu.yml +1 -0
  57. data/config/locales/id-ID.yml +1 -0
  58. data/config/locales/is-IS.yml +1 -0
  59. data/config/locales/it.yml +60 -0
  60. data/config/locales/ja.yml +60 -0
  61. data/config/locales/ko-KR.yml +1 -0
  62. data/config/locales/ko.yml +1 -0
  63. data/config/locales/lt.yml +1 -0
  64. data/config/locales/lv.yml +1 -0
  65. data/config/locales/mt.yml +1 -0
  66. data/config/locales/nl.yml +60 -0
  67. data/config/locales/no.yml +5 -0
  68. data/config/locales/om-ET.yml +1 -0
  69. data/config/locales/pl.yml +1 -0
  70. data/config/locales/pt-BR.yml +1 -0
  71. data/config/locales/pt.yml +1 -0
  72. data/config/locales/ro-RO.yml +1 -0
  73. data/config/locales/ru.yml +1 -0
  74. data/config/locales/sk.yml +1 -0
  75. data/config/locales/sl.yml +1 -0
  76. data/config/locales/so-SO.yml +1 -0
  77. data/config/locales/sr-CS.yml +1 -0
  78. data/config/locales/sv.yml +1 -0
  79. data/config/locales/ti-ER.yml +1 -0
  80. data/config/locales/tr-TR.yml +1 -0
  81. data/config/locales/uk.yml +1 -0
  82. data/config/locales/vi-VN.yml +1 -0
  83. data/config/locales/vi.yml +1 -0
  84. data/config/locales/zh-CN.yml +60 -0
  85. data/config/locales/zh-TW.yml +1 -0
  86. data/lib/decidim/templates.rb +12 -0
  87. data/lib/decidim/templates/admin.rb +10 -0
  88. data/lib/decidim/templates/admin_engine.rb +54 -0
  89. data/lib/decidim/templates/engine.rb +23 -0
  90. data/lib/decidim/templates/test/factories.rb +27 -0
  91. data/lib/decidim/templates/test/shared_examples/uses_questionnaire_templates.rb +108 -0
  92. data/lib/decidim/templates/version.rb +10 -0
  93. metadata +191 -0
@@ -0,0 +1 @@
1
+ ko:
@@ -0,0 +1 @@
1
+ ko:
@@ -0,0 +1 @@
1
+ lt:
@@ -0,0 +1 @@
1
+ lv:
@@ -0,0 +1 @@
1
+ mt:
@@ -0,0 +1,60 @@
1
+ nl:
2
+ decidim:
3
+ admin:
4
+ menu:
5
+ templates: Templates
6
+ templates:
7
+ apply:
8
+ error: Er is een fout opgetreden bij het bijwerken van dit template.
9
+ success: Template met succes toegepast
10
+ copy:
11
+ error: Er is een fout opgetreden bij het kopiëren van dit template.
12
+ success: Template met succes gekopieerd
13
+ create:
14
+ error: Er is een fout opgetreden bij het maken van dit template.
15
+ success: Template met succes aangemaakt
16
+ destroy:
17
+ success: Template met succes verwijderd
18
+ empty: Er zijn nog geen templates.
19
+ update:
20
+ error: Er is een fout opgetreden bij het bijwerken van dit template.
21
+ success: Template met succes bijgewerkt
22
+ titles:
23
+ template_types:
24
+ questionnaires: Vragenlijst templates
25
+ templates: Templates
26
+ models:
27
+ questionnaire_template:
28
+ fields:
29
+ questions: Aantal vragen
30
+ title: Vragenlijst titel
31
+ template:
32
+ fields:
33
+ created_at: Aangemaakt op
34
+ name: Template
35
+ templates:
36
+ admin:
37
+ questionnaire_templates:
38
+ choose:
39
+ create_from_template: Met template aanmaken
40
+ description: Je staat op het punt een nieuwe vragenlijst te maken. Je kunt een vooraf gedefinieerd template kiezen en daarna wijzigen.
41
+ label: Template kiezen
42
+ placeholder: Template kiezen
43
+ skip_template: Overslaan
44
+ edit:
45
+ edit: Bewerk
46
+ empty: Er zijn nog geen vragen
47
+ questionnaire: Vragenlijst
48
+ form:
49
+ save: Opslaan
50
+ template_title: Template informatie
51
+ title: Vragenlijst
52
+ index:
53
+ confirm_delete: Weet je zeker dat je dit template wilt verwijderen?
54
+ title: Vragenlijst templates
55
+ preview:
56
+ current_step: Stap %{step}
57
+ of_total_steps: van %{total_steps}
58
+ tos_agreement: Door deel te nemen accepteer je de gebruiksvoorwaarden
59
+ template_types:
60
+ questionnaires: Vragenlijsten
@@ -0,0 +1,5 @@
1
+ "no":
2
+ decidim:
3
+ admin:
4
+ menu:
5
+ templates: Maler
@@ -0,0 +1 @@
1
+ om:
@@ -0,0 +1 @@
1
+ pl:
@@ -0,0 +1 @@
1
+ pt:
@@ -0,0 +1 @@
1
+ pt:
@@ -0,0 +1 @@
1
+ ro:
@@ -0,0 +1 @@
1
+ ru:
@@ -0,0 +1 @@
1
+ sk:
@@ -0,0 +1 @@
1
+ sl:
@@ -0,0 +1 @@
1
+ so:
@@ -0,0 +1 @@
1
+ sr:
@@ -0,0 +1 @@
1
+ sv:
@@ -0,0 +1 @@
1
+ ti:
@@ -0,0 +1 @@
1
+ tr:
@@ -0,0 +1 @@
1
+ uk:
@@ -0,0 +1 @@
1
+ vi:
@@ -0,0 +1 @@
1
+ vi:
@@ -0,0 +1,60 @@
1
+ zh-CN:
2
+ decidim:
3
+ admin:
4
+ menu:
5
+ templates: 模板
6
+ templates:
7
+ apply:
8
+ error: 应用此模板时出现问题。
9
+ success: 模板应用成功
10
+ copy:
11
+ error: 复制此模板时出现问题。
12
+ success: 模板复制成功
13
+ create:
14
+ error: 创建此模板时出现问题。
15
+ success: 模板创建成功
16
+ destroy:
17
+ success: 模板删除成功
18
+ empty: 尚无模板。
19
+ update:
20
+ error: 在更新此模板时出现问题。
21
+ success: 模板更新成功
22
+ titles:
23
+ template_types:
24
+ questionnaires: 问卷模板
25
+ templates: 模板
26
+ models:
27
+ questionnaire_template:
28
+ fields:
29
+ questions: 问题数量
30
+ title: Questionnaire Title
31
+ template:
32
+ fields:
33
+ created_at: 创建于
34
+ name: 模板
35
+ templates:
36
+ admin:
37
+ questionnaire_templates:
38
+ choose:
39
+ create_from_template: 从模板创建
40
+ description: 您即将创建一个新的问题单。您可以选择一个预定义的模板并在其后进行修改。
41
+ label: 选择模板
42
+ placeholder: 选择模板
43
+ skip_template: 跳过
44
+ edit:
45
+ edit: 编辑
46
+ empty: 还没有问题
47
+ questionnaire: Questionnaire
48
+ form:
49
+ save: 保存
50
+ template_title: 模板信息
51
+ title: Questionnaire
52
+ index:
53
+ confirm_delete: 您确定要删除此模板吗?
54
+ title: 问卷模板
55
+ preview:
56
+ current_step: 步骤 %{step}
57
+ of_total_steps: '%{total_steps}'
58
+ tos_agreement: 通过参与您接受其服务条款
59
+ template_types:
60
+ questionnaires: Questionnaires
@@ -0,0 +1 @@
1
+ zh-TW:
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/templates/admin"
4
+ require "decidim/templates/engine"
5
+ require "decidim/templates/admin_engine"
6
+
7
+ module Decidim
8
+ # This namespace holds the logic of the `Templates` component. This component
9
+ # allows users to create templates in a participatory space.
10
+ module Templates
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Templates
5
+ # This module contains all the domain logic associated to Decidim's Templates
6
+ # component admin panel.
7
+ module Admin
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Templates
5
+ # This is the engine that runs on the public interface of `Templates`.
6
+ class AdminEngine < ::Rails::Engine
7
+ isolate_namespace Decidim::Templates::Admin
8
+
9
+ paths["db/migrate"] = nil
10
+ paths["lib/tasks"] = nil
11
+
12
+ routes do
13
+ ## Routes for Questionnaire Templates
14
+ resources :questionnaire_templates do
15
+ member do
16
+ post :copy
17
+
18
+ resource :questionnaire, module: :questionnaire_templates # To manage the templatable resource
19
+ end
20
+
21
+ collection do
22
+ post :apply # To use when creating an object from a template
23
+ post :skip # To use when creating an object without a template
24
+ get :preview # To provide a preview for the template in the object creation view
25
+ end
26
+ end
27
+
28
+ get "/questionnaire_template/questionnaire/answer_options", to: "questionnaires#answer_options", as: "answer_options_template"
29
+
30
+ root to: "questionnaire_templates#index"
31
+ end
32
+
33
+ initializer "decidim_templates.admin_mount_routes" do
34
+ Decidim::Core::Engine.routes do
35
+ mount Decidim::Templates::AdminEngine, at: "/admin/templates", as: "decidim_admin_templates"
36
+ end
37
+ end
38
+
39
+ initializer "decidim_templates.admin_menu" do
40
+ Decidim.menu :admin_menu do |menu|
41
+ menu.item I18n.t("menu.templates", scope: "decidim.admin", default: "Templates"),
42
+ decidim_admin_templates.questionnaire_templates_path,
43
+ icon_name: "document",
44
+ position: 12,
45
+ active: :inclusive
46
+ end
47
+ end
48
+
49
+ def load_seed
50
+ nil
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "decidim/core"
5
+
6
+ module Decidim
7
+ module Templates
8
+ # This is the engine that runs on the public interface of templates.
9
+ class Engine < ::Rails::Engine
10
+ isolate_namespace Decidim::Templates
11
+
12
+ routes do
13
+ # Add engine routes here
14
+ resources :templates
15
+ # root to: "templates#index"
16
+ end
17
+
18
+ initializer "decidim_templates.assets" do |app|
19
+ app.config.assets.precompile += %w(decidim_templates_manifest.js decidim_templates_manifest.css)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/faker/localized"
4
+ require "decidim/dev"
5
+
6
+ FactoryBot.define do
7
+ factory :template, class: "Decidim::Templates::Template" do
8
+ organization
9
+ templatable { build(:dummy_resource) }
10
+ name { Decidim::Faker::Localized.sentence }
11
+
12
+ ## Questionnaire templates
13
+ factory :questionnaire_template do
14
+ trait :with_questions do
15
+ after(:create) do |template|
16
+ template.templatable = create(:questionnaire, :with_questions, questionnaire_for: template)
17
+ template.save!
18
+ end
19
+ end
20
+
21
+ after(:create) do |template|
22
+ template.templatable = create(:questionnaire, questionnaire_for: template)
23
+ template.save!
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ # rubocop:disable Rails/SkipsModelValidations
6
+
7
+ shared_examples_for "uses questionnaire templates" do |_questionnaire_for|
8
+ describe "choose a template" do
9
+ context "when there are no templates" do
10
+ before do
11
+ questionnaire.update_columns(
12
+ created_at: Time.zone.now - 1.day,
13
+ updated_at: Time.zone.now
14
+ )
15
+ end
16
+
17
+ it "doesn't show the template selection screen" do
18
+ expect(page).to have_no_content("Choose template")
19
+ end
20
+ end
21
+
22
+ context "when there are templates" do
23
+ let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, organization: questionnaire.questionnaire_for.organization) }
24
+ let(:template) { templates.first }
25
+ let(:question) { template.templatable.questions.first }
26
+
27
+ context "when it is an existing questionnaire" do
28
+ before do
29
+ questionnaire.update_columns(
30
+ created_at: Time.zone.now - 1.day,
31
+ updated_at: Time.zone.now
32
+ )
33
+ end
34
+
35
+ it "doesn't show the template selection screen" do
36
+ expect(page).to have_no_content("Choose template")
37
+ end
38
+ end
39
+
40
+ context "when it is a newly created questionnaire" do
41
+ before do
42
+ questionnaire.update_columns(
43
+ created_at: Time.zone.now,
44
+ updated_at: Time.zone.now,
45
+ title: {},
46
+ description: {},
47
+ tos: {}
48
+ )
49
+ visit questionnaire_edit_path
50
+ end
51
+
52
+ it "shows the template choosing screen" do
53
+ expect(page).to have_content("Choose template")
54
+ end
55
+
56
+ it "loads the last 5 templates in the select" do
57
+ page.find(".Select-control").click
58
+
59
+ within ".Select-menu" do
60
+ expect(page).to have_selector(".Select-option:not(.is-focused)", count: 5)
61
+ end
62
+ end
63
+
64
+ it "displays the preview when a template is selected" do
65
+ autocomplete_select template.name["en"], from: :questionnaire_template_id
66
+ within ".questionnaire-template-preview" do
67
+ expect(page).to have_i18n_content(template.name)
68
+ expect(page).to have_i18n_content(question.body)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "apply a template" do
76
+ let!(:templates) { create_list(:questionnaire_template, 6, :with_questions, organization: questionnaire.questionnaire_for.organization) }
77
+ let(:template) { templates.first }
78
+ let(:question) { template.templatable.questions.first }
79
+ let(:questionnaire_question) { questionnaire.questions.first }
80
+
81
+ before do
82
+ questionnaire.update_columns(
83
+ created_at: Time.zone.now,
84
+ updated_at: Time.zone.now,
85
+ title: {},
86
+ description: {},
87
+ tos: {}
88
+ )
89
+ visit questionnaire_edit_path
90
+
91
+ autocomplete_select template.name["en"], from: :questionnaire_template_id
92
+
93
+ within ".create-from-template" do
94
+ find("*[type=submit]").click
95
+ end
96
+ end
97
+
98
+ it "copies the template data to the questionnaire on submit" do
99
+ within "form.edit_questionnaire" do
100
+ click_button "Expand all"
101
+ expect(page.find("#questionnaire_title_en").value).to eq(template.templatable.title["en"])
102
+ expect(page.find("#questionnaire_questions_#{questionnaire_question.id}_body_en").value).to eq(question.body["en"])
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ # rubocop:enable Rails/SkipsModelValidations
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This holds the decidim-templates version.
5
+ module Templates
6
+ def self.version
7
+ "0.23.0"
8
+ end
9
+ end
10
+ end