decidim-assemblies 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +34 -0
  3. data/Rakefile +3 -0
  4. data/app/assets/config/admin/decidim_assemblies_manifest.js +1 -0
  5. data/app/assets/config/decidim_assemblies_manifest.js +1 -0
  6. data/app/assets/images/decidim/assemblies/assembly.svg +6 -0
  7. data/app/assets/javascripts/decidim/assemblies/admin/assemblies.js.es6 +12 -0
  8. data/app/commands/decidim/assemblies/admin/copy_assembly.rb +88 -0
  9. data/app/commands/decidim/assemblies/admin/create_assembly.rb +68 -0
  10. data/app/commands/decidim/assemblies/admin/publish_assembly.rb +34 -0
  11. data/app/commands/decidim/assemblies/admin/unpublish_assembly.rb +34 -0
  12. data/app/commands/decidim/assemblies/admin/update_assembly.rb +73 -0
  13. data/app/constraints/decidim/assemblies/current_assembly.rb +37 -0
  14. data/app/constraints/decidim/assemblies/current_feature.rb +28 -0
  15. data/app/controllers/concerns/decidim/assemblies/admin/assembly_context.rb +21 -0
  16. data/app/controllers/concerns/decidim/assemblies/assembly_context.rb +25 -0
  17. data/app/controllers/concerns/decidim/assemblies/needs_assembly.rb +50 -0
  18. data/app/controllers/decidim/assemblies/admin/application_controller.rb +11 -0
  19. data/app/controllers/decidim/assemblies/admin/assemblies_controller.rb +100 -0
  20. data/app/controllers/decidim/assemblies/admin/assembly_attachments_controller.rb +27 -0
  21. data/app/controllers/decidim/assemblies/admin/assembly_copies_controller.rb +35 -0
  22. data/app/controllers/decidim/assemblies/admin/assembly_publications_controller.rb +45 -0
  23. data/app/controllers/decidim/assemblies/admin/categories_controller.rb +13 -0
  24. data/app/controllers/decidim/assemblies/admin/concerns/assembly_admin.rb +26 -0
  25. data/app/controllers/decidim/assemblies/admin/exports_controller.rb +14 -0
  26. data/app/controllers/decidim/assemblies/admin/feature_permissions_controller.rb +14 -0
  27. data/app/controllers/decidim/assemblies/admin/features_controller.rb +14 -0
  28. data/app/controllers/decidim/assemblies/admin/moderations_controller.rb +12 -0
  29. data/app/controllers/decidim/assemblies/assemblies_controller.rb +43 -0
  30. data/app/controllers/decidim/assemblies/assembly_widgets_controller.rb +21 -0
  31. data/app/controllers/decidim/assemblies/categories_controller.rb +13 -0
  32. data/app/forms/decidim/assemblies/admin/assembly_copy_form.rb +34 -0
  33. data/app/forms/decidim/assemblies/admin/assembly_form.rb +63 -0
  34. data/app/models/decidim/assemblies/abilities/admin/admin_ability.rb +18 -0
  35. data/app/models/decidim/assemblies/abilities/admin_ability.rb +16 -0
  36. data/app/models/decidim/assemblies/abilities/everyone_ability.rb +17 -0
  37. data/app/models/decidim/assembly.rb +45 -0
  38. data/app/presenters/decidim/assemblies/assembly_stats_presenter.rb +52 -0
  39. data/app/queries/decidim/assemblies/admin/admin_users.rb +39 -0
  40. data/app/queries/decidim/assemblies/organization_assemblies.rb +16 -0
  41. data/app/queries/decidim/assemblies/organization_prioritized_assemblies.rb +20 -0
  42. data/app/queries/decidim/assemblies/organization_published_assemblies.rb +19 -0
  43. data/app/queries/decidim/assemblies/prioritized_assemblies.rb +13 -0
  44. data/app/queries/decidim/assemblies/promoted_assemblies.rb +12 -0
  45. data/app/queries/decidim/assemblies/published_assemblies.rb +12 -0
  46. data/app/views/decidim/assemblies/_assembly.html.erb +22 -0
  47. data/app/views/decidim/assemblies/_order_by_assemblies.html.erb +3 -0
  48. data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +89 -0
  49. data/app/views/decidim/assemblies/admin/assemblies/edit.html.erb +19 -0
  50. data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +66 -0
  51. data/app/views/decidim/assemblies/admin/assemblies/new.html.erb +11 -0
  52. data/app/views/decidim/assemblies/admin/assembly_copies/_form.html.erb +34 -0
  53. data/app/views/decidim/assemblies/admin/assembly_copies/new.html.erb +7 -0
  54. data/app/views/decidim/assemblies/assemblies/_no_assemblies_yet.html.erb +3 -0
  55. data/app/views/decidim/assemblies/assemblies/_promoted_assembly.html.erb +27 -0
  56. data/app/views/decidim/assemblies/assemblies/_statistics.html.erb +10 -0
  57. data/app/views/decidim/assemblies/assemblies/index.html.erb +17 -0
  58. data/app/views/decidim/assemblies/assemblies/show.html.erb +74 -0
  59. data/app/views/decidim/assemblies/assembly_widgets/show.html.erb +11 -0
  60. data/app/views/layouts/decidim/_assembly_header.html.erb +64 -0
  61. data/app/views/layouts/decidim/admin/assemblies.html.erb +14 -0
  62. data/app/views/layouts/decidim/admin/assembly.html.erb +54 -0
  63. data/app/views/layouts/decidim/assembly.html.erb +30 -0
  64. data/config/locales/ca.yml +128 -0
  65. data/config/locales/en.yml +128 -0
  66. data/config/locales/es.yml +128 -0
  67. data/config/locales/eu.yml +127 -0
  68. data/config/locales/fi.yml +127 -0
  69. data/config/locales/fr.yml +127 -0
  70. data/config/locales/it.yml +127 -0
  71. data/config/locales/nl.yml +127 -0
  72. data/config/locales/pl.yml +128 -0
  73. data/config/locales/uk.yml +129 -0
  74. data/db/migrate/20170727190859_add_assemblies.rb +37 -0
  75. data/db/migrate/20170822153055_add_scopes_enabled_to_assemblies.rb +7 -0
  76. data/db/seeds/Exampledocument.pdf +0 -0
  77. data/db/seeds/city.jpeg +0 -0
  78. data/db/seeds/city2.jpeg +0 -0
  79. data/db/seeds/homepage_image.jpg +0 -0
  80. data/lib/decidim/assemblies.rb +12 -0
  81. data/lib/decidim/assemblies/admin.rb +10 -0
  82. data/lib/decidim/assemblies/admin_engine.rb +79 -0
  83. data/lib/decidim/assemblies/engine.rb +53 -0
  84. data/lib/decidim/assemblies/participatory_space.rb +69 -0
  85. data/lib/decidim/assemblies/test/factories.rb +41 -0
  86. metadata +188 -0
