Convert SwaggerUI.js and introduce JSHint
This commit is contained in:
2
.jshintignore
Normal file
2
.jshintignore
Normal file
@@ -0,0 +1,2 @@
|
||||
dist
|
||||
lib
|
||||
30
.jshintrc
Normal file
30
.jshintrc
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"node": true,
|
||||
"browser": true,
|
||||
"esnext": true,
|
||||
"bitwise": true,
|
||||
"curly": true,
|
||||
"eqeqeq": true,
|
||||
"immed": true,
|
||||
"indent": 2,
|
||||
"latedef": false,
|
||||
"newcap": true,
|
||||
"noarg": true,
|
||||
"quotmark": "single",
|
||||
"regexp": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"strict": true,
|
||||
"trailing": true,
|
||||
"smarttabs": true,
|
||||
"globals": {
|
||||
"Backbone": false,
|
||||
"_": false,
|
||||
"$": false,
|
||||
"marked": false,
|
||||
"HeaderView": false,
|
||||
"MainView": false,
|
||||
"Docs": false,
|
||||
"SwaggerClient": false
|
||||
}
|
||||
}
|
||||
190
src/main/coffeescript/SwaggerUi.js
Normal file
190
src/main/coffeescript/SwaggerUi.js
Normal file
@@ -0,0 +1,190 @@
|
||||
'use strict';
|
||||
|
||||
var SwaggerUi = Backbone.Router.extend({
|
||||
|
||||
dom_id: 'swagger_ui',
|
||||
|
||||
// Attributes
|
||||
options: null,
|
||||
api: null,
|
||||
headerView: null,
|
||||
mainView: null,
|
||||
|
||||
// SwaggerUi accepts all the same options as SwaggerApi
|
||||
initialize: function(options) {
|
||||
options = options || {};
|
||||
|
||||
// Allow dom_id to be overridden
|
||||
if (options.dom_id) {
|
||||
this.dom_id = options.dom_id;
|
||||
delete options.dom_id;
|
||||
}
|
||||
|
||||
if (!options.supportedSubmitMethods){
|
||||
options.supportedSubmitMethods = [
|
||||
'get',
|
||||
'put',
|
||||
'post',
|
||||
'delete',
|
||||
'head',
|
||||
'options',
|
||||
'patch'
|
||||
];
|
||||
}
|
||||
|
||||
// Create an empty div which contains the dom_id
|
||||
if (! $('#' + this.dom_id)){
|
||||
$('body').append('<div id="' + this.dom_id + '"></div>') ;
|
||||
}
|
||||
|
||||
this.options = options;
|
||||
|
||||
// set marked options
|
||||
marked.setOptions({gfm: true});
|
||||
|
||||
// Set the callbacks
|
||||
this.options.success = function() { return this.render(); };
|
||||
this.options.progress = function(d) { return this.showMessage(d); };
|
||||
this.options.failure = function(d) { return this.onLoadFailure(d); };
|
||||
|
||||
// Create view to handle the header inputs
|
||||
this.headerView = new HeaderView({el: $('#header')});
|
||||
|
||||
// Event handler for when the baseUrl/apiKey is entered by user
|
||||
this.headerView.on('update-swagger-ui', function(data) {
|
||||
return this.updateSwaggerUi(data);
|
||||
});
|
||||
},
|
||||
|
||||
// Set an option after initializing
|
||||
setOption: function(option, value) {
|
||||
this.options[option] = value;
|
||||
},
|
||||
|
||||
// Get the value of a previously set option
|
||||
getOption(option) {
|
||||
return this.options[option];
|
||||
},
|
||||
|
||||
// Event handler for when url/key is received from user
|
||||
updateSwaggerUi: function(data){
|
||||
this.options.url = data.url;
|
||||
this.load();
|
||||
},
|
||||
|
||||
// Create an api and render
|
||||
load: function(){
|
||||
// Initialize the API object
|
||||
if (this.mainView) {
|
||||
this.mainView.clear();
|
||||
}
|
||||
var url = this.options.url;
|
||||
if (url && url.indexOf('http') !== 0) {
|
||||
url = this.buildUrl(window.location.href.toString(), url);
|
||||
}
|
||||
|
||||
this.options.url = url;
|
||||
this.headerView.update(url);
|
||||
|
||||
this.api = new SwaggerClient(this.options);
|
||||
},
|
||||
|
||||
// collapse all sections
|
||||
collapseAll: function(){
|
||||
Docs.collapseEndpointListForResource('');
|
||||
},
|
||||
|
||||
// list operations for all sections
|
||||
listAll: function(){
|
||||
Docs.collapseOperationsForResource('');
|
||||
},
|
||||
|
||||
// expand operations for all sections
|
||||
expandAll: function(){
|
||||
Docs.expandOperationsForResource('');
|
||||
},
|
||||
|
||||
// This is bound to success handler for SwaggerApi
|
||||
// so it gets called when SwaggerApi completes loading
|
||||
render: function(){
|
||||
this.showMessage('Finished Loading Resource Information. Rendering Swagger UI...');
|
||||
this.mainView = new MainView({
|
||||
model: this.api,
|
||||
el: $('#' + this.dom_id),
|
||||
swaggerOptions: this.options
|
||||
}).render();
|
||||
this.showMessage();
|
||||
switch (this.options.docExpansion) {
|
||||
case 'full':
|
||||
this.expandAll(); break;
|
||||
case 'list':
|
||||
this.listAll(); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this.renderGFM();
|
||||
|
||||
if (this.options.onComplete){
|
||||
this.options.onComplete(this.api, this);
|
||||
}
|
||||
|
||||
setTimeout(Docs.shebang.bind(this), 100);
|
||||
},
|
||||
|
||||
buildUrl: function(base, url){
|
||||
if (url.indexOf('/') === 0) {
|
||||
var parts = base.split('/');
|
||||
base = parts[0] + '//' + parts[2];
|
||||
return base + url;
|
||||
} else {
|
||||
var endOfPath = base.length;
|
||||
|
||||
if (base.indexOf('?') > -1){
|
||||
endOfPath = Math.min(endOfPath, base.indexOf('?'));
|
||||
}
|
||||
|
||||
if (base.indexOf('#') > -1){
|
||||
endOfPath = Math.min(endOfPath, base.indexOf('#'));
|
||||
}
|
||||
|
||||
base = base.substring(0, endOfPath);
|
||||
|
||||
if (base.indexOf('/', base.length - 1 ) !== -1){
|
||||
return base + url;
|
||||
}
|
||||
|
||||
return base + '/' + url;
|
||||
}
|
||||
},
|
||||
|
||||
// Shows message on topbar of the ui
|
||||
showMessage: function(data = ''){
|
||||
$('#message-bar').removeClass('message-fail');
|
||||
$('#message-bar').addClass('message-success');
|
||||
$('#message-bar').html(data);
|
||||
},
|
||||
|
||||
// shows message in red
|
||||
onLoadFailure: function(data = ''){
|
||||
$('#message-bar').removeClass('message-success');
|
||||
$('#message-bar').addClass('message-fail');
|
||||
|
||||
var val = $('#message-bar').html(data);
|
||||
|
||||
if (this.options.onFailure) {
|
||||
this.options.onFailure(data);
|
||||
}
|
||||
|
||||
return val;
|
||||
},
|
||||
|
||||
// Renders GFM for elements with 'markdown' class
|
||||
renderGFM: function(){
|
||||
$('.markdown').each(function(){
|
||||
$(this).html(marked($(this).html()));
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
window.SwaggerUi = SwaggerUi;
|
||||
Reference in New Issue
Block a user