Use link list helper in admin menus

For now we're not including lists with nested lists.
This commit is contained in:
Javi Martín
2020-12-05 17:35:21 +01:00
parent c156621a4c
commit 55d2cfe5b1
9 changed files with 340 additions and 249 deletions

View File

@@ -35,28 +35,29 @@
<li> <li>
<a href="#" class="booths-link"><%= t("admin.menu.title_booths") %></a> <a href="#" class="booths-link"><%= t("admin.menu.title_booths") %></a>
<ul id="booths_menu" <%= "class=is-active" if booths? %>> <%= link_list(
<li <%= "class=is-active" if %w[officers officer_assignments].include?(controller_name) %>> [
<%= link_to t("admin.menu.poll_officers"), admin_officers_path %> t("admin.menu.poll_officers"),
</li> admin_officers_path,
%w[officers officer_assignments].include?(controller_name)
<li <%= "class=is-active" if controller_name == "booths" && ],
action_name != "available" %>> [
<%= link_to t("admin.menu.poll_booths"), admin_booths_path %> t("admin.menu.poll_booths"),
</li> admin_booths_path,
controller_name == "booths" && action_name != "available"
<li <%= "class=is-active" if (controller_name == "polls" && ],
action_name == "booth_assignments") || [
controller_name == "booth_assignments" && t("admin.menu.poll_booth_assignments"),
action_name == "manage" %>> booth_assignments_admin_polls_path,
<%= link_to t("admin.menu.poll_booth_assignments"), booth_assignments_admin_polls_path %> controller_name == "polls" && action_name == "booth_assignments" || controller_name == "booth_assignments" && action_name == "manage"
</li> ],
[
<li <%= "class=is-active" if %w[shifts booths].include?(controller_name) && t("admin.menu.poll_shifts"),
%w[available new].include?(action_name) %>> available_admin_booths_path,
<%= link_to t("admin.menu.poll_shifts"), available_admin_booths_path %> %w[shifts booths].include?(controller_name) && %w[available new].include?(action_name)
</li> ],
</ul> id: "booths_menu", class: ("is-active" if booths?)
) %>
</li> </li>
<% if feature?(:signature_sheets) %> <% if feature?(:signature_sheets) %>
@@ -67,120 +68,151 @@
<li> <li>
<a href="#" class="messages-link"><%= t("admin.menu.messaging_users") %></a> <a href="#" class="messages-link"><%= t("admin.menu.messaging_users") %></a>
<ul id="messaging_users_menu" <%= "class=is-active" if messages_menu_active? %>> <%= link_list(
<li <%= "class=is-active" if controller_name == "newsletters" %>> [
<%= link_to t("admin.menu.newsletters"), admin_newsletters_path %> t("admin.menu.newsletters"),
</li> admin_newsletters_path,
<li <%= "class=is-active" if controller_name == "admin_notifications" %>> controller_name == "newsletters"
<%= link_to t("admin.menu.admin_notifications"), admin_admin_notifications_path %> ],
</li> [
<li <%= "class=is-active" if controller_name == "system_emails" %>> t("admin.menu.admin_notifications"),
<%= link_to t("admin.menu.system_emails"), admin_system_emails_path %> admin_admin_notifications_path,
</li> controller_name == "admin_notifications"
<li <%= "class=is-active" if controller_name == "emails_download" %>> ],
<%= link_to t("admin.menu.emails_download"), admin_emails_download_index_path %> [
</li> t("admin.menu.system_emails"),
</ul> admin_system_emails_path,
controller_name == "system_emails"
],
[
t("admin.menu.emails_download"),
admin_emails_download_index_path,
controller_name == "emails_download"
],
id: "messaging_users_menu", class: ("is-active" if messages_menu_active?)
) %>
</li> </li>
<li> <li>
<a href="#" class="site-customization-link"><%= t("admin.menu.title_site_customization") %></a> <a href="#" class="site-customization-link"><%= t("admin.menu.title_site_customization") %></a>
<ul <%= "class=is-active" if customization? && <%= link_list(
controller.class.parent != Admin::Poll::Questions::Answers %>> [
t("admin.menu.site_customization.homepage"),
<li <%= "class=is-active" if homepage? %>> admin_homepage_path,
<%= link_to t("admin.menu.site_customization.homepage"), admin_homepage_path %> homepage?
</li> ],
[
<li <%= "class=is-active" if pages? || controller_name == "pages" %>> t("admin.menu.site_customization.pages"),
<%= link_to t("admin.menu.site_customization.pages"), admin_site_customization_pages_path %> admin_site_customization_pages_path,
</li> pages? || controller_name == "pages"
],
<li <%= "class=is-active" if controller_name == "banners" %>> [
<%= link_to t("admin.menu.banner"), admin_banners_path %> t("admin.menu.banner"),
</li> admin_banners_path,
controller_name == "banners"
<li <%= "class=is-active" if controller_name == "information_texts" %>> ],
<%= link_to t("admin.menu.site_customization.information_texts"), admin_site_customization_information_texts_path %> [
</li> t("admin.menu.site_customization.information_texts"),
admin_site_customization_information_texts_path,
<li <%= "class=is-active" if controller_name == "documents" %>> controller_name == "information_texts"
<%= link_to t("admin.menu.site_customization.documents"), ],
admin_site_customization_documents_path %> [
</li> t("admin.menu.site_customization.documents"),
</ul> admin_site_customization_documents_path,
controller_name == "documents"
],
class: ("is-active" if customization? && controller.class.parent != Admin::Poll::Questions::Answers)
) %>
</li> </li>
<li> <li>
<a href="#" class="moderated-content-link"><%= t("admin.menu.title_moderated_content") %></a> <a href="#" class="moderated-content-link"><%= t("admin.menu.title_moderated_content") %></a>
<ul <%= "class=is-active" if moderated_content? %>> <%= link_list(
<% if feature?(:proposals) %> (
<li <%= "class=is-active" if controller_name == "hidden_proposals" %>> [
<%= link_to t("admin.menu.hidden_proposals"), admin_hidden_proposals_path %> t("admin.menu.hidden_proposals"),
</li> admin_hidden_proposals_path,
<% end %> controller_name == "hidden_proposals"
] if feature?(:proposals)
<% if feature?(:debates) %> ),
<li <%= "class=is-active" if controller_name == "hidden_debates" %>> (
<%= link_to t("admin.menu.hidden_debates"), admin_hidden_debates_path %> [
</li> t("admin.menu.hidden_debates"),
<% end %> admin_hidden_debates_path,
controller_name == "hidden_debates"
<% if feature?(:budgets) %> ] if feature?(:debates)
<li <%= "class=is-active" if controller_name == "hidden_budget_investments" %>> ),
<%= link_to t("admin.menu.hidden_budget_investments"), admin_hidden_budget_investments_path %> (
</li> [
<% end %> t("admin.menu.hidden_budget_investments"),
admin_hidden_budget_investments_path,
<li <%= "class=is-active" if controller_name == "hidden_comments" %>> controller_name == "hidden_budget_investments"
<%= link_to t("admin.menu.hidden_comments"), admin_hidden_comments_path %> ] if feature?(:budgets)
</li> ),
[
<li <%= "class=is-active" if controller_name == "hidden_proposal_notifications" %>> t("admin.menu.hidden_comments"),
<%= link_to t("admin.menu.hidden_proposal_notifications"), admin_hidden_proposal_notifications_path %> admin_hidden_comments_path,
</li> controller_name == "hidden_comments"
],
<li <%= "class=is-active" if controller_name == "hidden_users" %>> [
<%= link_to t("admin.menu.hidden_users"), admin_hidden_users_path %> t("admin.menu.hidden_proposal_notifications"),
</li> admin_hidden_proposal_notifications_path,
controller_name == "hidden_proposal_notifications"
<li <%= "class=is-active" if controller_name == "activity" %>> ],
<%= link_to t("admin.menu.activity"), admin_activity_path %> [
</li> t("admin.menu.hidden_users"),
</ul> admin_hidden_users_path,
controller_name == "hidden_users"
],
[
t("admin.menu.activity"),
admin_activity_path,
controller_name == "activity"
],
class: ("is-active" if moderated_content?)
) %>
</li> </li>
<li> <li>
<a href="#" class="profiles-link"><%= t("admin.menu.title_profiles") %></a> <a href="#" class="profiles-link"><%= t("admin.menu.title_profiles") %></a>
<ul <%= "class=is-active" if profiles? %>> <%= link_list(
<li <%= "class=is-active" if controller_name == "administrators" %>> [
<%= link_to t("admin.menu.administrators"), admin_administrators_path %> t("admin.menu.administrators"),
</li> admin_administrators_path,
controller_name == "administrators"
<li <%= "class=is-active" if controller_name == "organizations" %>> ],
<%= link_to t("admin.menu.organizations"), admin_organizations_path %> [
</li> t("admin.menu.organizations"),
admin_organizations_path,
<li <%= "class=is-active" if controller_name == "officials" %>> controller_name == "organizations"
<%= link_to t("admin.menu.officials"), admin_officials_path %> ],
</li> [
t("admin.menu.officials"),
<li <%= "class=is-active" if controller_name == "moderators" %>> admin_officials_path,
<%= link_to t("admin.menu.moderators"), admin_moderators_path %> controller_name == "officials"
</li> ],
[
<li <%= "class=is-active" if controller_name == "valuators" %>> t("admin.menu.moderators"),
<%= link_to t("admin.menu.valuators"), admin_valuators_path %> admin_moderators_path,
</li> controller_name == "moderators"
],
<li <%= "class=is-active" if controller_name == "managers" %>> [
<%= link_to t("admin.menu.managers"), admin_managers_path %> t("admin.menu.valuators"),
</li> admin_valuators_path,
controller_name == "valuators"
<li <%= "class=is-active" if controller_name == "users" %>> ],
<%= link_to t("admin.menu.users"), admin_users_path %> [
</li> t("admin.menu.managers"),
</ul> admin_managers_path,
controller_name == "managers"
],
[
t("admin.menu.users"),
admin_users_path,
controller_name == "users"
],
class: ("is-active" if profiles?)
) %>
</li> </li>
<li class="<%= "is-active" if controller_name == "stats" %>"> <li class="<%= "is-active" if controller_name == "stats" %>">
@@ -189,45 +221,54 @@
<li> <li>
<a href="#" class="settings-link"><%= t("admin.menu.title_settings") %></a> <a href="#" class="settings-link"><%= t("admin.menu.title_settings") %></a>
<ul <%= "class=is-active" if settings? %>> <%= link_list(
<li <%= "class=is-active" if controller_name == "settings" %>> [
<%= link_to t("admin.menu.settings"), admin_settings_path %> t("admin.menu.settings"),
</li> admin_settings_path,
controller_name == "settings"
<li <%= "class=is-active" if controller_name == "tags" %>> ],
<%= link_to t("admin.menu.proposals_topics"), admin_tags_path %> [
</li> t("admin.menu.proposals_topics"),
admin_tags_path,
<li <%= "class=is-active" if controller_name == "geozones" %>> controller_name == "tags"
<%= link_to t("admin.menu.geozones"), admin_geozones_path %> ],
</li> [
t("admin.menu.geozones"),
<li <%= "class=is-active" if controller_name == "images" && admin_geozones_path,
controller.class.parent != Admin::Poll::Questions::Answers %>> controller_name == "geozones"
<%= link_to t("admin.menu.site_customization.images"), admin_site_customization_images_path %> ],
</li> [
t("admin.menu.site_customization.images"),
<li <%= "class=is-active" if controller_name == "content_blocks" %>> admin_site_customization_images_path,
<%= link_to t("admin.menu.site_customization.content_blocks"), admin_site_customization_content_blocks_path %> controller_name == "images" && controller.class.parent != Admin::Poll::Questions::Answers
</li> ],
[
<li <%= "class=is-active" if local_census_records? %>> t("admin.menu.site_customization.content_blocks"),
<%= link_to t("admin.menu.local_census_records"), admin_local_census_records_path %> admin_site_customization_content_blocks_path,
</li> controller_name == "content_blocks"
</ul> ],
[
t("admin.menu.local_census_records"),
admin_local_census_records_path,
local_census_records?
],
class: ("is-active" if settings?)
) %>
</li> </li>
<li> <li>
<a href="#" class="dashboard-link"><%= t("admin.menu.dashboard") %></a> <a href="#" class="dashboard-link"><%= t("admin.menu.dashboard") %></a>
<ul <%= "class=is-active" if dashboard? %>> <%= link_list(
<li <%= "class=is-active" if controller_name == "actions" %>> [
<%= link_to t("admin.menu.dashboard_actions"), admin_dashboard_actions_path %> t("admin.menu.dashboard_actions"),
</li> admin_dashboard_actions_path,
controller_name == "actions"
<li <%= "class=is-active" if controller_name == "administrator_tasks" %>> ],
<%= link_to admin_dashboard_administrator_tasks_path do %> [
<%= t("admin.menu.administrator_tasks") %> t("admin.menu.administrator_tasks"),
<% end %> admin_dashboard_administrator_tasks_path,
</li> controller_name == "administrator_tasks"
</ul> ],
class: ("is-active" if dashboard?)
) %>
</li> </li>
</ul> </ul>