@@ -0,0 +1,3 @@
1
+ <div class="row collapse order-by">
2
+ <h2 class="order-by__text section-heading"><%= t("assemblies.order_by_assemblies.assemblies", scope: "layouts.decidim", count: collection.count) %></h2>
3
+ </div>
@@ -0,0 +1,89 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title"><%= t "assemblies.form.title", scope: "decidim.admin" %></h2>
4
+ </div>
5
+
6
+ <div class="card-section">
7
+ <div class="row column">
8
+ <%= form.translated :text_field, :title, autofocus: true %>
9
+ </div>
10
+
11
+ <div class="row column">
12
+ <%= form.translated :text_field, :subtitle %>
13
+ </div>
14
+
15
+ <div class="row">
16
+ <div class="columns xlarge-6">
17
+ <%= form.text_field :slug %>
18
+ </div>
19
+
20
+ <div class="columns xlarge-6">
21
+ <%= form.text_field :hashtag %>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="row column">
26
+ <%= form.check_box :promoted %>
27
+ </div>
28
+
29
+ <div class="row column">
30
+ <%= form.translated :editor, :short_description %>
31
+ </div>
32
+
33
+ <div class="row column">
34
+ <%= form.translated :editor, :description, toolbar: :full, lines: 25 %>
35
+ </div>
36
+
37
+ <div class="row">
38
+ <div class="columns xlarge-6">
39
+ <%= form.upload :hero_image %>
40
+ </div>
41
+
42
+ <div class="columns xlarge-6">
43
+ <%= form.upload :banner_image %>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="row">
48
+ <div class="columns xlarge-6">
49
+ <%= form.translated :text_field, :meta_scope %>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="row">
54
+ <div class="columns xlarge-6">
55
+ <%= form.translated :text_field, :developer_group %>
56
+ </div>
57
+
58
+ <div class="columns xlarge-6">
59
+ <%= form.translated :text_field, :local_area %>
60
+ </div>
61
+ </div>
62
+
63
+ <div class="row column">
64
+ <%= form.translated :text_field, :target %>
65
+ </div>
66
+
67
+ <div class="row column">
68
+ <%= form.check_box :scopes_enabled %>
69
+ </div>
70
+
71
+ <div class="row column">
72
+ <%= form.scopes_select :scope_id, prompt: t("decidim.scopes.global"), remote_path: decidim.scopes_search_path %>
73
+ </div>
74
+
75
+ <div class="row column">
76
+ <%= form.translated :text_field, :participatory_scope %>
77
+ </div>
78
+
79
+ <div class="row column">
80
+ <%= form.translated :text_field, :participatory_structure %>
81
+ </div>
82
+
83
+ <div class="row column">
84
+ <%= form.check_box :show_statistics %>
85
+ </div>
86
+ </div>
87
+ </div>
88
+
89
+ <%= javascript_include_tag "decidim/assemblies/admin/assemblies" %>
@@ -0,0 +1,19 @@
1
+ <%= decidim_form_for(@form, html: { class: "form edit_assembly" }) do |f| %>
2
+ <%= render partial: 'form', object: f %>
3
+ <div class="button--double form-general-submit">
4
+ <%= f.submit t("assemblies.edit.update", scope: "decidim.admin"), class: "button" %>
5
+
6
+ <% if can? :publish, current_assembly %>
7
+ <% if current_assembly.published? %>
8
+ <%= link_to t("actions.unpublish", scope: "decidim.admin"), assembly_publish_path(current_assembly), method: :delete, class: "button muted" %>
9
+ <% else %>
10
+ <%= link_to t("actions.publish", scope: "decidim.admin"), assembly_publish_path(current_assembly), method: :post, class: "button hollow" %>
11
+ <% end %>
12
+ <% end %>
13
+
14
+ <% if can? :destroy, current_assembly %>
15
+ <%= link_to t("decidim.admin.actions.destroy"), current_assembly, method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } %>
16
+ <% end %>
17
+ </div>
18
+ <% end %>
19
+
@@ -0,0 +1,66 @@
1
+ <div class="card" id="assemblies">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t "decidim.admin.titles.assemblies" %><%= link_to t("actions.new", scope: "decidim.admin", name: t("models.assembly.name", scope: "decidim.admin")), ['new', 'assembly'], class: 'button tiny button--title' if can? :create, Decidim::Assembly %>
5
+ </h2>
6
+ </div>
7
+ <div class="card-section">
8
+ <div class="table-scroll">
9
+ <table class="table-list">
10
+ <thead>
11
+ <tr>
12
+ <th><%= t("models.assembly.fields.title", scope: "decidim.admin") %></th>
13
+ <th><%= t("models.assembly.fields.created_at", scope: "decidim.admin") %></th>
14
+ <th class="table-list__actions"><%= t("models.assembly.fields.published", scope: "decidim.admin") %></th>
15
+ <th></th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <% @assemblies.each do |assembly| %>
20
+ <tr>
21
+ <td>
22
+ <% if assembly.promoted? %>
23
+ <span data-tooltip class="icon-state icon-highlight" aria-haspopup="true" data-disable-hover="false" title="<%= t("models.assembly.fields.promoted", scope: "decidim.admin") %>">
24
+ <%= icon "star" %>
25
+ </span>
26
+ <% end %>
27
+ <% if can? :update, assembly %>
28
+ <%= link_to translated_attribute(assembly.title), edit_assembly_path(assembly) %><br />
29
+ <% elsif can? :preview, assembly %>
30
+ <%= link_to translated_attribute(assembly.title), decidim_assemblies.assembly_path(assembly) %><br />
31
+ <% elsif can? :read, Decidim::Moderation %>
32
+ <%= link_to translated_attribute(assembly.title), moderations_path(assembly) %><br />
33
+ <% else %>
34
+ <%= translated_attribute(assembly.title) %>
35
+ <% end %>
36
+ </td>
37
+ <td>
38
+ <%= l assembly.created_at, format: :short %>
39
+ </td>
40
+ <td class="table-list__state">
41
+ <% if assembly.published? %>
42
+ <strong class="text-success"><%= t('assemblies.index.published', scope: "decidim.admin") %></strong>
43
+ <% else %>
44
+ <strong class="text-alert"><%= t('assemblies.index.not_published', scope: "decidim.admin") %></strong>
45
+ <% end %>
46
+ </td>
47
+ <td class="table-list__actions">
48
+ <% if can? :create, assembly %>
49
+ <%= icon_link_to "clipboard", new_assembly_copy_path(assembly), t("actions.duplicate", scope: "decidim.admin"), class: "action-icon--copy" %>
50
+ <% end %>
51
+
52
+ <% if can? :update, assembly %>
53
+ <%= icon_link_to "pencil", edit_assembly_path(assembly), t("actions.configure", scope: "decidim.admin"), class: "action-icon--new" %>
54
+ <% end %>
55
+
56
+ <% if can? :preview, assembly %>
57
+ <%= icon_link_to "eye", decidim_assemblies.assembly_path(assembly), t("actions.preview", scope: "decidim.admin"), class: "action-icon--preview" %>
58
+ <% end %>
59
+ </td>
60
+ </tr>
61
+ <% end %>
62
+ </tbody>
63
+ </table>
64
+ </div>
65
+ </div>
66
+ </div>
@@ -0,0 +1,11 @@
1
+ <h2 class="assembly-title-summary">
2
+ <%= t "assemblies.new.title", scope: "decidim.admin" %>
3
+ </h2>
4
+
5
+ <%= decidim_form_for(@form, html: { class: "form new_assembly" }) do |f| %>
6
+ <%= render partial: 'form', object: f %>
7
+
8
+ <div class="button--double form-general-submit">
9
+ <%= f.submit t("assemblies.new.create", scope: "decidim.admin") %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <div class="card" id="assemblies">
2
+ <div class="card-divider">
3
+ <h2 class="card-title"><%= title %></h2>
4
+ </div>
5
+
6
+ <div class="card-section">
7
+ <div class="row column">
8
+ <div class="row">
9
+ <div class="column xlarge-8">
10
+ <%= form.translated :text_field, :title, autofocus: true %>
11
+ </div>
12
+ <div class="column xlarge-4">
13
+ <%= form.text_field :slug %>
14
+ </div>
15
+ </div>
16
+ <div class="card">
17
+ <div class="card-divider">
18
+ <legend><%= select %></legend>
19
+ </div>
20
+ <div class="card-section">
21
+ <div class="row">
22
+ <div class="columns xlarge-3">
23
+ <%= form.check_box :copy_categories %>
24
+ </div>
25
+
26
+ <div class="columns xlarge-6">
27
+ <%= form.check_box :copy_features %>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
@@ -0,0 +1,7 @@
1
+ <%= decidim_form_for(@form, url: assembly_copies_path(current_assembly), method: :post, html: { class: "form copy_assembly" }) do |f| %>
2
+ <%= render partial: 'form', object: f, locals: { title: t('assembly_copies.new.title', scope: "decidim.admin"), select: t('assembly_copies.new.select', scope: "decidim.admin")} %>
3
+
4
+ <div class="button--double form-general-submit">
5
+ <%= f.submit t("assembly_copies.new.copy", scope: "decidim.admin") %>
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <div class="column">
2
+ <p><%= t("assemblies.no_assemblies_yet.no_assemblies_yet", scope: "layouts.decidim") %></p>
3
+ </div>
@@ -0,0 +1,27 @@
1
+ <article class="card card--full card--process">
2
+ <div class="row collapse card--process__row">
3
+ <div class="columns mediumlarge-8 large-6 card--process__column">
4
+ <div class="card__content">
5
+ <%= link_to assembly_path(promoted_assembly), class: "card__link" do %>
6
+ <h2 class="card__title"><%= translated_attribute promoted_assembly.title %></h2>
7
+ <% end %>
8
+ <%== html_truncate(translated_attribute(promoted_assembly.short_description), length: 630, separator: '...') %>
9
+ <%= link_to assembly_path(promoted_assembly), class: "button secondary small hollow card__button" do %>
10
+ <%= t("assemblies.promoted_assembly.more_info", scope: "layouts.decidim") %>
11
+ <% end %>
12
+ </div>
13
+ </div>
14
+ <div class="columns mediumlarge-8 large-6 card--process__column">
15
+ <div class="card--full__image"
16
+ style="background-image:url(<%= promoted_assembly.hero_image.url %>)">
17
+ <div class="card__content row collapse">
18
+ <div class="large-6 large-offset-6 columns">
19
+ <%= link_to assembly_path(promoted_assembly), class: "button expanded button--sc" do %>
20
+ <%= t("assemblies.promoted_assembly.take_part", scope: "layouts.decidim") %>
21
+ <% end %>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </article>
@@ -0,0 +1,10 @@
1
+ <section class="extended" id="assembly-statistics" class="statistics">
2
+ <div class="row column">
3
+ <h4 class="section-heading"><%= t("statistics.headline", scope: "decidim.assemblies", assembly: translated_attribute(current_assembly.title)) %></h3>
4
+ </div>
5
+ <div class="row">
6
+ <div class="columns small-centered mediumlarge-12 large-12 process_stats">
7
+ <%= stats.highlighted %>
8
+ </div>
9
+ </div>
10
+ </section>
@@ -0,0 +1,17 @@
1
+ <% provide :meta_title, t("assemblies.index.title", scope: "decidim") %>
2
+
3
+ <main class="wrapper">
4
+ <% if promoted_assemblies.any? %>
5
+ <section id ="highlighted-assemblies" class="row section">
6
+ <h1 class="section-heading"><%= t("assemblies.index.promoted_assemblies", scope: "layouts.decidim") %></h1>
7
+ <%= render partial: "promoted_assembly", collection: promoted_assemblies, as: :promoted_assembly %>
8
+ </section>
9
+ <% end %>
10
+
11
+ <section id="assemblies-grid" class="section row collapse">
12
+ <%= render partial: "decidim/assemblies/order_by_assemblies" %>
13
+ <div class="row small-up-1 medium-up-2 large-up-3 card-grid">
14
+ <%= render(collection) || render(partial: "no_assemblies_yet") %>
15
+ </div>
16
+ </section>
17
+ </main>
@@ -0,0 +1,74 @@
1
+ <% add_decidim_meta_tags({
2
+ image_url: current_assembly.hero_image.url,
3
+ description: translated_attribute(current_assembly.short_description),
4
+ title: translated_attribute(current_assembly.title),
5
+ url: assembly_url(current_assembly),
6
+ twitter_handler: current_organization.twitter_handler
7
+ }) %>
8
+
9
+ <div class="row column">
10
+ <div class="row">
11
+ <div class="columns medium-7 mediumlarge-8">
12
+ <div class="section">
13
+ <div class="lead">
14
+ <%== translated_attribute(current_assembly.short_description) %>
15
+ </div>
16
+ <%== translated_attribute(current_assembly.description) %>
17
+ </div>
18
+ <%= attachments_for current_assembly %>
19
+ </div>
20
+ <div class="section columns medium-5 mediumlarge-4 large-3">
21
+ <div class="card extra definition-data">
22
+ <% if translated_attribute(current_assembly.meta_scope).present? %>
23
+ <div class="definition-data__item scope">
24
+ <span class="definition-data__title"><%= t("assemblies.show.scope", scope: "decidim") %></span>
25
+ <%== translated_attribute(current_assembly.meta_scope) %>
26
+ </div>
27
+ <% end %>
28
+
29
+ <% if translated_attribute(current_assembly.developer_group).present? %>
30
+ <div class="definition-data__item developer-group">
31
+ <span class="definition-data__title"><%= t("assemblies.show.developer_group", scope: "decidim") %></span>
32
+ <%== translated_attribute(current_assembly.developer_group) %>
33
+ </div>
34
+ <% end %>
35
+
36
+ <% if translated_attribute(current_assembly.local_area).present? %>
37
+ <div class="definition-data__item local_area">
38
+ <span class="definition-data__title"><%= t("assemblies.show.local_area", scope: "decidim") %></span>
39
+ <%== translated_attribute(current_assembly.local_area) %>
40
+ </div>
41
+ <% end %>
42
+
43
+ <% if translated_attribute(current_assembly.target).present? %>
44
+ <div class="definition-data__item target">
45
+ <span class="definition-data__title"><%= t("assemblies.show.target", scope: "decidim") %></span>
46
+ <%== translated_attribute(current_assembly.target) %>
47
+ </div>
48
+ <% end %>
49
+
50
+ <% if translated_attribute(current_assembly.participatory_scope).present? %>
51
+ <div class="definition-data__item participatory_scope">
52
+ <span class="definition-data__title"><%= t("assemblies.show.participatory_scope", scope: "decidim") %></span>
53
+ <%== translated_attribute(current_assembly.participatory_scope) %>
54
+ </div>
55
+ <% end %>
56
+
57
+ <% if translated_attribute(current_assembly.participatory_structure).present? %>
58
+ <div class="definition-data__item participatory_structure">
59
+ <span class="definition-data__title"><%= t("assemblies.show.participatory_structure", scope: "decidim") %></span>
60
+ <%== translated_attribute(current_assembly.participatory_structure) %>
61
+ </div>
62
+ <% end %>
63
+ </div>
64
+ <%= render partial: "decidim/shared/share_modal" %>
65
+ <%= embed_modal_for assembly_assembly_widget_url(current_assembly, format: :js) %>
66
+ </div>
67
+ </div>
68
+ <% if current_assembly.show_statistics? %>
69
+ <%= render partial: 'statistics' %>
70
+ <% end %>
71
+ </div>
72
+
73
+ <%= javascript_include_tag "decidim/proposals/social_share" %>
74
+ <%= stylesheet_link_tag "decidim/proposals/social_share" %>
@@ -0,0 +1,11 @@
1
+ <% content_for(:header, "false") %>
2
+ <% content_for(:title, translated_attribute(model.title)) %>
3
+ <p class="card__desc"><%== html_truncate(translated_attribute(model.short_description), length: 630, separator: '...') %></p>
4
+ <% content_for(:footer) do %>
5
+ <div class="card__support">
6
+ <span class="card--process__small"></span>
7
+ <%= link_to assembly_path(model), class: "card__button button small" do %>
8
+ <%= t("assembly_widgets.show.take_part", scope: "layouts.decidim") %>
9
+ <% end %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,64 @@
1
+ <div class="process-header row column">
2
+ <div class="row column process-header__main"
3
+ style="background-image:url(<%= current_assembly.banner_image.url %>);">
4
+ <div class="process-header__container row">
5
+ <div class="columns mediumlarge-9 process-header__info">
6
+ <div>
7
+ <h1 class="text-highlight heading2">
8
+ <%= translated_attribute(current_assembly.title) %>
9
+ </h1>
10
+ </div>
11
+ <div>
12
+ <h2 class="text-highlight heading-small">
13
+ <% if current_assembly.hashtag.present? %>
14
+ <span class="process-header__hashtag">
15
+ <%= link_to "##{current_assembly.hashtag}", "https://twitter.com/hashtag/#{current_assembly.hashtag}" %>
16
+ </span>
17
+ <% end %>
18
+ <%= translated_attribute(current_assembly.subtitle) %>
19
+ </h2>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ <% if current_assembly.features.any? %>
25
+ <div class="row column">
26
+ <div class="process-nav">
27
+ <button class="process-nav__trigger hide-for-medium" data-toggle="process-nav-content">
28
+ <%= icon "caret-bottom", class: "icon--small process-nav__trigger__icon", aria_label: t('.unfold'), role: "img" %>
29
+ <div class="process-nav__link">
30
+ <% if self.try(:current_feature) %>
31
+ <%= feature_icon(current_feature) %>
32
+ <%= translated_attribute(current_feature.name) %>
33
+ <% else %>
34
+ <%= icon "assembly" %>
35
+ <%= t ".assembly_menu_item" %>
36
+ <% end %>
37
+ </div>
38
+ </button>
39
+ <div class="row column process-nav__content is-active" id="process-nav-content" data-toggler=".is-active">
40
+ <ul>
41
+ <li class="<%= "is-active" if is_active_link?(decidim_assemblies.assembly_path(current_assembly), :exclusive) %>">
42
+ <%= active_link_to decidim_assemblies.assembly_path(current_assembly), active: :exact, class: "process-nav__link", class_active: "is-active" do %>
43
+ <%= external_icon "decidim/assemblies/assembly.svg" %>
44
+ <%= t ".assembly_menu_item" %>
45
+ <% end %>
46
+ </li>
47
+
48
+ <% current_assembly.features.each do |feature| %>
49
+ <% if feature.published? || feature == self.try(:current_feature) %>
50
+ <li class="<%= "is-active" if is_active_link?(main_feature_path(feature), :inclusive) %>">
51
+ <%= active_link_to main_feature_path(feature), class: "process-nav__link", active: :inclusive, class_active: "is-active" do %>
52
+ <%= feature_icon(feature) %>
53
+
54
+ <%= translated_attribute(feature.name) %>
55
+ <% end %>
56
+ </li>
57
+ <% end %>
58
+ <% end %>
59
+ </ul>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ <% end %>
64
+ </div>