SciPost Code Repository

Skip to content
Snippets Groups Projects
api.html 12.3 KiB
Newer Older
<!--
     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 'base' %}

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

	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <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">
              {% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
		{% if forloop.last %}
                  <li class="active"><a href="{{ breadcrumb_url }}">{{ breadcrumb_name }}</a></li>
		{% else %}
                  <li><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" %}">
		{% if 'GET' in allowed_methods %}
		  <form id="get-form" class="float-right">
		    <fieldset>
		      {% if api_settings.URL_FORMAT_OVERRIDE %}
			<div class="btn-group format-selection">
			  <a class="btn btn-primary js-tooltip" href="{{ request.get_full_path }}" rel="nofollow" title="Make a GET request on the {{ name }} resource">GET</a>
			  <button class="btn btn-primary dropdown-toggle js-tooltip" data-bs-toggle="dropdown" title="Specify a format for the GET request">
			    <span class="caret"></span>
			  </button>
			  <ul class="dropdown-menu">
			    {% for format in available_formats %}
			      <li>
				<a class="js-tooltip format-option" 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 js-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 js-tooltip" title="Make an OPTIONS request on the {{ name }} resource">OPTIONS</button>
		  </form>
		{% endif %}

		{% if delete_form %}
		  <button class="btn btn-danger button-form js-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>
		{% if extra_actions %}
		  <div class="dropdown" style="float: right; margin-right: 10px">
		    <button class="btn btn-default" id="extra-actions-menu" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
		      {% trans "Extra Actions" %}
		      <span class="caret"></span>
		    <ul class="dropdown-menu" aria-labelledby="extra-actions-menu">
		      {% for action_name, url in extra_actions|items %}
			<li><a href="{{ url }}">{{ action_name }}</a></li>
		      {% endfor %}
		    </ul>
		  </div>
		{% endif %}
		{% if filter_form %}
		  <button style="float: right; margin-right: 10px" data-bs-toggle="modal" data-bs-target="#filtersModal" class="btn btn-default">
		    <span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
		    {% trans "Filters" %}
		  </button>
		{% endif %}
              </div>

              <div class="content-main" role="main"  aria-label="{% trans "main content" %}">
		<div class="page-header">
                  <h1>{{ 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><br>{% autoescape off %}{% for key, val in response_headers|items %}<b>{{ key }}:</b> <span class="lit">{{ val|break_long_headers|urlize_quoted_links }}</span><br>{% endfor %}</span><br>{{ content|urlize_quoted_links }}</pre>{% endautoescape %}
		</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 form-switcher">
			<li>
                          <a name='html-tab' href="#post-object-form" data-bs-toggle="tab">HTML form</a>
                          <a name='raw-tab' href="#post-generic-content-form" data-bs-toggle="tab">Raw data</a>
			</li>
                      </ul>
                    {% endif %}

                    <div class="well tab-content">
                      {% if post_form %}
			<div class="tab-pane" id="post-object-form">
                          {% with form=post_form %}
                            <form action="{{ request.get_full_path }}" method="POST" enctype="multipart/form-data" class="form-horizontal" novalidate>
                              <fieldset>
				{% csrf_token %}
				{{ post_form }}
				<div class="form-actions">
                                  <button class="btn btn-primary js-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">
			{% with form=raw_data_post_form %}
                          <form action="{{ request.get_full_path }}" method="POST" class="form-horizontal">
                            <fieldset>
                              {% include "rest_framework/raw_data_form.html" %}
                              <div class="form-actions">
				<button class="btn btn-primary js-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 form-switcher">
			<li>
                          <a name='html-tab' href="#put-object-form" data-bs-toggle="tab">HTML form</a>
                          <a  name='raw-tab' href="#put-generic-content-form" data-bs-toggle="tab">Raw data</a>
			</li>
                      </ul>
                    {% endif %}

                    <div class="well tab-content">
                      {% if put_form %}
			<div class="tab-pane" id="put-object-form">
                          <form action="{{ request.get_full_path }}" data-method="PUT" enctype="multipart/form-data" class="form-horizontal" novalidate>
                            <fieldset>
                              {{ put_form }}
                              <div class="form-actions">
				<button class="btn btn-primary js-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">
			{% with form=raw_data_put_or_patch_form %}
                          <form action="{{ request.get_full_path }}" data-method="PUT" class="form-horizontal">
                            <fieldset>
                              {% include "rest_framework/raw_data_form.html" %}
                              <div class="form-actions">
				{% if raw_data_put_form %}
                                  <button class="btn btn-primary js-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 js-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 nonce="{{ request.csp_nonce }}">
	 window.drf = {
             csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
             csrfToken: "{% if request %}{{ csrf_token }}{% endif %}"
	 };
	</script>
	<!--	<script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/jquery-3.3.1.min.js" %}"></script> -->
	<script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/ajax-form.js" %}"></script>
	<script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/csrf.js" %}"></script>
	<!-- <script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/bootstrap.min.js" %}"></script> -->
	<script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/prettify-min.js" %}"></script>
	<script nonce="{{ request.csp_nonce }}" src="{% static "rest_framework/js/default.js" %}"></script>
	<script nonce="{{ request.csp_nonce }}">
	 $(document).ready(function() {
             $('form').ajaxForm();
	 });
	</script>
    {% endblock %}

  </body>
  {% endblock %}

</html>