View File

@@ -1,4 +1,6 @@
class Admin::MenuComponent < ApplicationComponent class Admin::MenuComponent < ApplicationComponent
include LinkListHelper
private private
def moderated_content? def moderated_content?

View File

@@ -1,5 +1,9 @@
<ul class="sdg-content-menu"> <%= link_list(
<li class="<%= "is-active" if sdg? %>"> [
<%= link_to t("sdg_management.menu.sdg_content"), sdg_management_goals_path, class: "goals-link" %> t("sdg_management.menu.sdg_content"),
</li> sdg_management_goals_path,
</ul> sdg?,
class: "goals-link"
],
class: "sdg-content-menu"
) %>

View File

@@ -1,4 +1,6 @@
class SDGManagement::MenuComponent < ApplicationComponent class SDGManagement::MenuComponent < ApplicationComponent
include LinkListHelper
private private
def sdg? def sdg?

View File

@@ -3,8 +3,8 @@ module LinkListHelper
return "" if links.compact.empty? return "" if links.compact.empty?
tag.ul(options) do tag.ul(options) do
safe_join(links.compact.map do |text, url, **link_options| safe_join(links.compact.map do |text, url, is_active = false, **link_options|
tag.li do tag.li(class: ("is-active" if is_active)) do
link_to text, url, link_options link_to text, url, link_options
end end
end) end)

