24991cd5eb8f0269ab5f760d22277789393ee819
[arvados.git] / apps / workbench / app / views / layouts / application.html.erb
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <meta charset="utf-8">
5   <title>
6     <% if content_for? :page_title %>
7     <%= yield :page_title %> / <%= Rails.configuration.site_name %>
8     <% else %>
9     <%= Rails.configuration.site_name %>
10     <% end %>
11   </title>
12   <meta name="viewport" content="width=device-width, initial-scale=1.0">
13   <link rel="icon" href="/favicon.ico" type="image/x-icon">
14   <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
15   <meta name="description" content="">
16   <meta name="author" content="">
17   <%= stylesheet_link_tag    "application", :media => "all" %>
18   <%= javascript_include_tag "application" %>
19   <%= csrf_meta_tags %>
20   <%= yield :head %>
21   <%= javascript_tag do %>
22   <%= yield :js %>
23   <% end %>
24   <style>
25     <%= yield :css %>
26     body {
27     min-height: 100%;
28     height: 100%;
29     }
30
31     body > div.container-fluid {
32     padding-top: 70px; /* 70px to make the container go all the way to the bottom of the navbar */
33     }
34     
35     body > div.container-fluid > div.col-sm-9.col-sm-offset-3 {
36     overflow: auto;
37     }
38
39     @media (max-width: 979px) { body { padding-top: 0; } }
40
41     .navbar .nav li.nav-separator > span.glyphicon.glyphicon-arrow-right {
42     padding-top: 1.25em;
43     }
44
45     /* Setting the height needs to be fixed with javascript. */
46     .dropdown-menu {
47     padding-right: 20px;
48     max-height: 440px;
49     width: 400px;
50     overflow-y: auto;
51     }
52
53     @media (min-width: 768px) {
54     .left-nav {
55     position: fixed;
56     }
57     }
58     @media (max-width: 767px) {
59     .breadcrumbs {
60     display: none;
61     }
62     }
63     .arvados-nav-container {
64     top: 70px; 
65     height: calc(100% - 70px); 
66     overflow: auto; 
67     z-index: 2;
68     }
69     .arvados-nav-active {
70     background: rgb(66, 139, 202);
71     }
72     .arvados-nav-active a {
73     color: white;
74     }
75   </style>
76 </head>
77 <body>
78
79   <div class="navbar navbar-default navbar-fixed-top">
80     <div class="container-fluid">
81       <div class="navbar-header">
82         <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#workbench-navbar.navbar-collapse">
83           <span class="sr-only">Toggle navigation</span>
84           <span class="icon-bar"></span>
85           <span class="icon-bar"></span>
86           <span class="icon-bar"></span>
87         </button>
88         <a class="navbar-brand" href="/"><%= Rails.configuration.site_name rescue Rails.application.class.parent_name %></a>
89       </div>
90
91       <div class="collapse navbar-collapse" id="workbench-navbar">
92       <ul class="nav navbar-nav navbar-left breadcrumbs">
93         <% if current_user %>
94         <% if content_for?(:breadcrumbs) %>
95           <%= yield(:breadcrumbs) %>
96         <% else %>
97           <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li>
98           <li>
99             <%= link_to(
100                         controller.model_class.to_s.pluralize.underscore.gsub('_', ' '),
101                         url_for({controller: params[:controller]})) %>
102           </li>
103           <% if params[:action] != 'index' %>
104             <li class="nav-separator">
105               <span class="glyphicon glyphicon-arrow-right"></span>
106             </li>
107             <li>
108 <%= link_to controller.breadcrumb_page_name, request.fullpath %>
109             </li>
110           <% end %>
111         <% end %>
112         <% end %>
113       </ul>
114   
115       <ul class="nav navbar-nav navbar-right">
116
117         <li>
118           <a><i class="rotating loading glyphicon glyphicon-refresh"></i></a>
119         </li>
120
121         <% if current_user %>
122         <!-- XXX placeholder for this when search is implemented
123         <li>
124           <form class="navbar-form" role="search">
125             <div class="input-group" style="width: 220px">
126               <input type="text" class="form-control" placeholder="search">
127               <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
128             </div>
129           </form>
130         </li>
131         -->
132
133         <!-- XXX placeholder for this when persistent selection is implemented
134         <li class="dropdown">
135           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
136             <span class="glyphicon glyphicon-paperclip"></span>
137             <span class="badge badge-alert"><%= @selection_count %></span>
138             <span class="caret"></span>
139           </a>
140           <ul class="dropdown-menu" role="menu">
141               <li style="padding: 10px">No selections.</li>
142           </ul>
143         </li>        
144         -->
145
146         <li class="dropdown notification-menu">
147           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
148             <span class="glyphicon glyphicon-envelope"></span>
149             <span class="badge badge-alert notification-count"><%= @notification_count %></span>
150             <span class="caret"></span>
151           </a>
152           <ul class="dropdown-menu" role="menu">
153             <% if @notifications.length > 0 %>
154               <% @notifications.each_with_index do |n, i| %>
155                 <% if i > 0 %><li class="divider"></li><% end %>
156                 <li class="notification"><%= n.call(self) %></li>
157               <% end %>
158             <% else %>
159               <li class="notification empty">No notifications.</li>
160             <% end %>
161           </ul>
162         </li>        
163
164         <li class="dropdown">
165           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
166             <span class="glyphicon glyphicon-user"></span><span class="caret"></span>
167           </a>
168           <ul class="dropdown-menu" role="menu">
169             <li role="presentation" class="dropdown-header"><%= current_user.email %></li>
170             <li role="presentation" class="divider"></li>
171             <li role="presentation"><a href="/authorized_keys" role="menuitem">Manage ssh keys</a></li>
172             <li role="presentation"><a href="/api_client_authorizations" role="menuitem">Manage API tokens</a></li>
173             <li role="presentation" class="divider"></li>
174             <li role="presentation"><a href="<%= logout_path %>" role="menuitem">Log out</a></li>
175           </ul>
176         </li>
177         <% else -%>
178           <li><a href="<%= $arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li>
179         <% end -%>
180       </ul>
181       </div><!-- /.navbar-collapse -->
182     </div><!-- /.container-fluid -->
183   </div>
184
185   <div class="container-fluid">
186       <div class="col-sm-9 col-sm-offset-3">
187         <div id="content">
188           <%= yield %>
189         </div>
190       </div>
191       <div class="col-sm-3 left-nav">
192         <div class="arvados-nav-container">
193         <% if current_user %>
194         <div class="well">
195         <ul class="arvados-nav">
196           <li class="<%= 'arvados-nav-active' if params[:action] == 'home' %>">
197             <a href="/">Dashboard</a>
198           </li>
199           
200           <% [['Data', [['humans'],
201                         ['traits'],
202                         ['specimens'],
203                         ['collections', 'Files'],
204                         ['links', 'Metadata']]],
205               ['Compute', [['pipeline_templates', 'Pipelines'],
206                            ['repositories', 'Code repositories'],
207                            ['virtual_machines']]],
208               ['Activity', [['pipeline_instances', 'Recent pipelines'],
209                             ['jobs', 'Recent jobs']]],
210               ['System', [['users'],
211                          ['groups'],
212                          ['nodes', 'Compute nodes'],
213                          ['keep_disks']]]].each do |j| %>   
214             <li><%= j[0] %>
215               <ul>
216               <% j[1].each do |k| %>
217                 <% unless k[0] == 'users' and !current_user.andand.is_admin %>
218                   <li class="<%= 'arvados-nav-active' if (params[:controller] == k[0] && params[:action] != 'home') %>">
219                     <a href="/<%= k[0] %>">
220                       <%= if k[1] then k[1] else k[0].capitalize.gsub('_', ' ') end %>
221                     </a>
222                   </li>
223                 <% end %>
224               <% end %>
225               </ul>
226             </li>
227           <% end %>
228
229           <li>Help
230             <ul>
231               <li><%= link_to 'Tutorials and User guide', "#{Rails.configuration.arvados_docsite}/user", target: "_blank" %></li>
232               <li><%= link_to 'API Reference', "#{Rails.configuration.arvados_docsite}/api", target: "_blank" %></li>
233               <li><%= link_to 'SDK Reference', "#{Rails.configuration.arvados_docsite}/sdk", target: "_blank" %></li>
234               <li><%= link_to 'Admin guide', "#{Rails.configuration.arvados_docsite}/admin", target: "_blank" %></li>
235             </ul>
236           </li>
237         </ul>
238         </div>
239         <% end %>
240       </div>
241         </div>
242   </div>
243
244   <%= piwik_tracking_tag %>
245   <%= javascript_tag do %>
246   <%= yield :footer_js %>
247   <% end %>
248
249 </body>
250 </html>