updated to v2
This commit is contained in:
79
src/main/coffeescript/SwaggerUi.coffee
Normal file
79
src/main/coffeescript/SwaggerUi.coffee
Normal file
@@ -0,0 +1,79 @@
|
||||
class SwaggerUi extends Backbone.Router
|
||||
# Routes
|
||||
routes:
|
||||
'' : 'load'
|
||||
# Defaults
|
||||
dom_id: "swagger_ui"
|
||||
|
||||
# Attributes
|
||||
options: null
|
||||
api: null
|
||||
headerView: null
|
||||
mainView: null
|
||||
|
||||
# SwaggerUi accepts all the same options as SwaggerApi
|
||||
initialize: (options={}) ->
|
||||
Backbone.history.start pushState: true
|
||||
|
||||
# Allow dom_id to be overridden
|
||||
if options.dom_id?
|
||||
@dom_id = options.dom_id
|
||||
delete options.dom_id
|
||||
|
||||
# Create an empty div which contains the dom_id
|
||||
$('body').append('<div id="' + @dom_id + '"></div>') if not $('#' + @dom_id)?
|
||||
|
||||
@options = options
|
||||
|
||||
# Set the callbacks
|
||||
@options.success = => @render()
|
||||
@options.progress = (d) => @showMessage(d)
|
||||
@options.failure = (d) => @onLoadFailure(d)
|
||||
|
||||
# Create view to handle the header inputs
|
||||
@headerView = new HeaderView({el: $('#header')})
|
||||
|
||||
# Event handler for when the baseUrl/apiKey is entered by user
|
||||
@headerView.on 'update-swagger-ui', (data) => @updateSwaggerUi(data)
|
||||
|
||||
@load()
|
||||
|
||||
# Event handler for when url/key is received from user
|
||||
updateSwaggerUi: (data) ->
|
||||
@options.discoveryUrl = data.discoveryUrl
|
||||
@options.apiKey = data.apiKey
|
||||
@load()
|
||||
|
||||
# Create an api and render
|
||||
load: ->
|
||||
# Initialize the API object
|
||||
@mainView?.clear()
|
||||
@headerView.update(@options.discoveryUrl, @options.apiKey)
|
||||
@api = new SwaggerApi(@options)
|
||||
|
||||
# This is bound to success handler for SwaggerApi
|
||||
# so it gets called when SwaggerApi completes loading
|
||||
render: ->
|
||||
@showMessage('Finished Loading Resource Information. Rendering Swagger UI...')
|
||||
@mainView = new MainView({model: @api, el: $('#' + @dom_id)}).render()
|
||||
@showMessage()
|
||||
setTimeout(
|
||||
=>
|
||||
Docs.shebang()
|
||||
400
|
||||
)
|
||||
|
||||
# Shows message on topbar of the ui
|
||||
showMessage: (data = '') ->
|
||||
$('#message-bar').removeClass 'message-fail'
|
||||
$('#message-bar').addClass 'message-success'
|
||||
$('#message-bar').html data
|
||||
|
||||
# shows message in red
|
||||
onLoadFailure: (data = '') ->
|
||||
$('#message-bar').removeClass 'message-success'
|
||||
$('#message-bar').addClass 'message-fail'
|
||||
$('#message-bar').html data
|
||||
|
||||
|
||||
window.SwaggerUi = SwaggerUi
|
||||
38
src/main/coffeescript/view/HeaderView.coffee
Normal file
38
src/main/coffeescript/view/HeaderView.coffee
Normal file
@@ -0,0 +1,38 @@
|
||||
class HeaderView extends Backbone.View
|
||||
events: {
|
||||
'click #show-pet-store-icon' : 'showPetStore'
|
||||
'click #show-wordnik-dev-icon' : 'showWordnikDev'
|
||||
'click #explore' : 'showCustom'
|
||||
'keyup #input_baseUrl' : 'showCustomOnKeyup'
|
||||
'keyup #input_apiKey' : 'showCustomOnKeyup'
|
||||
}
|
||||
|
||||
initialize: ->
|
||||
|
||||
|
||||
showPetStore: (e) ->
|
||||
@trigger(
|
||||
'update-swagger-ui'
|
||||
{discoveryUrl:"http://petstore.swagger.wordnik.com/api/resources.json", apiKey:"special-key"}
|
||||
)
|
||||
|
||||
showWordnikDev: (e) ->
|
||||
@trigger(
|
||||
'update-swagger-ui'
|
||||
{discoveryUrl:"http://api.wordnik.com/v4/resources.json", apiKey:"b39ee8d5f05d0f566a0080b4c310ceddf5dc5f7606a616f53"}
|
||||
)
|
||||
|
||||
showCustomOnKeyup: (e) ->
|
||||
@showCustom() if e.keyCode is 13
|
||||
|
||||
showCustom: (e) ->
|
||||
e?.preventDefault()
|
||||
@trigger(
|
||||
'update-swagger-ui'
|
||||
{discoveryUrl: $('#input_baseUrl').val(), apiKey: $('#input_apiKey').val()}
|
||||
)
|
||||
|
||||
update: (url, apiKey, trigger = false) ->
|
||||
$('#input_baseUrl').val url
|
||||
$('#input_apiKey').val apiKey
|
||||
@trigger 'update-swagger-ui', {discoveryUrl:url, apiKey:apiKey} if trigger
|
||||
18
src/main/coffeescript/view/MainView.coffee
Normal file
18
src/main/coffeescript/view/MainView.coffee
Normal file
@@ -0,0 +1,18 @@
|
||||
class MainView extends Backbone.View
|
||||
initialize: ->
|
||||
|
||||
render: ->
|
||||
# Render the outer container for resources
|
||||
$(@el).html(Handlebars.templates.main(@model))
|
||||
|
||||
# Render each resource
|
||||
@addResource resource for resource in @model.resourcesArray
|
||||
@
|
||||
|
||||
addResource: (resource) ->
|
||||
# Render a resource and add it to resources li
|
||||
resourceView = new ResourceView({model: resource, tagName: 'li', id: 'resource_' + resource.name, className: 'resource'})
|
||||
$('#resources').append resourceView.render().el
|
||||
|
||||
clear: ->
|
||||
$(@el).html ''
|
||||
109
src/main/coffeescript/view/OperationView.coffee
Normal file
109
src/main/coffeescript/view/OperationView.coffee
Normal file
@@ -0,0 +1,109 @@
|
||||
class OperationView extends Backbone.View
|
||||
events: {
|
||||
'click .submit' : 'submitOperation'
|
||||
'click .response_hider' : 'hideResponse'
|
||||
'click .toggleOperation' : 'toggleOperationContent'
|
||||
}
|
||||
|
||||
initialize: ->
|
||||
|
||||
render: ->
|
||||
$(@el).html(Handlebars.templates.operation(@model))
|
||||
|
||||
# Render each parameter
|
||||
@addParameter param for param in @model.parameters
|
||||
@
|
||||
|
||||
addParameter: (param) ->
|
||||
# Render a parameter
|
||||
paramView = new ParameterView({model: param, tagName: 'tr', readOnly: !@model.isGetMethod})
|
||||
$('.operation-params', $(@el)).append paramView.render().el
|
||||
|
||||
submitOperation: ->
|
||||
# Check for errors
|
||||
form = $('.sandbox', $(@el))
|
||||
error_free = true
|
||||
form.find("input.required").each ->
|
||||
$(@).removeClass "error"
|
||||
if jQuery.trim($(@).val()) is ""
|
||||
$(@).addClass "error"
|
||||
$(@).wiggle
|
||||
callback: => $(@).focus()
|
||||
error_free = false
|
||||
|
||||
# if error free submit it
|
||||
if error_free
|
||||
map = {}
|
||||
for o in form.serializeArray()
|
||||
if(o.value? && jQuery.trim(o.value).length > 0)
|
||||
map[o.name] = o.value
|
||||
|
||||
headerParams = null
|
||||
invocationUrl =
|
||||
if @model.supportHeaderParams()
|
||||
headerParams = @model.getHeaderParams(map)
|
||||
@model.urlify(map, false)
|
||||
else
|
||||
@model.urlify(map, true)
|
||||
|
||||
log 'submitting ' + invocationUrl
|
||||
|
||||
|
||||
$(".request_url", $(@el)).html "<pre>" + invocationUrl + "</pre>"
|
||||
$(".response_throbber", $(@el)).show()
|
||||
|
||||
obj =
|
||||
type: @model.httpMethod
|
||||
url: invocationUrl
|
||||
headers: headerParams
|
||||
# data: JSON.stringify(@body)
|
||||
dataType: 'json'
|
||||
error: (xhr, textStatus, error) =>
|
||||
@showErrorStatus(xhr, textStatus, error)
|
||||
success: (data) =>
|
||||
@showResponse(data)
|
||||
complete: (data) =>
|
||||
@showCompleteStatus(data)
|
||||
|
||||
obj.contentType = "application/json" if (obj.type.toLowerCase() == "post" or obj.type.toLowerCase() == "put")
|
||||
|
||||
jQuery.ajax(obj)
|
||||
# $.getJSON(invocationUrl, (r) => @showResponse(r)).complete((r) => @showCompleteStatus(r)).error (r) => @showErrorStatus(r)
|
||||
|
||||
# handler for hide response link
|
||||
hideResponse: (e) ->
|
||||
e?.preventDefault()
|
||||
$(".response", $(@el)).slideUp()
|
||||
$(".response_hider", $(@el)).fadeOut()
|
||||
|
||||
|
||||
# Show response from server
|
||||
showResponse: (response) ->
|
||||
prettyJson = JSON.stringify(response, null, "\t").replace(/\n/g, "<br>")
|
||||
$(".response_body", $(@el)).html prettyJson
|
||||
|
||||
|
||||
# Show error from server
|
||||
showErrorStatus: (data) ->
|
||||
@showStatus data
|
||||
|
||||
# show the status codes
|
||||
showCompleteStatus: (data) ->
|
||||
@showStatus data
|
||||
|
||||
# puts the response data in UI
|
||||
showStatus: (data) ->
|
||||
try
|
||||
response_body = "<pre>" + JSON.stringify(JSON.parse(data.responseText), null, 2).replace(/\n/g, "<br>") + "</pre>"
|
||||
catch error
|
||||
response_body = "<span style='color:red'> [unable to parse as json; raw response below]</span><br><pre>" + data.responseText + "</pre>"
|
||||
$(".response_code", $(@el)).html "<pre>" + data.status + "</pre>"
|
||||
$(".response_body", $(@el)).html response_body
|
||||
$(".response_headers", $(@el)).html "<pre>" + data.getAllResponseHeaders() + "</pre>"
|
||||
$(".response", $(@el)).slideDown()
|
||||
$(".response_hider", $(@el)).show()
|
||||
$(".response_throbber", $(@el)).hide()
|
||||
|
||||
toggleOperationContent: ->
|
||||
elem = $('#' + @model.resourceName + "_" + @model.nickname + "_" + @model.httpMethod + "_content");
|
||||
if elem.is(':visible') then Docs.collapseOperation(elem) else Docs.expandOperation(elem)
|
||||
23
src/main/coffeescript/view/ParameterView.coffee
Normal file
23
src/main/coffeescript/view/ParameterView.coffee
Normal file
@@ -0,0 +1,23 @@
|
||||
class ParameterView extends Backbone.View
|
||||
initialize: ->
|
||||
|
||||
render: ->
|
||||
template = @template()
|
||||
$(@el).html(template(@model))
|
||||
@
|
||||
|
||||
# Return an appropriate template based on if the parameter is a list, readonly, required
|
||||
template: ->
|
||||
if @model.isList
|
||||
Handlebars.templates.param_list
|
||||
else
|
||||
if @options.readOnly
|
||||
if @model.required
|
||||
Handlebars.templates.param_readonly_required
|
||||
else
|
||||
Handlebars.templates.param_readonly
|
||||
else
|
||||
if @model.required
|
||||
Handlebars.templates.param_required
|
||||
else
|
||||
Handlebars.templates.param
|
||||
14
src/main/coffeescript/view/ResourceView.coffee
Normal file
14
src/main/coffeescript/view/ResourceView.coffee
Normal file
@@ -0,0 +1,14 @@
|
||||
class ResourceView extends Backbone.View
|
||||
initialize: ->
|
||||
|
||||
render: ->
|
||||
$(@el).html(Handlebars.templates.resource(@model))
|
||||
|
||||
# Render each operation
|
||||
@addOperation operation for operation in @model.operationsArray
|
||||
@
|
||||
|
||||
addOperation: (operation) ->
|
||||
# Render an operation and add it to operations li
|
||||
operationView = new OperationView({model: operation, tagName: 'li', className: 'endpoint'})
|
||||
$('.endpoints', $(@el)).append operationView.render().el
|
||||
Reference in New Issue
Block a user