mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-30 05:01:10 +02:00
add static files
This commit is contained in:
321
static/rest_framework/docs/js/api.js
Normal file
321
static/rest_framework/docs/js/api.js
Normal file
@ -0,0 +1,321 @@
|
||||
var responseDisplay = 'data'
|
||||
var coreapi = window.coreapi
|
||||
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) {
|
||||
// Capitalize HTTP headers for display.
|
||||
return (str.charAt(0).toUpperCase() + str.substring(1))
|
||||
.replace(/-(.)/g, function ($1) {
|
||||
return $1.toUpperCase()
|
||||
})
|
||||
.replace(/(Www)/g, function ($1) {
|
||||
return 'WWW'
|
||||
})
|
||||
.replace(/(Xss)/g, function ($1) {
|
||||
return 'XSS'
|
||||
})
|
||||
.replace(/(Md5)/g, function ($1) {
|
||||
return 'MD5'
|
||||
})
|
||||
}
|
||||
|
||||
function formEntries (form) {
|
||||
// Polyfill for new FormData(form).entries()
|
||||
var formData = new FormData(form)
|
||||
if (formData.entries !== undefined) {
|
||||
return Array.from(formData.entries())
|
||||
}
|
||||
|
||||
var entries = []
|
||||
|
||||
for (var i = 0; i < form.elements.length; i++) {
|
||||
var element = form.elements[i]
|
||||
|
||||
if (!element.name) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (element.type === 'file') {
|
||||
for (var j = 0; j < element.files.length; j++) {
|
||||
entries.push([element.name, element.files[j]])
|
||||
}
|
||||
} else if (element.type === 'select-multiple' || element.type === 'select-one') {
|
||||
for (var j = 0; j < element.selectedOptions.length; j++) {
|
||||
entries.push([element.name, element.selectedOptions[j].value])
|
||||
}
|
||||
} else if (element.type === 'checkbox') {
|
||||
if (element.checked) {
|
||||
entries.push([element.name, element.value])
|
||||
}
|
||||
} else {
|
||||
entries.push([element.name, element.value])
|
||||
}
|
||||
}
|
||||
|
||||
return entries
|
||||
}
|
||||
|
||||
$(function () {
|
||||
var $selectedAuthentication = $('#selected-authentication')
|
||||
var $authControl = $('#auth-control')
|
||||
var $authTokenModal = $('#auth_token_modal')
|
||||
var $authBasicModal = $('#auth_basic_modal')
|
||||
var $authSessionModal = $('#auth_session_modal')
|
||||
|
||||
// Language Control
|
||||
$('#language-control li').click(function (event) {
|
||||
event.preventDefault()
|
||||
var $languageMenuItem = $(this).find('a')
|
||||
var $languageControls = $(this).closest('ul').find('li')
|
||||
var $languageControlLinks = $languageControls.find('a')
|
||||
var language = $languageMenuItem.data('language')
|
||||
|
||||
$languageControlLinks.not('[data-language="' + language + '"]').parent().removeClass('active')
|
||||
$languageControlLinks.filter('[data-language="' + language + '"]').parent().addClass('active')
|
||||
|
||||
$('#selected-language').text(language)
|
||||
|
||||
var $codeBlocks = $('pre.highlight')
|
||||
$codeBlocks.not('[data-language="' + language + '"]').addClass('hide')
|
||||
$codeBlocks.filter('[data-language="' + language + '"]').removeClass('hide')
|
||||
})
|
||||
|
||||
// API Explorer
|
||||
$('form.api-interaction').submit(function (event) {
|
||||
event.preventDefault()
|
||||
|
||||
var $form = $(this).closest('form')
|
||||
var $requestMethod = $form.find('.request-method')
|
||||
var $requestUrl = $form.find('.request-url')
|
||||
var $toggleView = $form.closest('.modal-content').find('.toggle-view')
|
||||
var $responseStatusCode = $form.find('.response-status-code')
|
||||
var $meta = $form.find('.meta')
|
||||
var $responseRawResponse = $form.find('.response-raw-response')
|
||||
var $requestAwaiting = $form.find('.request-awaiting')
|
||||
var $responseRaw = $form.find('.response-raw')
|
||||
var $responseData = $form.find('.response-data')
|
||||
var key = normalizeKeys($form.data('key'))
|
||||
var params = {}
|
||||
var entries = formEntries($form.get()[0])
|
||||
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
var entry = entries[i]
|
||||
var paramKey = entry[0]
|
||||
var paramValue = entry[1]
|
||||
var $elem = $form.find('[name="' + paramKey + '"]')
|
||||
var dataType = $elem.data('type') || 'string'
|
||||
|
||||
if (dataType === 'integer' && paramValue) {
|
||||
var value = parseInt(paramValue)
|
||||
if (!isNaN(value)) {
|
||||
params[paramKey] = value
|
||||
}
|
||||
} else if (dataType === 'number' && paramValue) {
|
||||
var value = parseFloat(paramValue)
|
||||
if (!isNaN(value)) {
|
||||
params[paramKey] = value
|
||||
}
|
||||
} else if (dataType === 'boolean' && paramValue) {
|
||||
var value = {
|
||||
'true': true,
|
||||
'false': false
|
||||
}[paramValue.toLowerCase()]
|
||||
if (value !== undefined) {
|
||||
params[paramKey] = value
|
||||
}
|
||||
} else if (dataType === 'array' && paramValue) {
|
||||
try {
|
||||
params[paramKey] = JSON.parse(paramValue)
|
||||
} catch (err) {
|
||||
// Ignore malformed JSON
|
||||
}
|
||||
} else if (dataType === 'object' && paramValue) {
|
||||
try {
|
||||
params[paramKey] = JSON.parse(paramValue)
|
||||
} catch (err) {
|
||||
// Ignore malformed JSON
|
||||
}
|
||||
} else if (dataType === 'string' && paramValue) {
|
||||
params[paramKey] = paramValue
|
||||
}
|
||||
}
|
||||
|
||||
$form.find(':checkbox').each(function (index) {
|
||||
// Handle unselected checkboxes
|
||||
var name = $(this).attr('name')
|
||||
if (!params.hasOwnProperty(name)) {
|
||||
params[name] = false
|
||||
}
|
||||
})
|
||||
|
||||
function requestCallback (request) {
|
||||
// Fill in the "GET /foo/" display.
|
||||
var parser = document.createElement('a')
|
||||
parser.href = request.url
|
||||
var method = request.options.method
|
||||
var path = parser.pathname + parser.hash + parser.search
|
||||
|
||||
$requestMethod.text(method)
|
||||
$requestUrl.text(path)
|
||||
}
|
||||
|
||||
function responseCallback (response, responseText) {
|
||||
// Display the 'Data'/'Raw' control.
|
||||
$toggleView.removeClass('hide')
|
||||
|
||||
// Fill in the "200 OK" display.
|
||||
$responseStatusCode.removeClass('label-success').removeClass('label-danger')
|
||||
if (response.ok) {
|
||||
$responseStatusCode.addClass('label-success')
|
||||
} else {
|
||||
$responseStatusCode.addClass('label-danger')
|
||||
}
|
||||
$responseStatusCode.text(response.status)
|
||||
$meta.removeClass('hide')
|
||||
|
||||
// Fill in the Raw HTTP response display.
|
||||
var panelText = 'HTTP/1.1 ' + response.status + ' ' + response.statusText + '\n'
|
||||
response.headers.forEach(function (header, key) {
|
||||
panelText += normalizeHTTPHeader(key) + ': ' + header + '\n'
|
||||
})
|
||||
if (responseText) {
|
||||
panelText += '\n' + responseText
|
||||
}
|
||||
$responseRawResponse.text(panelText)
|
||||
}
|
||||
|
||||
// Instantiate a client to make the outgoing request.
|
||||
var options = {
|
||||
requestCallback: requestCallback,
|
||||
responseCallback: responseCallback
|
||||
}
|
||||
|
||||
// Setup authentication options.
|
||||
if (window.auth && window.auth.type === 'token') {
|
||||
// Header authentication
|
||||
options.auth = new coreapi.auth.TokenAuthentication({
|
||||
scheme: window.auth.scheme,
|
||||
token: window.auth.token
|
||||
})
|
||||
} else if (window.auth && window.auth.type === 'basic') {
|
||||
// Basic authentication
|
||||
options.auth = new coreapi.auth.BasicAuthentication({
|
||||
username: window.auth.username,
|
||||
password: window.auth.password
|
||||
})
|
||||
} else if (window.auth && window.auth.type === 'session') {
|
||||
// Session authentication
|
||||
options.auth = new coreapi.auth.SessionAuthentication({
|
||||
csrfCookieName: 'csrftoken',
|
||||
csrfHeaderName: 'X-CSRFToken'
|
||||
})
|
||||
}
|
||||
|
||||
var client = new coreapi.Client(options)
|
||||
client.action(schema, key, params).then(function (data) {
|
||||
var response = JSON.stringify(data, null, 2)
|
||||
$requestAwaiting.addClass('hide')
|
||||
$responseRaw.addClass('hide')
|
||||
$responseData.addClass('hide').text('').jsonView(response)
|
||||
|
||||
if (responseDisplay === 'data') {
|
||||
$responseData.removeClass('hide')
|
||||
} else {
|
||||
$responseRaw.removeClass('hide')
|
||||
}
|
||||
}).catch(function (error) {
|
||||
var response = JSON.stringify(error.content, null, 2)
|
||||
$requestAwaiting.addClass('hide')
|
||||
$responseRaw.addClass('hide')
|
||||
$responseData.addClass('hide').text('').jsonView(response)
|
||||
|
||||
if (responseDisplay === 'data') {
|
||||
$responseData.removeClass('hide')
|
||||
} else {
|
||||
$responseRaw.removeClass('hide')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// 'Data'/'Raw' control
|
||||
$('.toggle-view button').click(function () {
|
||||
var $modalContent = $(this).closest('.modal-content')
|
||||
var $modalResponseRaw = $modalContent.find('.response-raw')
|
||||
var $modalResponseData = $modalContent.find('.response-data')
|
||||
|
||||
responseDisplay = $(this).data('display-toggle')
|
||||
|
||||
$(this).removeClass('btn-default').addClass('btn-info').siblings().removeClass('btn-info')
|
||||
|
||||
if (responseDisplay === 'raw') {
|
||||
$modalResponseRaw.removeClass('hide')
|
||||
$modalResponseData.addClass('hide')
|
||||
} else {
|
||||
$modalResponseData.removeClass('hide')
|
||||
$modalResponseRaw.addClass('hide')
|
||||
}
|
||||
})
|
||||
|
||||
// Authentication: none
|
||||
$authControl.find("[data-auth='none']").click(function (event) {
|
||||
event.preventDefault()
|
||||
window.auth = null
|
||||
$selectedAuthentication.text('none')
|
||||
$authControl.find("[data-auth]").closest('li').removeClass('active')
|
||||
$authControl.find("[data-auth='none']").closest('li').addClass('active')
|
||||
})
|
||||
|
||||
// Authentication: token
|
||||
$('form.authentication-token-form').submit(function (event) {
|
||||
event.preventDefault()
|
||||
var $form = $(this).closest('form')
|
||||
var scheme = $form.find('input#scheme').val()
|
||||
var token = $form.find('input#token').val()
|
||||
window.auth = {
|
||||
'type': 'token',
|
||||
'scheme': scheme,
|
||||
'token': token
|
||||
}
|
||||
$selectedAuthentication.text('token')
|
||||
$authControl.find("[data-auth]").closest('li').removeClass('active')
|
||||
$authControl.find("[data-auth='token']").closest('li').addClass('active')
|
||||
$authTokenModal.modal('hide')
|
||||
})
|
||||
|
||||
// Authentication: basic
|
||||
$('form.authentication-basic-form').submit(function (event) {
|
||||
event.preventDefault()
|
||||
var $form = $(this).closest('form')
|
||||
var username = $form.find('input#username').val()
|
||||
var password = $form.find('input#password').val()
|
||||
window.auth = {
|
||||
'type': 'basic',
|
||||
'username': username,
|
||||
'password': password
|
||||
}
|
||||
$selectedAuthentication.text('basic')
|
||||
$authControl.find("[data-auth]").closest('li').removeClass('active')
|
||||
$authControl.find("[data-auth='basic']").closest('li').addClass('active')
|
||||
$authBasicModal.modal('hide')
|
||||
})
|
||||
|
||||
// Authentication: session
|
||||
$('form.authentication-session-form').submit(function (event) {
|
||||
event.preventDefault()
|
||||
window.auth = {
|
||||
'type': 'session'
|
||||
}
|
||||
$selectedAuthentication.text('session')
|
||||
$authControl.find("[data-auth]").closest('li').removeClass('active')
|
||||
$authControl.find("[data-auth='session']").closest('li').addClass('active')
|
||||
$authSessionModal.modal('hide')
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user