kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
12 KiB
262 lines
12 KiB
10 years ago
|
//- Common mixins that templates can share
|
||
|
|
||
|
mixin Nav(multipage, collapsible)
|
||
|
div.col-md-3
|
||
|
ul.menu(id="op-api-menu")
|
||
|
- var menuItem = 'menu-item';
|
||
|
each resourceGroup in api.resourceGroups
|
||
|
|
||
|
- var randomGroupIndex = Math.random().toString(16).slice(2)
|
||
|
- var groupHasChildren = resourceGroup.resources.length ? menuItem + '-has-children' : ''
|
||
|
- var resourceGroupClasses = [menuItem, menuItem + '-type-post_type', menuItem + '-object-page', 'dropdown', menuItem + '-' + randomGroupIndex, groupHasChildren]
|
||
|
|
||
|
li(class=resourceGroupClasses, id=[menuItem + '-' + randomGroupIndex])
|
||
|
a.menu-item-link(href="##{slug(resourceGroup.name)}")
|
||
|
= resourceGroup.name || 'Resource Group'
|
||
|
if resourceGroup.resources.length
|
||
|
a.dropdown-toggle.toggle-open-menu(href="##{slug(resourceGroup.name)}", data-toggle="dropdown")
|
||
9 years ago
|
i.icon.icon-arrow-down1
|
||
|
i.icon.icon-arrow-up1
|
||
10 years ago
|
ul.dropdown-menu
|
||
|
each resource in resourceGroup.resources
|
||
|
- var randomResourceIndex = Math.random().toString(16).slice(2)
|
||
|
- var resourceHasChildren = resource.length ? menuItem + '-has-children' : ''
|
||
|
- var resourceClasses = [menuItem, menuItem + '-type-post_type', menuItem + '-object-page', 'dropdown', menuItem + '-' + randomResourceIndex, resourceHasChildren]
|
||
|
li(class=resourceClasses, id=[menuItem + '-' + randomResourceIndex])
|
||
|
a.menu-item-link(href="##{slug(resourceGroup.name)}-#{slug(resource.name)}")
|
||
|
= resource.name || 'Resource'
|
||
|
if (resource.actions.length != 1)
|
||
|
a.dropdown-toggle.toggle-open-menu(href="##{slug(resourceGroup.name)}-#{slug(resource.name)}", data-toggle="dropdown")
|
||
9 years ago
|
i.icon.icon-arrow-down1
|
||
|
i.icon.icon-arrow-up1
|
||
10 years ago
|
ul.dropdown-menu
|
||
|
each action in resource.actions
|
||
|
- var randomActionIndex = Math.random().toString(16).slice(2)
|
||
|
- var resourceActionClasses = [menuItem, menuItem + '-type-post_type', menuItem + '-object-page', 'dropdown', menuItem + '-' + randomActionIndex]
|
||
|
li(class=resourceActionClasses, id=[menuItem + '-' + randomActionIndex])
|
||
|
a.menu-item-link(href="##{slug(resourceGroup.name)}-#{slug(resource.name)}-#{slug(action.method)}")
|
||
|
= action.name || action.method + ' ' + resource.uriTemplate
|
||
|
else
|
||
|
each meta in api.metadata
|
||
|
if meta.name == 'HOST'
|
||
|
p(style="text-align: center; word-wrap: break-word;")
|
||
|
a(href=meta.value)= meta.value
|
||
|
|
||
|
mixin Parameters(params)
|
||
|
ul.list-group
|
||
|
li.list-group-item.bg-default: strong Parameters
|
||
|
li.list-group-item
|
||
|
dl.dl-horizontal
|
||
|
each param in params
|
||
|
dt= param.name
|
||
|
dd
|
||
|
code= param.type
|
||
|
|
|
||
|
if param.required
|
||
|
span.required (required)
|
||
|
else
|
||
|
span (optional)
|
||
|
|
|
||
|
if param.default
|
||
|
span.text-info.default
|
||
|
strong Default:
|
||
|
span= param.default
|
||
|
|
|
||
|
if param.example
|
||
|
span.text-muted.example
|
||
|
strong Example:
|
||
|
span= param.example
|
||
|
!= markdown(param.description)
|
||
|
if param.values.length
|
||
|
p
|
||
|
strong Choices:
|
||
|
each value in param.values
|
||
|
code= value.value
|
||
|
= ' '
|
||
|
|
||
|
mixin RequestResponse(title, request, resourceGroup, resource, action)
|
||
|
- var id = hash(resourceGroup.name.toString() + resource.name.toString() + action.name.toString() + action.method.toString() + title.toString() + request.name.toString() + request.headers.toString() + request.body.toString() + request.schema.toString())
|
||
|
- var content = request.description || Object.keys(request.headers).length || request.body || request.schema
|
||
|
li.list-group-item
|
||
|
strong
|
||
|
= title
|
||
|
if request.name
|
||
|
|
|
||
|
code= request.name
|
||
|
if content
|
||
|
a.pull-right.collapsed(data-toggle="collapse", data-target="##{id}")
|
||
|
span.closed Show
|
||
|
span.open Hide
|
||
|
if content
|
||
|
li.list-group-item.panel-collapse.collapse(id=id)
|
||
|
if request.description
|
||
|
.description!= markdown(request.description)
|
||
|
|
||
|
if Object.keys(request.headers).length
|
||
|
h5 Headers
|
||
|
pre
|
||
|
code
|
||
|
each item in request.headers
|
||
|
!= highlight(item.name + ': ' + item.value, 'http')
|
||
|
br
|
||
|
if request.body
|
||
|
h5 Body
|
||
|
pre
|
||
|
code!= highlight(request.body)
|
||
|
if request.schema
|
||
|
h5 Schema
|
||
|
pre
|
||
|
code!= highlight(request.schema)
|
||
|
|
||
|
|
||
|
mixin Examples(resourceGroup, resource, action)
|
||
|
ul.list-group
|
||
|
each example in action.examples
|
||
|
each request in example.requests
|
||
|
+RequestResponse('Request', request, resourceGroup, resource, action)
|
||
|
each response in example.responses
|
||
|
+RequestResponse('Response', response, resourceGroup, resource, action)
|
||
|
|
||
|
mixin ResourceGroup(resourceGroup, getButtonClass, multipage)
|
||
|
.panel.panel-default
|
||
|
.panel-heading
|
||
|
h3(id="#{slug(resourceGroup.name)}")
|
||
|
= resourceGroup.name || 'Resource Group'
|
||
|
|
|
||
|
a(href="##{multipage ? 'page:' : ''}#{slug(resourceGroup.name)}")
|
||
|
i.fa.fa-link
|
||
|
.panel-body
|
||
|
if resourceGroup.description
|
||
|
!= markdown(resourceGroup.description)
|
||
|
each resource in resourceGroup.resources
|
||
|
h4(id="#{slug(resourceGroup.name)}-#{slug(resource.name)}")
|
||
|
= resource.name || 'Resources'
|
||
|
|
|
||
|
a(href="##{(multipage ? 'page:' + slug(resourceGroup.name) + ',header:' : '')}#{slug(resourceGroup.name)}-#{slug(resource.name)}")
|
||
|
i.fa.fa-link
|
||
|
if resource.description
|
||
|
!= markdown(resource.description)
|
||
|
each action in resource.actions
|
||
|
case action.method
|
||
|
when 'POST': - var panelClass = 'panel-success'
|
||
|
when 'GET': - var panelClass = 'panel-info'
|
||
|
when 'PUT': - var panelClass = 'panel-warning'
|
||
|
when 'PATCH': - var panelClass = 'panel-warning'
|
||
|
when 'DELETE': - var panelClass = 'panel-danger'
|
||
|
default: - var panelClass = 'panel-default'
|
||
|
section.panel(class=panelClass, id="#{slug(resourceGroup.name)}-#{slug(resource.name)}-#{slug(action.method)}")
|
||
|
.panel-heading
|
||
|
if action.name
|
||
|
div(style="float:right")
|
||
|
span(style="text-transform: lowercase")= action.name
|
||
|
case action.method
|
||
|
when 'POST': - var btnClass = 'btn-success'
|
||
|
when 'GET': - var btnClass = 'btn-' + getButtonClass
|
||
|
when 'PUT': - var btnClass = 'btn-warning'
|
||
|
when 'PATCH': - var btnClass = 'btn-warning'
|
||
|
when 'DELETE': - var btnClass = 'btn-danger'
|
||
|
default: - var btnClass = 'btn-default'
|
||
|
div(style="float:left")
|
||
|
a.btn.btn-xs(class=btnClass, href="##{(multipage ? 'page:' + slug(resourceGroup.name) + ',header:' : '')}#{slug(resourceGroup.name)}-#{slug(resource.name)}-#{slug(action.method)}")= action.method
|
||
|
div(style="overflow:hidden" class="panel-heading-code")
|
||
|
code= resource.uriTemplate
|
||
|
if action.description
|
||
|
.panel-body!= markdown(action.description)
|
||
|
|
||
|
- var params = action.parameters.length ? action.parameters : resource.parameters
|
||
|
if params.length
|
||
|
+Parameters(params)
|
||
|
if action.examples
|
||
|
+Examples(resourceGroup, resource, action)
|
||
|
|
||
|
mixin Paginate(resourceGroups, index)
|
||
|
if index < resourceGroups.length - 1
|
||
|
a.btn.btn-default.pull-right(href="#page:#{slug(resourceGroups[index + 1].name)}")
|
||
|
| Next
|
||
|
i.fa.fa-arrow-circle-right
|
||
|
|
||
|
if index > 0
|
||
|
a.btn.btn-default(href="#page:#{slug(resourceGroups[index - 1].name)}")
|
||
|
i.fa.fa-arrow-circle-left
|
||
|
| Previous
|
||
|
else
|
||
|
a.btn.btn-default(href="#")
|
||
|
i.fa.fa-arrow-circle-left
|
||
|
| Previous
|
||
|
.clearfix
|
||
|
hr
|
||
|
|
||
|
mixin Icon(method)
|
||
|
case method
|
||
|
when 'GET'
|
||
|
span.badge.alert-info
|
||
|
i.fa.fa-arrow-down
|
||
|
when 'POST'
|
||
|
span.badge.alert-success
|
||
|
i.fa.fa-plus
|
||
|
when 'PUT'
|
||
|
span.badge.alert-warning
|
||
|
i.fa.fa-pencil
|
||
|
when 'PATCH'
|
||
|
span.badge.alert-warning
|
||
|
i.fa.fa-pencil
|
||
|
when 'DELETE'
|
||
|
span.badge.alert-danger
|
||
|
i.fa.fa-times
|
||
|
default
|
||
|
span.badge
|
||
|
i.fa.fa-dot-circle-o
|
||
|
|
||
|
mixin Content(getButtonClass, multipage)
|
||
|
div(data-bind=multipage ? "visible: page() == 'home'" : undefined)
|
||
|
header
|
||
|
.page-header
|
||
|
h1#top= api.name || 'API Documentation'
|
||
|
|
||
|
.description!= markdown(api.description)
|
||
|
|
||
|
if multipage
|
||
|
a.btn.btn-default.pull-right(href="#page:#{slug(api.resourceGroups[0].name)}")
|
||
|
| Next
|
||
|
i.fa.fa-arrow-circle-right
|
||
|
.clearfix
|
||
|
hr
|
||
|
|
||
|
each resourceGroup, index in api.resourceGroups
|
||
|
div(data-bind=multipage ? "visible: page() == '#{slug(resourceGroup.name)}', style: {marginTop: page() == '#{slug(resourceGroup.name)}' ? '38px' : ''}" : undefined)
|
||
|
+ResourceGroup(resourceGroup, getButtonClass, multipage)
|
||
|
|
||
|
if multipage
|
||
|
+Paginate(api.resourceGroups, index)
|
||
|
|
||
|
mixin Multipage()
|
||
|
//- Multi-page support through Knockout.js
|
||
|
script(src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.0.0/knockout-min.js")
|
||
|
script
|
||
|
:coffee
|
||
|
class App
|
||
|
constructor: ->
|
||
|
@page = ko.observable 'home'
|
||
|
|
||
|
window.app = new App()
|
||
|
|
||
|
window.onhashchange = ->
|
||
|
vars = {}
|
||
|
for v in location.hash.substr(1).split(',')
|
||
|
parts = v.split ':'
|
||
|
vars[parts[0]] = parts[1]
|
||
|
|
||
|
# Set the page
|
||
|
window.app.page vars.page or 'home'
|
||
|
|
||
|
# Scroll to a header if Set
|
||
|
if vars.header
|
||
|
$("##{vars.header}")[0].scrollIntoView true
|
||
|
else
|
||
|
window.scrollTo 0, 0
|
||
|
|
||
|
ko.applyBindings window.app
|
||
|
|
||
|
# Load the correct page
|
||
|
window.onhashchange()
|