{% extends "../layout.html" %}

{% comment %}
Copyright (C) 2018-2021  The Software Heritage developers
See the AUTHORS file at the top-level directory of this distribution
License: GNU Affero General Public License version 3, or any later version
See top-level LICENSE file for more information
{% endcomment %}

{% load render_bundle from webpack_loader %}
{% load static %}

{% block title %}{{ heading }} &ndash; Software Heritage archive{% endblock %}

{% block header %}
{% render_bundle 'save' %}
{% endblock %}

{% block navbar-content %}
<h4>Save code now</h4>
{% endblock %}

{% block content %}

<p class="mt-3">
  You can contribute to extend the content of the Software Heritage archive by submitting an origin
  save request. To do so, fill the required info in the form below:
</p>

<form id="swh-save-origin-form" class="needs-validation" novalidate>
  {% csrf_token %}
  <div class="form-row">
    <div class="col-md-1"></div>
    <div class="form-group col-md-2">
      <label for="swh-input-visit-type">Origin type</label>
      <select id="swh-input-visit-type" class="form-control" required onchange="swh.save.maybeRequireExtraInputs();">
        {% for visit_type in visit_types %}
          <option value="{{ visit_type }}">{{ visit_type }}</option>
        {% endfor %}
      </select>
      <div class="invalid-feedback">The origin type must be specified</div>
    </div>
    <div class="form-group col-md-6">
      <label for="swh-input-origin-url">Origin url</label>
      <input type="text" class="form-control" id="swh-input-origin-url" oninput="swh.save.validateSaveOriginUrl(this)" required>
      <div class="invalid-feedback">The origin url is not valid or does not reference a code repository</div>
    </div>
    <div class="col-md-2">
      <div class="form-group">
        <label for="swh-input-origin-save-submit">&#8203;</label>
        <button type="submit" id="swh-input-origin-save-submit" class="btn btn-default btn-block">Submit</button>
      </div>
    </div>
  </div>
  <!-- extra help text for the 'archives' type, hidden by default -->
  <p id="swh-save-origin-archives-help" class="swh-save-origin-archives-form" style="display: none;">
    The <code>archives</code> visit type enables to save multiple source code archive files (*.tar.gz, *.zip)
    under a same software origin. <br/>
    For each archive file to save, the source code will then be available inside a branch named
    <code>releases/&lt;version&gt;</code> from the snapshot generated by Software Heritage.<br/>
    All archive files previously saved under the software origin will always be available in
    each snapshot generated by a new visit.<br>
    Please use the form below to add such artifacts to save before submitting a request.
  </p>
</form>
<div class="swh-processing-save-request text-center" style="display: none;">
  <img src="{% static 'img/swh-spinner.gif' %}">
  <p>Processing "save code now" request ...</p>
</div>
<div id="swh-origin-save-request-status">
</div>

<ul class="nav nav-tabs" style="padding-left: 5px;">
  <li class="nav-item"><a class="nav-link active" data-toggle="tab" id="swh-origin-save-request-help-tab" href="#swh-origin-save-requests-create">Help</a></li>
  <li class="nav-item"><a class="nav-link" data-toggle="tab" id="swh-origin-save-requests-list-tab" href="#swh-origin-save-requests-list">Browse save requests</a></li>
</ul>

<div class="tab-content">
  <div id="swh-origin-save-requests-create" class="tab-pane active">
    <p style="margin-top: 1rem;">A "Save code now" request takes the following parameters:</p>
    <ul>
      <li><b>Origin type:</b> the type of version control system the software origin is using.
        Currently, the supported types are:
        <ul>
          <li><code>git</code>, for origins using <a href="https://git-scm.com/">Git</a></li>
          <li><code>hg</code>, for origins using <a href="https://www.mercurial-scm.org/">Mercurial</a></li>
          <li><code>svn</code>, for origins using <a href="https://subversion.apache.org/">Subversion</a></li>
          {% if "cvs" in visit_types %}
            <li><code>cvs</code>, for origins using <a href="http://cvs.nongnu.org/">CVS</a></li>
          {% endif %}
        </ul>
      </li>
      <li><b>Origin url:</b> the url of the remote repository for the software origin.<br/>
        In order to avoid saving errors from Software Heritage, you should provide the clone/checkout url
        as given by the provider hosting the software origin. <br/>It can easily be found in the
        web interface used to browse the software origin. <br/>For instance, if you want to save a <code>git</code>
        origin into the archive, you should check that the command <code>$ git clone &lt;origin_url&gt;</code><br/>
        does not return an error before submitting a request.
      </li>
    </ul>
    <p>
      Once submitted, your save request can either be:
    </p>
    <ul>
      <li><b>accepted:</b> a visit to the provided origin will then be scheduled by Software Heritage in order to
        load its content into the archive as soon as possible</li>
      <li><b>rejected:</b> the provided origin url is blacklisted and no visit will be scheduled</li>
      <li>put in <b>pending</b> state: a manual review will then be performed in order to determine if the
        origin can be safely loaded or not into the archive</li>
    </ul>
    <p>
      Once a save request has been accepted, you can follow its current status in the
      <a id="swh-show-origin-save-requests-list" href="#swh-origin-save-requests-list">submitted save requests list</a>.
      <br/>
      If you submitted requests while <a href="{% url 'oidc-login' %}">authenticated</a>, you will be able
      to only display your own requests.
    </p>

  </div>

  <div id="swh-origin-save-requests-list" class="tab-pane mt-3">
    <table id="swh-origin-save-requests" class="table swh-table swh-table-striped" width="100%">
      <thead>
        <tr>
          <th data-priority="3">Date</th>
          <th data-priority="4">Type</th>
          <th data-priority="1">Url</th>
          <th data-priority="5">Request</th>
          <th data-priority="2">Status</th>
          <th data-priority="6">Info</th>
          <th data-priority="7"></th>
        </tr>
      </thead>
    </table>
    <p id="swh-origin-save-request-list-error"></p>
  </div>
</div>

<script>
  swh.webapp.initPage('origin-save');
  swh.save.initOriginSave();
</script>

{% endblock %}
