decidim-assemblies 0.6.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 (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>