Commit 4d5e846c by Carlton Gibson Committed by GitHub

Merge pull request #5334 from Woile/woile-nested-docs-fix

Fix docs multiple nested and multiple methods
parents 4e08abb6 a1546cc2
...@@ -2,6 +2,14 @@ var responseDisplay = 'data' ...@@ -2,6 +2,14 @@ var responseDisplay = 'data'
var coreapi = window.coreapi var coreapi = window.coreapi
var schema = window.schema var schema = window.schema
function normalizeKeys (arr) {
var _normarr = [];
for (var i = 0; i < arr.length; i++) {
_normarr = _normarr.concat(arr[i].split(' > '));
}
return _normarr;
}
function normalizeHTTPHeader (str) { function normalizeHTTPHeader (str) {
// Capitalize HTTP headers for display. // Capitalize HTTP headers for display.
return (str.charAt(0).toUpperCase() + str.substring(1)) return (str.charAt(0).toUpperCase() + str.substring(1))
...@@ -94,7 +102,7 @@ $(function () { ...@@ -94,7 +102,7 @@ $(function () {
var $requestAwaiting = $form.find('.request-awaiting') var $requestAwaiting = $form.find('.request-awaiting')
var $responseRaw = $form.find('.response-raw') var $responseRaw = $form.find('.response-raw')
var $responseData = $form.find('.response-data') var $responseData = $form.find('.response-data')
var key = $form.data('key') var key = normalizeKeys($form.data('key'))
var params = {} var params = {}
var entries = formEntries($form.get()[0]) var entries = formEntries($form.get()[0])
...@@ -212,7 +220,6 @@ $(function () { ...@@ -212,7 +220,6 @@ $(function () {
} }
var client = new coreapi.Client(options) var client = new coreapi.Client(options)
client.action(schema, key, params).then(function (data) { client.action(schema, key, params).then(function (data) {
var response = JSON.stringify(data, null, 2) var response = JSON.stringify(data, null, 2)
$requestAwaiting.addClass('hide') $requestAwaiting.addClass('hide')
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</a></h2> </a></h2>
{% endif %} {% endif %}
{% for link_key, link in section.links|items %} {% for link_key, link in section|schema_links|items %}
{% include "rest_framework/docs/link.html" %} {% include "rest_framework/docs/link.html" %}
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
......
{% load rest_framework %} {% load rest_framework %}
<!-- Modal --> <!-- Modal -->
<div class="modal fade api-modal" id="{{ section_key }}_{{ link_key }}_modal" tabindex="-1" role="dialog" aria-labelledby="api explorer modal"> <div class="modal fade api-modal" id="{{ section_key }}_{{ link_key|slugify }}_modal" tabindex="-1" role="dialog" aria-labelledby="api explorer modal">
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
......
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
class="btn btn-sm btn-success" class="btn btn-sm btn-success"
style="float: right; margin-top: 20px" style="float: right; margin-top: 20px"
data-toggle="modal" data-toggle="modal"
data-target="#{{ section_key }}_{{ link_key }}_modal"> data-target="#{{ section_key }}_{{ link_key|slugify }}_modal">
<i class="fa fa-exchange"></i> Interact <i class="fa fa-exchange"></i> Interact
</button> </button>
<h3 id="{{ section_key }}-{{ link_key }}" class="coredocs-link-title">{{ link.title|default:link_key }} <a href="#{{ section_key }}-{{ link_key }}"><i class="fa fa-link" aria-hidden="true"></i> <h3 id="{{ section_key }}-{{ link_key|slugify }}" class="coredocs-link-title">{{ link.title|default:link_key }} <a href="#{{ section_key }}-{{ link_key|slugify }}"><i class="fa fa-link" aria-hidden="true"></i>
</a></h3> </a></h3>
<div class="meta"> <div class="meta">
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
<li data-toggle="collapse" data-target="#{{ section_key }}-dropdown" class="collapsed"> <li data-toggle="collapse" data-target="#{{ section_key }}-dropdown" class="collapsed">
<a><i class="fa fa-dot-circle-o fa-lg"></i> {% if section_key %}{{ section_key }}{% else %}API Endpoints{% endif %} <span class="arrow"></span></a> <a><i class="fa fa-dot-circle-o fa-lg"></i> {% if section_key %}{{ section_key }}{% else %}API Endpoints{% endif %} <span class="arrow"></span></a>
<ul class="sub-menu {% if section_key %}collapse{% endif %}" id="{{ section_key }}-dropdown"> <ul class="sub-menu {% if section_key %}collapse{% endif %}" id="{{ section_key }}-dropdown">
{% for link_key, link in section.links|items %} {% for link_key, link in section|schema_links|items %}
<li><a href="#{{ section_key }}-{{ link_key }}">{{ link.title|default:link_key }}</a></li> <li><a href="#{{ section_key }}-{{ link_key|slugify }}">{{ link.title|default:link_key }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
</li> </li>
......
...@@ -245,6 +245,29 @@ def items(value): ...@@ -245,6 +245,29 @@ def items(value):
@register.filter @register.filter
def schema_links(section, sec_key=None):
"""
Recursively find every link in a schema, even nested.
"""
NESTED_FORMAT = '%s > %s' # this format is used in docs/js/api.js:normalizeKeys
links = section.links
if section.data:
data = section.data.items()
for sub_section_key, sub_section in data:
new_links = schema_links(sub_section, sec_key=sub_section_key)
links.update(new_links)
if sec_key is not None:
new_links = OrderedDict()
for link_key, link in links.items():
new_key = NESTED_FORMAT % (sec_key, link_key)
new_links.update({new_key: link})
return new_links
return links
@register.filter
def add_nested_class(value): def add_nested_class(value):
if isinstance(value, dict): if isinstance(value, dict):
return 'class=nested' return 'class=nested'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment