157 lines
5.7 KiB
JavaScript
157 lines
5.7 KiB
JavaScript
'use strict';
|
|
|
|
window.onload = function() {
|
|
manageWebbyDisplay();
|
|
|
|
new MutationObserver(function (mutations, self) {
|
|
const op = document.getElementById(`operations-${data.shortName}-${data.operationId}`);
|
|
if (!op) return;
|
|
|
|
self.disconnect();
|
|
|
|
op.querySelector('.opblock-summary-control').click();
|
|
const tryOutObserver = new MutationObserver(function (mutations, self) {
|
|
const tryOut = op.querySelector('.try-out__btn');
|
|
if (!tryOut) return;
|
|
|
|
self.disconnect();
|
|
|
|
tryOut.click();
|
|
if (data.id) {
|
|
const inputId = op.querySelector('.parameters input[placeholder="id"]');
|
|
inputId.value = data.id;
|
|
reactTriggerChange(inputId);
|
|
}
|
|
|
|
for (const input of op.querySelectorAll('.parameters input')) {
|
|
if (input.placeholder in data.queryParameters) {
|
|
input.value = data.queryParameters[input.placeholder];
|
|
reactTriggerChange(input);
|
|
}
|
|
}
|
|
|
|
// Wait input values to be populated before executing the query
|
|
setTimeout(function(){
|
|
op.querySelector('.execute').click();
|
|
op.scrollIntoView();
|
|
}, 500);
|
|
});
|
|
|
|
tryOutObserver.observe(document, {childList: true, subtree: true});
|
|
}).observe(document, {childList: true, subtree: true});
|
|
|
|
const data = JSON.parse(document.getElementById('swagger-data').innerText);
|
|
const ui = SwaggerUIBundle(Object.assign({
|
|
spec: data.spec,
|
|
dom_id: '#swagger-ui',
|
|
validatorUrl: null,
|
|
oauth2RedirectUrl: data.oauth.redirectUrl,
|
|
presets: [
|
|
SwaggerUIBundle.presets.apis,
|
|
SwaggerUIStandalonePreset,
|
|
],
|
|
plugins: [
|
|
SwaggerUIBundle.plugins.DownloadUrl,
|
|
],
|
|
layout: 'StandaloneLayout',
|
|
}, data.extraConfiguration));
|
|
|
|
if (data.oauth.enabled) {
|
|
ui.initOAuth({
|
|
clientId: data.oauth.clientId,
|
|
clientSecret: data.oauth.clientSecret,
|
|
realm: data.oauth.type,
|
|
appName: data.spec.info.title,
|
|
scopeSeparator: ' ',
|
|
additionalQueryStringParams: {},
|
|
usePkceWithAuthorizationCodeGrant: data.oauth.pkce,
|
|
});
|
|
}
|
|
|
|
// Workaround for https://github.com/swagger-api/swagger-ui/issues/3028
|
|
// Adapted from https://github.com/vitalyq/react-trigger-change/blob/master/lib/change.js
|
|
// Copyright (c) 2017 Vitaly Kuznetsov
|
|
// MIT License
|
|
function reactTriggerChange(node) {
|
|
// Do not try to delete non-configurable properties.
|
|
// Value and checked properties on DOM elements are non-configurable in PhantomJS.
|
|
function deletePropertySafe(elem, prop) {
|
|
const desc = Object.getOwnPropertyDescriptor(elem, prop);
|
|
if (desc && desc.configurable) {
|
|
delete elem[prop];
|
|
}
|
|
}
|
|
|
|
// React 16
|
|
// Cache artificial value property descriptor.
|
|
// Property doesn't exist in React <16, descriptor is undefined.
|
|
const descriptor = Object.getOwnPropertyDescriptor(node, 'value');
|
|
|
|
// React 0.14: IE9
|
|
// React 15: IE9-IE11
|
|
// React 16: IE9
|
|
// Dispatch focus.
|
|
const focusEvent = document.createEvent('UIEvents');
|
|
focusEvent.initEvent('focus', false, false);
|
|
node.dispatchEvent(focusEvent);
|
|
|
|
// React 0.14: IE9
|
|
// React 15: IE9-IE11
|
|
// React 16
|
|
// In IE9-10 imperative change of node value triggers propertychange event.
|
|
// Update inputValueTracking cached value.
|
|
// Remove artificial value property.
|
|
// Restore initial value to trigger event with it.
|
|
const initialValue = node.value;
|
|
node.value = initialValue + '#';
|
|
deletePropertySafe(node, 'value');
|
|
node.value = initialValue;
|
|
|
|
// React 15: IE11
|
|
// For unknown reason React 15 added listener for propertychange with addEventListener.
|
|
// This doesn't work, propertychange events are deprecated in IE11,
|
|
// but allows us to dispatch fake propertychange which is handled by IE11.
|
|
const propertychangeEvent = document.createEvent('HTMLEvents');
|
|
propertychangeEvent.initEvent('propertychange', false, false);
|
|
propertychangeEvent.propertyName = 'value';
|
|
node.dispatchEvent(propertychangeEvent);
|
|
|
|
// React 0.14: IE10-IE11, non-IE
|
|
// React 15: non-IE
|
|
// React 16: IE10-IE11, non-IE
|
|
const inputEvent = document.createEvent('HTMLEvents');
|
|
inputEvent.initEvent('input', true, false);
|
|
node.dispatchEvent(inputEvent);
|
|
|
|
// React 16
|
|
// Restore artificial value property descriptor.
|
|
if (descriptor) {
|
|
Object.defineProperty(node, 'value', descriptor);
|
|
}
|
|
}
|
|
|
|
function manageWebbyDisplay() {
|
|
const webby = document.getElementsByClassName('webby')[0];
|
|
if (!webby) return;
|
|
|
|
const web = document.getElementsByClassName('web')[0];
|
|
webby.classList.add('calm');
|
|
web.classList.add('calm');
|
|
webby.addEventListener('click', () => {
|
|
if (webby.classList.contains('frighten')) {
|
|
return;
|
|
}
|
|
webby.classList.replace('calm', 'frighten');
|
|
web.classList.replace('calm', 'frighten');
|
|
setTimeout(() => {
|
|
webby.classList.replace('frighten', 'calm');
|
|
web.classList.replace('frighten', 'calm');
|
|
}, 10000);
|
|
});
|
|
}
|
|
|
|
// Make SwaggerUIBundle and data available for some other scripts
|
|
window.swaggerUI = ui;
|
|
window.swaggerData = data;
|
|
};
|