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:
Mohsen Azimi
2015-03-10 00:48:56 -07:00
parent ff5eb6f0f4
commit 7006e86fa5
8 changed files with 96 additions and 57 deletions

View File

@@ -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()

View File

@@ -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 ''

View File

@@ -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) ->

View File

@@ -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

View File

@@ -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