View File

@@ -1,41 +1,50 @@
<ul id="admin_menu" data-accordion-menu> <ul id="admin_menu" data-accordion-menu>
<li class="section-title"> <li class="section-title">
<a href="#" class="users-link"><%= t("management.menu.users") %></a> <a href="#" class="users-link"><%= t("management.menu.users") %></a>
<ul class="is-active"> <%= link_list(
[
<li <%= "class=is-active" if menu_users? %>> t("management.menu.select_user"),
<%= link_to t("management.menu.select_user"), management_document_verifications_path %> management_document_verifications_path,
</li> menu_users?
],
<% if managed_user.email %> (
<li <%= "class=is-active" if menu_edit_password_email? %>> [
<%= link_to t("management.account.menu.reset_password_email"), edit_password_email_management_account_path %> t("management.account.menu.reset_password_email"),
</li> edit_password_email_management_account_path,
<% end %> menu_edit_password_email?
] if managed_user.email
<li <%= "class=is-active" if menu_edit_password_manually? %>> ),
<%= link_to t("management.account.menu.reset_password_manually"), edit_password_manually_management_account_path %> [
</li> t("management.account.menu.reset_password_manually"),
edit_password_manually_management_account_path,
<li <%= "class=is-active" if menu_create_proposal? %>> menu_edit_password_manually?
<%= link_to t("management.menu.create_proposal"), new_management_proposal_path %> ],
</li> [
t("management.menu.create_proposal"),
<li <%= "class=is-active" if menu_support_proposal? %>> new_management_proposal_path,
<%= link_to t("management.menu.support_proposals"), management_proposals_path %> menu_create_proposal?
</li> ],
[
<% if Setting["process.budgets"] %> t("management.menu.support_proposals"),
<li <%= "class=is-active" if menu_create_investments? %>> management_proposals_path,
<%= link_to t("management.menu.create_budget_investment"), create_investments_management_budgets_path %> menu_support_proposal?
</li> ],
(
<li <%= "class=is-active" if menu_support_investments? %>> [
<%= link_to t("management.menu.support_budget_investments"), support_investments_management_budgets_path %> t("management.menu.create_budget_investment"),
</li> create_investments_management_budgets_path,
<% end %> menu_create_investments?
</li> ] if Setting["process.budgets"]
</ul> ),
(
[
t("management.menu.support_budget_investments"),
support_investments_management_budgets_path,
menu_support_investments?
] if Setting["process.budgets"]
),
class: "is-active"
) %>
</li> </li>
<% if Setting["process.budgets"] %> <% if Setting["process.budgets"] %>

