{% extends "base.html" %}
{% load projecttags %}
{% load humanize %}
{% load static %}
{% block title %} Import layer - {{project.name}} - Toaster {% endblock %}
{% block pagecontent %}

{% include "projecttopbar.html" %}


        {% if project and project.release %}
                  <script src="{% static 'js/layerDepsModal.js' %}"></script>
                  <script src="{% static 'js/importlayer.js' %}"></script>
                  <script>
                    $(document).ready(function (){
                      var ctx = {
                        xhrImportLayerUrl : "{% url 'xhr_importlayer' %}",
                      };

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

                <form class="span11">
                   <fieldset>
                      <legend>Layer repository information</legend>
                      <span class="help-block">The layer you are importing must be compatible with <strong>{{project.release.description}}</strong>, which is the release you are using in this project.</span>
                      <div class="alert alert-error" id="import-error" style="display:none">
                        <button type="button" class="close" data-dismiss="alert">&times;</button>
                        <h3>&nbsp;</h3>
                        <p></p>
                        <ul></ul>
                      </div>

                      <div class="control-group" id="layer-name-ctrl">
                        <label class="control-label air" for="import-layer-name">
                            Layer name
                            <span class="icon-question-sign get-help" title="Something like 'meta-mylayer'. Your layer name must be unique and can only include letters, numbers and dashes"></span>
                        </label>
                        <div class="controls">
                          <input id="import-layer-name" type="text" required autofocus data-autocomplete="off" data-provide="typeahead">
                          <span class="help-inline" style="display: none;" id="invalid-layer-name-hint">A valid layer name can only include letters, numbers and dashes</span>
                          <span class="help-inline" style="display: none;" id="duplicated-layer-name-hint"></span>
                        </div>

                      </div>
                      <div id="duplicate-layer-info" style="display:none">
                        <div class="alert warning">
                          <h3>A layer called <a href="" class="dup-layer-link"><span class="dup-layer-name"></span></a> already exists</h3>
                          <p>Layer names must be unqiue. Please use a different layer name.</p>
                        </div>
                        <dl>
                          <dt>
                            The <span class="dup-layer-name"></span> repository url is
                          </dt>
                          <dd>
                            <span id="dup-layer-vcs-url"></span>
                          </dd>

                          <dt>
                            The <span class="dup-layer-name"></span> revision is
                          </dt>
                          <dd>
                            <span id="dup-layer-revision"></span>
                          </dd>
                        </dl>

                        <p><a href="" class="dup-layer-link">View the <span class="dup-layer-name"></span> layer information</a></p>

                      </div>

                      <div class="fields-apart-from-layer-name">
                        <label for="layer-git-repo-url" class="project-form">
                            Git repository URL
                            <span class="icon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span>
                        </label>

                        <input type="text" id="layer-git-repo-url" class="input-xxlarge" required>
                        <label class="project-form" for="layer-subdir">
                            Repository subdirectory
                            <span class="muted">(optional)</span>
                            <span 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)"></span>
                        </label>
                        <input type="text"  id="layer-subdir">

                          <div class="control-group" id="layer-revision-ctrl">
                            <label class="control-label project-form" for="layer-git-ref">Revision
                              <span class="icon-question-sign get-help" title="You can provide a Git branch, a tag or a commit SHA as the revision"></span>
                            </label>
                            <div class="controls">
                              <input type="text" class="span3" id="layer-git-ref" required>
                                <span class="help-inline" style="diaply:none;" id="invalid-layer-revision-hint"></span>
                            </div>
                          </div>
                       </div>

                    </fieldset>

                    <div class="fields-apart-from-layer-name">
                    <fieldset class="air">
                        <legend>
                            Layer dependencies
                            <span class="muted">(optional)</span>
                            <span class="icon-question-sign get-help heading-help" title="Other layers this layer depends upon"></span>
                        </legend>
                        <ul class="unstyled configuration-list" id="layer-deps-list">
                        </ul>
                        <div class="input-append">
                            <input type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" placeholder="Type a layer name" id="layer-dependency" class="input-xlarge">
                            <a class="btn" id="add-layer-dependency-btn">
                                Add layer
                            </a>
                        </div>
                        <span class="help-inline">You can only add layers Toaster knows about</span>
                    </fieldset>
                    <div class="air" id="form-actions">
                      <button class="btn btn-primary btn-large" data-toggle="modal" id="import-and-add-btn" data-target="#dependencies-message" disabled>Import and add to project</button>
                        <span class="help-inline" id="import-and-add-hint" style="vertical-align: middle;">To import a layer you need to enter a layer name, a Git repository URL and a revision (branch, tag or commit)</span>
                    </div>
                  </div>
                  </form>

          {% else %} {#project and project release#}
                <div class="page-header">
                    <h1>Import layer</h1>
                </div>
                      <div class="alert alert-info" id="import-error" >
                        <h3>Unsupported project type</h3>
                        <p>This project does not support importing layers.</p>
                        <ul></ul>
                      </div>

          {% endif %}
{% endblock %}
