X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6038a018b758e1a4babc5669df50622cd470df2f..35336cd73e444534cb2eda20e3730464cc4e6553:/apps/workbench/app/views/layouts/application.html.erb diff --git a/apps/workbench/app/views/layouts/application.html.erb b/apps/workbench/app/views/layouts/application.html.erb index 3d2c6faec0..abef47136f 100644 --- a/apps/workbench/app/views/layouts/application.html.erb +++ b/apps/workbench/app/views/layouts/application.html.erb @@ -4,7 +4,7 @@ <% if content_for? :page_title %> - <%= yield :page_title %> + <%= yield :page_title %> / <%= Rails.configuration.site_name %> <% else %> <%= Rails.configuration.site_name %> <% end %> @@ -22,104 +22,218 @@ <%= yield :js %> <% end %> <style> - .container { - padding-top: 60px; /* 60px to make the container go all the way to the - bottom of the topbar */ + <%= yield :css %> + body { + min-height: 100%; + height: 100%; + } + + body > div.container-fluid { + padding-top: 70px; /* 70px to make the container go all the way to the bottom of the navbar */ + } + + body > div.container-fluid > div.col-sm-9.col-sm-offset-3 { + overflow: auto; } + @media (max-width: 979px) { body { padding-top: 0; } } - <%= yield :css %> + + .navbar .nav li.nav-separator > span.glyphicon.glyphicon-arrow-right { + padding-top: 1.25em; + } + + @media (min-width: 768px) { + .left-nav { + position: fixed; + } + } + @media (max-width: 767px) { + .breadcrumbs { + display: none; + } + } </style> </head> <body> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <a class="brand" style="margin-left: 1px" href="/"><%= Rails.configuration.site_name rescue Rails.application.class.parent_name %></a> + <div class="navbar navbar-default navbar-fixed-top"> + <div class="container-fluid"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#workbench-navbar.navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/"><%= Rails.configuration.site_name rescue Rails.application.class.parent_name %></a> + </div> + + <div class="collapse navbar-collapse" id="workbench-navbar"> + <ul class="nav navbar-nav navbar-left breadcrumbs"> + <% if current_user %> + <% if content_for?(:breadcrumbs) %> + <%= yield(:breadcrumbs) %> + <% else %> + <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li> + <li> + <%= link_to( + controller.model_class.to_s.pluralize.underscore.gsub('_', ' '), + url_for({controller: params[:controller]})) %> + </li> + <% if params[:action] != 'index' %> + <li class="nav-separator"> + <span class="glyphicon glyphicon-arrow-right"></span> + </li> + <li> + <%= link_to controller.breadcrumb_page_name, request.fullpath %> + </li> + <li style="padding: 14px 0 14px"> + <%= form_tag do |f| %> + <%= render :partial => "selection_checkbox", :locals => {:object => @object} %> + <% end %> + </li> + <% end %> + <% end %> + <% end %> + </ul> + + <ul class="nav navbar-nav navbar-right"> + + <li> + <a><i class="rotating loading glyphicon glyphicon-refresh"></i></a> + </li> - <ul class="nav pull-right"> - <% if current_user -%> - <li><span class="badge badge-info" style="margin: 10px auto 10px; padding-top: 4px; padding-bottom: 4px"><%= current_user.email %></span></li> - <li><a href="<%= logout_path %>">Log out</a></li> + <% if current_user %> + <!-- XXX placeholder for this when search is implemented + <li> + <form class="navbar-form" role="search"> + <div class="input-group" style="width: 220px"> + <input type="text" class="form-control" placeholder="search"> + <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span> + </div> + </form> + </li> + --> + + <li class="dropdown notification-menu"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <span class="glyphicon glyphicon-paperclip"></span> + <span class="badge" id="persistent-selection-count"></span> + <span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu" id="persistent-selection-list"> + <%= form_tag '/actions' do %> + <div id="selection-form-content"></div> + <% end %> + </ul> + </li> + + <% if current_user.is_active %> + <li class="dropdown notification-menu"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <span class="glyphicon glyphicon-envelope"></span> + <span class="badge badge-alert notification-count"><%= @notification_count %></span> + <span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu"> + <% if (@notifications || []).length > 0 %> + <% @notifications.each_with_index do |n, i| %> + <% if i > 0 %><li class="divider"></li><% end %> + <li class="notification"><%= n.call(self) %></li> + <% end %> + <% else %> + <li class="notification empty">No notifications.</li> + <% end %> + </ul> + </li> + <% end %> + + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <span class="glyphicon glyphicon-user"></span><span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu"> + <li role="presentation" class="dropdown-header"><%= current_user.email %></li> + <% if current_user.is_active %> + <li role="presentation" class="divider"></li> + <li role="presentation"><a href="/authorized_keys" role="menuitem">Manage ssh keys</a></li> + <li role="presentation"><a href="/api_client_authorizations" role="menuitem">Manage API tokens</a></li> + <li role="presentation" class="divider"></li> + <% end %> + <li role="presentation"><a href="<%= logout_path %>" role="menuitem">Log out</a></li> + </ul> + </li> <% else -%> <li><a href="<%= $arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li> <% end -%> </ul> + </div><!-- /.navbar-collapse --> + </div><!-- /.container-fluid --> + </div> - <% if current_user.andand.is_active %> - <ul class="nav"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Access <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <li><%= link_to 'Keys', authorized_keys_path %></li> - <li><%= link_to 'VMs', virtual_machines_path %></li> - <li><%= link_to 'Repositories', repositories_path %></li> - <li><%= link_to 'API Tokens', api_client_authorizations_path %></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Compute <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <li><%= link_to 'Jobs', jobs_path %></li> - <li><%= link_to 'Pipeline instances', pipeline_instances_path %></li> - <li><%= link_to 'Pipeline templates', pipeline_templates_path %></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Data <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <li><%= link_to 'Collections', collections_path %></li> - <li><%= link_to 'Links', links_path %></li> - <li><%= link_to 'Humans', humans_path %></li> - <li><%= link_to 'Specimens', specimens_path %></li> - <li><%= link_to 'Traits', traits_path %></li> - </ul> + <div class="container-fluid"> + <div class="col-sm-9 col-sm-offset-3"> + <div id="content" class="body-content"> + <%= yield %> + </div> + </div> + <div class="col-sm-3 left-nav"> + <div class="arvados-nav-container"> + <% if current_user.andand.is_active %> + <div class="well"> + <ul class="arvados-nav"> + <li class="<%= 'arvados-nav-active' if params[:action] == 'home' %>"> + <a href="/">Dashboard</a> </li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - System <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <% if current_user.is_admin %> - <li><%= link_to 'Users', users_path %></li> + + <% [['Data', [['collections', 'Collections (data files)'], + ['humans'], + ['traits'], + ['specimens'], + ['links']]], + ['Activity', [['pipeline_instances', 'Recent pipeline instances'], + ['jobs', 'Recent jobs']]], + ['Compute', [['pipeline_templates'], + ['repositories', 'Code repositories'], + ['virtual_machines']]], + ['System', [['users'], + ['groups'], + ['nodes', 'Compute nodes'], + ['keep_disks']]]].each do |j| %> + <li><%= j[0] %> + <ul> + <% j[1].each do |k| %> + <% unless k[0] == 'users' and !current_user.andand.is_admin %> + <li class="<%= 'arvados-nav-active' if (params[:controller] == k[0] && params[:action] != 'home') %>"> + <a href="/<%= k[0] %>"> + <%= if k[1] then k[1] else k[0].capitalize.gsub('_', ' ') end %> + </a> + </li> + <% end %> <% end %> - <li><%= link_to 'Groups', groups_path %></li> - <li><%= link_to 'Compute nodes', nodes_path %></li> - <li><%= link_to 'Keep disks', keep_disks_path %></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Docs <b class="caret"></b> - </a> - <ul class="dropdown-menu"> + </ul> + </li> + <% end %> + + <li>Help + <ul> <li><%= link_to 'Tutorials and User guide', "#{Rails.configuration.arvados_docsite}/user", target: "_blank" %></li> <li><%= link_to 'API Reference', "#{Rails.configuration.arvados_docsite}/api", target: "_blank" %></li> + <li><%= link_to 'SDK Reference', "#{Rails.configuration.arvados_docsite}/sdk", target: "_blank" %></li> <li><%= link_to 'Admin guide', "#{Rails.configuration.arvados_docsite}/admin", target: "_blank" %></li> - <li><%= link_to 'Install guide', "#{Rails.configuration.arvados_docsite}/install", target: "_blank" %></li> </ul> </li> - - </ul> - <% end %> - </div> + </ul> + </div> + <% end %> + </div> + </div> </div> - <div class="container"> - - <%= content_for?(:breadcrumbs) ? yield(:breadcrumbs) : render(partial: 'breadcrumbs') %> - <%= yield %> - - </div> <!-- /container --> - <%= piwik_tracking_tag %> <%= javascript_tag do %> <%= yield :footer_js %> <% end %> + </body> </html>