<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
{% extends "main.html" %}
{% block head %}  
{% endblock %}

{% block container %}
<!-- Static navbar -->
    <div class="navbar navbar-default" role="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".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="{% url 'op_tasks:task_list' %}">XDATA Online</a>
        </div>
        <div class="navbar-collapse collapse">          
          <ul class="nav navbar-nav navbar-right">
            <li><p class="navbar-text">Signed in as {{user.username}}</p></li>
            <li><p class="navbar-brand">|</a></li>
            <li><a href="{% url 'op_tasks:logout' %}">Sign out</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div><!--/.container-fluid -->
    </div>

    <div class="container-fluid">
      <div class="row">
        <div class="col-md-3 sidebar">

          {% if user.is_staff %}
          <div class="panel panel-default">
            <div class="panel-heading">
              <b class="panel-title">
                Admininstration
                <span class="label label-warning">Beta</span>
              </b>
            </div>
            <div class="panel-body">
              <a href="{% url 'exp_portal:home' %}">Experiment Portal</a><br>
              <a href="{% url 'developer:home' %}">Developer Portal</a><br>
            </div>
          </div>
          {% endif %}

          <div class="panel panel-default">
            <div class="panel-heading">
              <b class="panel-title">Navigation</b>
            </div>
            <div class="panel-body">
              <a href="{% url 'op_tasks:task_list' %}">Task List</a><br>
              <a href="{% url 'op_tasks:instruct' %}">Instructions</a><br>
              <a href="{% url 'op_tasks:view_profile' %}">Manage user profile</a><br>
            </div>
          </div> 

          {% block side_block %}
          {% endblock %}

        </div>
        <div class="col-md-9 main">
          {% block content %} 
          {% endblock %}
        </div>
      </div>
    </div>
    
{% endblock %}
