<!DOCTYPE html>
{% load static %}
{% load projecttags %}
{% load project_url_tag %}
<html lang="en">
    <head>
        <title>
          {% block title %} Toaster {% endblock %}
        </title>
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" type="text/css"/>
<link rel="stylesheet" href="{% static 'css/bootstrap-responsive.min.css' %}" type='text/css'/>
<link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}" type='text/css'/>
<link rel="stylesheet" href="{% static 'css/prettify.css' %}" type='text/css'/>
<link rel="stylesheet" href="{% static 'css/default.css' %}" type='text/css'/>

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <script src="{% static 'js/jquery-2.0.3.min.js' %}">
    </script>
    <script src="{% static 'js/jquery.cookie.js' %}">
    </script>
    <script src="{% static 'js/bootstrap.min.js' %}">
    </script>
    <script src="{% static 'js/prettify.js' %}">
    </script>
    <script src="{% static 'js/libtoaster.js' %}">
    </script>
    {% if DEBUG %}
    <script>
      libtoaster.debug = true;
    </script>
    {% endif %}
    <script>
      libtoaster.ctx = {
        jsUrl : "{% static 'js/' %}",
        htmlUrl : "{% static 'html/' %}",
        projectsUrl : "{% url 'all-projects' %}",
        projectsTypeAheadUrl: {% url 'xhr_projectstypeahead' as prjurl%}{{prjurl|json}},
        {% if project.id %}
        projectId : {{project.id}},
        projectPageUrl : {% url 'project' project.id as purl %}{{purl|json}},
        projectName : {{project.name|json}},
        projectIsDefault: {% if project.is_default %}true{% else %}false{% endif %},
        recipesTypeAheadUrl: {% url 'xhr_recipestypeahead' project.id as paturl%}{{paturl|json}},
        layersTypeAheadUrl: {% url 'xhr_layerstypeahead' project.id as paturl%}{{paturl|json}},
        machinesTypeAheadUrl: {% url 'xhr_machinestypeahead' project.id as paturl%}{{paturl|json}},

        projectBuildsUrl: {% url 'projectbuilds' project.id as pburl %}{{pburl|json}},
        projectId : {{project.id}},
        {% else %}
        projectId : undefined,
        projectPageUrl : undefined,
        projectName : undefined,
        projectIsDefault: false,
        {% endif %}
      };
    </script>
    <script src="{% static 'js/base.js' %}"></script>
    <script>
      $(document).ready(function () {
        /* Vars needed for base.js */
        var ctx = {};
        ctx.numProjects = {{projects|length}};
        ctx.currentUrl = "{{request.path|escapejs}}";

        basePageInit(ctx);
      });
    </script>

{% block extraheadcontent %}
{% endblock %}
    </head>

<body style="height: 100%">

  {% csrf_token %}
  <div id="loading-notification" class="alert lead text-center" style="display:none">
    Loading <i class="fa-pulse icon-spinner"></i>
  </div>

  <div id="change-notification" class="alert lead alert-info" style="display:none">
    <button type="button" class="close" id="hide-alert">&times;</button>
    <span id="change-notification-msg"></span>
  </div>

    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container-fluid">
          <a class="brand logo" href="#"><img src="{% static 'img/logo.png' %}" class="" alt="Yocto logo project"/></a>
          <span class="brand">
            <a href="/">Toaster</a>
            {% if DEBUG %}
            <i class="icon-info-sign" title="<strong>Toaster version information</strong>" data-content="<dl><dt>Branch</dt><dd>{{TOASTER_BRANCH}}</dd><dt>Revision</dt><dd>{{TOASTER_REVISION}}</dd></dl>"></i>
            {% endif %}
          </span>
          {% if BUILD_MODE and request.resolver_match.url_name != 'landing' and request.resolver_match.url_name != 'newproject' %}
          <ul class="nav">
            <li {% if request.resolver_match.url_name == 'all-builds' %}
                class="active"
                {% endif %}>
              <a href="{% url 'all-builds' %}">
                <i class="icon-tasks"></i>
                All builds
              </a>
            </li>
            <li {% if request.resolver_match.url_name == 'all-projects'  %}
                class="active"
                {% endif %}>
              <a href="{% url 'all-projects' %}">
                <i class="icon-folder-open"></i>
                All projects
              </a>
            </li>
          </ul>
          {% endif %}
          <ul class="nav pull-right">
            <li>
              <a target="_blank" href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html">
                <i class="icon-book"></i>
                Manual
              </a>
            </li>
          </ul>
          <span class="pull-right divider-vertical"></span>

          <!-- new project button; only show in build mode -->
          {% if BUILD_MODE %}
            <div class="btn-group pull-right">
              <a class="btn" id="new-project-button" href="{% url 'newproject' %}">New project</a>
            </div>
          {% endif %}

          <!--
          New build popover; only shown if there is at least one user-created project
          and we're in build mode
          -->
          {% if BUILD_MODE and non_cli_projects.count > 0 %}
            <div class="btn-group pull-right" id="new-build-button" style="display:none">
              <button class="btn dropdown-toggle" data-toggle="dropdown">
                New build
                <i class="icon-caret-down"></i>
              </button>
              <ul class="dropdown-menu new-build multi-select">
                <li>
                  <h3>New build</h3>
                  <h6>
                    Project:
                    <span id="project">
                      {% if project.id and not project.is_default %}
                        <a class="lead" href="{% project_url project %}">{{project.name}}</a>
                      {% else %}
                        <a class="lead" href="#"></a>
                      {% endif %}
                      <i class="icon-pencil"></i>
                    </span>
                  </h6>
                  <form id="change-project-form" style="display:none;">
                    <div class="input-append">
                      <input type="text" class="input-medium" id="project-name-input" placeholder="Type a project name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead"/>
                      <button id="save-project-button" class="btn" type="button">Save</button>
                      <a href="#" id="cancel-change-project" class="btn btn-link" style="display: none">Cancel</a>
                    </div>
                    <p><a id="view-all-projects" href="{% url 'all-projects' %}">View all projects</a></p>
                  </form>
                </li>
                <li>
                  <div class="alert" style="display:none;">
                    <p>This project configuration is incomplete, so you cannot run builds.</p>
                    <p><a href="{% if project.id %}{% url 'project' project.id %}{% endif %}">View project configuration</a></p>
                  </div>
                </li>
                <li id="targets-form">
                  <h6>Recipe(s):</h6>
                  <form>
                    <input type="text" class="input-xlarge build-target-input" placeholder="Type a recipe name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" disabled/>
                    <div class="row-fluid">
                      <button class="btn btn-primary build-button" disabled>Build</button>
                    </div>
                  </form>
                </li>
              </ul>
            </div>
          {% endif %}
    </div>
 </div>
</div>

<div class="container-fluid top-padded">
<div class="row-fluid">
{% block pagecontent %}
{% endblock %}
</div>
</div>
</body>
</html>

