diff --git a/src/main/coffeescript/SwaggerUi.coffee b/src/main/coffeescript/SwaggerUi.coffee
deleted file mode 100644
index 2c03b69a..00000000
--- a/src/main/coffeescript/SwaggerUi.coffee
+++ /dev/null
@@ -1,151 +0,0 @@
-class SwaggerUi extends Backbone.Router
-
- # Defaults
- domEl: $('#swagger_ui')
-
- # Attributes
- options: null
- api: null
- headerView: null
- mainView: null
-
- # SwaggerUi accepts all the same options as SwaggerApi
- initialize: (options={}) ->
- # Allow dom_id to be overridden
- if options.dom_id?
- @domEl = $('#' + options.dom_id)
- delete options.dom_id
-
- # Allow domeEl to be specified
- else if options.domEl?
- @domEl = options.domEl
-
- if not options.supportedSubmitMethods?
- options.supportedSubmitMethods = [
- 'get'
- 'put'
- 'post'
- 'delete'
- 'head'
- 'options'
- 'patch'
- ]
-
- # Make sure this.domeEl is a jQuery element
- @domEl = $(@domEl)
-
- # if domEl is not attached to document append it to
- if !$.contains(document.documentElement, @domEl.get(0))
- $('body').append(@domEl)
-
- @options = options
-
- # set marked options
- marked.setOptions(gfm: true)
-
- # Set the callbacks
- @options.success = =>
- @render()
- @options.progress = (d) => @showMessage(d)
- @options.failure = (d) =>
- @onLoadFailure(d)
-
- # 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)
-
- # Set an option after initializing
- setOption: (option,value) ->
- @options[option] = value
-
- # Get the value of a previously set option
- getOption: (option) ->
- @options[option]
-
- # Event handler for when url/key is received from user
- updateSwaggerUi: (data) ->
- @options.url = data.url
- @load()
-
- # Create an api and render
- load: ->
- # Initialize the API object
- @mainView?.clear()
- url = @options.url
- if url && url.indexOf("http") isnt 0
- url = @buildUrl(window.location.href.toString(), url)
-
- @options.url = url
- if @headerView
- @headerView.update(url)
-
- @api = new SwaggerClient(@options)
-
- # collapse all sections
- collapseAll:() ->
- Docs.collapseEndpointListForResource('')
-
- # list operations for all sections
- listAll:() ->
- Docs.collapseOperationsForResource('')
-
- # expand operations for all sections
- expandAll:() ->
- Docs.expandOperationsForResource('')
-
- # 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: @domEl, swaggerOptions: @options, router: @}).render()
- @showMessage()
- switch @options.docExpansion
- when "full" then @expandAll()
- when "list" then @listAll()
- @renderGFM()
- @options.onComplete(@api, @) if @options.onComplete
- setTimeout(
- =>
- Docs.shebang()
- 100
- )
-
- buildUrl: (base, url) ->
- if url.indexOf("/") is 0
- parts = base.split("/")
- base = parts[0] + "//" + parts[2]
- base + url
- else
- 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 ) isnt -1
- return base + url
- return base + "/" + url
-
- # 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'
- val = $('#message-bar').html data
- @options.onFailure(data) if @options.onFailure?
- val
-
- # Renders GFM for elements with 'markdown' class
- renderGFM: (data = '') ->
- $('.markdown').each (index) ->
- $(this).html(marked($(this).html()))
-
-window.SwaggerUi = SwaggerUi
diff --git a/src/main/coffeescript/view/MainView.coffee b/src/main/coffeescript/view/MainView.coffee
deleted file mode 100644
index 007787c0..00000000
--- a/src/main/coffeescript/view/MainView.coffee
+++ /dev/null
@@ -1,75 +0,0 @@
-class MainView extends Backbone.View
- sorters = {
- 'alpha' : (a,b) -> return a.path.localeCompare(b.path),
- 'method' : (a,b) -> return a.method.localeCompare(b.method),
- }
-
- initialize: (opts={}) ->
- # set up the UI for input
- @model.auths = []
- for key, value of @model.securityDefinitions
- auth = {name: key, type: value.type, value: value}
- @model.auths.push auth
-
- if @model.swaggerVersion is "2.0"
- if "validatorUrl" of opts.swaggerOptions
- # Validator URL specified explicitly
- @model.validatorUrl = opts.swaggerOptions.validatorUrl
- else if @model.url.indexOf("localhost") > 0
- # Localhost override
- @model.validatorUrl = null
- else
- # Default validator
- @model.validatorUrl = "http://online.swagger.io/validator"
-
- render: ->
- if @model.securityDefinitions
- for name of @model.securityDefinitions
- auth = @model.securityDefinitions[name]
- if auth.type is "apiKey" and $("#apikey_button").length is 0
- button = new ApiKeyButton({model: auth}).render().el
- $('.auth_main_container').append button
- if auth.type is "basicAuth" and $("#basic_auth_button").length is 0
- button = new BasicAuthButton({model: auth}).render().el
- $('.auth_main_container').append button
-
- # Render the outer container for resources
- $(@el).html(Handlebars.templates.main(@model))
-
- # Render each resource
-
- resources = {}
- counter = 0
- for resource in @model.apisArray
- id = resource.name
- while typeof resources[id] isnt 'undefined'
- id = id + "_" + counter
- counter += 1
- resource.id = id
- resources[id] = resource
- @addResource resource, @model.auths
-
- $('.propWrap').hover(
- ->
- $('.optionsWrapper', $(this)).show()
- ,->
- $('.optionsWrapper', $(this)).hide()
- )
- @
-
- addResource: (resource, auths) ->
- # Render a resource and add it to resources li
- resource.id = resource.id.replace(/\s/g, '_')
- resourceView = new ResourceView({
- model: resource,
- tagName: 'li',
- id: 'resource_' + resource.id,
- className: 'resource',
- auths: auths,
- swaggerOptions: @options.swaggerOptions,
- parent: @
- })
- $('#resources', @el).append resourceView.render().el
-
- clear: ->
- $(@el).html ''
diff --git a/src/main/coffeescript/view/OperationView.coffee b/src/main/coffeescript/view/OperationView.coffee
deleted file mode 100644
index 9827e92b..00000000
--- a/src/main/coffeescript/view/OperationView.coffee
+++ /dev/null
@@ -1,464 +0,0 @@
-class OperationView extends Backbone.View
- invocationUrl: null
-
- events: {
- 'submit .sandbox' : 'submitOperation'
- 'click .submit' : 'submitOperation'
- 'click .response_hider' : 'hideResponse'
- 'click .toggleOperation' : 'toggleOperationContent'
- 'mouseenter .api-ic' : 'mouseEnter'
- 'mouseout .api-ic' : 'mouseExit'
- }
-
- initialize: (opts={}) ->
- @auths = opts.auths
- @parentId = @model.parentId
- @nickname = @model.nickname
- @
-
- mouseEnter: (e) ->
- elem = $(@el).find '.content'
- x = e.pageX
- y = e.pageY
- scX = $(window).scrollLeft()
- scY = $(window).scrollTop()
- scMaxX = scX + $(window).width()
- scMaxY = scY + $(window).height()
- wd = elem.width()
- hgh = elem.height()
-
- if (x + wd > scMaxX)
- x = scMaxX - wd
- if (x < scX)
- x = scX
- if (y + hgh > scMaxY)
- y = scMaxY - hgh
- if (y < scY)
- y = scY
- pos = {}
- pos.top = y
- pos.left = x
- elem.css(pos)
- $(e.currentTarget.parentNode).find('#api_information_panel').show()
-
- mouseExit: (e) ->
- $(e.currentTarget.parentNode).find('#api_information_panel').hide()
-
- render: ->
- isMethodSubmissionSupported = jQuery.inArray(@model.method, @model.supportedSubmitMethods()) >= 0
- @model.isReadOnly = true unless isMethodSubmissionSupported
-
- # 1.2 syntax for description was `notes`
- @model.description = (@model.description || @model.notes)
- if @model.description
- @model.description = @model.description.replace(/(?:\r\n|\r|\n)/g, '
')
- @model.oauth = null
- modelAuths = @model.authorizations || @model.security
- if modelAuths
- if Array.isArray modelAuths
- for auths in modelAuths
- for key, auth of auths
- for a of @auths
- auth = @auths[a]
- if auth.type == 'oauth2'
- @model.oauth = {}
- @model.oauth.scopes = []
- for k, v of auth.value.scopes
- scopeIndex = auths[key].indexOf k
- if scopeIndex >= 0
- o = {scope: k, description: v}
- @model.oauth.scopes.push o
- else
- for k, v of modelAuths
- if k == "oauth2"
- if @model.oauth == null
- @model.oauth = {}
- if @model.oauth.scopes is undefined
- @model.oauth.scopes = []
- for o in v
- @model.oauth.scopes.push o
-
- if typeof @model.responses isnt 'undefined'
- @model.responseMessages = []
- for code, value of @model.responses
- schema = null
- schemaObj = @model.responses[code].schema
- if schemaObj and schemaObj['$ref']
- schema = schemaObj['$ref']
- if schema.indexOf('#/definitions/') is 0
- schema = schema.substring('#/definitions/'.length)
- @model.responseMessages.push {code: code, message: value.description, responseModel: schema }
-
- if typeof @model.responseMessages is 'undefined'
- @model.responseMessages = []
-
- # 2.0
- signatureModel = null
- if @model.successResponse
- successResponse = @model.successResponse
- for key of successResponse
- value = successResponse[key]
- @model.successCode = key
- if typeof value is 'object' and typeof value.createJSONSample is 'function'
- signatureModel =
- sampleJSON: JSON.stringify(value.createJSONSample(), undefined, 2)
- isParam: false
- signature: value.getMockSignature()
- # 1.2
- else if @model.responseClassSignature and @model.responseClassSignature != 'string'
- signatureModel =
- sampleJSON: @model.responseSampleJSON
- isParam: false
- signature: @model.responseClassSignature
-
-
- $(@el).html(Handlebars.templates.operation(@model))
-
- if signatureModel
- responseSignatureView = new SignatureView({model: signatureModel, tagName: 'div', parent: @})
- $('.model-signature', $(@el)).append responseSignatureView.render().el
- else
- @model.responseClassSignature = 'string'
- $('.model-signature', $(@el)).html(@model.type)
-
- contentTypeModel =
- isParam: false
-
- contentTypeModel.consumes = @model.consumes
- contentTypeModel.produces = @model.produces
-
- for param in @model.parameters
- type = param.type || param.dataType || ''
- if typeof type is 'undefined'
- schema = param.schema
- if schema and schema['$ref']
- ref = schema['$ref']
- if ref.indexOf('#/definitions/') is 0
- type = ref.substring('#/definitions/'.length)
- else
- type = ref
- if type and type.toLowerCase() == 'file'
- if !contentTypeModel.consumes
- contentTypeModel.consumes = 'multipart/form-data'
- param.type = type
-
- responseContentTypeView = new ResponseContentTypeView({model: contentTypeModel, parent: @})
- $('.response-content-type', $(@el)).append responseContentTypeView.render().el
-
- # Render each parameter
- @addParameter param, contentTypeModel.consumes for param in @model.parameters
-
- # Render each response code
- @addStatusCode statusCode for statusCode in @model.responseMessages
-
- @
-
- addParameter: (param, consumes) ->
- # Render a parameter
- param.consumes = consumes
- 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', parent: @})
- $('.operation-status', $(@el)).append statusCodeView.render().el
-
- submitOperation: (e) ->
- e?.preventDefault()
- # 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
- form.find("textarea.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 = {}
- opts = {parent: @}
-
- isFileUpload = false
-
- for o in form.find("input")
- if(o.value? && jQuery.trim(o.value).length > 0)
- map[o.name] = o.value
- if o.type is "file"
- map[o.name] = o.files[0]
- isFileUpload = true
-
- for o in form.find("textarea")
- if(o.value? && jQuery.trim(o.value).length > 0)
- map[o.name] = o.value
-
- for o in form.find("select")
- val = this.getSelectedValue o
- if(val? && jQuery.trim(val).length > 0)
- map[o.name] = val
-
- opts.responseContentType = $("div select[name=responseContentType]", $(@el)).val()
- opts.requestContentType = $("div select[name=parameterContentType]", $(@el)).val()
-
- $(".response_throbber", $(@el)).show()
- if isFileUpload
- @handleFileUpload map, form
- else
- @model.do(map, opts, @showCompleteStatus, @showErrorStatus, @)
-
- success: (response, parent) ->
- parent.showCompleteStatus response
-
- handleFileUpload: (map, form) ->
- for o in form.serializeArray()
- if(o.value? && jQuery.trim(o.value).length > 0)
- map[o.name] = o.value
-
- # requires HTML5 compatible browser
- bodyParam = new FormData()
- params = 0
-
- # add params
- for param in @model.parameters
- if param.paramType is 'form' or param.in is 'formData'
- if param.type.toLowerCase() isnt 'file' and map[param.name] != undefined
- bodyParam.append(param.name, map[param.name])
-
- # headers in operation
- headerParams = {}
- for param in @model.parameters
- if param.paramType is 'header'
- headerParams[param.name] = map[param.name]
-
- # add files
- for el in form.find('input[type~="file"]')
- if typeof el.files[0] isnt 'undefined'
- bodyParam.append($(el).attr('name'), el.files[0])
- params += 1
-
- @invocationUrl =
- if @model.supportHeaderParams()
- headerParams = @model.getHeaderParams(map)
- delete headerParams['Content-Type']
- @model.urlify(map, false)
- else
- @model.urlify(map, true)
-
- $(".request_url", $(@el)).html("")
- $(".request_url pre", $(@el)).text(@invocationUrl);
-
- obj =
- type: @model.method
- url: @invocationUrl
- headers: headerParams
- data: bodyParam
- dataType: 'json'
- contentType: false
- processData: false
- error: (data, textStatus, error) =>
- @showErrorStatus(@wrap(data), @)
- success: (data) =>
- @showResponse(data, @)
- complete: (data) =>
- @showCompleteStatus(@wrap(data), @)
-
- # apply authorizations
- if window.authorizations
- window.authorizations.apply obj
-
- if params is 0
- obj.data.append("fake", "true");
-
- jQuery.ajax(obj)
- false
- # end of file-upload nastiness
-
- # wraps a jquery response as a shred response
-
- wrap: (data) ->
- headers = {}
- headerArray = data.getAllResponseHeaders().split("\r")
- for i in headerArray
- h = i.match(/^([^:]*?):(.*)$/)
- if(!h)
- h = []
- h.shift()
- if (h[0] != undefined && h[1] != undefined)
- headers[h[0].trim()] = h[1].trim()
-
- o = {}
- o.content = {}
- o.content.data = data.responseText
- o.headers = headers
- o.request = {}
- o.request.url = @invocationUrl
- o.status = data.status
- o
-
- getSelectedValue: (select) ->
- if !select.multiple
- select.value
- else
- options = []
- options.push opt.value for opt in select.options when opt.selected
- if options.length > 0
- options
- else
- null
-
- # 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, "
")
- $(".response_body", $(@el)).html escape(prettyJson)
-
- # Show error from server
- showErrorStatus: (data, parent) ->
- parent.showStatus data
-
- # show the status codes
- showCompleteStatus: (data, parent) ->
- parent.showStatus data
-
- # Adapted from http://stackoverflow.com/a/2893259/454004
- formatXml: (xml) ->
- reg = /(>)(<)(\/*)/g
- wsexp = /[ ]*(.*)[ ]+\n/g
- contexp = /(<.+>)(.+\n)/g
- xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2')
- pad = 0
- formatted = ''
- lines = xml.split('\n')
- indent = 0
- lastType = 'other'
- # 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions
- transitions =
- 'single->single': 0
- 'single->closing': -1
- 'single->opening': 0
- 'single->other': 0
- 'closing->single': 0
- 'closing->closing': -1
- 'closing->opening': 0
- 'closing->other': 0
- 'opening->single': 1
- 'opening->closing': 0
- 'opening->opening': 1
- 'opening->other': 1
- 'other->single': 0
- 'other->closing': -1
- 'other->opening': 0
- 'other->other': 0
-
- for ln in lines
- do (ln) ->
-
- types =
- # is this line a single tag? ex.
- single: Boolean(ln.match(/<.+\/>/))
- # is this a closing tag? ex.
- closing: Boolean(ln.match(/<\/.+>/))
- # is this even a tag (that's not )
- opening: Boolean(ln.match(/<[^!?].*>/))
-
- [type] = (key for key, value of types when value)
- type = if type is undefined then 'other' else type
-
- fromTo = lastType + '->' + type
- lastType = type
- padding = ''
-
- indent += transitions[fromTo]
- padding = (' ' for j in [0...(indent)]).join('')
- if fromTo == 'opening->closing'
- #substr removes line break (\n) from prev loop
- formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'
- else
- formatted += padding + ln + '\n'
-
- formatted
-
-
- # puts the response data in UI
- showStatus: (response) ->
- if response.content is undefined
- content = response.data
- url = response.url
- else
- content = response.content.data
- url = response.request.url
- headers = response.headers
-
- # if server is nice, and sends content-type back, we can use it
- contentType = null
- if headers
- contentType = headers["Content-Type"] or headers["content-type"]
- if contentType
- contentType = contentType.split(";")[0].trim()
-
- $(".response_body", $(@el)).removeClass 'json'
- $(".response_body", $(@el)).removeClass 'xml'
-
- supportsAudioPlayback = (contentType) ->
- audioElement = document.createElement('audio')
- return !!(audioElement.canPlayType && audioElement.canPlayType(contentType).replace(/no/, ''))
-
- if !content
- code = $('').text("no content")
- pre = $('').append(code)
- else if contentType is "application/json" || /\+json$/.test(contentType)
- json = null
- try
- json = JSON.stringify(JSON.parse(content), null, " ")
- catch e
- json = "can't parse JSON. Raw result:\n\n" + content
- code = $('').text(json)
- pre = $('').append(code)
- else if contentType is "application/xml" || /\+xml$/.test(contentType)
- code = $('').text(@formatXml(content))
- pre = $('').append(code)
- else if contentType is "text/html"
- code = $('').html(_.escape(content))
- pre = $('').append(code)
- else if /^image\//.test(contentType)
- pre = $('
').attr('src',url)
- else if /^audio\//.test(contentType) and supportsAudioPlayback(contentType)
- pre = $('