Dashboard proposal menu redesign

Dashboard proposal menu has been redesigned to look like the available
mock-ups.
This commit is contained in:
Juan Salvador Pérez García
2018-06-27 13:25:09 +02:00
parent 2be107f4da
commit d2a05ee779
4 changed files with 290 additions and 150 deletions

View File

@@ -18,7 +18,92 @@
} }
.proposal-dashboard { .proposal-dashboard {
margin-top: -1.5rem; .dashboard-sidebar {
border-right: 1pt solid lightgray;
@include breakpoint(medium) {
min-height: rem-calc(1100);
}
ul {
list-style-type: none;
margin-bottom: 0;
margin-left: 0;
padding: 0;
[class^="icon-"] {
color: #595959;
display: inline-block;
font-size: rem-calc(24);
line-height: $line-height;
padding: $line-height / 2 $line-height / 4;
padding-left: 0;
vertical-align: middle;
}
}
li {
margin: 0;
outline: 0;
ul {
margin-left: $line-height / 1.5;
border-left: 1px solid #b6b6b6;
padding-left: $line-height / 2;
}
&.is-active a {
span {
color: #00538b;
font-weight: bold;
border-bottom: 2px solid #00538b;
padding-bottom: 2px;
}
}
}
li a {
color: #595959;
display: block;
line-height: rem-calc(48);
padding-left: rem-calc(12);
vertical-align: top;
&:hover {
text-decoration: none;
}
}
li a.is-active {
color: #00538b;
[class^="icon-"] {
color: #00538b;
}
}
.submenu {
border-bottom: 0;
margin-left: $line-height;
li:first-child {
padding-top: $line-height / 2;
}
li:last-child {
padding-bottom: $line-height / 2;
}
a {
font-weight: normal;
}
.is-active {
border-bottom: 0;
}
}
}
.columns { .columns {
padding: 0; padding: 0;
@@ -43,13 +128,6 @@
} }
} }
.left-menu {
border-right: 1pt solid lightgray;
border-bottom: 1pt solid lightgray;
padding: 1rem 1.5rem 1rem 1.5rem;
background-color: #fbfbfb;
}
.body { .body {
padding: 1rem 1.5rem 1rem 1.5rem; padding: 1rem 1.5rem 1rem 1.5rem;
} }

View File

@@ -1,2 +1,74 @@
module ProposalsDashboardHelper module ProposalsDashboardHelper
def resources_menu_visible?(proposal, resources)
can?(:manage_polls, proposal) && resources.any?
end
def progress_menu(&block)
menu_group('progress-menu', progress_menu_active?, &block)
end
def progress_menu_active?
actions_menu_active? || stats_menu_active?
end
def actions_menu(&block)
menu_entry(actions_menu_active?, &block)
end
def actions_menu_active?
(controller_name == 'proposals_dashboard' && action_name == 'index') || is_proposed_action_request?
end
def stats_menu(&block)
menu_entry(stats_menu_active?, &block)
end
def stats_menu_active?
controller_name == 'proposals_dashboard' && action_name == 'stats'
end
def resources_menu(&block)
menu_group('resources-menu', resources_menu_active?, &block)
end
def polls_menu(&block)
menu_entry(polls_menu_active?, &block)
end
def resources_menu_active?
polls_menu_active? || is_resource_request?
end
def polls_menu_active?
controller_name == 'polls'
end
def menu_group(id, active, &block)
html_class = nil
html_class = 'is-active' if active
content_tag(:ul, id: id, class: html_class) do
yield
end
end
def menu_entry(active, &block)
content = capture(&block)
html_class = nil
html_class = 'is-active' if active
content_tag(:li, content, class: html_class)
end
def is_resource_request?
controller_name == 'proposals_dashboard' && action_name == 'new_request' && proposal_dashboard_action&.resource?
end
def is_proposed_action_request?
controller_name == 'proposals_dashboard' && action_name == 'new_request' && proposal_dashboard_action&.proposed_action?
end
def is_request_active(id)
controller_name == 'proposals_dashboard' && action_name == 'new_request' && proposal_dashboard_action&.id == id
end
end end

View File

