diff --git a/src/core/components/array-model.jsx b/src/core/components/array-model.jsx
new file mode 100644
index 00000000..1a01b0ff
--- /dev/null
+++ b/src/core/components/array-model.jsx
@@ -0,0 +1,43 @@
+import React, { Component, PropTypes } from "react"
+
+const propStyle = { color: "#999", fontStyle: "italic" }
+
+export default class ArrayModel extends Component {
+ static propTypes = {
+ schema: PropTypes.object.isRequired,
+ getComponent: PropTypes.func.isRequired,
+ specSelectors: PropTypes.object.isRequired,
+ name: PropTypes.string,
+ required: PropTypes.bool,
+ expandDepth: PropTypes.number,
+ depth: PropTypes.number
+ }
+
+ render(){
+ let { getComponent, required, schema, depth, expandDepth } = this.props
+ let items = schema.get("items")
+ let properties = schema.filter( ( v, key) => ["type", "items", "$$ref"].indexOf(key) === -1 )
+
+ const ModelCollapse = getComponent("ModelCollapse")
+ const Model = getComponent("Model")
+
+ return
+
+ { schema.get("title") }
+
+ expandDepth } collapsedContent="[...]">
+ [
+
+ ]
+ {
+ properties.size ?
+ { properties.entrySeq().map( ( [ key, v ] ) =>
+
{ `${key}:`}{ String(v) })
+ }
+ : null
+ }
+
+ { required && *}
+
+ }
+}
\ No newline at end of file
diff --git a/src/core/components/enum-model.jsx b/src/core/components/enum-model.jsx
new file mode 100644
index 00000000..78af10da
--- /dev/null
+++ b/src/core/components/enum-model.jsx
@@ -0,0 +1,19 @@
+import React from "react"
+import ImPropTypes from "react-immutable-proptypes"
+
+const EnumModel = ({ value, getComponent }) => {
+ let ModelCollapse = getComponent("ModelCollapse")
+ let collapsedContent = Array [ { value.count() } ]
+ return
+ Enum:
+
+ [ { value.join(", ") } ]
+
+
+}
+EnumModel.propTypes = {
+ value: ImPropTypes.iterable,
+ getComponent: ImPropTypes.func
+}
+
+export default EnumModel
\ No newline at end of file
diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx
index 35cfd7b8..f8132bf0 100644
--- a/src/core/components/layouts/base.jsx
+++ b/src/core/components/layouts/base.jsx
@@ -25,7 +25,7 @@ export default class BaseLayout extends React.Component {
let Info = getComponent("info")
let Operations = getComponent("operations", true)
- let Models = getComponent("models", true)
+ let Models = getComponent("Models", true)
let AuthorizeBtn = getComponent("authorizeBtn", true)
let Row = getComponent("Row")
let Col = getComponent("Col")
diff --git a/src/core/components/model-collapse.jsx b/src/core/components/model-collapse.jsx
new file mode 100644
index 00000000..256c440e
--- /dev/null
+++ b/src/core/components/model-collapse.jsx
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from "react"
+
+export default class ModelCollapse extends Component {
+ static propTypes = {
+ collapsedContent: PropTypes.any,
+ collapsed: PropTypes.bool,
+ children: PropTypes.any
+ }
+
+ static defaultProps = {
+ collapsedContent: "{...}",
+ collapsed: true,
+ }
+
+ constructor(props, context) {
+ super(props, context)
+
+ let { collapsed, collapsedContent } = this.props
+
+ this.state = {
+ collapsed: collapsed !== undefined ? collapsed : ModelCollapse.defaultProps.collapsed,
+ collapsedContent: collapsedContent || ModelCollapse.defaultProps.collapsedContent
+ }
+ }
+
+ toggleCollapsed=()=>{
+ this.setState({
+ collapsed: !this.state.collapsed
+ })
+ }
+
+ render () {
+ return (
+
+
+
+ { this.state.collapsed ? this.state.collapsedContent : this.props.children }
+ )
+ }
+}
\ No newline at end of file
diff --git a/src/core/components/model-example.jsx b/src/core/components/model-example.jsx
index 0117c9a5..e7737d12 100644
--- a/src/core/components/model-example.jsx
+++ b/src/core/components/model-example.jsx
@@ -28,7 +28,7 @@ export default class ModelExample extends React.Component {
render() {
let { getComponent, specSelectors, schema, example, isExecute } = this.props
- const Model = getComponent("model")
+ const ModelWrapper = getComponent("ModelWrapper")
return
@@ -44,7 +44,7 @@ export default class ModelExample extends React.Component {
(isExecute || this.state.activeTab === "example") && example
}
{
- !isExecute && this.state.activeTab === "model" &&
diff --git a/src/core/components/model-wrapper.jsx b/src/core/components/model-wrapper.jsx
new file mode 100644
index 00000000..945633a4
--- /dev/null
+++ b/src/core/components/model-wrapper.jsx
@@ -0,0 +1,22 @@
+import React, { Component, PropTypes } from "react"
+
+export default class ModelComponent extends Component {
+ static propTypes = {
+ schema: PropTypes.object.isRequired,
+ name: PropTypes.string,
+ getComponent: PropTypes.func.isRequired,
+ specSelectors: PropTypes.object.isRequired,
+ expandDepth: PropTypes.number
+ }
+
+ render(){
+ let { getComponent } = this.props
+ const Model = getComponent("Model")
+
+ return
+
+
+ }
+}
+
+
diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx
index a043c325..58e0481d 100644
--- a/src/core/components/model.jsx
+++ b/src/core/components/model.jsx
@@ -1,208 +1,6 @@
import React, { Component, PropTypes } from "react"
-import ImPropTypes from "react-immutable-proptypes"
-import { List } from "immutable"
-const braceOpen = "{"
-const braceClose = "}"
-const propStyle = { color: "#999", fontStyle: "italic" }
-
-const EnumModel = ({ value }) => {
- let collapsedContent = Array [ { value.count() } ]
- return
- Enum:
-
- [ { value.join(", ") } ]
-
-
-}
-
-EnumModel.propTypes = {
- value: ImPropTypes.iterable
-}
-
-class ObjectModel extends Component {
- static propTypes = {
- schema: PropTypes.object.isRequired,
- getComponent: PropTypes.func.isRequired,
- specSelectors: PropTypes.object.isRequired,
- name: PropTypes.string,
- isRef: PropTypes.bool,
- expandDepth: PropTypes.number,
- depth: PropTypes.number
- }
-
- render(){
- let { schema, name, isRef, getComponent, depth, ...props } = this.props
- let { expandDepth } = this.props
- const JumpToPath = getComponent("JumpToPath", true)
- let description = schema.get("description")
- let properties = schema.get("properties")
- let additionalProperties = schema.get("additionalProperties")
- let title = schema.get("title") || name
- let required = schema.get("required")
- const Markdown = getComponent("Markdown")
- const JumpToPathSection = ({ name }) =>
- let collapsedContent = (
- { braceOpen }...{ braceClose }
- {
- isRef ? : ""
- }
- )
-
- return
- {
- title &&
- { isRef && schema.get("$$ref") && { schema.get("$$ref") } }
- { title }
-
- }
- expandDepth } collapsedContent={ collapsedContent }>
- { braceOpen }
- {
- !isRef ? null :
- }
-
- {
-
- {
- !description ? null :
- | description: |
-
-
- |
-
- }
- {
- !(properties && properties.size) ? null : properties.entrySeq().map(
- ([key, value]) => {
- let isRequired = List.isList(required) && required.contains(key)
- let propertyStyle = { verticalAlign: "top", paddingRight: "0.2em" }
- if ( isRequired ) {
- propertyStyle.fontWeight = "bold"
- }
-
- return (
- | { key }: |
-
-
- |
-
)
- }).toArray()
- }
- {
- !additionalProperties || !additionalProperties.size ? null
- :
- | { "< * >:" } |
-
-
- |
-
- }
-
- }
-
- { braceClose }
-
-
- }
-}
-
-class Primitive extends Component {
- static propTypes = {
- schema: PropTypes.object.isRequired,
- getComponent: PropTypes.func.isRequired,
- required: PropTypes.bool
- }
-
- render(){
- let { schema, getComponent, required } = this.props
-
- if(!schema || !schema.get) {
- // don't render if schema isn't correctly formed
- return
- }
-
- let type = schema.get("type")
- let format = schema.get("format")
- let xml = schema.get("xml")
- let enumArray = schema.get("enum")
- let description = schema.get("description")
- let properties = schema.filter( ( v, key) => ["enum", "type", "format", "description", "$$ref"].indexOf(key) === -1 )
- let style = required ? { fontWeight: "bold" } : {}
- const Markdown = getComponent("Markdown")
-
- return
- { type } { required && *}
- { format && (${format})}
- {
- properties.size ? properties.entrySeq().map( ( [ key, v ] ) =>
-
{ key }: { String(v) })
- : null
- }
- {
- !description ? null :
-
- }
- {
- xml && xml.size ? (
xml:
- {
- xml.entrySeq().map( ( [ key, v ] ) =>
{key}: { String(v) }).toArray()
- }
- ): null
- }
- {
- enumArray &&
- }
-
- }
-}
-
-class ArrayModel extends Component {
- static propTypes = {
- schema: PropTypes.object.isRequired,
- getComponent: PropTypes.func.isRequired,
- specSelectors: PropTypes.object.isRequired,
- name: PropTypes.string,
- required: PropTypes.bool,
- expandDepth: PropTypes.number,
- depth: PropTypes.number
- }
-
- render(){
- let { required, schema, depth, expandDepth } = this.props
- let items = schema.get("items")
- let properties = schema.filter( ( v, key) => ["type", "items", "$$ref"].indexOf(key) === -1 )
-
- return
-
- { schema.get("title") }
-
- expandDepth } collapsedContent="[...]">
- [
-
- ]
- {
- properties.size ?
- { properties.entrySeq().map( ( [ key, v ] ) =>
-
{ `${key}:`}{ String(v) })
- }
- : null
- }
-
- { required && *}
-
- }
-}
-
-
-class Model extends Component {
+export default class Model extends Component {
static propTypes = {
schema: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired,
@@ -228,6 +26,9 @@ class Model extends Component {
render () {
let { schema, getComponent, required, name, isRef } = this.props
+ let ObjectModel = getComponent("ObjectModel")
+ let ArrayModel = getComponent("ArrayModel")
+ let PrimitiveModel = getComponent("PrimitiveModel")
let $$ref = schema && schema.get("$$ref")
let modelName = $$ref && this.getModelName( $$ref )
let modelSchema, type
@@ -255,63 +56,7 @@ class Model extends Component {
case "integer":
case "boolean":
default:
- return
+ return
}
}
-}
-
-
-export default class ModelComponent extends Component {
- static propTypes = {
- schema: PropTypes.object.isRequired,
- name: PropTypes.string,
- getComponent: PropTypes.func.isRequired,
- specSelectors: PropTypes.object.isRequired,
- expandDepth: PropTypes.number
- }
-
- render(){
- return
-
-
- }
-}
-
-class Collapse extends Component {
- static propTypes = {
- collapsedContent: PropTypes.any,
- collapsed: PropTypes.bool,
- children: PropTypes.any
- }
-
- static defaultProps = {
- collapsedContent: "{...}",
- collapsed: true,
- }
-
- constructor(props, context) {
- super(props, context)
-
- let { collapsed, collapsedContent } = this.props
-
- this.state = {
- collapsed: collapsed !== undefined ? collapsed : Collapse.defaultProps.collapsed,
- collapsedContent: collapsedContent || Collapse.defaultProps.collapsedContent
- }
- }
-
- toggleCollapsed=()=>{
- this.setState({
- collapsed: !this.state.collapsed
- })
- }
-
- render () {
- return (
-
-
-
- { this.state.collapsed ? this.state.collapsedContent : this.props.children }
- )
- }
-}
+}
\ No newline at end of file
diff --git a/src/core/components/models.jsx b/src/core/components/models.jsx
index 21605199..c311f350 100644
--- a/src/core/components/models.jsx
+++ b/src/core/components/models.jsx
@@ -1,6 +1,5 @@
import React, { Component, PropTypes } from "react"
-
export default class Models extends Component {
static propTypes = {
getComponent: PropTypes.func,
@@ -16,7 +15,7 @@ export default class Models extends Component {
let { docExpansion } = getConfigs()
let showModels = layoutSelectors.isShown("models", docExpansion === "full" || docExpansion === "list" )
- const Model = getComponent("model")
+ const ModelWrapper = getComponent("ModelWrapper")
const Collapse = getComponent("Collapse")
if (!definitions.size) return null
@@ -31,8 +30,9 @@ export default class Models extends Component {
{
definitions.entrySeq().map( ( [ name, model ])=>{
+ console.log("model", name, model)
return
-
+ const collapsedContent = (
+ { braceOpen }...{ braceClose }
+ {
+ isRef ? : ""
+ }
+ )
+
+
+ return
+ {
+ title &&
+ { isRef && schema.get("$$ref") && { schema.get("$$ref") } }
+ { title }
+
+ }
+ expandDepth } collapsedContent={ collapsedContent }>
+ { braceOpen }
+ {
+ !isRef ? null :
+ }
+
+ {
+
+ {
+ !description ? null :
+ | description: |
+
+
+ |
+
+ }
+ {
+ !(properties && properties.size) ? null : properties.entrySeq().map(
+ ([key, value]) => {
+ let isRequired = List.isList(required) && required.contains(key)
+ let propertyStyle = { verticalAlign: "top", paddingRight: "0.2em" }
+ if ( isRequired ) {
+ propertyStyle.fontWeight = "bold"
+ }
+
+ return (
+ | { key }: |
+
+
+ |
+
)
+ }).toArray()
+ }
+ {
+ !additionalProperties || !additionalProperties.size ? null
+ :
+ | { "< * >:" } |
+
+
+ |
+
+ }
+
+ }
+
+ { braceClose }
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/core/components/primitive-model.jsx b/src/core/components/primitive-model.jsx
new file mode 100644
index 00000000..24363187
--- /dev/null
+++ b/src/core/components/primitive-model.jsx
@@ -0,0 +1,54 @@
+import React, { Component, PropTypes } from "react"
+
+const propStyle = { color: "#999", fontStyle: "italic" }
+
+export default class Primitive extends Component {
+ static propTypes = {
+ schema: PropTypes.object.isRequired,
+ getComponent: PropTypes.func.isRequired,
+ required: PropTypes.bool
+ }
+
+ render(){
+ let { schema, getComponent, required } = this.props
+
+ if(!schema || !schema.get) {
+ // don't render if schema isn't correctly formed
+ return
+ }
+
+ let type = schema.get("type")
+ let format = schema.get("format")
+ let xml = schema.get("xml")
+ let enumArray = schema.get("enum")
+ let description = schema.get("description")
+ let properties = schema.filter( ( v, key) => ["enum", "type", "format", "description", "$$ref"].indexOf(key) === -1 )
+ let style = required ? { fontWeight: "bold" } : {}
+ const Markdown = getComponent("Markdown")
+ const EnumModel = getComponent("EnumModel")
+
+ return
+ { type } { required && *}
+ { format && (${format})}
+ {
+ properties.size ? properties.entrySeq().map( ( [ key, v ] ) =>
+
{ key }: { String(v) })
+ : null
+ }
+ {
+ !description ? null :
+
+ }
+ {
+ xml && xml.size ? (
xml:
+ {
+ xml.entrySeq().map( ( [ key, v ] ) =>
{key}: { String(v) }).toArray()
+ }
+ ): null
+ }
+ {
+ enumArray &&
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/core/presets/base.js b/src/core/presets/base.js
index 20ff4659..d5471791 100644
--- a/src/core/presets/base.js
+++ b/src/core/presets/base.js
@@ -41,9 +41,15 @@ import Footer from "core/components/footer"
import ParamBody from "core/components/param-body"
import Curl from "core/components/curl"
import Schemes from "core/components/schemes"
+import ModelCollapse from "core/components/model-collapse"
import ModelExample from "core/components/model-example"
+import ModelWrapper from "core/components/model-wrapper"
import Model from "core/components/model"
import Models from "core/components/models"
+import EnumModel from "core/components/enum-model"
+import ObjectModel from "core/components/object-model"
+import ArrayModel from "core/components/array-model"
+import PrimitiveModel from "core/components/primitive-model"
import TryItOutButton from "core/components/try-it-out-button"
import Markdown from "core/components/providers/markdown"
@@ -88,8 +94,14 @@ export default function() {
curl: Curl,
schemes: Schemes,
modelExample: ModelExample,
- model: Model,
- models: Models,
+ ModelWrapper,
+ ModelCollapse,
+ Model,
+ Models,
+ EnumModel,
+ ObjectModel,
+ ArrayModel,
+ PrimitiveModel,
TryItOutButton,
Markdown,
BaseLayout