{% extends "base.html" %}
{% load projecttags %}
{% load humanize %}
{% load static %}

{% block title %} {{layerversion.layer.name}} - {{project.name}} - Toaster {% endblock %}
{% block pagecontent %}

<div class="section">
  <ul class="breadcrumb">
    <li>
      <a href="{% url 'project' project.id %}">{{project.name}}</a>
      <span class="divider">&rarr;</span>
    </li>
    <li><a href="{% url 'projectlayers' project.id %}">Compatible layers</a>
      <span class="divider">&rarr;</span>
    </li>
    <li class="active">
      {{layerversion.layer.name}} ({{layerversion.get_vcs_reference|truncatechars:13}})
    </li>
  </ul>
</div>

{# If this is not an imported layer then hide the edit ui #}
{% if not layerversion.layer_source_id or layerversion.layer_source.sourcetype != layerversion.layer_source.TYPE_IMPORTED %}
<style scoped>
 .icon-pencil {
   display:none;
 }
.delete-current-value{
  display: none;
}
 li .icon-trash {
   display:none;
 }
 .add-deps {
   display:none;
 }
</style>
{% endif %}


<script src="{% static 'js/layerdetails.js' %}"></script>
<script>

  $(document).ready(function (){
    var ctx = {
      xhrUpdateLayerUrl : "{% url 'xhr_updatelayer' %}",
      layerVersion : {
        name : "{{layerversion.layer.name}}",
        id : {{layerversion.id}},
        commit: "{{layerversion.get_vcs_reference}}",
      {%if layerversion.id in projectlayers %}
        inCurrentPrj : true,
      {% else %}
        inCurrentPrj : false,
      {% endif %}
        layerdetailurl : "{% url 'layerdetails' project.id layerversion.id  %}",
        sourceId: {{layerversion.layer_source_id|json}},
      }
    };

    try {
      layerDetailsPageInit(ctx);
    } catch (e) {
      document.write("Sorry, An error has occurred loading this page");
      console.warn(e);
    }
  });
</script>

<div class="row-fluid span11">
  <div class="page-header">
    <h1>{{layerversion.layer.name}} <small class="commit"
          {% if layerversion.get_vcs_reference|length > 13 %}
        data-toggle="tooltip" title="{{layerversion.get_vcs_reference}}"
        {% endif %}>
        ({{layerversion.get_vcs_reference|truncatechars:13}})</small></h1>
  </div>
</div>

<!-- container for tabs -->
<div class="row-fluid span7 tabbable">
  <div class="alert alert-info lead" id="alert-area" style="display:none">
    <button type="button" class="close" id="dismiss-alert">&times;</button>
    <span id="alert-msg"></span>
  </div>
  <ul class="nav nav-pills">
    <li class="active">
      <a data-toggle="tab" href="#information" id="details-tab">Layer details</a>
    </li>
    <li>
      <a data-toggle="tab" href="#recipes" class="muted" id="targets-tab">Recipes (<span class="table-count-recipestable"></span>)</a>
    </li>
    <li>
      <a data-toggle="tab" href="#machines" class="muted" id="machines-tab">Machines (<span class="table-count-machinestable"></span>)</a>
    </li>
  </ul>
  <div class="tab-content">
    <span class="button-place">
      {% if layerversion.id not in projectlayers %}
      <button id="add-remove-layer-btn" data-directive="add" class="btn btn-large btn-block">
        <span class="icon-plus"></span>
        Add the {{layerversion.layer.name}} layer to your project
      </button>
      {% else %}
      <button id="add-remove-layer-btn" data-directive="remove" class="btn btn-block btn-large btn-danger">
        <span class="icon-trash"></span>
        Remove the {{layerversion.layer.name}} layer from your project
      </button>
      {% endif %}
    </span>

    <!-- layer details pane -->
    <div id="information" class="tab-pane active">
      <dl class="dl-horizontal">
        <dt class="">
          <i class="icon-question-sign get-help" title="Fetch/clone URL of the repository"></i>
          Repository URL
        </dt>
        <dd>
          <span class="current-value">{{layerversion.layer.vcs_url}}</span>
          {% if layerversion.get_vcs_link_url %}
          <a href="{{layerversion.get_vcs_link_url}}/" class="icon-share get-info" target="_blank"></a>
          {% endif %}
          <form id="change-repo-form" class="control-group" style="display:none">
            <div class="input-append">
              <input type="text" class="input-xlarge" value="{{layerversion.layer.vcs_url}}">
                <button data-layer-prop="vcs_url" class="btn change-btn" type="button">Save</button>
                <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a>
              </div>
            </form>
            <i class="icon-pencil" ></i>
          </dd>
          <dt>
            <i class="icon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></i>
            Repository subdirectory
          </dt>
          <dd>
            <span class="muted" style="display:none">Not set</span>
            <span class="current-value">{{layerversion.dirpath}}</span>
            {% if layerversion.get_vcs_dirpath_link_url %}
            <a href="{{layerversion.get_vcs_dirpath_link_url}}" class="icon-share get-info" target="_blank"></a>
            {% endif %}
            <form id="change-subdir-form" style="display:none;">
              <div class="input-append">
                <input type="text" value="{{layerversion.dirpath}}">
                  <button data-layer-prop="dirpath" class="btn change-btn" type="button">Save</button>
                  <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a>
                </div>
              </form>
              <i id="change-subdir" class="icon-pencil"></i>
              <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
            </dd>
            <dt>
              <i class="icon-question-sign get-help" title="The Git branch, tag or commit"></i>
              Git revision
            </dt>
            <dd>
              <span class="current-value">{{layerversion.get_vcs_reference}}</span>
              <form style="display:none;">
                <div class="input-append">
                  <input type="text" value="{{layerversion.get_vcs_reference}}">
                    <button  data-layer-prop="commit" class="btn change-btn" type="button">Save</button>
                    <a href="#" style="display:none" class="btn btn-link cancel">Cancel</a>
                  </div>
                </form>
                <i class="icon-pencil"></i>
              </dd>
              <dt>
                <i class="icon-question-sign get-help" title="Other layers this layer depends upon"></i>
                Layer dependencies
              </dt>
              <dd>
                <ul class="unstyled current-value" id="layer-deps-list">
                  {% for ld in layerversion.dependencies.all %}
                  <li data-layer-id="{{ld.depends_on.id}}">
                    <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a>
                    <span class="icon-trash " data-toggle="tooltip" title="Delete"></span>
                  </li>
                  {% endfor %}
                </ul>
                <div class="input-append add-deps">
                  <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off"  placeholder="Type a layer name" id="layer-dep-input">
                    <a class="btn" id="add-layer-dependency-btn" >
                      Add layer
                    </a>
                  </div>
                  <span class="help-block add-deps">You can only add layers Toaster knows about</span>
                </dd>
              </dl>
            </div>
            <!-- end layerdetails tab -->
            <!-- targets tab -->
            <div id="recipes" class="tab-pane">
              <!-- Recipe table -->
              <div id="no-recipes-yet" class="alert alert-info" style="display:none">
                <p>Toaster does not have recipe information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
                <p>Toaster learns about layers when you build them. If this layer provides any recipes, they will be listed here after you build the <strong> {{layerversion.layer.name}} </strong> layer.</p>
              </div>



              {% url 'layerrecipestable' project.id layerversion.id  as xhr_table_url %}
              {% with "recipestable" as table_name %}
              {% with "Recipes" as title %}
              {% include 'toastertable-simple.html' %}
              {% endwith %}
              {% endwith %}
            </div>

            <div id="machines" class="tab-pane">

              <div id="no-machines-yet" class="alert alert-info" style="display:none">
                <p>Toaster does not have machine information for the <strong> {{layerversion.layer.name}} </strong> layer.</p>
                <p>Toaster learns about layers when you build them. If this layer provides any machines, they will be listed here after you build the <strong> {{layerversion.layer.name}} </strong> layer.</p>
              </div>


              <!-- Machines table -->
              {% url 'layermachinestable' project.id layerversion.id  as xhr_table_url %}
              {% with "machinestable" as table_name  %}
              {% with "Machines" as title  %}
              {% include 'toastertable-simple.html' %}
              {% endwith %}
              {% endwith %}
            </div>
          </div> <!-- end tab content -->
        </div> <!-- end tabable -->

        <div class="row-fluid span4 well"> <!-- info side panel -->
          <h2>About {{layerversion.layer.name}}</h2>
          <dl class="item-info">

            <dt>
              Summary
              <i class="icon-question-sign get-help" title="One-line description of the layer"></i>
            </dt>
            <dd>
              <span class="muted" style="display:none">Not set</span>
              <span class="current-value">{{layerversion.layer.summary|default_if_none:''}}</span>
              <form style="display:none; margin-bottom:20px">
                <textarea class="span12" rows="2">{% if layerversion.layer.summary %}{{layerversion.layer.summary}}{% endif %}</textarea>
                <button class="btn change-btn" data-layer-prop="summary" type="button">Save</button>
                <a href="#" class="btn btn-link cancel">Cancel</a>
              </form>
              <i class="icon-pencil"></i>
              <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
            </dd>
            <dt>
              Description
            </dt>
            <dd>
              <span class="muted" style="display:none">Not set</span>
              <span class="current-value">{{layerversion.layer.description|default_if_none:''}}</span>
              <form style="display:none; margin-bottom:20px">
                <textarea class="span12" rows="6">{% if layerversion.layer.description %}{{layerversion.layer.description}}{% endif %}</textarea>
                <button class="btn change-btn" data-layer-prop="description" type="button" >Save</button>
                <a href="#" class="btn btn-link cancel">Cancel</a>
              </form>
              <i class="icon-pencil"></i>
              <span class="icon-trash delete-current-value" data-toggle="tooltip" title="Delete"></span>
            </dd>
            {% if layerversion.layer.up_id %}
            <dt>Layer index</dt>
            <dd>
              <a href="http://layers.openembedded.org/layerindex/branch/{{layerversion.up_branch.name}}/layer/{{layerversion.layer.name}}">layer index link</a>

          </dd>
          {% endif %}

        </dl>
      </div>

      {% endblock %}