@@ -23,53 +23,45 @@
<%= setting['per_page_code_head'].try(:html_safe) %> <%= setting['per_page_code_head'].try(:html_safe) %>
</head> </head>
<body class="<%= yield (:body_class) %>"> <body class="proposal-dashboard">
<%= setting['per_page_code_body'].try(:html_safe) %> <%= setting['per_page_code_body'].try(:html_safe) %>
<h1 class="show-for-sr"><%= setting['org_name'] %></h1> <h1 class="show-for-sr"><%= setting['org_name'] %></h1>
<div class="wrapper <%= yield (:wrapper_class) %>"> <div class="off-canvas-wrapper">
<%= render partial: 'layouts/header', locals: {with_subnavigation: false} %> <div class="off-canvas-wrapper-inner" data-off-canvas-wrapper>
<div class="off-canvas position-left" id="offCanvas" data-off-canvas>
<!--[if lt IE 9]> <div class="show-for-small-only">
<% if browser.ie? && cookies['ie_alert_closed'] != 'true' %> <div class="dashboard-sidebar" data-equalizer-watch>
<div data-alert class="callout primary ie-callout" data-closable> <%= render partial: 'proposals_dashboard/menu' %>
<button class="close-button ie-callout-close-js" </div>
aria-label="<%= t("application.close") %>" type="button" data-close>
<span aria-hidden="true">&times;</span>
</button>
<h2><%= t("layouts.application.ie_title") %></h2>
<p>
<%= t("layouts.application.ie",
chrome: link_to(
t("layouts.application.chrome"), "https://www.google.com/chrome/browser/desktop/", title: t("shared.target_blank_html"), target: "_blank"),
firefox: link_to(
t("layouts.application.firefox"), "https://www.mozilla.org/firefox", title: t("shared.target_blank_html"), target: "_blank")
).html_safe %>
</p>
</div>
<% end %>
<![endif]-->
<%= render partial: 'layouts/flash' %>
<div class="proposal-dashboard">
<div class="row small-12 columns title">
<h5><%= t '.title' %></h5>
</div>
<div class="row">
<div class="small-2 columns left-menu">
<%= render partial: 'proposals_dashboard/menu' %>
</div>
<div class="small-10 columns body">
<%= yield %>
</div> </div>
</div> </div>
<div class="push"></div> <div class="off-canvas-content" data-off-canvas-content>
<%= render partial: 'layouts/header', locals: {with_subnavigation: false} %>
<div class="no-margin-top row expanded collapse" data-equalizer>
<div class="small-12 medium-3 column" data-equalizer-watch>
<div class="show-for-small-only">
<button type="button" class="button hollow expanded" data-toggle="offCanvas"><%= t("admin.menu.admin") %></button>
</div>
<div id="side_menu" class="hide-for-small-only">
<div class="dashboard-sidebar" data-equalizer-watch>
<%= render partial: 'proposals_dashboard/menu' %>
</div>
</div>
</div>
<div class="admin-content small-12 medium-9 column" data-equalizer-watch>
<%= render partial: 'layouts/flash' %>
<%= yield %>
</div>
</div>
</div>
</div>
</div> </div>
</body> </body>
<!--[if lt IE 9]>
<%= javascript_include_tag "ie_lt9" %>
<![endif]-->
</html> </html>

View File

