SciPost Code Repository

Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
api.html 13.25 KiB
<!--
     IMPORTANT NOTE!!
     This file effectively overrides base file
     rest_framework/templates/rest_framework/base.html
     which is not extended here as per the usual setup.

     Changed:
     title
     style block
     navbar block
     footer added
     script block

     Two things are achieved:
     solve CSP problems by adding nonce to scripts (see block script at bottom)
     enable use of the standard SciPost header/footer as on base site

     THIS FILE NEEDS TO BE UPDATED EACH TIME DRF IS UPDATED IF BASE FILE HAS CHANGED!
-->

{% load static %}
{% load i18n %}
{% load rest_framework %}

{% load render_bundle from webpack_loader %}

<!DOCTYPE html>
<html>
  <head>
    {% block head %}

      {% block meta %}
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="robots" content="NONE,NOARCHIVE" />
      {% endblock %}

      <title>SciPost API</title>

      {% block style %}
	<link rel="stylesheet" href="{% static 'flags/sprite-hq.css' %}">

	{% render_bundle 'api' 'css' %}

	<link rel="shortcut icon" href="{% static 'scipost/images/scipost_favicon.png' %}"/>

        {% block bootstrap_theme %}
	  <!-- <link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap.min.css" %}"/>
               <link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/bootstrap-tweaks.css" %}"/> -->
        {% endblock %}

        <link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/prettify.css" %}"/>
        <link rel="stylesheet" type="text/css" href="{% static "rest_framework/css/default.css" %}"/>
        {% if code_style %}<style>{{ code_style }}</style>{% endif %}
      {% endblock %}

    {% endblock %}
  </head>

  {% block body %}
    <body class="{% block bodyclass %}{% endblock %}">

      <div class="wrapper">
	{% block navbar %}
	  {% include 'scipost/header.html' %}
	  {% include 'scipost/navbar.html' %}
	{% endblock %}

	<div class="container">
          {% block breadcrumbs %}
            <ul class="breadcrumb">
              <li class="breadcrumb-item"><a href="{% url 'api:api' %}">API</a></li>
              {% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
		{% if forloop.last %}
                  <li class="breadcrumb-item active"><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
		{% else %}
                  <li class="breadcrumb-item"><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
		{% endif %}
              {% empty %}
		{% block breadcrumbs_empty %}&nbsp;{% endblock breadcrumbs_empty %}
              {% endfor %}
            </ul>
          {% endblock %}

          <!-- Content -->
          <div id="content" role="main" aria-label="{% trans "content" %}">
            {% block content %}

              <div class="region"  aria-label="{% trans "request form" %}">
		{% block request_forms %}

		  {% if 'GET' in allowed_methods %}
		    <form id="get-form" class="float-end">
		      <fieldset>
			{% if api_settings.URL_FORMAT_OVERRIDE %}
			  <div class="btn-group">
			    <button class="btn btn-primary" data-bs-toggle="tooltip" href="{{ request.get_full_path }}" rel="nofollow" title="Make a GET request on the {{ name }} resource">GET</button>
			    <button class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown">
			      <span class="sr-only" data-bs-toggle="tooltip" title="Specify a format for the GET request"></span>
			    </button>
			    <ul class="dropdown-menu">
			      {% for format in available_formats %}
				<li>
				  <a class="dropdown-item" data-bs-toggle="tooltip" href="{% add_query_param request api_settings.URL_FORMAT_OVERRIDE format %}" rel="nofollow" title="Make a GET request on the {{ name }} resource with the format set to `{{ format }}`">{{ format }}</a>
				</li>
			      {% endfor %}
			    </ul>
			  </div>
			{% else %}
			  <a class="btn btn-primary" data-bs-toggle="tooltip" href="{{ request.get_full_path }}" rel="nofollow" title="Make a GET request on the {{ name }} resource">GET</a>
			{% endif %}
		      </fieldset>
		    </form>
		  {% endif %}

		  {% if options_form %}
		    <form class="button-form" action="{{ request.get_full_path }}" data-method="OPTIONS">
		      <button class="btn btn-primary" data-bs-toggle="tooltip" title="Make an OPTIONS request on the {{ name }} resource">OPTIONS</button>
		    </form>
		  {% endif %}

		  {% if delete_form %}
		    <button class="btn btn-danger button-form" data-bs-toggle="tooltip" title="Make a DELETE request on the {{ name }} resource" data-bs-toggle="modal" data-bs-target="#deleteModal">DELETE</button>

		    <!-- Delete Modal -->
		    <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
		      <div class="modal-dialog">
			<div class="modal-content">
			  <div class="modal-body">
			    <h4 class="text-center">Are you sure you want to delete this {{ name }}?</h4>
			  </div>
			  <div class="modal-footer">
			    <button type="button" class="btn btn-default" data-bs-dismiss="modal">Cancel</button>
			    <form class="button-form" action="{{ request.get_full_path }}" data-method="DELETE">
			      <button class="btn btn-danger">Delete</button>
			    </form>
			  </div>
			</div>
		      </div>
		    </div>
		  {% endif %}

		  {% if extra_actions %}
		    <div class="dropdown" style="float: right; margin-right: 10px">
		      <button class="btn btn-info dropdown-toggle" id="extra-actions-menu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
			{% trans "Extra Actions" %}
		      </button>
		      <ul class="dropdown-menu" aria-labelledby="extra-actions-menu">
			{% for action_name, url in extra_actions|items %}
			  <li><a class="dropdown-item" href="{{ url }}">{{ action_name }}</a></li>
			{% endfor %}
		      </ul>
		    </div>
		  {% endif %}

		  {% if filter_form %}
		    <button data-bs-toggle="modal" data-bs-target="#filtersModal" class="btn btn-outline-secondary button-form">
		      <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-wrench" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
			<path fill-rule="evenodd" d="M.102 2.223A3.004 3.004 0 0 0 3.78 5.897l6.341 6.252A3.003 3.003 0 0 0 13 16a3 3 0 1 0-.851-5.878L5.897 3.781A3.004 3.004 0 0 0 2.223.1l2.141 2.142L4 4l-1.757.364L.102 2.223zm13.37 9.019L13 11l-.471.242-.529.026-.287.445-.445.287-.026.529L11 13l.242.471.026.529.445.287.287.445.529.026L13 15l.471-.242.529-.026.287-.445.445-.287.026-.529L15 13l-.242-.471-.026-.529-.445-.287-.287-.445-.529-.026z"/>
		      </svg>
		      {% trans "Filters" %}
		    </button>
		  {% endif %}

		{% endblock request_forms %}
              </div>

              <div class="content-main" role="main"  aria-label="{% trans "main content" %}">
		<div class="page-header mt-3">
                  <h1 class="align-text-top">{{ name }}</h1>
		</div>
		<div style="float:left">
                  {% block description %}
                    {{ description }}
                  {% endblock %}
		</div>

		{% if paginator %}
                  <nav style="float: right">
                    {% get_pagination_html paginator %}
                  </nav>
		{% endif %}

		<div class="request-info" style="clear: both" aria-label="{% trans "request info" %}">
                  <pre class="prettyprint"><b>{{ request.method }}</b> {{ request.get_full_path }}</pre>
		</div>

		<div class="response-info" aria-label="{% trans "response info" %}">
                  <pre class="prettyprint"><span class="meta nocode"><b>HTTP {{ response.status_code }} {{ response.status_text }}</b>{% for key, val in response_headers|items %}
		    <b>{{ key }}:</b> <span class="lit">{{ val|break_long_headers|urlize }}</span>{% endfor %}

		  </span>{{ content|urlize }}</pre>
		</div>
              </div>

              {% if display_edit_forms %}
		{% if post_form or raw_data_post_form %}
                  <div {% if post_form %}class="tabbable"{% endif %}>
                    {% if post_form %}
                      <ul class="nav nav-tabs justify-content-end" role="tablist">
			<li class="nav-item" role="presentation">
                          <a class="nav-link active" name='html-tab' href="#post-object-form" data-bs-toggle="tab" role="tab">HTML form</a>
			</li>
			<li class="nav-item" role="presentation">
                          <a class="nav-link" name='raw-tab' href="#post-generic-content-form" data-bs-toggle="tab" role="tab">Raw data</a>
			</li>
                      </ul>
                    {% endif %}

                    <div class="tab-content p-4 bg-light border">
                      {% if post_form %}
			<div class="tab-pane active" id="post-object-form" role="tabpanel">
                          {% with form=post_form %}
                            <form action="{{ request.get_full_path }}" method="POST" enctype="multipart/form-data" novalidate>
                              <fieldset>
				{% csrf_token %}
				{{ post_form }}
				<div class="form-actions">
                                  <button class="btn btn-primary" data-bs-toggle="tooltip" title="Make a POST request on the {{ name }} resource">POST</button>
				</div>
                              </fieldset>
                            </form>
                          {% endwith %}
			</div>
                      {% endif %}

                      <div {% if post_form %}class="tab-pane"{% endif %} id="post-generic-content-form" role="tabpanel">
			{% with form=raw_data_post_form %}
                          <form action="{{ request.get_full_path }}" method="POST">
                            <fieldset>
                              {% include "rest_framework/raw_data_form.html" %}
                              <div class="form-actions">
				<button class="btn btn-primary" data-bs-toggle="tooltip" title="Make a POST request on the {{ name }} resource">POST</button>
                              </div>
                            </fieldset>
                          </form>
			{% endwith %}
                      </div>
                    </div>
                  </div>
		{% endif %}

		{% if put_form or raw_data_put_form or raw_data_patch_form %}
                  <div {% if put_form %}class="tabbable"{% endif %}>
                    {% if put_form %}
                      <ul class="nav nav-tabs justify-content-end" role="tablist">
			<li class="nav-item" role="presentation">
                          <a class="nav-link active" name='html-tab' href="#put-object-form" data-bs-toggle="tab" role="tab">HTML form</a>
			</li>
			<li class="nav-item" role="presentation">
                          <a class="nav-link" name='raw-tab' href="#put-generic-content-form" data-bs-toggle="tab" role="tab">Raw data</a>
			</li>
                      </ul>
                    {% endif %}

                    <div class="tab-content p-4 bg-light border">
                      {% if put_form %}
			<div class="tab-pane active" id="put-object-form" role="tabpanel">
                          <form action="{{ request.get_full_path }}" data-method="PUT" enctype="multipart/form-data" novalidate>
                            <fieldset>
                              {{ put_form }}
                              <div class="form-actions">
				<button class="btn btn-primary" data-bs-toggle="tooltip" title="Make a PUT request on the {{ name }} resource">PUT</button>
                              </div>
                            </fieldset>
                          </form>
			</div>
                      {% endif %}

                      <div {% if put_form %}class="tab-pane"{% endif %} id="put-generic-content-form" role="tabpanel">
			{% with form=raw_data_put_or_patch_form %}
                          <form action="{{ request.get_full_path }}" data-method="PUT">
                            <fieldset>
                              {% include "rest_framework/raw_data_form.html" %}
                              <div class="form-actions">
				{% if raw_data_put_form %}
                                  <button class="btn btn-primary" data-bs-toggle="tooltip" title="Make a PUT request on the {{ name }} resource">PUT</button>
				{% endif %}
				{% if raw_data_patch_form %}
				  <button data-method="PATCH" class="btn btn-primary" data-bs-toggle="tooltip" title="Make a PATCH request on the {{ name }} resource">PATCH</button>
                                {% endif %}
                              </div>
                            </fieldset>
                          </form>
			{% endwith %}
                      </div>
                    </div>
                  </div>
		{% endif %}
              {% endif %}
            {% endblock content %}
          </div><!-- /.content -->
	</div><!-- /.container -->

	{% include 'scipost/footer.html' %}

      </div><!-- ./wrapper -->

      {% if filter_form %}
	{{ filter_form }}
      {% endif %}

      {% block script %}
	<script type="text/plain" id="drf_csrf_header_name">
	 {{ csrf_header_name|default:'X-CSRFToken' }}
	</script>
	<script type="text/plain" id="drf_csrf_token">
	 {% if request %}{{ csrf_token }}{% endif %}
	</script>
	<!-- <script src="{% static "rest_framework/js/csrf.js" %}"></script> Moved to api.js -->
	<script src="{% static "rest_framework/js/prettify-min.js" %}"></script>
	<!-- <script src="{% static "rest_framework/js/default.js" %}"></script> Moved to api.js-->
      {% endblock %}
      {% render_bundle 'api' 'js' %}

    </body>
  {% endblock %}
</html>