Remove global references to swaggerUi object
By passing parent view as an option to child views, child views can access parent views and eventually can access model of MainView There is alos a new domEl option available for SwaggerUI constructor. User can send domEl instead of dom_id to specifiy which element they want to render to
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
class SwaggerUi extends Backbone.Router
|
||||
|
||||
# Defaults
|
||||
dom_id: "swagger_ui"
|
||||
domEl: $('#swagger_ui')
|
||||
|
||||
# Attributes
|
||||
options: null
|
||||
@@ -13,14 +13,27 @@ class SwaggerUi extends Backbone.Router
|
||||
initialize: (options={}) ->
|
||||
# Allow dom_id to be overridden
|
||||
if options.dom_id?
|
||||
@dom_id = options.dom_id
|
||||
@domEl = $('#' + options.dom_id)
|
||||
delete options.dom_id
|
||||
|
||||
if not options.supportedSubmitMethods?
|
||||
options.supportedSubmitMethods = ['get','put','post','delete','head','options','patch']
|
||||
# Allow domeEl to be specified
|
||||
else if options.domEl?
|
||||
@domEl = options.domEl
|
||||
|
||||
# Create an empty div which contains the dom_id
|
||||
$('body').append('<div id="' + @dom_id + '"></div>') if not $('#' + @dom_id)?
|
||||
if not options.supportedSubmitMethods?
|
||||
options.supportedSubmitMethods = [
|
||||
'get'
|
||||
'put'
|
||||
'post'
|
||||
'delete'
|
||||
'head'
|
||||
'options'
|
||||
'patch'
|
||||
]
|
||||
|
||||
# if domEl is not attached to document append it to <body>
|
||||
if !$.contains(document, @domEl)
|
||||
$('body').append(@domEl)
|
||||
|
||||
@options = options
|
||||
|
||||
@@ -34,11 +47,12 @@ class SwaggerUi extends Backbone.Router
|
||||
@options.failure = (d) =>
|
||||
@onLoadFailure(d)
|
||||
|
||||
# Create view to handle the header inputs
|
||||
@headerView = new HeaderView({el: $('#header')})
|
||||
# Create view to handle the header inputs if there is header element
|
||||
if $('#header').length
|
||||
@headerView = new HeaderView({el: $('#header')})
|
||||
|
||||
# Event handler for when the baseUrl/apiKey is entered by user
|
||||
@headerView.on 'update-swagger-ui', (data) => @updateSwaggerUi(data)
|
||||
# Event handler for when the baseUrl/apiKey is entered by user
|
||||
@headerView.on 'update-swagger-ui', (data) => @updateSwaggerUi(data)
|
||||
|
||||
# Set an option after initializing
|
||||
setOption: (option,value) ->
|
||||
@@ -62,7 +76,8 @@ class SwaggerUi extends Backbone.Router
|
||||
url = @buildUrl(window.location.href.toString(), url)
|
||||
|
||||
@options.url = url
|
||||
@headerView.update(url)
|
||||
if @headerView
|
||||
@headerView.update(url)
|
||||
|
||||
@api = new SwaggerClient(@options)
|
||||
|
||||
@@ -82,7 +97,7 @@ class SwaggerUi extends Backbone.Router
|
||||
# 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), swaggerOptions: @options}).render()
|
||||
@mainView = new MainView({model: @api, el: @domEl, swaggerOptions: @options, router: @}).render()
|
||||
@showMessage()
|
||||
switch @options.docExpansion
|
||||
when "full" then @expandAll()
|
||||
|
||||
@@ -66,9 +66,10 @@ class MainView extends Backbone.View
|
||||
id: 'resource_' + resource.id,
|
||||
className: 'resource',
|
||||
auths: auths,
|
||||
swaggerOptions: @options.swaggerOptions
|
||||
swaggerOptions: @options.swaggerOptions,
|
||||
parent: @
|
||||
})
|
||||
$('#resources').append resourceView.render().el
|
||||
$('#resources', @el).append resourceView.render().el
|
||||
|
||||
clear: ->
|
||||
$(@el).html ''
|
||||
|
||||
@@ -115,7 +115,7 @@ class OperationView extends Backbone.View
|
||||
$(@el).html(Handlebars.templates.operation(@model))
|
||||
|
||||
if signatureModel
|
||||
responseSignatureView = new SignatureView({model: signatureModel, tagName: 'div'})
|
||||
responseSignatureView = new SignatureView({model: signatureModel, tagName: 'div', parent: @})
|
||||
$('.model-signature', $(@el)).append responseSignatureView.render().el
|
||||
else
|
||||
@model.responseClassSignature = 'string'
|
||||
@@ -142,7 +142,7 @@ class OperationView extends Backbone.View
|
||||
contentTypeModel.consumes = 'multipart/form-data'
|
||||
param.type = type
|
||||
|
||||
responseContentTypeView = new ResponseContentTypeView({model: contentTypeModel})
|
||||
responseContentTypeView = new ResponseContentTypeView({model: contentTypeModel, parent: @})
|
||||
$('.response-content-type', $(@el)).append responseContentTypeView.render().el
|
||||
|
||||
# Render each parameter
|
||||
@@ -156,12 +156,12 @@ class OperationView extends Backbone.View
|
||||
addParameter: (param, consumes) ->
|
||||
# Render a parameter
|
||||
param.consumes = consumes
|
||||
paramView = new ParameterView({model: param, tagName: 'tr', readOnly: @model.isReadOnly})
|
||||
paramView = new ParameterView({model: param, tagName: 'tr', readOnly: @model.isReadOnly, parent: @})
|
||||
$('.operation-params', $(@el)).append paramView.render().el
|
||||
|
||||
addStatusCode: (statusCode) ->
|
||||
# Render status codes
|
||||
statusCodeView = new StatusCodeView({model: statusCode, tagName: 'tr'})
|
||||
statusCodeView = new StatusCodeView({model: statusCode, tagName: 'tr', parent: @})
|
||||
$('.operation-status', $(@el)).append statusCodeView.render().el
|
||||
|
||||
submitOperation: (e) ->
|
||||
|
||||
@@ -43,7 +43,8 @@ class ResourceView extends Backbone.View
|
||||
tagName: 'li',
|
||||
className: 'endpoint',
|
||||
swaggerOptions: @options.swaggerOptions,
|
||||
auths: @auths
|
||||
auths: @auths,
|
||||
parent: @
|
||||
})
|
||||
$('.endpoints', $(@el)).append operationView.render().el
|
||||
|
||||
|
||||
@@ -5,11 +5,14 @@ class StatusCodeView extends Backbone.View
|
||||
template = @template()
|
||||
$(@el).html(template(@model))
|
||||
|
||||
if swaggerUi.api.models.hasOwnProperty @model.responseModel
|
||||
models = this.options.parent.options.parent.options.parent.model.models
|
||||
|
||||
if models.hasOwnProperty @model.responseModel
|
||||
models = this.options.parent.options.parent.options.parent.model.models
|
||||
responseModel =
|
||||
sampleJSON: JSON.stringify(swaggerUi.api.models[@model.responseModel].createJSONSample(), null, 2)
|
||||
sampleJSON: JSON.stringify(models[@model.responseModel].createJSONSample(), null, 2)
|
||||
isParam: false
|
||||
signature: swaggerUi.api.models[@model.responseModel].getMockSignature()
|
||||
signature: models[@model.responseModel].getMockSignature()
|
||||
|
||||
responseModelView = new SignatureView({model: responseModel, tagName: 'div'})
|
||||
$('.model-signature', @$el).append responseModelView.render().el
|
||||
|
||||
Reference in New Issue
Block a user