@@ -1,106 +1,104 @@
<ul id="proposal_dashboard_menu" data-multi-open="false">
<li class="section-title">
<a href="#">
<span class="icon-checkmark-circle"></span>
<strong><%= t('.general') %></strong>
</a>
<% if current_editable?(proposal) || can?(:publish, proposal) %> <ul id="general-menu">
<div class="row"> <% if current_editable?(proposal) %>
<div class="small-2 columns"></div> <li>
<div class="small-10 columns"><%= t '.general' %></div> <%= link_to edit_proposal_path(proposal), target: '_blank' do %>
</div> <span><%= t('.edit_proposal_link') %></span>
<% end %>
</li>
<% end %>
<% if current_editable?(proposal) %> <li>
<div class="row"> <%= link_to new_proposal_notification_path(proposal_id: proposal.id),
<div class="small-2 columns"></div> target: '_blank' do %>
<div class="small-10 columns"> <span><%= t('.send_notification') %></span>
<%= link_to t('.edit_proposal_link'), edit_proposal_path(proposal), target: '_blank' %>
</div>
</div>
<% end %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.send_notification'),
new_proposal_notification_path(proposal_id: proposal.id),
target: '_blank' %>
</div>
</div>
<% if can_destroy_image?(proposal) %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('images.remove_image'),
image_path(proposal.image, from: request.url),
method: :delete,
data: { confirm: t('images.actions.destroy.confirm') } %>
</div>
</div>
<% end %>
<% unless proposal.retired? %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.retire'),
retire_form_proposal_path(proposal),
target: '_blank' %>
</div>
</div>
<% end %>
<% if can?(:publish, proposal) %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.publish'), publish_proposal_dashboard_index_path(proposal), method: :patch %>
</div>
</div>
<% end %>
<% end %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns"><%= t('.progress') %></div>
</div>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.graphic'), stats_proposal_dashboard_index_path(proposal.to_param) %>
</div>
</div>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.actions'), proposal_dashboard_index_path(proposal.to_param) %>
</div>
</div>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns"><%= t '.resources' %></div>
</div>
<% if can?(:manage_polls, proposal) %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<%= link_to t('.polls'), proposal_dashboard_polls_path(proposal.to_param) %>
</div>
</div>
<% end %>
<% resources.each do |resource| %>
<div class="row">
<div class="small-2 columns"></div>
<div class="small-10 columns">
<span data-tooltip title="<%= resource.description %>">
<% if resource.request_to_administrators? %>
<%= link_to resource.title,
new_request_proposal_dashboard_path(proposal, resource) %>
<% else %>
<%= link_to resource.title, resource.link, target: '_blank' %>
<% end %> <% end %>
</span> </li>
</div>
</div> <% if can_destroy_image?(proposal) %>
<% end %> <li>
<%= link_to image_path(proposal.image, from: request.url),
method: :delete,
data: { confirm: t('images.actions.destroy.confirm') } do %>
<span><%= t('images.remove_image') %></span>
<% end %>
</li>
<% end %>
<% unless proposal.retired? %>
<li>
<%= link_to retire_form_proposal_path(proposal),
target: '_blank' do %>
<span><%= t('.retire') %></span>
<% end %>
</li>
<% end %>
<% if can?(:publish, proposal) %>
<li>
<%= link_to publish_proposal_dashboard_index_path(proposal), method: :patch do %>
<span><%= t('.publish') %></span>
<% end %>
</li>
<% end %>
</ul>
</li>
<li class="section-title">
<a href="#" <%= 'class=is-active' if progress_menu_active? %>>
<span class="icon-bars"></span>
<strong><%= t('.progress') %></strong>
</a>
<%= progress_menu do %>
<%= stats_menu do %>
<%= link_to stats_proposal_dashboard_index_path(proposal.to_param) do %>
<span><%= t('.graphic') %></span>
<% end %>
<% end %>
<%= actions_menu do %>
<%= link_to proposal_dashboard_index_path(proposal.to_param) do %>
<span><%= t('.actions') %></span>
<% end %>
<% end %>
<% end %>
</li>
<% if resources_menu_visible?(proposal, resources) %>
<li class="section-title">
<a href="#" <%= 'class=is-active' if resources_menu_active? %>>
<span class="icon-file-text-o"></span>
<strong><%= t('.resources') %></strong>
</a>
<%= resources_menu do %>
<% if can?(:manage_polls, proposal) %>
<%= polls_menu do %>
<%= link_to proposal_dashboard_polls_path(proposal.to_param) do %>
<span><%= t('.polls') %></span>
<% end %>
<% end %>
<% end %>
<% resources.each do |resource| %>
<li <%= 'class=is-active' if is_request_active(resource.id) %>>
<% if resource.request_to_administrators? %>
<%= link_to new_request_proposal_dashboard_path(proposal, resource) do %>
<span><%= resource.title %></span>
<% end %>
<% else %>
<%= link_to resource.title, resource.link, target: '_blank' %>
<% end %>
</li>
<% end %>
<% end %>
</li>
<% end %>
</ul>