2872: Make infinite scroll work with regular window scrollbars too.
[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   <% if current_user %>
18   <meta name="arv-websocket-url" content="<%=$arvados_api_client.discovery[:websocketUrl]%>?api_token=<%=Thread.current[:arvados_api_token]%>">
19   <% end %>
20   <meta name="robots" content="NOINDEX, NOFOLLOW">
21   <%= stylesheet_link_tag    "application", :media => "all" %>
22   <%= javascript_include_tag "application" %>
23   <%= csrf_meta_tags %>
24   <%= yield :head %>
25   <%= javascript_tag do %>
26   <%= yield :js %>
27   <% end %>
28   <style>
29     <%= yield :css %>
30     body {
31     min-height: 100%;
32     height: 100%;
33     }
34
35     body > div.container-fluid {
36     padding-top: 70px; /* 70px to make the container go all the way to the bottom of the navbar */
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     @media (max-width: 767px) {
46     .breadcrumbs {
47     display: none;
48     }
49     }
50   </style>
51   <link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css" rel="stylesheet">
52 </head>
53 <body>
54   <div id="wrapper">
55     <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
56       <div class="navbar-header">
57         <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
58           <span class="sr-only">Toggle navigation</span>
59           <span class="icon-bar"></span>
60           <span class="icon-bar"></span>
61           <span class="icon-bar"></span>
62         </button>
63         <a class="navbar-brand" href="/"><%= Rails.configuration.site_name rescue Rails.application.class.parent_name %></a>
64       </div>
65
66       <div class="collapse navbar-collapse">
67         <ul class="nav navbar-nav navbar-left breadcrumbs">
68           <% if current_user %>
69             <% if content_for?(:breadcrumbs) %>
70               <%= yield(:breadcrumbs) %>
71             <% else %>
72               <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li>
73               <li>
74                 <% if @object and \
75                       ((@name_link and (o = Group.find?(@name_link.tail_uuid)))\
76                        or (o = Group.find?(@object.owner_uuid))) %>
77                   <%= link_to(o.name, folder_path(o.uuid)) %>
78                 <% else %>
79                   <%= link_to(
80                       controller.controller_name.humanize.downcase,
81                       url_for({controller: params[:controller]})) %>
82                 <% end %>
83               </li>
84               <% if params[:action] != 'index' %>
85                 <li class="nav-separator">
86                   <span class="glyphicon glyphicon-arrow-right"></span>
87                 </li>
88                 <li>
89                   <%= link_to_if_arvados_object @object, {friendly_name: true}, {data: {object_uuid: @object.andand.uuid, name: 'name'}} %>
90                 </li>
91               <% end %>
92             <% end %>
93           <% end %>
94         </ul>
95
96         <ul class="nav navbar-nav navbar-right">
97
98           <li>
99             <a><i class="rotating loading glyphicon glyphicon-refresh"></i></a>
100           </li>
101
102           <% if current_user %>
103           <!-- XXX placeholder for this when search is implemented
104           <li>
105             <form class="navbar-form" role="search">
106               <div class="input-group" style="width: 220px">
107                 <input type="text" class="form-control" placeholder="search">
108                 <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
109               </div>
110             </form>
111           </li>
112           -->
113
114           <li class="dropdown notification-menu">
115             <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="collections-menu">
116               <span class="glyphicon glyphicon-paperclip"></span>
117               <span class="badge" id="persistent-selection-count"></span>
118               <span class="caret"></span>
119             </a>
120               <ul class="dropdown-menu" role="menu" id="persistent-selection-list">
121                 <%= form_tag '/actions' do %>
122                 <%= hidden_field_tag 'uuid', @object.andand.uuid %>
123                 <div id="selection-form-content"></div>
124                 <% end %>
125             </ul>
126           </li>
127
128           <% if current_user.is_active %>
129           <li class="dropdown notification-menu">
130             <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="notifications-menu">
131               <span class="glyphicon glyphicon-envelope"></span>
132               <span class="badge badge-alert notification-count"><%= @notification_count %></span>
133               <span class="caret"></span>
134             </a>
135             <ul class="dropdown-menu" role="menu">
136               <% if (@notifications || []).length > 0 %>
137                 <% @notifications.each_with_index do |n, i| %>
138                   <% if i > 0 %><li class="divider"></li><% end %>
139                   <li class="notification"><%= n.call(self) %></li>
140                 <% end %>
141               <% else %>
142                 <li class="notification empty">No notifications.</li>
143               <% end %>
144             </ul>
145           </li>
146           <% end %>
147
148           <li class="dropdown">
149             <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="user-menu">
150               <span class="glyphicon glyphicon-user"></span><span class="caret"></span>
151             </a>
152             <ul class="dropdown-menu" role="menu">
153               <li role="presentation" class="dropdown-header"><%= current_user.email %></li>
154               <% if current_user.is_active %>
155               <li role="presentation" class="divider"></li>
156               <li role="presentation"><a href="/authorized_keys" role="menuitem"><i class="fa fa-key fa-fw"></i> Manage ssh keys</a></li>
157               <li role="presentation"><a href="/api_client_authorizations" role="menuitem"><i class="fa fa-ticket fa-fw"></i> Manage API tokens</a></li>
158               <li role="presentation" class="divider"></li>
159               <% end %>
160               <li role="presentation"><a href="<%= logout_path %>" role="menuitem"><i class="fa fa-sign-out fa-fw"></i> Log out</a></li>
161             </ul>
162           </li>
163
164           <% if current_user.is_active %>
165             <li class="dropdown">
166               <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="system-menu">
167                 <span class="glyphicon glyphicon-cog"></span><span class="caret"></span>
168               </a>
169               <ul class="dropdown-menu" role="menu">
170                 <li role="presentation" class="dropdown-header">
171                   <i class="fa fa-lg fa-fw"></i>
172                   System tools
173                 </li>
174                 <li role="presentation" class="divider"></li>
175                 <li role="presentation"><a href="/repositories">
176                     <i class="fa fa-lg fa-code-fork fa-fw"></i> Repositories
177                 </a></li>
178                 <li role="presentation"><a href="/virtual_machines">
179                     <i class="fa fa-lg fa-terminal fa-fw"></i> Virtual machines
180                 </a></li>
181                 <li role="presentation"><a href="/links">
182                     <i class="fa fa-lg fa-arrows-h fa-fw"></i> Links
183                 </a></li>
184                 <% if current_user.andand.is_admin %>
185                   <li role="presentation"><a href="/users">
186                       <i class="fa fa-lg fa-user fa-fw"></i> Users
187                   </a></li>
188                 <% end %>
189                 <li role="presentation"><a href="/groups">
190                     <i class="fa fa-lg fa-users fa-fw"></i> Groups
191                 </a></li>
192                 <li role="presentation"><a href="/nodes">
193                     <i class="fa fa-lg fa-cloud fa-fw"></i> Compute nodes
194                 </a></li>
195                 <li role="presentation"><a href="/keep_services">
196                     <i class="fa fa-lg fa-exchange fa-fw"></i> Keep services
197                 </a></li>
198                 <li role="presentation"><a href="/keep_disks">
199                     <i class="fa fa-lg fa-hdd-o fa-fw"></i> Keep disks
200                 </a></li>
201               </ul>
202             </li>
203           <% end %>
204           <% else %>
205             <li><a href="<%= arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li>
206           <% end %>
207         </ul>
208       </div><!-- /.navbar-collapse -->
209     </nav>
210
211     <div id="page-wrapper">
212       <%= yield %>
213     </div>
214   </div>
215
216 </div>
217
218   <%= yield :footer_html %>
219   <%= piwik_tracking_tag %>
220   <%= javascript_tag do %>
221   <%= yield :footer_js %>
222   <% end %>
223
224 <div class="modal-container"></div>
225 </body>
226 </html>