View File

@@ -1,35 +1,48 @@
<ul id="moderation_menu"> <%= link_list(
<li> [t("moderation.dashboard.index.title"), moderation_root_path],
<%= link_to t("moderation.dashboard.index.title"), moderation_root_path %> (
</li> [
t("moderation.menu.proposals"),
<% if feature?(:proposals) %> moderation_proposals_path,
<li <%= "class=is-active" if controller_name == "proposals" %>> controller_name == "proposals",
<%= link_to t("moderation.menu.proposals"), moderation_proposals_path, class: "proposals-link" %> class: "proposals-link"
</li> ] if feature?(:proposals)
),
<li <%= "class=is-active" if controller_name == "proposal_notifications" %>> (
<%= link_to t("moderation.menu.proposal_notifications"), moderation_proposal_notifications_path, class: "proposal-notifications-link" %> [
</li> t("moderation.menu.proposal_notifications"),
<% end %> moderation_proposal_notifications_path,
controller_name == "proposal_notifications",
<% if feature?(:debates) %> class: "proposal-notifications-link"
<li <%= "class=is-active" if controller_name == "debates" %>> ] if feature?(:proposals)
<%= link_to t("moderation.menu.flagged_debates"), moderation_debates_path, class: "debates-link" %> ),
</li> (
<% end %> [
t("moderation.menu.flagged_debates"),
<% if feature?(:budgets) %> moderation_debates_path,
<li <%= "class=is-active" if controller_name == "investments" %>> controller_name == "debates",
<%= link_to t("moderation.menu.flagged_investments"), moderation_budget_investments_path, class: "investments-link" %> class: "debates-link"
</li> ] if feature?(:debates)
<% end %> ),
(
<li <%= "class=is-active" if controller_name == "comments" %>> [
<%= link_to t("moderation.menu.flagged_comments"), moderation_comments_path, class: "comments-link" %> t("moderation.menu.flagged_investments"),
</li> moderation_budget_investments_path,
controller_name == "investments",
<li <%= "class=is-active" if controller_name == "users" %>> class: "investments-link"
<%= link_to t("moderation.menu.users"), moderation_users_path, class: "users-link" %> ] if feature?(:budgets)
</li> ),
</ul> [
t("moderation.menu.flagged_comments"),
moderation_comments_path,
controller_name == "comments",
class: "comments-link"
],
[
t("moderation.menu.users"),
moderation_users_path,
controller_name == "users",
class: "users-link"
],
id: "moderation_menu"
) %>

