From 4bac38e67b3062431b638c07f2e6b743cc23897d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=20V=C3=AEjdea?= Date: Mon, 10 Sep 2018 01:39:43 +0300 Subject: [PATCH] Update ReDoc settings --- docs/changelog.rst | 1 + docs/settings.rst | 26 +++++++++++++++++----- src/drf_yasg/app_settings.py | 4 +++- src/drf_yasg/renderers.py | 6 ++++- src/drf_yasg/static/drf-yasg/redoc-init.js | 19 +++++++++------- 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index ff83e52..832a721 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -10,6 +10,7 @@ Changelog *Release date: Sep 10, 2018* - **ADDED:** added the ``SPEC_URL`` setting for controlling the download link in ``swagger-ui`` and ``ReDoc`` +- **ADDED:** updated ``ReDoc`` settings (added ``NATIVE_SCROLLBARS`` and ``REQUIRED_PROPS_FIRST``) - **IMPROVED:** updated ``swagger-ui`` to version 3.18.2 - **IMPROVED:** updated ``ReDoc`` to version 2.0.0-alpha.37 - **FIXED:** stopped generating invalid OpenAPI by improper placement of ``readOnly`` Schemas diff --git a/docs/settings.rst b/docs/settings.rst index 311df1b..a4000da 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -27,7 +27,7 @@ Example: } REDOC_SETTINGS = { - 'LAZY_RENDERING': True, + 'LAZY_RENDERING': False, ... } @@ -356,26 +356,40 @@ URL which serves the UI; see :ref:`note on URL settings ` above. LAZY_RENDERING -------------- -**Default**: :python:`True` |br| -*Maps to attribute*: ``lazy-rendering`` +**NOTE:** this feature might be removed in future versions of ReDoc (see https://github.com/Rebilly/ReDoc/issues/475) + +**Default**: :python:`False` |br| +*Maps to attribute*: ``lazyRendering`` HIDE_HOSTNAME ------------- **Default**: :python:`False` |br| -*Maps to attribute*: ``hide-hostname`` +*Maps to attribute*: ``hideHostname`` EXPAND_RESPONSES ---------------- **Default**: :python:`'all'` |br| -*Maps to attribute*: ``expand-responses`` +*Maps to attribute*: ``expandResponses`` PATH_IN_MIDDLE -------------- **Default**: :python:`False` |br| -*Maps to attribute*: ``path-in-middle-panel`` +*Maps to attribute*: ``pathInMiddlePanel`` + +NATIVE_SCROLLBARS +----------------- + +**Default**: :python:`False` |br| +*Maps to attribute*: ``nativeScrollbars`` + +REQUIRED_PROPS_FIRST +-------------------- + +**Default**: :python:`False` |br| +*Maps to attribute*: ``requiredPropsFirst`` .. _FORCE_SCRIPT_NAME: https://docs.djangoproject.com/en/2.0/ref/settings/#force-script-name diff --git a/src/drf_yasg/app_settings.py b/src/drf_yasg/app_settings.py index 69e6262..901f46c 100644 --- a/src/drf_yasg/app_settings.py +++ b/src/drf_yasg/app_settings.py @@ -67,10 +67,12 @@ SWAGGER_DEFAULTS = { REDOC_DEFAULTS = { 'SPEC_URL': None, - 'LAZY_RENDERING': True, + 'LAZY_RENDERING': False, 'HIDE_HOSTNAME': False, 'EXPAND_RESPONSES': 'all', 'PATH_IN_MIDDLE': False, + 'NATIVE_SCROLLBARS': False, + 'REQUIRED_PROPS_FIRST': False, } IMPORT_STRINGS = [ diff --git a/src/drf_yasg/renderers.py b/src/drf_yasg/renderers.py index bf92fed..680201a 100644 --- a/src/drf_yasg/renderers.py +++ b/src/drf_yasg/renderers.py @@ -1,3 +1,5 @@ +import warnings + import six from django.shortcuts import render, resolve_url @@ -157,7 +159,9 @@ class ReDocRenderer(_UIRenderer): 'lazyRendering': redoc_settings.LAZY_RENDERING, 'hideHostname': redoc_settings.HIDE_HOSTNAME, 'expandResponses': redoc_settings.EXPAND_RESPONSES, - 'pathInMiddle': redoc_settings.PATH_IN_MIDDLE, + 'pathInMiddlePanel': redoc_settings.PATH_IN_MIDDLE, + 'nativeScrollbars': redoc_settings.NATIVE_SCROLLBARS, + 'requiredPropsFirst': redoc_settings.REQUIRED_PROPS_FIRST, } return filter_none(data) diff --git a/src/drf_yasg/static/drf-yasg/redoc-init.js b/src/drf_yasg/static/drf-yasg/redoc-init.js index 70f6f1b..b45a2e3 100644 --- a/src/drf_yasg/static/drf-yasg/redoc-init.js +++ b/src/drf_yasg/static/drf-yasg/redoc-init.js @@ -7,19 +7,22 @@ var redoc = document.createElement("redoc"); var redocSettings = JSON.parse(document.getElementById('redoc-settings').innerHTML); if (redocSettings.url) { specURL = redocSettings.url; + delete redocSettings.url; } redoc.setAttribute("spec-url", specURL); -if (redocSettings.lazyRendering) { - redoc.setAttribute("lazy-rendering", ''); +function camelToKebab(str) { + return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); } -if (redocSettings.pathInMiddle) { - redoc.setAttribute("path-in-middle-panel", ''); + +for (var p in redocSettings) { + if (redocSettings.hasOwnProperty(p)) { + if (redocSettings[p] !== null && redocSettings[p] !== undefined && redocSettings[p] !== false) { + redoc.setAttribute(camelToKebab(p), redocSettings[p].toString()); + } + } } -if (redocSettings.hideHostname) { - redoc.setAttribute("hide-hostname", ''); -} -redoc.setAttribute("expand-responses", redocSettings.expandResponses); + document.body.appendChild(redoc); function hideEmptyVersion() {