Compare commits

..
33 changed files with 174 additions and 20409 deletions
+4
View File
@@ -41,6 +41,10 @@
{ {
"expose": "less", "expose": "less",
"src": "src/less" "src": "src/less"
},
{
"expose": "base",
"src": "npm:getbase/src/less/base"
} }
] ]
] ]
+3 -8
View File
@@ -13,15 +13,11 @@
} }
}, },
"extends": [ "extends": ["eslint:recommended", "plugin:react/recommended"],
"eslint:recommended",
"plugin:react/recommended"
],
"plugins": [ "plugins": [
"react", "react",
"mocha", "mocha"
"import"
], ],
"rules": { "rules": {
@@ -38,7 +34,6 @@
"no-console": ["error", { allow: ["warn", "error"] }], "no-console": ["error", { allow: ["warn", "error"] }],
"react/jsx-no-bind": 1, "react/jsx-no-bind": 1,
"react/display-name": 0, "react/display-name": 0,
"mocha/no-exclusive-tests": "error", "mocha/no-exclusive-tests": "error"
"import/no-extraneous-dependencies": [2]
} }
} }
+1
View File
@@ -5,6 +5,7 @@ node_modules
.nyc_output .nyc_output
npm-debug.log* npm-debug.log*
.eslintcache .eslintcache
package-lock.json
*.iml *.iml
selenium-debug.log selenium-debug.log
test/e2e/db.json test/e2e/db.json
-4
View File
@@ -15,8 +15,6 @@ before_deploy:
- npm run build - npm run build
env: env:
- DOCKER_IMAGE_NAME=swaggerapi/swagger-ui - DOCKER_IMAGE_NAME=swaggerapi/swagger-ui
script:
- npm test
deploy: deploy:
- provider: npm - provider: npm
email: apiteam@swagger.io email: apiteam@swagger.io
@@ -54,5 +52,3 @@ after_success:
docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG; docker push $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG;
fi; fi;
fi; fi;
- npm run build-bundle
- bundlesize
+1 -1
View File
@@ -20,7 +20,7 @@ The OpenAPI Specification has undergone 5 revisions since initial creation in 20
Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes Swagger UI Version | Release Date | OpenAPI Spec compatibility | Notes
------------------ | ------------ | -------------------------- | ----- ------------------ | ------------ | -------------------------- | -----
3.17.2 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.2](https://github.com/swagger-api/swagger-ui/tree/v3.17.2) 3.17.1 | 2018-06-16 | 2.0, 3.0 | [tag v3.17.1](https://github.com/swagger-api/swagger-ui/tree/v3.17.1)
3.0.21 | 2017-07-26 | 2.0 | [tag v3.0.21](https://github.com/swagger-api/swagger-ui/tree/v3.0.21) 3.0.21 | 2017-07-26 | 2.0 | [tag v3.0.21](https://github.com/swagger-api/swagger-ui/tree/v3.0.21)
2.2.10 | 2017-01-04 | 1.1, 1.2, 2.0 | [tag v2.2.10](https://github.com/swagger-api/swagger-ui/tree/v2.2.10) 2.2.10 | 2017-01-04 | 1.1, 1.2, 2.0 | [tag v2.2.10](https://github.com/swagger-api/swagger-ui/tree/v2.2.10)
2.1.5 | 2016-07-20 | 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-ui/tree/v2.1.5) 2.1.5 | 2016-07-20 | 1.1, 1.2, 2.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-ui/tree/v2.1.5)
+1
View File
@@ -5,6 +5,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Swagger UI</title> <title>Swagger UI</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" > <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+1
View File
@@ -4,6 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Swagger UI</title> <title>Swagger UI</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" > <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+70 -43
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -2
View File
@@ -73,7 +73,6 @@ module.exports = function(rules, options) {
uglifyOptions: { uglifyOptions: {
mangle: specialOptions.mangle, mangle: specialOptions.mangle,
beautify: !specialOptions.mangle, beautify: !specialOptions.mangle,
keep_fnames: true
}, },
sourceMap: true, sourceMap: true,
}), }),
@@ -142,7 +141,9 @@ module.exports = function(rules, options) {
"node_modules" "node_modules"
], ],
extensions: [".web.js", ".js", ".jsx", ".json", ".less"], extensions: [".web.js", ".js", ".jsx", ".json", ".less"],
alias: {} alias: {
base: "getbase/src/less/base",
}
}, },
devtool: specialOptions.sourcemaps ? "nosource-source-map" : false, devtool: specialOptions.sourcemaps ? "nosource-source-map" : false,
-20131
View File
File diff suppressed because it is too large Load Diff
+62 -51
View File
@@ -1,6 +1,6 @@
{ {
"name": "swagger-ui", "name": "swagger-ui",
"version": "3.17.2", "version": "3.17.1",
"main": "dist/swagger-ui.js", "main": "dist/swagger-ui.js",
"repository": "git@github.com:swagger-api/swagger-ui.git", "repository": "git@github.com:swagger-api/swagger-ui.git",
"contributors": [ "contributors": [
@@ -14,7 +14,7 @@
], ],
"license": "Apache-2.0", "license": "Apache-2.0",
"scripts": { "scripts": {
"build": "run-p --aggregate-output build-core build-bundle build-standalone", "build": "npm run build-core && npm run build-bundle && npm run build-standalone",
"build-bundle": "webpack --config webpack-dist-bundle.config.js --colors", "build-bundle": "webpack --config webpack-dist-bundle.config.js --colors",
"build-core": "webpack --config webpack-dist.config.js --colors", "build-core": "webpack --config webpack-dist.config.js --colors",
"build-standalone": "webpack --config webpack-dist-standalone.config.js --colors", "build-standalone": "webpack --config webpack-dist-standalone.config.js --colors",
@@ -24,19 +24,20 @@
"hot-server": "webpack-dev-server --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress --content-base dev-helpers/", "hot-server": "webpack-dev-server --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress --content-base dev-helpers/",
"deps-license": "license-checker --production --csv --out $npm_package_config_deps_check_dir/licenses.csv && license-checker --development --csv --out $npm_package_config_deps_check_dir/licenses-dev.csv", "deps-license": "license-checker --production --csv --out $npm_package_config_deps_check_dir/licenses.csv && license-checker --development --csv --out $npm_package_config_deps_check_dir/licenses-dev.csv",
"deps-size": "webpack -p --config webpack.check.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt", "deps-size": "webpack -p --config webpack.check.js --json | webpack-bundle-size-analyzer >| $npm_package_config_deps_check_dir/sizes.txt",
"deps-check": "run-s deps-license deps-size", "deps-check": "npm run deps-license && npm run deps-size",
"lint": "eslint --cache --ext '.js,.jsx' src test", "lint": "eslint --cache --ext '.js,.jsx' src test",
"lint-errors": "eslint --cache --quiet --ext '.js,.jsx' src test", "lint-errors": "eslint --cache --quiet --ext '.js,.jsx' src test",
"lint-fix": "eslint --cache --ext '.js,.jsx' src test --fix", "lint-fix": "eslint --cache --ext '.js,.jsx' src test --fix",
"test": "run-s just-test-in-node lint-errors", "test": "npm run just-test-in-node && npm run lint-errors",
"test-in-node": "run-s lint-errors just-test-in-node", "test-in-node": "npm run lint-errors && npm run just-test-in-node",
"just-test-in-node": "mocha --require test/setup.js --recursive --compilers js:babel-core/register --require source-map-support test/core test/components test/bugs test/swagger-ui-dist-package test/xss", "just-test": "karma start --config karma.conf.js",
"just-test-in-node": "mocha --require test/setup.js --recursive --compilers js:babel-core/register test/core test/components test/bugs test/swagger-ui-dist-package test/xss",
"just-check-coverage": "nyc npm run just-test-in-node", "just-check-coverage": "nyc npm run just-test-in-node",
"test-e2e": "sleep 3 && nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json", "test-e2e": "sleep 3 && nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json",
"e2e-initial-render": "nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json --group initial-render", "e2e-initial-render": "nightwatch test/e2e/scenarios/ --config test/e2e/nightwatch.json --group initial-render",
"mock-api": "json-server --watch test/e2e/db.json --port 3204", "mock-api": "json-server --watch test/e2e/db.json --port 3204",
"hot-e2e-server": "webpack-dev-server --port 3230 --content-base test/e2e/helpers --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress", "hot-e2e-server": "webpack-dev-server --port 3230 --content-base test/e2e/helpers --host 0.0.0.0 --config webpack-hot-dev-server.config.js --inline --hot --progress",
"e2e": "run-p -r hot-e2e-server mock-api test-e2e", "e2e": "npm-run-all --parallel -r hot-e2e-server mock-api test-e2e",
"open-static": "node -e 'require(\"open\")(\"http://localhost:3002\")'", "open-static": "node -e 'require(\"open\")(\"http://localhost:3002\")'",
"serve-static": "http-server dist/ -i -a 0.0.0.0 -p 3002", "serve-static": "http-server dist/ -i -a 0.0.0.0 -p 3002",
"start": "npm-run-all --parallel serve-static open-static" "start": "npm-run-all --parallel serve-static open-static"
@@ -44,45 +45,59 @@
"dependencies": { "dependencies": {
"@braintree/sanitize-url": "^2.0.2", "@braintree/sanitize-url": "^2.0.2",
"base64-js": "^1.2.0", "base64-js": "^1.2.0",
"brace": "0.7.0",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"commonmark": "^0.28.1", "commonmark": "^0.28.1",
"core-js": "^2.5.1", "core-js": "^2.5.1",
"css.escape": "1.5.1", "css.escape": "1.5.1",
"deep-extend": "0.5.1", "deep-extend": "0.5.1",
"dompurify": "^1.0.4", "dompurify": "^1.0.4",
"expect": "1.20.2",
"getbase": "^2.8.2",
"ieee754": "^1.1.8", "ieee754": "^1.1.8",
"immutable": "^3.x.x", "immutable": "^3.x.x",
"js-file-download": "^0.4.1", "js-file-download": "^0.4.1",
"js-yaml": "^3.5.5", "js-yaml": "^3.5.5",
"lodash": "^4.17.10", "lodash": "4.17.5",
"memoizee": "^0.4.12", "matcher": "^0.1.2",
"memoizee": "0.4.1",
"promise-worker": "^1.1.1",
"prop-types": "^15.5.10", "prop-types": "^15.5.10",
"react": "^15.6.2", "react": "^15.6.2",
"react-addons-perf": "^15.4.0", "react-addons-perf": "^15.4.0",
"react-addons-shallow-compare": "0.14.8",
"react-addons-test-utils": "^15.6.2",
"react-collapse": "^4.0.3", "react-collapse": "^4.0.3",
"react-debounce-input": "^3.2.0", "react-debounce-input": "^3.2.0",
"react-dom": "^15.6.2", "react-dom": "^15.6.2",
"react-height": "^2.0.0",
"react-hot-loader": "1.3.1",
"react-immutable-proptypes": "2.1.0", "react-immutable-proptypes": "2.1.0",
"react-immutable-pure-component": "^1.1.1", "react-immutable-pure-component": "^1.1.1",
"react-inspector": "^2.3.0",
"react-markdown": "^2.5.0", "react-markdown": "^2.5.0",
"react-motion": "^0.5.2", "react-motion": "^0.5.2",
"react-object-inspector": "0.2.1",
"react-redux": "^4.x.x", "react-redux": "^4.x.x",
"react-split-pane": "^0.1.77", "react-split-pane": "0.1.70",
"redux": "^3.x.x", "redux": "^3.x.x",
"redux-immutable": "3.0.8", "redux-immutable": "3.0.8",
"redux-logger": "*",
"remarkable": "^1.7.1", "remarkable": "^1.7.1",
"reselect": "^2.5.4", "reselect": "2.5.3",
"serialize-error": "^2.1.0", "scroll-to-element": "^2.0.0",
"swagger-client": "^3.8.7", "serialize-error": "2.0.0",
"shallowequal": "0.2.2",
"swagger-client": "^3.8.5",
"url-parse": "^1.1.8", "url-parse": "^1.1.8",
"whatwg-fetch": "0.11.1",
"worker-loader": "^0.7.1",
"xml": "1.0.1", "xml": "1.0.1",
"xml-but-prettier": "^1.0.1", "xml-but-prettier": "^1.0.1",
"yaml-js": "^0.2.3", "yaml-js": "0.2.0",
"zenscroll": "^4.0.2" "zenscroll": "4.0.1"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^8.4.1", "autoprefixer": "7.1.1",
"babel-core": "^6.23.1", "babel-core": "^6.23.1",
"babel-eslint": "^7.1.1", "babel-eslint": "^7.1.1",
"babel-loader": "^7.1.0", "babel-loader": "^7.1.0",
@@ -94,49 +109,52 @@
"babel-preset-react": "^6.23.0", "babel-preset-react": "^6.23.0",
"babel-preset-stage-0": "^6.22.0", "babel-preset-stage-0": "^6.22.0",
"babel-runtime": "^6.23.0", "babel-runtime": "^6.23.0",
"bundlesize": "^0.17.0", "chromedriver": "^2.30.1",
"chromedriver": "^2.38.3",
"copy-webpack-plugin": "^4.0.1", "copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.11", "css-loader": "0.28.4",
"deepmerge": "^2.1.0", "deep-extend": "^0.5.0",
"deepmerge": "^1.3.2",
"enzyme": "^2.7.1", "enzyme": "^2.7.1",
"eslint": "^4.1.1", "eslint": "^4.1.1",
"eslint-plugin-import": "^2.13.0", "eslint-plugin-import": "^2.6.0",
"eslint-plugin-mocha": "^4.11.0", "eslint-plugin-mocha": "^4.11.0",
"eslint-plugin-react": "~7.7.0", "eslint-plugin-react": "~7.7.0",
"expect": "^1.20.2", "extract-text-webpack-plugin": "^2.1.2",
"extract-text-webpack-plugin": "^3.0.2", "file-loader": "0.11.2",
"file-loader": "^1.1.11",
"git-describe": "^4.0.1", "git-describe": "^4.0.1",
"imports-loader": "^0.8.0", "imports-loader": "0.7.1",
"jsdom": "^11.10.0", "jsdom": "^11.10.0",
"json-loader": "^0.5.7", "json-loader": "0.5.4",
"json-server": "^0.12.2", "json-server": "^0.11.0",
"less": "^3.0.2", "karma": "^1.7.0",
"license-checker": "^19.0.0", "karma-chrome-launcher": "^2.2.0",
"mocha": "^5.1.1", "karma-mocha": "^1.3.0",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "2.0.3",
"less": "2.7.2",
"license-checker": "^11.0.0",
"mocha": "^3.4.2",
"nightwatch": "^0.9.16", "nightwatch": "^0.9.16",
"node-sass": "^4.5.0", "node-sass": "^4.5.0",
"npm-run-all": "^4.1.2", "npm-run-all": "4.0.2",
"null-loader": "0.1.1", "null-loader": "0.1.1",
"nyc": "^11.3.0", "nyc": "^11.3.0",
"open": "0.0.5", "open": "0.0.5",
"postcss-loader": "^2.1.5", "postcss-loader": "2.0.6",
"raw-loader": "0.5.1", "raw-loader": "0.5.1",
"react-hot-loader": "^1.3.1",
"react-test-renderer": "^15.5.4", "react-test-renderer": "^15.5.4",
"rimraf": "^2.6.0", "rimraf": "^2.6.0",
"sass-loader": "^7.0.1", "sass-loader": "^6.0.2",
"selenium-server-standalone-jar": "3.12.0", "selenium-server-standalone-jar": "3.4.0",
"standard": "^11.0.1", "standard": "^10.0.2",
"standard-loader": "^6.0.1", "standard-loader": "^6.0.1",
"style-loader": "^0.21.0", "style-loader": "0.18.2",
"tachyons-sass": "^4.9.2", "tachyons-sass": "^4.9.2",
"uglifyjs-webpack-plugin": "^1.2.5", "uglifyjs-webpack-plugin": "^1.2.5",
"url-loader": "^1.0.1", "url-loader": "0.5.9",
"webpack": "^3.1.0", "webpack": "^2.6.1",
"webpack-bundle-size-analyzer": "^2.5.0", "webpack-bundle-size-analyzer": "^2.5.0"
"webpack-cli": "^2.0.4",
"worker-loader": "^1.1.1"
}, },
"config": { "config": {
"deps_check_dir": ".deps_check" "deps_check_dir": ".deps_check"
@@ -147,19 +165,12 @@
"IE 11" "IE 11"
], ],
"optionalDependencies": { "optionalDependencies": {
"webpack-dev-server": "^2.11.1" "webpack-dev-server": "2.5.0"
}, },
"nyc": { "nyc": {
"all": true, "all": true,
"include": [ "include": [
"**/src/core/plugins/**.js" "**/src/core/plugins/**.js"
] ]
}, }
"bundlesize": [
{
"path": "./dist/swagger-ui-bundle.js",
"maxSize": "1.5 MB",
"compression": "none"
}
]
} }
-10
View File
@@ -1,10 +0,0 @@
{
"rules": {
"import/no-extraneous-dependencies": [
2,
{
"devDependencies": false
}
]
}
}
+1 -1
View File
@@ -2,7 +2,7 @@ import React from "react"
import PropTypes from "prop-types" import PropTypes from "prop-types"
import { Collapse } from "react-collapse" import { Collapse } from "react-collapse"
import { presets } from "react-motion" import { presets } from "react-motion"
import ObjectInspector from "react-inspector" import ObjectInspector from "react-object-inspector"
import Perf from "react-addons-perf" import Perf from "react-addons-perf"
export default class Debug extends React.Component { export default class Debug extends React.Component {
+1 -5
View File
@@ -41,7 +41,6 @@ export default class Models extends Component {
const ModelWrapper = getComponent("ModelWrapper") const ModelWrapper = getComponent("ModelWrapper")
const Collapse = getComponent("Collapse") const Collapse = getComponent("Collapse")
const ModelCollapse = getComponent("ModelCollapse") const ModelCollapse = getComponent("ModelCollapse")
const JumpToPath = getComponent("JumpToPath")
return <section className={ showModels ? "models is-open" : "models"}> return <section className={ showModels ? "models is-open" : "models"}>
<h4 onClick={() => layoutActions.show("models", !showModels)}> <h4 onClick={() => layoutActions.show("models", !showModels)}>
@@ -65,13 +64,11 @@ export default class Models extends Component {
this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name]) this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name])
} }
const specPath = Im.List([...specPathBase, name])
const content = <ModelWrapper name={ name } const content = <ModelWrapper name={ name }
expandDepth={ defaultModelsExpandDepth } expandDepth={ defaultModelsExpandDepth }
schema={ schema || Im.Map() } schema={ schema || Im.Map() }
displayName={displayName} displayName={displayName}
specPath={specPath} specPath={Im.List([...specPathBase, name])}
getComponent={ getComponent } getComponent={ getComponent }
specSelectors={ specSelectors } specSelectors={ specSelectors }
getConfigs = {getConfigs} getConfigs = {getConfigs}
@@ -85,7 +82,6 @@ export default class Models extends Component {
</span> </span>
return <div id={ `model-${name}` } className="model-container" key={ `models-section-${name}` }> return <div id={ `model-${name}` } className="model-container" key={ `models-section-${name}` }>
<span className="models-jump-to-path"><JumpToPath specPath={specPath} /></span>
<ModelCollapse <ModelCollapse
classes="model-box" classes="model-box"
collapsedContent={this.getCollapsedContent(name)} collapsedContent={this.getCollapsedContent(name)}
+2 -2
View File
@@ -21,8 +21,8 @@ export default class TryItOutButton extends React.Component {
return ( return (
<div className="try-out"> <div className="try-out">
{ {
enabled ? <button className="btn try-out__btn cancel" onClick={ onCancelClick }>Cancel</button> enabled ? <button className="btn try-out__btn cancel" onClick={ onTryoutClick }>Cancel</button>
: <button className="btn try-out__btn" onClick={ onTryoutClick }>Try it out </button> : <button className="btn try-out__btn" onClick={ onCancelClick }>Try it out </button>
} }
</div> </div>
) )
+2 -2
View File
@@ -113,11 +113,11 @@ export default class OperationContainer extends PureComponent {
layoutActions.show(["operations", tag, operationId], !isShown) layoutActions.show(["operations", tag, operationId], !isShown)
} }
onCancelClick=() => { onTryoutClick =() => {
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled}) this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
} }
onTryoutClick =() => { onCancelClick =() => {
let { specActions, path, method } = this.props let { specActions, path, method } = this.props
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled}) this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
specActions.clearValidateParams([path, method]) specActions.clearValidateParams([path, method])
+3 -7
View File
@@ -111,7 +111,7 @@ export class JsonSchema_array extends PureComponent {
constructor(props, context) { constructor(props, context) {
super(props, context) super(props, context)
this.state = { value: valueOrEmptyList(props.value)} this.state = {value: props.value}
} }
componentWillReceiveProps(props) { componentWillReceiveProps(props) {
@@ -135,7 +135,7 @@ export class JsonSchema_array extends PureComponent {
addItem = () => { addItem = () => {
this.setState(state => { this.setState(state => {
state.value = valueOrEmptyList(state.value) state.value = state.value || List()
return { return {
value: state.value.push("") value: state.value.push("")
} }
@@ -174,7 +174,7 @@ export class JsonSchema_array extends PureComponent {
return ( return (
<div> <div>
{ !value || !value.count || value.count() < 1 ? null : { !value || value.count() < 1 ? null :
value.map( (item,i) => { value.map( (item,i) => {
let schema = Object.assign({}, itemSchema) let schema = Object.assign({}, itemSchema)
if ( errors.length ) { if ( errors.length ) {
@@ -264,7 +264,3 @@ export class JsonSchema_object extends PureComponent {
} }
} }
function valueOrEmptyList(value) {
return List.isList(value) ? value : List()
}
@@ -10,7 +10,6 @@ const RequestBody = ({
getComponent, getComponent,
getConfigs, getConfigs,
specSelectors, specSelectors,
fn,
contentType, contentType,
isExecute, isExecute,
specPath, specPath,
@@ -86,7 +85,6 @@ const RequestBody = ({
<td className="col parameters-col_description"> <td className="col parameters-col_description">
{isExecute ? {isExecute ?
<JsonSchemaForm <JsonSchemaForm
fn={fn}
dispatchInitialValue={!isFile} dispatchInitialValue={!isFile}
schema={prop} schema={prop}
getComponent={getComponent} getComponent={getComponent}
@@ -134,7 +132,6 @@ RequestBody.propTypes = {
requestBodyValue: ImPropTypes.orderedMap.isRequired, requestBodyValue: ImPropTypes.orderedMap.isRequired,
getComponent: PropTypes.func.isRequired, getComponent: PropTypes.func.isRequired,
getConfigs: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired,
fn: PropTypes.object.isRequired,
specSelectors: PropTypes.object.isRequired, specSelectors: PropTypes.object.isRequired,
contentType: PropTypes.string, contentType: PropTypes.string,
isExecute: PropTypes.bool.isRequired, isExecute: PropTypes.bool.isRequired,
+3 -7
View File
@@ -2,20 +2,16 @@ import React from "react"
export function isOAS3(jsSpec) { export function isOAS3(jsSpec) {
const oasVersion = jsSpec.get("openapi") const oasVersion = jsSpec.get("openapi")
if(typeof oasVersion !== "string") { if(!oasVersion) {
return false return false
} }
// we gate against `3.1` becasue we want to explicitly opt into supporting it return oasVersion.startsWith("3.0.")
// at some point in the future -- KS, 7/2018
// starts with, but is not `3.0.` exactly
return oasVersion.startsWith("3.0.") && oasVersion.length > 4
} }
export function isSwagger2(jsSpec) { export function isSwagger2(jsSpec) {
const swaggerVersion = jsSpec.get("swagger") const swaggerVersion = jsSpec.get("swagger")
if(typeof swaggerVersion !== "string") { if(!swaggerVersion) {
return false return false
} }
-1
View File
@@ -29,7 +29,6 @@ export const sampleFromSchema = (schema, config={}) => {
let { type, example, properties, additionalProperties, items } = objectify(schema) let { type, example, properties, additionalProperties, items } = objectify(schema)
let { includeReadOnly, includeWriteOnly } = config let { includeReadOnly, includeWriteOnly } = config
if(example !== undefined) { if(example !== undefined) {
return deeplyStripKey(example, "$$ref", (val) => { return deeplyStripKey(example, "$$ref", (val) => {
// do a couple of quick sanity tests to ensure the value // do a couple of quick sanity tests to ensure the value
+1 -1
View File
@@ -742,7 +742,7 @@ export const getCommonExtensions = (defObj) => defObj.filter((v, k) => /^pattern
// `predicate` can be used to discriminate the stripping further, // `predicate` can be used to discriminate the stripping further,
// by preserving the key's place in the object based on its value. // by preserving the key's place in the object based on its value.
export function deeplyStripKey(input, keyToStrip, predicate = () => true) { export function deeplyStripKey(input, keyToStrip, predicate = () => true) {
if(typeof input !== "object" || Array.isArray(input) || input === null || !keyToStrip) { if(typeof input !== "object" || Array.isArray(input) || !keyToStrip) {
return input return input
} }
-8
View File
@@ -166,7 +166,6 @@ section.models
.model-container .model-container
{ {
margin: 0 20px 15px; margin: 0 20px 15px;
position: relative;
transition: all .5s; transition: all .5s;
@@ -187,13 +186,6 @@ section.models
{ {
margin: 0 20px; margin: 0 20px;
} }
.models-jump-to-path {
position: absolute;
top: 8px;
right: 5px;
opacity: 0.65;
}
} }
.model-box .model-box
+3 -3
View File
@@ -1,13 +1,13 @@
@mixin text_body($color: $text-body-default-font-color) @mixin text_body($color: $text-body-default-font-color)
{ {
font-family: sans-serif; font-family: 'Open Sans', sans-serif;
color: $color; color: $color;
} }
@mixin text_code($color: $text-code-default-font-color) @mixin text_code($color: $text-code-default-font-color)
{ {
font-family: monospace; font-family: 'Source Code Pro', monospace;
font-weight: 600; font-weight: 600;
color: $color; color: $color;
@@ -15,7 +15,7 @@
@mixin text_headline($color: $text-headline-default-font-color) @mixin text_headline($color: $text-headline-default-font-color)
{ {
font-family: sans-serif; font-family: 'Titillium Web', sans-serif;
color: $color; color: $color;
} }
-68
View File
@@ -1,68 +0,0 @@
import { fromJS } from "immutable"
import { isOAS3, isSwagger2 } from "corePlugins/oas3/helpers"
import expect from "expect"
const isOAS3Shorthand = (version) => isOAS3(fromJS({
openapi: version
}))
const isSwagger2Shorthand = (version) => isSwagger2(fromJS({
swagger: version
}))
describe("isOAS3", function () {
it("should recognize valid OAS3 version values", function () {
expect(isOAS3Shorthand("3.0.0")).toEqual(true)
expect(isOAS3Shorthand("3.0.1")).toEqual(true)
expect(isOAS3Shorthand("3.0.11111")).toEqual(true)
expect(isOAS3Shorthand("3.0.0-rc0")).toEqual(true)
})
it("should fail for invalid OAS3 version values", function () {
expect(isOAS3Shorthand("3.0")).toEqual(false)
expect(isOAS3Shorthand("3.0.")).toEqual(false)
expect(isOAS3Shorthand("2.0")).toEqual(false)
})
it("should gracefully fail for non-string values", function () {
expect(isOAS3Shorthand(3.0)).toEqual(false)
expect(isOAS3Shorthand(3)).toEqual(false)
expect(isOAS3Shorthand({})).toEqual(false)
expect(isOAS3Shorthand(null)).toEqual(false)
})
it("should gracefully fail when `openapi` field is missing", function () {
expect(isOAS3(fromJS({
openApi: "3.0.0"
}))).toEqual(false)
expect(isOAS3Shorthand(null)).toEqual(false)
})
})
describe("isSwagger2", function () {
it("should recognize valid Swagger 2.0 version values", function () {
expect(isSwagger2Shorthand("2.0")).toEqual(true)
expect(isSwagger2Shorthand("2.0-rc0")).toEqual(true)
})
it("should fail for invalid Swagger 2.0 version values", function () {
expect(isSwagger2Shorthand("3.0")).toEqual(false)
expect(isSwagger2Shorthand("3.0.")).toEqual(false)
expect(isSwagger2Shorthand("2.1")).toEqual(false)
expect(isSwagger2Shorthand("1.2")).toEqual(false)
expect(isSwagger2Shorthand("2")).toEqual(false)
})
it("should gracefully fail for non-string values", function () {
expect(isSwagger2Shorthand(2.0)).toEqual(false)
expect(isSwagger2Shorthand(2)).toEqual(false)
expect(isSwagger2Shorthand({})).toEqual(false)
expect(isSwagger2Shorthand(null)).toEqual(false)
})
it("should gracefully fail when `swagger` field is missing", function () {
expect(isSwagger2(fromJS({
Swagger: "2.0"
}))).toEqual(false)
})
})
-40
View File
@@ -379,46 +379,6 @@ describe("sampleFromSchema", function() {
expect(sampleFromSchema(definition)).toEqual(expected) expect(sampleFromSchema(definition)).toEqual(expected)
}) })
it("returns null for a null example", function() {
var definition = {
"type": "object",
"properties": {
"foo": {
"type": "string",
"nullable": true,
"example": null
}
}
}
var expected = {
foo: null
}
expect(sampleFromSchema(definition)).toEqual(expected)
})
it("returns null for a null object-level example", function() {
var definition = {
"type": "object",
"properties": {
"foo": {
"type": "string",
"nullable": true
}
},
"example": {
"foo": null
}
}
var expected = {
foo: null
}
expect(sampleFromSchema(definition)).toEqual(expected)
})
}) })
}) })
+1
View File
@@ -5,6 +5,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Swagger UI</title> <title>Swagger UI</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" > <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+2 -2
View File
@@ -21,7 +21,7 @@
"selenium" : { "selenium" : {
"start_process" : true, "start_process" : true,
"server_path" : "node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.12.0.jar", "server_path" : "node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-3.4.0.jar",
"log_path" : "", "log_path" : "",
"host" : "127.0.0.1", "host" : "127.0.0.1",
"port" : 4444, "port" : 4444,
@@ -60,4 +60,4 @@
} }
} }
} }
} }