View File

@@ -1,11 +1,5 @@
<ul id="valuation_menu"> <%= link_list(
<li> [t("valuation.menu.title"), valuation_root_path],
<%= link_to t("valuation.menu.title"), valuation_root_path %> [t("valuation.menu.budgets"), valuation_budgets_path, controller_name == "budget_investments", class: "budgets-link"],
</li> id: "valuation_menu"
) %>
<% if feature?(:budgets) %>
<li <%= "class=is-active" if controller_name == "budget_investments" %>>
<%= link_to t("valuation.menu.budgets"), valuation_budgets_path, class: "budgets-link" %>
</li>
<% end %>
</ul>

View File

@@ -32,6 +32,32 @@ describe LinkListHelper do
expect(page).to have_css "a.root", count: 1, exact_text: "Home" expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info" expect(page).to have_css "a#info", count: 1, exact_text: "Info"
end end
it "accepts an optional condition to check the active element" do
render helper.link_list(
["Home", "/", false],
["Info", "/info", true],
["Help", "/help"]
)
expect(page).to have_css "li", count: 3
expect(page).to have_css "li.is-active", count: 1, exact_text: "Info"
end
it "allows passing both the active condition and link options" do
render helper.link_list(
["Home", "/", false, class: "root"],
["Info", "/info", true, id: "info"],
["Help", "/help", rel: "help"]
)
expect(page).to have_css "li", count: 3
expect(page).to have_css "li.is-active", count: 1, exact_text: "Info"
expect(page).to have_css "a.root", count: 1, exact_text: "Home"
expect(page).to have_css "a#info", count: 1, exact_text: "Info"
expect(page).to have_css "a[rel='help']", count: 1, exact_text: "Help"
end
end end
attr_reader :content attr_reader :content