diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..3f9e65d --- /dev/null +++ b/.jshintrc @@ -0,0 +1,13 @@ +{ + "node": true, + "camelcase" : true, + "eqnull" : true, + "indent": 2, + "undef": true, + "quotmark": "single", + "maxlen": 80, + "trailing": true, + "newcap": true, + "nonew": true, + "undef": false +} diff --git a/README.md b/README.md index f0cc4cd..f962d0f 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,80 @@ Below is a simple LoopBack application. The explorer is mounted at `/explorer`. ```js var loopback = require('loopback'); var app = loopback(); -var explorer = require('loopback-explorer'); +var explorer = require('../'); +var port = 3000; var Product = loopback.Model.extend('product'); Product.attachTo(loopback.memory()); app.model(Product); +app.use('/explorer', explorer(app, {basePath: '/api'})); app.use('/api', loopback.rest()); -app.use('/explorer', explorer(app, { basePath: '/api' })); +console.log("Explorer mounted at localhost:" + port + "/explorer"); -app.listen(3000); +app.listen(port); ``` + +## Advanced Usage + +Many aspects of the explorer are configurable. + +See [options](#options) for a description of these options: + +```js +// Mount middleware before calling `explorer()` to add custom headers, auth, etc. +app.use('/explorer', loopback.basicAuth('user', 'password')); +app.use('/explorer', explorer(app, { + basePath: '/custom-api-root', + swaggerDistRoot: '/swagger', + apiInfo: { + 'title': 'My API', + 'description': 'Explorer example app.' + }, + resourcePath: 'swaggerResources', + version: '0.1-unreleasable' +})); +app.use('/custom-api-root', loopback.rest()); +``` + +## Options + +Options are passed to `explorer(app, options)`. + +`basePath`: **String** + +> Default: `app.get('restAPIRoot')` or `'/api'`. + +> Sets the API's base path. This must be set if you are mounting your api +> to a path different than '/api', e.g. with +> `loopback.use('/custom-api-root', loopback.rest()); + +`swaggerDistRoot`: **String** + +> Sets a path within your application for overriding Swagger UI files. + +> If present, will search `swaggerDistRoot` first when attempting to load Swagger UI, allowing +> you to pick and choose overrides to the interface. Use this to style your explorer or +> add additional functionality. + +> See [index.html](public/index.html), where you may want to begin your overrides. +> The rest of the UI is provided by [Swagger UI](https://github.com/wordnik/swagger-ui). + +`apiInfo`: **Object** + +> Additional information about your API. See the +> [spec](https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#513-info-object). + +`resourcePath`: **String** + +> Default: `'resources'` + +> Sets a different path for the +> [resource listing](https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#51-resource-listing). +> You generally shouldn't have to change this. + +`version`: **String** + +> Default: Read from package.json + +> Sets your API version. If not present, will read from your app's package.json. diff --git a/example/hidden.js b/example/hidden.js new file mode 100644 index 0000000..b152d93 --- /dev/null +++ b/example/hidden.js @@ -0,0 +1,20 @@ +var loopback = require('loopback'); +var app = loopback(); +var explorer = require('../'); +var port = 3000; + +var User = loopback.Model.extend('user', { + username: 'string', + email: 'string', + sensitiveInternalProperty: 'string', +}, {hidden: ['sensitiveInternalProperty']}); + +User.attachTo(loopback.memory()); +app.model(User); + +var apiPath = '/api'; +app.use('/explorer', explorer(app, {basePath: apiPath})); +app.use(apiPath, loopback.rest()); +console.log('Explorer mounted at localhost:' + port + '/explorer'); + +app.listen(port); diff --git a/example/simple.js b/example/simple.js index 0b8d8c2..3705ca5 100644 --- a/example/simple.js +++ b/example/simple.js @@ -1,12 +1,19 @@ var loopback = require('loopback'); var app = loopback(); var explorer = require('../'); +var port = 3000; -var Product = loopback.Model.extend('product'); +var Product = loopback.Model.extend('product', { + foo: {type: 'string', required: true}, + bar: 'string', + aNum: {type: 'number', min: 1, max: 10, required: true, default: 5} +}); Product.attachTo(loopback.memory()); app.model(Product); -app.use(loopback.rest()); -app.use('/explorer', explorer(app)); +var apiPath = '/api'; +app.use('/explorer', explorer(app, {basePath: apiPath})); +app.use(apiPath, loopback.rest()); +console.log('Explorer mounted at localhost:' + port + '/explorer'); -app.listen(3000); +app.listen(port); diff --git a/index.js b/index.js index 8d9428e..5062627 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,15 @@ + 'use strict'; /*! * Adds dynamically-updated docs as /explorer */ +var url = require('url'); var path = require('path'); -var extend = require('util')._extend; -var loopback = require('loopback'); -var express = requireLoopbackDependency('express'); +var urlJoin = require('./lib/url-join'); +var _defaults = require('lodash.defaults'); +var express = require('express'); +var swagger = require('./lib/swagger'); +var SWAGGER_UI_ROOT = path.join(__dirname, 'node_modules', + 'swagger-ui', 'dist'); var STATIC_ROOT = path.join(__dirname, 'public'); module.exports = explorer; @@ -17,41 +22,43 @@ module.exports = explorer; */ function explorer(loopbackApplication, options) { - options = extend({}, options); - options.basePath = options.basePath || loopbackApplication.get('restApiRoot'); - - loopbackApplication.docs(options); + options = _defaults({}, options, { + resourcePath: 'resources', + apiInfo: loopbackApplication.get('apiInfo') || {} + }); var app = express(); + swagger(loopbackApplication, app, options); + app.disable('x-powered-by'); + // config.json is loaded by swagger-ui. The server should respond + // with the relative URI of the resource doc. app.get('/config.json', function(req, res) { + // Get the path we're mounted at. It's best to get this from the referer + // in case we're proxied at a deep path. + var source = url.parse(req.headers.referer || '').pathname; + // If no referer is available, use the incoming url. + if (!source) { + source = req.originalUrl.replace(/\/config.json(\?.*)?$/, ''); + } res.send({ - discoveryUrl: (options.basePath || '') + '/swagger/resources' + url: urlJoin(source, '/' + options.resourcePath) }); }); - app.use(loopback.static(STATIC_ROOT)); + + // Allow specifying a static file root for swagger files. Any files in + // that folder will override those in the swagger-ui distribution. + // In this way one could e.g. make changes to index.html without having + // to worry about constantly pulling in JS updates. + if (options.swaggerDistRoot) { + app.use(express.static(options.swaggerDistRoot)); + } + // File in node_modules are overridden by a few customizations + app.use(express.static(STATIC_ROOT)); + // Swagger UI distribution + app.use(express.static(SWAGGER_UI_ROOT)); + return app; } - -function requireLoopbackDependency(module) { - try { - return require('loopback/node_modules/' + module); - } catch (err) { - if (err.code !== 'MODULE_NOT_FOUND') throw err; - try { - // Dependencies may be installed outside the loopback module, - // e.g. as peer dependencies. Try to load the dependency from there. - return require(module); - } catch (errPeer) { - if (errPeer.code !== 'MODULE_NOT_FOUND') throw errPeer; - // Rethrow the initial error to make it clear that we were trying - // to load a module that should have been installed inside - // "loopback/node_modules". This should minimise end-user's confusion. - // However, such situation should never happen as `require('loopback')` - // would have failed before this function was even called. - throw err; - } - } -} diff --git a/lib/class-helper.js b/lib/class-helper.js new file mode 100644 index 0000000..de3a0a7 --- /dev/null +++ b/lib/class-helper.js @@ -0,0 +1,47 @@ +'use strict'; + +/** + * Module dependencies. + */ +var modelHelper = require('./model-helper'); +var urlJoin = require('./url-join'); + +/** + * Export the classHelper singleton. + */ +var classHelper = module.exports = { + /** + * Given a remoting class, generate an API doc. + * See https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#52-api-declaration + * @param {Class} aClass Strong Remoting class. + * @param {Object} opts Options (passed from Swagger(remotes, options)) + * @param {String} opts.version API Version. + * @param {String} opts.swaggerVersion Swagger version. + * @param {String} opts.basePath Basepath (usually e.g. http://localhost:3000). + * @param {String} opts.resourcePath Resource path (usually /swagger/resources). + * @return {Object} API Declaration. + */ + generateAPIDoc: function(aClass, opts) { + return { + apiVersion: opts.version, + swaggerVersion: opts.swaggerVersion, + basePath: opts.basePath, + resourcePath: urlJoin('/', opts.resourcePath), + apis: [], + models: modelHelper.generateModelDefinition(aClass.ctor, {}) + }; + }, + /** + * Given a remoting class, generate a reference to an API declaration. + * This is meant for insertion into the Resource declaration. + * See https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#512-resource-object + * @param {Class} aClass Strong Remoting class. + * @return {Object} API declaration reference. + */ + generateResourceDocAPIEntry: function(aClass) { + return { + path: aClass.http.path, + description: aClass.ctor.sharedCtor && aClass.ctor.sharedCtor.description + }; + } +}; diff --git a/lib/model-helper.js b/lib/model-helper.js new file mode 100644 index 0000000..d612489 --- /dev/null +++ b/lib/model-helper.js @@ -0,0 +1,128 @@ +'use strict'; + +/** + * Module dependencies. + */ +var _cloneDeep = require('lodash.clonedeep'); +var translateDataTypeKeys = require('./translate-data-type-keys'); + +/** + * Export the modelHelper singleton. + */ +var modelHelper = module.exports = { + /** + * Given a class (from remotes.classes()), generate a model definition. + * This is used to generate the schema at the top of many endpoints. + * @param {Class} modelClass Model class. + * @param {Object} definitions Model definitions + * @return {Object} Associated model definition. + */ + generateModelDefinition: function generateModelDefinition(modelClass, definitions) { + var def = modelClass.definition; + var name = def.name; + var out = definitions || {}; + if (out[name]) { + // The model is already included + return out; + } + var required = []; + // Don't modify original properties. + var properties = _cloneDeep(def.properties); + + // Iterate through each property in the model definition. + // Types may be defined as constructors (e.g. String, Date, etc.), + // or as strings; getPropType() will take care of the conversion. + // See more on types: + // https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#431-primitives + Object.keys(properties).forEach(function(key) { + var prop = properties[key]; + + // Hide hidden properties. + if (modelHelper.isHiddenProperty(def, key)) { + delete properties[key]; + return; + } + + // Eke a type out of the constructors we were passed. + prop = modelHelper.LDLPropToSwaggerDataType(prop); + + // Required props sit in a per-model array. + if (prop.required || (prop.id && !prop.generated)) { + required.push(key); + } + + // Change mismatched keys. + prop = translateDataTypeKeys(prop); + + // Assign this back to the properties object. + properties[key] = prop; + }); + + out[name] = { + id: name, + properties: properties, + required: required + }; + + // Generate model definitions for related models + for (var r in modelClass.relations) { + var rel = modelClass.relations[r]; + generateModelDefinition(rel.modelTo, out); + if (rel.modelThrough) { + generateModelDefinition(rel.modelThrough, out); + } + } + return out; + }, + + /** + * Given a propType (which may be a function, string, or array), + * get a string type. + * @param {*} propType Prop type description. + * @return {String} Prop type string. + */ + getPropType: function getPropType(propType) { + if (typeof propType === 'function') { + propType = propType.name.toLowerCase(); + } else if(Array.isArray(propType)) { + propType = 'array'; + } + return propType; + }, + + isHiddenProperty: function(definition, propName) { + return definition.settings && + Array.isArray(definition.settings.hidden) && + definition.settings.hidden.indexOf(propName) !== -1; + }, + + // Converts a prop defined with the LDL spec to one conforming to the + // Swagger spec. + // https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#431-primitives + LDLPropToSwaggerDataType: function LDLPropToSwaggerDataType(prop) { + var out = _cloneDeep(prop); + out.type = modelHelper.getPropType(out.type); + + if (out.type === 'array') { + var hasItemType = typeof prop.type !== 'string' && prop.type[0]; + + if (hasItemType) { + var arrayProp = prop.type[0]; + if (!arrayProp.type) arrayProp = {type: arrayProp}; + out.items = modelHelper.LDLPropToSwaggerDataType(arrayProp); + } + } else if (out.type === 'date') { + out.type = 'string'; + out.format = 'date'; + } else if (out.type === 'buffer') { + out.type = 'string'; + out.format = 'byte'; + } else if (out.type === 'number') { + out.format = 'double'; // Since all JS numbers are doubles + } + return out; + } +}; + + + diff --git a/lib/route-helper.js b/lib/route-helper.js new file mode 100644 index 0000000..263bbd2 --- /dev/null +++ b/lib/route-helper.js @@ -0,0 +1,239 @@ +'use strict'; + +/** + * Module dependencies. + */ + +var debug = require('debug')('loopback:explorer:routeHelpers'); +var _cloneDeep = require('lodash.clonedeep'); +var translateDataTypeKeys = require('./translate-data-type-keys'); +var modelHelper = require('./model-helper'); + +/** + * Export the routeHelper singleton. + */ +var routeHelper = module.exports = { + /** + * Given a route, generate an API description and add it to the doc. + * If a route shares a path with another route (same path, different verb), + * add it as a new operation under that API description. + * + * Routes can be translated to API declaration 'operations', + * but they need a little massaging first. The `accepts` and + * `returns` declarations need some basic conversions to be compatible. + * + * This method will convert the route and add it to the doc. + * @param {Route} route Strong Remoting Route object. + * @param {Class} classDef Strong Remoting class. + * @param {Object} doc The class's backing API declaration doc. + */ + addRouteToAPIDeclaration: function (route, classDef, doc) { + var api = routeHelper.routeToAPIDoc(route, classDef); + var matchingAPIs = doc.apis.filter(function(existingAPI) { + return existingAPI.path === api.path; + }); + if (matchingAPIs.length) { + matchingAPIs[0].operations.push(api.operations[0]); + } else { + doc.apis.push(api); + } + }, + + /** + * Massage route.accepts. + * @param {Object} route Strong Remoting Route object. + * @param {Class} classDef Strong Remoting class. + * @return {Array} Array of param docs. + */ + convertAcceptsToSwagger: function convertAcceptsToSwagger(route, classDef) { + var split = route.method.split('.'); + var accepts = _cloneDeep(route.accepts) || []; + if (classDef && classDef.sharedCtor && + classDef.sharedCtor.accepts && split.length > 2 /* HACK */) { + accepts = accepts.concat(classDef.sharedCtor.accepts); + } + + // Filter out parameters that are generated from the incoming request, + // or generated by functions that use those resources. + accepts = accepts.filter(function(arg){ + if (!arg.http) return true; + // Don't show derived arguments. + if (typeof arg.http === 'function') return false; + // Don't show arguments set to the incoming http request. + // Please note that body needs to be shown, such as User.create(). + if (arg.http.source === 'req') return false; + return true; + }); + + // Translate LDL keys to Swagger keys. + accepts = accepts.map(translateDataTypeKeys); + + // Turn accept definitions in to parameter docs. + accepts = accepts.map(routeHelper.acceptToParameter(route)); + + return accepts; + }, + + /** + * Massage route.returns. + * @param {Object} route Strong Remoting Route object. + * @param {Class} classDef Strong Remoting class. + * @return {Object} A single returns param doc. + */ + convertReturnsToSwagger: function convertReturnsToSwagger(route, classDef) { + var routeReturns = _cloneDeep(route.returns) || []; + // HACK: makes autogenerated REST routes return the correct model name. + var firstReturn = routeReturns && routeReturns[0]; + if (firstReturn && firstReturn.arg === 'data') { + if (firstReturn.type === 'object') { + firstReturn.type = classDef.name; + } else if (firstReturn.type === 'array') { + firstReturn.type = [classDef.name]; + } + } + + // Translate LDL keys to Swagger keys. + var returns = routeReturns.map(translateDataTypeKeys); + + // Convert `returns` into a single object for later conversion into an + // operation object. + if (returns && returns.length > 1) { + // TODO ad-hoc model definition in the case of multiple return values. + returns = {model: 'object'}; + } else { + returns = returns[0] || {}; + } + + return returns; + }, + + /** + * Converts from an sl-remoting-formatted "Route" description to a + * Swagger-formatted "API" description. + * See https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#523-operation-object + */ + routeToAPIDoc: function routeToAPIDoc(route, classDef) { + var returnDesc; + + // Some parameters need to be altered; eventually most of this should + // be removed. + var accepts = routeHelper.convertAcceptsToSwagger(route, classDef); + var returns = routeHelper.convertReturnsToSwagger(route, classDef); + + debug('route %j', route); + + var apiDoc = { + path: routeHelper.convertPathFragments(route.path), + // Create the operation doc. Use `extendWithType` to add the necessary + // `items` and `format` fields. + operations: [routeHelper.extendWithType({ + method: routeHelper.convertVerb(route.verb), + // [rfeng] Swagger UI doesn't escape '.' for jQuery selector + nickname: route.method.replace(/\./g, '_'), + // Per the spec: + // https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#523-operation-object + // This is the only object that may have a type of 'void'. + type: returns.model || returns.type || 'void', + parameters: accepts, + // TODO(schoon) - We don't have descriptions for this yet. + responseMessages: [], + summary: route.description, // TODO(schoon) - Excerpt? + notes: '' // TODO(schoon) - `description` metadata? + })] + }; + + return apiDoc; + }, + + convertPathFragments: function convertPathFragments(path) { + return path.split('/').map(function (fragment) { + if (fragment.charAt(0) === ':') { + return '{' + fragment.slice(1) + '}'; + } + return fragment; + }).join('/'); + }, + + convertVerb: function convertVerb(verb) { + if (verb.toLowerCase() === 'all') { + return 'POST'; + } + + if (verb.toLowerCase() === 'del') { + return 'DELETE'; + } + + return verb.toUpperCase(); + }, + + /** + * A generator to convert from an sl-remoting-formatted "Accepts" description + * to a Swagger-formatted "Parameter" description. + */ + acceptToParameter: function acceptToParameter(route) { + var type = 'form'; + + if (route.verb.toLowerCase() === 'get') { + type = 'query'; + } + + return function (accepts) { + var name = accepts.name || accepts.arg; + var paramType = type; + + // TODO: Regex. This is leaky. + if (route.path.indexOf(':' + name) !== -1) { + paramType = 'path'; + } + + // Check the http settings for the argument + if(accepts.http && accepts.http.source) { + paramType = accepts.http.source; + } + + var out = { + paramType: paramType || type, + name: name, + description: accepts.description, + type: accepts.type, + required: !!accepts.required, + defaultValue: accepts.defaultValue, + minimum: accepts.minimum, + maximum: accepts.maximum, + allowMultiple: false + }; + + out = routeHelper.extendWithType(out); + + // HACK: Derive the type from model + if(out.name === 'data' && out.type === 'object') { + out.type = route.method.split('.')[0]; + } + + return out; + }; + }, + + /** + * Extends an Operation Object or Parameter object with + * a proper Swagger type and optional `format` and `items` fields. + * Does not modify original object. + * @param {Object} obj Object to extend. + * @return {Object} Extended object. + */ + extendWithType: function extendWithType(obj) { + obj = _cloneDeep(obj); + + // Format the `type` property using our LDL converter. + var typeDesc = modelHelper + .LDLPropToSwaggerDataType({type: obj.model || obj.type}); + // The `typeDesc` may have additional attributes, such as + // `format` for non-primitive types. + Object.keys(typeDesc).forEach(function(key){ + obj[key] = typeDesc[key]; + }); + return obj; + } +}; + + diff --git a/lib/swagger.js b/lib/swagger.js new file mode 100644 index 0000000..2bea1a1 --- /dev/null +++ b/lib/swagger.js @@ -0,0 +1,141 @@ +'use strict'; +/** + * Expose the `Swagger` plugin. + */ +module.exports = Swagger; + +/** + * Module dependencies. + */ +var debug = require('debug')('loopback:explorer:swagger'); +var path = require('path'); +var urlJoin = require('./url-join'); +var _defaults = require('lodash.defaults'); +var classHelper = require('./class-helper'); +var modelHelper = require('./model-helper'); +var routeHelper = require('./route-helper'); + +/** + * Create a remotable Swagger module for plugging into `RemoteObjects`. + * + * @param {Application} loopbackApplication Host loopback application. + * @param {Application} swaggerApp Swagger application used for hosting + * these files. + * @param {Object} opts Options. + */ +function Swagger(loopbackApplication, swaggerApp, opts) { + opts = _defaults({}, opts, { + swaggerVersion: '1.2', + basePath: loopbackApplication.get('restApiRoot') || '/api', + resourcePath: 'resources', + version: getVersion() + }); + + // We need a temporary REST adapter to discover our available routes. + var remotes = loopbackApplication.remotes(); + var adapter = remotes.handler('rest').adapter; + var routes = adapter.allRoutes(); + var classes = remotes.classes(); + + // These are the docs we will be sending from the /swagger endpoints. + var resourceDoc = generateResourceDoc(opts); + var apiDocs = {}; + + // A class is an endpoint root; e.g. /users, /products, and so on. + classes.forEach(function (aClass) { + var doc = apiDocs[aClass.name] = classHelper.generateAPIDoc(aClass, opts); + resourceDoc.apis.push(classHelper.generateResourceDocAPIEntry(aClass)); + + // Add the getter for this doc. + var docPath = urlJoin(opts.resourcePath, aClass.http.path); + addRoute(swaggerApp, docPath, doc); + }); + + // A route is an endpoint, such as /users/findOne. + routes.forEach(function(route) { + // Get the API doc matching this class name. + var className = route.method.split('.')[0]; + var doc = apiDocs[className]; + if (!doc) { + console.error('Route exists with no class: %j', route); + return; + } + // Get the class definition matching this route. + var classDef = classes.filter(function (item) { + return item.name === className; + })[0]; + + routeHelper.addRouteToAPIDeclaration(route, classDef, doc); + }); + + /** + * The topmost Swagger resource is a description of all (non-Swagger) + * resources available on the system, and where to find more + * information about them. + */ + addRoute(swaggerApp, opts.resourcePath, resourceDoc); +} + +/** + * Add a route to this remoting extension. + * @param {Application} app Express application. + * @param {String} uri Path from which to serve the doc. + * @param {Object} doc Doc to serve. + */ +function addRoute(app, uri, doc) { + + var hasBasePath = Object.keys(doc).indexOf('basePath') !== -1; + var initialPath = doc.basePath || ''; + + app.get(urlJoin('/', uri), function(req, res) { + + // There's a few forces at play that require this "hack". The Swagger spec + // requires a `basePath` to be set in the API descriptions. However, we + // can't guarantee this path is either reachable or desirable if it's set + // as a part of the options. + // + // The simplest way around this is to reflect the value of the `Host` HTTP + // header as the `basePath`. Because we pre-build the Swagger data, we don't + // know that header at the time the data is built. + if (hasBasePath) { + var headers = req.headers; + var host = headers.Host || headers.host; + doc.basePath = req.protocol + '://' + host + initialPath; + } + res.status(200).send(doc); + }); +} + +/** + * Generate a top-level resource doc. This is the entry point for swagger UI + * and lists all of the available APIs. + * @param {Object} opts Swagger options. + * @return {Object} Resource doc. + */ +function generateResourceDoc(opts) { + return { + swaggerVersion: opts.swaggerVersion, + apiVersion: opts.version, + apis: [], + // See https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#513-info-object + info: opts.apiInfo + // TODO Authorizations + // https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#514-authorizations-object + // TODO Produces/Consumes + // https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#52-api-declaration + }; +} + +/** + * Attempt to get the current API version from package.json. + * @return {String} API Version. + */ +function getVersion() { + var version; + try { + version = require(path.join(process.cwd(), 'package.json')).version; + } catch(e) { + version = ''; + } + return version; +} diff --git a/lib/translate-data-type-keys.js b/lib/translate-data-type-keys.js new file mode 100644 index 0000000..a47c85d --- /dev/null +++ b/lib/translate-data-type-keys.js @@ -0,0 +1,38 @@ +'use strict'; + +/** + * Module dependencies. + */ + +var _cloneDeep = require('lodash.clonedeep'); + +// Keys that are different between LDL and Swagger +var KEY_TRANSLATIONS = { + // LDL : Swagger + 'doc': 'description', + 'default': 'defaultValue', + 'min': 'minimum', + 'max': 'maximum' +}; + +/** + * Correct key mismatches between LDL & Swagger. + * Does not modify original object. + * @param {Object} object Object on which to change keys. + * @return {Object} Translated object. + */ +module.exports = function translateDataTypeKeys(object) { + object = _cloneDeep(object); + Object.keys(KEY_TRANSLATIONS).forEach(function(LDLKey){ + var val = object[LDLKey]; + if (val) { + // Should change in Swagger 2.0 + if (LDLKey === 'min' || LDLKey === 'max') { + val = String(val); + } + object[KEY_TRANSLATIONS[LDLKey]] = val; + } + delete object[LDLKey]; + }); + return object; +}; diff --git a/lib/url-join.js b/lib/url-join.js new file mode 100644 index 0000000..4805191 --- /dev/null +++ b/lib/url-join.js @@ -0,0 +1,8 @@ +'use strict'; + +// Simple url joiner. Ensure we don't have to care about whether or not +// we are fed paths with leading/trailing slashes. +module.exports = function urlJoin() { + var args = Array.prototype.slice.call(arguments); + return args.join('/').replace(/\/+/g, '/'); +}; diff --git a/package.json b/package.json index 9063573..05eb9fb 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,11 @@ { "name": "loopback-explorer", - "version": "1.1.1", + "version": "1.2.6", "description": "Browse and test your LoopBack app's APIs", "main": "index.js", "scripts": { "test": "mocha" }, - "peerDependencies": { - "loopback": "2.x || 1.x >=1.5" - }, "repository": { "type": "git", "url": "git://github.com/strongloop/loopback-explorer.git" @@ -25,12 +22,19 @@ }, "devDependencies": { "loopback": "1.x", - "mocha": "~1.14.0", - "supertest": "~0.8.1", - "chai": "~1.8.1" + "mocha": "~1.20.1", + "supertest": "~0.13.0", + "chai": "~1.9.1" }, "license": { "name": "Dual MIT/StrongLoop", "url": "https://github.com/strongloop/loopback-explorer/blob/master/LICENSE" + }, + "dependencies": { + "swagger-ui": "~2.0.18", + "debug": "~1.0.3", + "lodash.clonedeep": "^2.4.1", + "lodash.defaults": "^2.4.1", + "express": "3.x" } } diff --git a/public/css/hightlight.default.css b/public/css/hightlight.default.css deleted file mode 100644 index e417fc1..0000000 --- a/public/css/hightlight.default.css +++ /dev/null @@ -1,135 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev - -*/ - -pre code { - display: block; padding: 0.5em; - background: #F0F0F0; -} - -pre code, -pre .subst, -pre .tag .title, -pre .lisp .title, -pre .clojure .built_in, -pre .nginx .title { - color: black; -} - -pre .string, -pre .title, -pre .constant, -pre .parent, -pre .tag .value, -pre .rules .value, -pre .rules .value .number, -pre .preprocessor, -pre .ruby .symbol, -pre .ruby .symbol .string, -pre .aggregate, -pre .template_tag, -pre .django .variable, -pre .smalltalk .class, -pre .addition, -pre .flow, -pre .stream, -pre .bash .variable, -pre .apache .tag, -pre .apache .cbracket, -pre .tex .command, -pre .tex .special, -pre .erlang_repl .function_or_atom, -pre .markdown .header { - color: #800; -} - -pre .comment, -pre .annotation, -pre .template_comment, -pre .diff .header, -pre .chunk, -pre .markdown .blockquote { - color: #888; -} - -pre .number, -pre .date, -pre .regexp, -pre .literal, -pre .smalltalk .symbol, -pre .smalltalk .char, -pre .go .constant, -pre .change, -pre .markdown .bullet, -pre .markdown .link_url { - color: #080; -} - -pre .label, -pre .javadoc, -pre .ruby .string, -pre .decorator, -pre .filter .argument, -pre .localvars, -pre .array, -pre .attr_selector, -pre .important, -pre .pseudo, -pre .pi, -pre .doctype, -pre .deletion, -pre .envvar, -pre .shebang, -pre .apache .sqbracket, -pre .nginx .built_in, -pre .tex .formula, -pre .erlang_repl .reserved, -pre .prompt, -pre .markdown .link_label, -pre .vhdl .attribute, -pre .clojure .attribute, -pre .coffeescript .property { - color: #88F -} - -pre .keyword, -pre .id, -pre .phpdoc, -pre .title, -pre .built_in, -pre .aggregate, -pre .css .tag, -pre .javadoctag, -pre .phpdoc, -pre .yardoctag, -pre .smalltalk .class, -pre .winutils, -pre .bash .variable, -pre .apache .tag, -pre .go .typename, -pre .tex .command, -pre .markdown .strong, -pre .request, -pre .status { - font-weight: bold; -} - -pre .markdown .emphasis { - font-style: italic; -} - -pre .nginx .built_in { - font-weight: normal; -} - -pre .coffeescript .javascript, -pre .javascript .xml, -pre .tex .formula, -pre .xml .javascript, -pre .xml .vbscript, -pre .xml .css, -pre .xml .cdata { - opacity: 0.5; -} diff --git a/public/css/loopbackStyles.css b/public/css/loopbackStyles.css index 193bb4e..7a0d08a 100644 --- a/public/css/loopbackStyles.css +++ b/public/css/loopbackStyles.css @@ -1,26 +1,26 @@ /* Styles used for loopback explorer customizations */ .accessTokenDisplay { - color: white; - margin-right: 10px; + color: white; + margin-right: 10px; } .accessTokenDisplay.set { - border-bottom: 1px dotted #333; position: relative; cursor: pointer; + border-bottom: 1px dotted #333; position: relative; cursor: pointer; } .accessTokenDisplay.set:hover:after { - content: attr(data-tooltip); - position: absolute; - white-space: nowrap; - font-size: 12px; - background: rgba(0, 0, 0, 0.85); - padding: 3px 7px; - color: #FFF; - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - right: 0; - bottom: -30px; + content: attr(data-tooltip); + position: absolute; + white-space: nowrap; + font-size: 12px; + background: rgba(0, 0, 0, 0.85); + padding: 3px 7px; + color: #FFF; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + right: 0; + bottom: -30px; } -/* +/* FIXME: Separate the overrides from the rest of the styles, rather than override screen.css entirely. */ diff --git a/public/css/reset.css b/public/css/reset.css deleted file mode 100644 index b2b0789..0000000 --- a/public/css/reset.css +++ /dev/null @@ -1,125 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -b, -u, -i, -center, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} -body { - line-height: 1; -} -ol, -ul { - list-style: none; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/public/css/screen.css b/public/css/screen.css index d07a9ed..0b2ce15 100644 --- a/public/css/screen.css +++ b/public/css/screen.css @@ -1,1225 +1,1675 @@ -/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ -.swagger-section pre code { - display: block; - padding: 0.5em; - background: #F0F0F0; -} -.swagger-section pre code, -.swagger-section pre .subst, -.swagger-section pre .tag .title, -.swagger-section pre .lisp .title, -.swagger-section pre .clojure .built_in, -.swagger-section pre .nginx .title { - color: black; -} -.swagger-section pre .string, -.swagger-section pre .title, -.swagger-section pre .constant, -.swagger-section pre .parent, -.swagger-section pre .tag .value, -.swagger-section pre .rules .value, -.swagger-section pre .rules .value .number, -.swagger-section pre .preprocessor, -.swagger-section pre .ruby .symbol, -.swagger-section pre .ruby .symbol .string, -.swagger-section pre .aggregate, -.swagger-section pre .template_tag, -.swagger-section pre .django .variable, -.swagger-section pre .smalltalk .class, -.swagger-section pre .addition, -.swagger-section pre .flow, -.swagger-section pre .stream, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .apache .cbracket, -.swagger-section pre .tex .command, -.swagger-section pre .tex .special, -.swagger-section pre .erlang_repl .function_or_atom, -.swagger-section pre .markdown .header { - color: #800; -} -.swagger-section pre .comment, -.swagger-section pre .annotation, -.swagger-section pre .template_comment, -.swagger-section pre .diff .header, -.swagger-section pre .chunk, -.swagger-section pre .markdown .blockquote { - color: #888; -} -.swagger-section pre .number, -.swagger-section pre .date, -.swagger-section pre .regexp, -.swagger-section pre .literal, -.swagger-section pre .smalltalk .symbol, -.swagger-section pre .smalltalk .char, -.swagger-section pre .go .constant, -.swagger-section pre .change, -.swagger-section pre .markdown .bullet, -.swagger-section pre .markdown .link_url { - color: #080; -} -.swagger-section pre .label, -.swagger-section pre .javadoc, -.swagger-section pre .ruby .string, -.swagger-section pre .decorator, -.swagger-section pre .filter .argument, -.swagger-section pre .localvars, -.swagger-section pre .array, -.swagger-section pre .attr_selector, -.swagger-section pre .important, -.swagger-section pre .pseudo, -.swagger-section pre .pi, -.swagger-section pre .doctype, -.swagger-section pre .deletion, -.swagger-section pre .envvar, -.swagger-section pre .shebang, -.swagger-section pre .apache .sqbracket, -.swagger-section pre .nginx .built_in, -.swagger-section pre .tex .formula, -.swagger-section pre .erlang_repl .reserved, -.swagger-section pre .prompt, -.swagger-section pre .markdown .link_label, -.swagger-section pre .vhdl .attribute, -.swagger-section pre .clojure .attribute, -.swagger-section pre .coffeescript .property { - color: #8888ff; -} -.swagger-section pre .keyword, -.swagger-section pre .id, -.swagger-section pre .phpdoc, -.swagger-section pre .title, -.swagger-section pre .built_in, -.swagger-section pre .aggregate, -.swagger-section pre .css .tag, -.swagger-section pre .javadoctag, -.swagger-section pre .phpdoc, -.swagger-section pre .yardoctag, -.swagger-section pre .smalltalk .class, -.swagger-section pre .winutils, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .go .typename, -.swagger-section pre .tex .command, -.swagger-section pre .markdown .strong, -.swagger-section pre .request, -.swagger-section pre .status { - font-weight: bold; -} -.swagger-section pre .markdown .emphasis { - font-style: italic; -} -.swagger-section pre .nginx .built_in { - font-weight: normal; -} -.swagger-section pre .coffeescript .javascript, -.swagger-section pre .javascript .xml, -.swagger-section pre .tex .formula, -.swagger-section pre .xml .javascript, -.swagger-section pre .xml .vbscript, -.swagger-section pre .xml .css, -.swagger-section pre .xml .cdata { - opacity: 0.5; -} -.swagger-section .message-fail { - color: #cc0000; -} -.swagger-section .message-none { - display: none; -} -.swagger-section .message-success { - color: #89BF04; -} -.swagger-section .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; -} -.swagger-section .swagger-ui-wrap b, -.swagger-section .swagger-ui-wrap strong { - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap q, -.swagger-section .swagger-ui-wrap blockquote { - quotes: none; -} -.swagger-section .swagger-ui-wrap p { - line-height: 1.4em; - padding: 0 0 10px; - color: #333333; -} -.swagger-section .swagger-ui-wrap q:before, -.swagger-section .swagger-ui-wrap q:after, -.swagger-section .swagger-ui-wrap blockquote:before, -.swagger-section .swagger-ui-wrap blockquote:after { - content: none; -} -.swagger-section .swagger-ui-wrap .heading_with_menu h1, -.swagger-section .swagger-ui-wrap .heading_with_menu h2, -.swagger-section .swagger-ui-wrap .heading_with_menu h3, -.swagger-section .swagger-ui-wrap .heading_with_menu h4, -.swagger-section .swagger-ui-wrap .heading_with_menu h5, -.swagger-section .swagger-ui-wrap .heading_with_menu h6 { - display: block; - clear: none; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - width: 60%; -} -.swagger-section .swagger-ui-wrap table { - border-collapse: collapse; - border-spacing: 0; -} -.swagger-section .swagger-ui-wrap table thead tr th { - padding: 5px; - font-size: 0.9em; - color: #666666; - border-bottom: 1px solid #999999; -} -.swagger-section .swagger-ui-wrap table tbody tr:last-child td { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap table tbody tr.offset { - background-color: #f0f0f0; -} -.swagger-section .swagger-ui-wrap table tbody tr td { - padding: 6px; - font-size: 0.9em; - border-bottom: 1px solid #cccccc; - vertical-align: top; - line-height: 1.3em; -} -.swagger-section .swagger-ui-wrap ol { - margin: 0px 0 10px; - padding: 0 0 0 18px; - list-style-type: decimal; -} -.swagger-section .swagger-ui-wrap ol li { - padding: 5px 0px; - font-size: 0.9em; - color: #333333; -} -.swagger-section .swagger-ui-wrap ol, -.swagger-section .swagger-ui-wrap ul { - list-style: none; -} -.swagger-section .swagger-ui-wrap h1 a, -.swagger-section .swagger-ui-wrap h2 a, -.swagger-section .swagger-ui-wrap h3 a, -.swagger-section .swagger-ui-wrap h4 a, -.swagger-section .swagger-ui-wrap h5 a, -.swagger-section .swagger-ui-wrap h6 a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap h1 a:hover, -.swagger-section .swagger-ui-wrap h2 a:hover, -.swagger-section .swagger-ui-wrap h3 a:hover, -.swagger-section .swagger-ui-wrap h4 a:hover, -.swagger-section .swagger-ui-wrap h5 a:hover, -.swagger-section .swagger-ui-wrap h6 a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap h1 span.divider, -.swagger-section .swagger-ui-wrap h2 span.divider, -.swagger-section .swagger-ui-wrap h3 span.divider, -.swagger-section .swagger-ui-wrap h4 span.divider, -.swagger-section .swagger-ui-wrap h5 span.divider, -.swagger-section .swagger-ui-wrap h6 span.divider { - color: #aaaaaa; -} -.swagger-section .swagger-ui-wrap a { - color: #547f00; -} -.swagger-section .swagger-ui-wrap a img { - border: none; -} -.swagger-section .swagger-ui-wrap article, -.swagger-section .swagger-ui-wrap aside, -.swagger-section .swagger-ui-wrap details, -.swagger-section .swagger-ui-wrap figcaption, -.swagger-section .swagger-ui-wrap figure, -.swagger-section .swagger-ui-wrap footer, -.swagger-section .swagger-ui-wrap header, -.swagger-section .swagger-ui-wrap hgroup, -.swagger-section .swagger-ui-wrap menu, -.swagger-section .swagger-ui-wrap nav, -.swagger-section .swagger-ui-wrap section, -.swagger-section .swagger-ui-wrap summary { - display: block; -} -.swagger-section .swagger-ui-wrap pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; -} -.swagger-section .swagger-ui-wrap pre code { - line-height: 1.6em; - background: none; -} -.swagger-section .swagger-ui-wrap .content > .content-type > div > label { - clear: both; - display: block; - color: #0F6AB4; - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap .content pre { - font-size: 12px; - margin-top: 5px; - padding: 5px; -} -.swagger-section .swagger-ui-wrap .icon-btn { - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .info_title { - padding-bottom: 10px; - font-weight: bold; - font-size: 25px; -} -.swagger-section .swagger-ui-wrap p.big, -.swagger-section .swagger-ui-wrap div.big p { - font-size: 1em; - margin-bottom: 10px; -} -.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { - width: 500px !important; -} -.swagger-section .swagger-ui-wrap .info_license { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_tos { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_contact { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_description { - padding-bottom: 10px; - font-size: 15px; -} -.swagger-section .swagger-ui-wrap .markdown ol li, -.swagger-section .swagger-ui-wrap .markdown ul li { - padding: 3px 0px; - line-height: 1.4em; - color: #333333; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { - display: block; - padding: 4px; - width: auto; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { - font-size: 1.3em; -} -.swagger-section .swagger-ui-wrap table.fullwidth { - width: 100%; -} -.swagger-section .swagger-ui-wrap .model-signature { - font-family: "Droid Sans", sans-serif; - font-size: 1em; - line-height: 1.5em; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { - text-decoration: none; - color: #AAA; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap .model-signature .propType { - color: #5555aa; -} -.swagger-section .swagger-ui-wrap .model-signature pre:hover { - background-color: #ffffdd; -} -.swagger-section .swagger-ui-wrap .model-signature pre { - font-size: .85em; - line-height: 1.2em; - overflow: auto; - max-height: 200px; - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { - float: left; - margin: 0 5px 5px 0; - padding: 2px 5px 2px 0; - border-right: 1px solid #ddd; -} -.swagger-section .swagger-ui-wrap .model-signature .propOpt { - color: #555; -} -.swagger-section .swagger-ui-wrap .model-signature .snippet small { - font-size: 0.75em; -} -.swagger-section .swagger-ui-wrap .model-signature .propOptKey { - font-style: italic; -} -.swagger-section .swagger-ui-wrap .model-signature .description .strong { - font-weight: bold; - color: #000; - font-size: .9em; -} -.swagger-section .swagger-ui-wrap .model-signature .description div { - font-size: 0.9em; - line-height: 1.5em; - margin-left: 1em; -} -.swagger-section .swagger-ui-wrap .model-signature .description .stronger { - font-weight: bold; - color: #000; -} -.swagger-section .swagger-ui-wrap .model-signature .propName { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-container { - clear: both; -} -.swagger-section .swagger-ui-wrap .body-textarea { - width: 300px; - height: 100px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap .markdown p code, -.swagger-section .swagger-ui-wrap .markdown li code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #f0f0f0; - color: black; - padding: 1px 3px; -} -.swagger-section .swagger-ui-wrap .required { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap input.parameter { - width: 300px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap h1 { - color: black; - font-size: 1.5em; - line-height: 1.3em; - padding: 10px 0 10px 0; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .heading_with_menu { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap .heading_with_menu ul { - display: block; - clear: none; - float: right; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - margin-top: 10px; -} -.swagger-section .swagger-ui-wrap h2 { - color: black; - font-size: 1.3em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap h2 span.sub { - font-size: 0.7em; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap h2 span.sub a { - color: #777777; -} -.swagger-section .swagger-ui-wrap span.weak { - color: #666666; -} -.swagger-section .swagger-ui-wrap caption, -.swagger-section .swagger-ui-wrap th, -.swagger-section .swagger-ui-wrap td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} -.swagger-section .swagger-ui-wrap .code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { - font-family: "Droid Sans", sans-serif; - height: 250px; - padding: 4px; - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { - display: block; - float: left; - clear: none; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { - display: block; - float: left; - clear: none; - margin: 0 5px 0 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { - color: black; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { - display: block; - clear: both; - width: auto; - padding: 0 0 3px; - color: #666666; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { - padding-left: 3px; - color: #888888; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { - margin-left: 0; - font-style: italic; - font-size: 0.9em; - margin: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap span.blank, -.swagger-section .swagger-ui-wrap span.empty { - color: #888888; - font-style: italic; -} -.swagger-section .swagger-ui-wrap .markdown h3 { - color: #547f00; -} -.swagger-section .swagger-ui-wrap .markdown h4 { - color: #666666; -} -.swagger-section .swagger-ui-wrap .markdown pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; - margin: 0 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown pre code { - line-height: 1.6em; -} -.swagger-section .swagger-ui-wrap div.gist { - margin: 20px 0 25px 0 !important; -} -.swagger-section .swagger-ui-wrap ul#resources { - font-family: "Droid Sans", sans-serif; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource { - border-bottom: 1px solid #dddddd; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { - color: #555555; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { - border: 1px solid transparent; - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 14px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - border-right: 1px solid #dddddd; - color: #666666; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { - color: #aaaaaa; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #999999; - padding-left: 0; - display: block; - clear: none; - float: left; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #999999; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0 0 10px; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { - display: block; - clear: none; - float: left; - width: auto; - margin: 0; - padding: 0; - line-height: 1.1em; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { - padding-left: 10px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { - text-transform: uppercase; - text-decoration: none; - color: white; - display: inline-block; - width: 50px; - font-size: 0.7em; - text-align: center; - padding: 7px 0 4px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 6px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - border-top: none; - padding: 10px; - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - -o-border-bottom-left-radius: 6px; - -ms-border-bottom-left-radius: 6px; - -khtml-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - -o-border-bottom-right-radius: 6px; - -ms-border-bottom-right-radius: 6px; - -khtml-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - margin: 0 0 20px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { - float: none; - clear: both; - overflow: hidden; - margin-top: 10px; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { - padding: 4px 0 0 10px; - display: inline-block; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header img { - display: block; - clear: none; - float: right; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { - display: block; - clear: none; - float: left; - padding: 6px 8px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { - outline: 2px solid black; - outline-color: #cc0000; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - padding: 10px; - font-size: 0.9em; - max-height: 400px; - overflow-y: auto; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { - background-color: #f9f2e9; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { - background-color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0e0ca; - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { - background-color: #faf5ee; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #ffd20f; - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { - background-color: #f5e8e8; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #e8c6c7; - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - background-color: #f7eded; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { - color: #c8787a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { - background-color: #e7f6ec; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { - background-color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3e8d1; - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { - background-color: #ebf7f0; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { - background-color: #FCE9E3; - border: 1px solid #F5D5C3; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { - background-color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0cecb; - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { - background-color: #faf0ef; - border: 1px solid #f0cecb; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - border-top: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap p#colophon { - margin: 0 15px 40px 15px; - padding: 10px 0; - font-size: 0.8em; - border-top: 1px solid #dddddd; - font-family: "Droid Sans", sans-serif; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap p#colophon a { - text-decoration: none; - color: #547f00; -} -.swagger-section .swagger-ui-wrap h3 { - color: black; - font-size: 1.1em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown ol, -.swagger-section .swagger-ui-wrap .markdown ul { - font-family: "Droid Sans", sans-serif; - margin: 5px 0 10px; - padding: 0 0 0 18px; - list-style-type: disc; -} -.swagger-section .swagger-ui-wrap form.form_box { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box label { - color: #0f6ab4 !important; -} -.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { - display: block; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box p.weak { - font-size: 0.8em; -} -.swagger-section .swagger-ui-wrap form.form_box p { - font-size: 0.9em; - padding: 0 0 15px; - color: #7e7b6d; -} -.swagger-section .swagger-ui-wrap form.form_box p a { - color: #646257; -} -.swagger-section .swagger-ui-wrap form.form_box p strong { - color: black; -} -.swagger-section .title { - font-style: bold; -} -.swagger-section .secondary_form { - display: none; -} -.swagger-section .main_image { - display: block; - margin-left: auto; - margin-right: auto; -} -.swagger-section .oauth_body { - margin-left: 100px; - margin-right: 100px; -} -.swagger-section .oauth_submit { - text-align: center; -} -.swagger-section .api-popup-dialog { - z-index: 10000; - position: absolute; - width: 500px; - background: #FFF; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - color: #777; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog p.error-msg { - padding-left: 5px; - padding-bottom: 5px; -} -.swagger-section .api-popup-dialog button.api-popup-authbtn { - height: 30px; -} -.swagger-section .api-popup-dialog button.api-popup-cancel { - height: 30px; -} -.swagger-section .api-popup-scopes { - padding: 10px 20px; -} -.swagger-section .api-popup-scopes li { - padding: 5px 0; - line-height: 20px; -} -.swagger-section .api-popup-scopes .api-scope-desc { - padding-left: 20px; - font-style: italic; -} -.swagger-section .api-popup-scopes li input { - position: relative; - top: 2px; -} -.swagger-section .api-popup-actions { - padding-top: 10px; -} -.swagger-section .access { - float: right; -} -.swagger-section .auth { - float: right; -} -.swagger-section #api_information_panel { - position: absolute; - background: #FFF; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - max-width: 300px; - line-height: 30px; - color: black; - padding: 5px; -} -.swagger-section #api_information_panel p .api-msg-enabled { - color: green; -} -.swagger-section #api_information_panel p .api-msg-disabled { - color: red; -} -.swagger-section .api-ic { - height: 18px; - vertical-align: middle; - display: inline-block; - background: url(../images/explorer_icons.png) no-repeat; -} -.swagger-section .ic-info { - background-position: 0 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.swagger-section .ic-warning { - background-position: -60px 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.swagger-section .ic-error { - background-position: -30px 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.swagger-section .ic-off { - background-position: -90px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} -.swagger-section .ic-on { - background-position: -160px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} -.swagger-section #header { - background-color: #89bf04; - padding: 14px; -} -.swagger-section #header a#logo { - font-size: 1.5em; - font-weight: bold; - text-decoration: none; - background: transparent url(../images/logo_small.png) no-repeat left center; - padding: 20px 0 20px 40px; - color: white; -} -.swagger-section #header form#api_selector { - display: block; - clear: none; - float: right; -} -.swagger-section #header form#api_selector .input { - display: block; - clear: none; - float: left; - margin: 0 10px 0 0; -} -.swagger-section #header form#api_selector .input input#input_apiKey { - width: 200px; -} -.swagger-section #header form#api_selector .input input#input_baseUrl { - width: 400px; -} -.swagger-section #header form#api_selector .input a#explore { - display: block; - text-decoration: none; - font-weight: bold; - padding: 6px 8px; - font-size: 0.9em; - color: white; - background-color: #547f00; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -} -.swagger-section #header form#api_selector .input a#explore:hover { - background-color: #547f00; -} -.swagger-section #header form#api_selector .input input { - font-size: 0.9em; - padding: 3px; - margin: 0; -} -.swagger-section #content_message { - margin: 10px 15px; - font-style: italic; - color: #999999; -} -.swagger-section #message-bar { - min-height: 30px; - text-align: center; - padding-top: 10px; -} +/* FIXME move overrides only into loopbackStyles.css */ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +body { + line-height: 1; +} +ol, +ul { + list-style: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +caption, +th, +td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +q, +blockquote { + quotes: none; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; + content: none; +} +a img { + border: none; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section, +summary { + display: block; +} + +h1 a, +h2 a, +h3 a, +h4 a, +h5 a, +h6 a { + text-decoration: none; +} +h1 a:hover, +h2 a:hover, +h3 a:hover, +h4 a:hover, +h5 a:hover, +h6 a:hover { + text-decoration: underline; +} +h1 span.divider, +h2 span.divider, +h3 span.divider, +h4 span.divider, +h5 span.divider, +h6 span.divider { + color: #aaaaaa; +} +h1 { + color: black; + font-size: 1.5em; + line-height: 1.3em; + padding: 10px 0 10px 0; + font-family: 'Ubuntu', sans-serif; + font-weight: bold; +} +h2 { + color: black; + font-size: 1.3em; + padding: 10px 0 10px 0; +} +h2 a { + color: black; +} +h2 span.sub { + font-size: 0.7em; + color: #999999; + font-style: italic; +} +h2 span.sub a { + color: #777777; +} +h3 { + color: black; + font-size: 1.1em; + padding: 10px 0 10px 0; +} +.heading_with_menu { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.heading_with_menu h1, +.heading_with_menu h2, +.heading_with_menu h3, +.heading_with_menu h4, +.heading_with_menu h5, +.heading_with_menu h6 { + display: block; + clear: none; + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 60%; +} +.heading_with_menu ul { + display: block; + clear: none; + float: right; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; +} +input.parameter { + width: 300px; + border: 1px solid #aaa; +} +.body-textarea { + width: 300px; + height: 100px; + border: 1px solid #aaa; +} +p { + line-height: 1.4em; + padding: 0 0 10px; + color: #333333; +} +ol { + margin: 0px 0 10px; + padding: 0 0 0 18px; + list-style-type: decimal; +} +ol li { + padding: 5px 0px; + font-size: 0.9em; + color: #333333; +} +.markdown h3 { + color: #547f00; +} +.markdown h4 { + color: #666666; +} +.markdown pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; + margin: 0 0 10px 0; +} +.markdown pre code { + line-height: 1.6em; +} +.markdown p code, +.markdown li code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #f0f0f0; + color: black; + padding: 1px 3px; +} +.markdown ol, +.markdown ul { + font-family: 'Ubuntu', sans-serif; + margin: 5px 0 10px; + padding: 0 0 0 18px; + list-style-type: disc; +} +.markdown ol li, +.markdown ul li { + padding: 3px 0px; + line-height: 1.4em; + color: #333333; +} +div.gist { + margin: 20px 0 25px 0 !important; +} +p.big, +div.big p { + font-size: 1em; + margin-bottom: 10px; +} +span.weak { + color: #666666; +} +span.blank, +span.empty { + color: #888888; + font-style: italic; +} +a { + color: #547f00; +} +b, +strong { + font-family: 'Ubuntu', sans-serif; + font-weight: bold; +} +.code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +} +pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; +} +pre code { + line-height: 1.6em; +} +.required { + font-weight: bold; +} +table.fullwidth { + width: 100%; +} +table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; + border-bottom: 1px solid #999999; +} +table tbody tr.offset { + background-color: #f5f5f5; +} +table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; + line-height: 1.3em; +} +table tbody tr:last-child td { + border-bottom: none; +} +table tbody tr.offset { + background-color: #f0f0f0; +} +form.form_box { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; + padding: 10px; +} +form.form_box label { + color: #0f6ab4 !important; +} +form.form_box input[type=submit] { + display: block; + padding: 10px; +} +form.form_box p { + font-size: 0.9em; + padding: 0 0 15px; + color: #7e7b6d; +} +form.form_box p a { + color: #646257; +} +form.form_box p strong { + color: black; +} +form.form_box p.weak { + font-size: 0.8em; +} +form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; + margin: 0; +} +form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px; + color: #666666; +} +form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; + color: #888888; +} +form.formtastic fieldset.inputs ol li.required label { + color: black; +} +form.formtastic fieldset.inputs ol li.string input, +form.formtastic fieldset.inputs ol li.url input, +form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; + clear: both; +} +form.formtastic fieldset.inputs ol li.string input.title, +form.formtastic fieldset.inputs ol li.url input.title, +form.formtastic fieldset.inputs ol li.numeric input.title { + font-size: 1.3em; +} +form.formtastic fieldset.inputs ol li.text textarea { + font-family: 'Ubuntu', sans-serif; + height: 250px; + padding: 4px; + display: block; + clear: both; +} +form.formtastic fieldset.inputs ol li.select select { + display: block; + clear: both; +} +form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; + display: block; +} +form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; + margin: 0 5px 0 0; +} +form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; + padding: 0; +} +form.formtastic fieldset.buttons { + margin: 0; + padding: 0; +} +form.fullwidth ol li.string input, +form.fullwidth ol li.url input, +form.fullwidth ol li.text textarea, +form.fullwidth ol li.numeric input { + width: 500px !important; +} +body { + padding-top: 60px; + font-family: 'Ubuntu', sans-serif; +} +body #content_message { + margin: 10px 15px; + font-style: italic; + color: #999999; +} +body #header { + background-color: #08592b; + position: fixed; + width: 100%; + top: 0; + padding: 14px; +} +body #header a#logo { + font-size: 1.5em; + font-weight: bold; + text-decoration: none; + background: transparent url(../images/logo_small.png) no-repeat left center; + padding: 20px 0 20px 60px; + color: white; +} +body #header form#api_selector { + display: block; + clear: none; + float: right; +} +body #header form#api_selector .input { + display: block; + clear: none; + float: left; + margin: 0 10px 0 0; +} +body #header form#api_selector .input input { + font-size: 0.9em; + padding: 3px; + margin: 0; +} +body #header form#api_selector .input input#input_baseUrl { + width: 400px; +} +body #header form#api_selector .input input#input_apiKey { + width: 200px; +} +body #header form#api_selector .input a#explore { + display: block; + text-decoration: none; + font-weight: bold; + padding: 6px 8px; + font-size: 0.9em; + color: white; + background-color: #7dbd33; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +} +body #header form#api_selector .input a#explore:hover { + background-color: #808080; +} +body p#colophon { + margin: 0 15px 40px 15px; + padding: 10px 0; + font-size: 0.8em; + border-top: 1px solid #dddddd; + font-family: 'Ubuntu', sans-serif; + color: #999999; + font-style: italic; +} +body p#colophon a { + text-decoration: none; + color: #547f00; +} +body ul#resources { + font-family: 'Ubuntu', sans-serif; + font-size: 0.9em; +} +body ul#resources li.resource { + border-bottom: 1px solid #dddddd; +} +body ul#resources li.resource:last-child { + border-bottom: none; +} +body ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0; + display: block; + clear: none; + float: left; + font-family: 'Ubuntu', sans-serif; + font-weight: bold; +} +body ul#resources li.resource div.heading h2 a { + color: #999999; +} +body ul#resources li.resource div.heading h2 a:hover { + color: black; +} +body ul#resources li.resource div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 14px 10px 0 0; +} +body ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource div.heading ul.options li:first-child, +body ul#resources li.resource div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource div.heading ul.options li:last-child, +body ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource div.heading ul.options li { + color: #666666; + font-size: 0.9em; +} +body ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; + text-decoration: none; +} +body ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; + color: black; +} +body ul#resources li.resource:hover div.heading h2 a, +body ul#resources li.resource.active div.heading h2 a { + color: black; +} +body ul#resources li.resource:hover div.heading ul.options li a, +body ul#resources li.resource.active div.heading ul.options li a { + color: #555555; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #e6f3f6; + border: 1px solid #bfe1e8; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #0085a1; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right-color: #bfe1e8; + color: #0085a1; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0085a1; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #e9f5f7; + border: 1px solid #bfe1e8; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0085a1; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #66b6c7; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content .content-type div label { + clear: both; + display: block; + color: #0085a1; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #f4effa; + border: 1px solid #e3d8f3; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #9063cd; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right-color: #e3d8f3; + color: #9063cd; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #9063cd; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #f6f2fb; + border: 1px solid #e3d8f3; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #9063cd; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #bca1e1; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content .content-type div label { + clear: both; + display: block; + color: #9063cd; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #ede7ee; + border: 1px solid #d1c2d6; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #470a59; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right-color: #d1c2d6; + color: #470a59; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #470a59; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #efeaf1; + border: 1px solid #d1c2d6; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #470a59; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #916c9b; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content .content-type div label { + clear: both; + display: block; + color: #470a59; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #e6f9fb; + border: 1px solid #bff0f5; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #00c1d5; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + border-right-color: #bff0f5; + color: #00c1d5; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { + color: #00c1d5; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { + background-color: #e9fafb; + border: 1px solid #bff0f5; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { + color: #00c1d5; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #66dae6; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content .content-type div label { + clear: both; + display: block; + color: #00c1d5; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #fff2ec; + border: 1px solid #ffdfd0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #ff7f41; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + border-right-color: #ffdfd0; + color: #ff7f41; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { + color: #ff7f41; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { + background-color: #fff4ef; + border: 1px solid #ffdfd0; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { + color: #ff7f41; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #ffb28d; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content .content-type div label { + clear: both; + display: block; + color: #ff7f41; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; + background-color: #fbede7; + border: 1px solid #f4d1c3; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span { + margin: 0; + padding: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #d4470f; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path { + padding-left: 10px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path a { + color: black; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path a:hover { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:first-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.first { + padding-left: 0; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right-color: #f4d1c3; + color: #d4470f; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #d4470f; + text-decoration: none; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a:hover, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a:active, +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a.active { + text-decoration: underline; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #fbefeb; + border: 1px solid #f4d1c3; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #d4470f; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content form input[type='text'].error { + outline: 2px solid #cc0000; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header img { + display: block; + clear: none; + float: right; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #e5916f; + display: inline-block; + font-size: 0.9em; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content .content-type div label { + clear: both; + display: block; + color: #d4470f; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.model-signature { + font-family: 'Ubuntu', sans-serif; + font-size: 1em; + line-height: 1.5em; +} +.model-signature .description div { + font-size: 0.9em; + line-height: 1.5em; + margin-left: 1em; +} +.model-signature .description .strong { + font-weight: bold; + color: #000; + font-size: .9em; +} +.model-signature .description .stronger { + font-weight: bold; + color: #000; +} +.model-signature .signature-nav a { + text-decoration: none; + color: #AAA; +} +.model-signature pre { + font-size: .85em; + line-height: 1.2em; + overflow: auto; + max-height: 200px; + cursor: pointer; +} +.model-signature pre:hover { + background-color: #ffffdd; +} +.model-signature .snippet small { + font-size: 0.75em; +} +.model-signature .signature-container { + clear: both; +} +.model-signature .signature-nav a:hover { + text-decoration: underline; + color: black; +} +.model-signature .signature-nav .selected { + color: black; + text-decoration: none; +} +.model-signature ul.signature-nav { + display: block; + margin: 0; + padding: 0; +} +.model-signature ul.signature-nav li { + float: left; + margin: 0 5px 5px 0; + padding: 2px 5px 2px 0; + border-right: 1px solid #ddd; +} +.model-signature ul.signature-nav li:last-child { + padding-right: 0; + border-right: none; +} +.model-signature .propName { + font-weight: bold; +} +.model-signature .propType { + color: #5555aa; +} +.model-signature .propOptKey { + font-style: italic; +} +.model-signature .propOpt { + color: #555; +} +pre code { + background: none; +} +.content pre { + font-size: 12px; + margin-top: 5px; + padding: 5px; +} +.swagger-ui-wrap { + max-width: 960px; + margin-left: auto; + margin-right: auto; +} +.icon-btn { + cursor: pointer; +} +#message-bar { + min-height: 30px; + text-align: center; + padding-top: 10px; +} +.message-success { + color: #89BF04; +} +.message-fail { + color: #cc0000; +} \ No newline at end of file diff --git a/public/index.html b/public/index.html index f85ca38..e5b6ff6 100644 --- a/public/index.html +++ b/public/index.html @@ -1,47 +1,47 @@ - - - - StrongLoop API Explorer - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
-
- - + + + + StrongLoop API Explorer + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+
+ + diff --git a/public/lib/backbone-min.js b/public/lib/backbone-min.js deleted file mode 100644 index c1c0d4f..0000000 --- a/public/lib/backbone-min.js +++ /dev/null @@ -1,38 +0,0 @@ -// Backbone.js 0.9.2 - -// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://backbonejs.org -(function(){var l=this,y=l.Backbone,z=Array.prototype.slice,A=Array.prototype.splice,g;g="undefined"!==typeof exports?exports:l.Backbone={};g.VERSION="0.9.2";var f=l._;!f&&"undefined"!==typeof require&&(f=require("underscore"));var i=l.jQuery||l.Zepto||l.ender;g.setDomLibrary=function(a){i=a};g.noConflict=function(){l.Backbone=y;return this};g.emulateHTTP=!1;g.emulateJSON=!1;var p=/\s+/,k=g.Events={on:function(a,b,c){var d,e,f,g,j;if(!b)return this;a=a.split(p);for(d=this._callbacks||(this._callbacks= -{});e=a.shift();)f=(j=d[e])?j.tail:{},f.next=g={},f.context=c,f.callback=b,d[e]={tail:g,next:j?j.next:f};return this},off:function(a,b,c){var d,e,h,g,j,q;if(e=this._callbacks){if(!a&&!b&&!c)return delete this._callbacks,this;for(a=a?a.split(p):f.keys(e);d=a.shift();)if(h=e[d],delete e[d],h&&(b||c))for(g=h.tail;(h=h.next)!==g;)if(j=h.callback,q=h.context,b&&j!==b||c&&q!==c)this.on(d,j,q);return this}},trigger:function(a){var b,c,d,e,f,g;if(!(d=this._callbacks))return this;f=d.all;a=a.split(p);for(g= -z.call(arguments,1);b=a.shift();){if(c=d[b])for(e=c.tail;(c=c.next)!==e;)c.callback.apply(c.context||this,g);if(c=f){e=c.tail;for(b=[b].concat(g);(c=c.next)!==e;)c.callback.apply(c.context||this,b)}}return this}};k.bind=k.on;k.unbind=k.off;var o=g.Model=function(a,b){var c;a||(a={});b&&b.parse&&(a=this.parse(a));if(c=n(this,"defaults"))a=f.extend({},c,a);b&&b.collection&&(this.collection=b.collection);this.attributes={};this._escapedAttributes={};this.cid=f.uniqueId("c");this.changed={};this._silent= -{};this._pending={};this.set(a,{silent:!0});this.changed={};this._silent={};this._pending={};this._previousAttributes=f.clone(this.attributes);this.initialize.apply(this,arguments)};f.extend(o.prototype,k,{changed:null,_silent:null,_pending:null,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;if(b=this._escapedAttributes[a])return b;b=this.get(a);return this._escapedAttributes[a]=f.escape(null== -b?"":""+b)},has:function(a){return null!=this.get(a)},set:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c||(c={});if(!d)return this;d instanceof o&&(d=d.attributes);if(c.unset)for(e in d)d[e]=void 0;if(!this._validate(d,c))return!1;this.idAttribute in d&&(this.id=d[this.idAttribute]);var b=c.changes={},h=this.attributes,g=this._escapedAttributes,j=this._previousAttributes||{};for(e in d){a=d[e];if(!f.isEqual(h[e],a)||c.unset&&f.has(h,e))delete g[e],(c.silent?this._silent: -b)[e]=!0;c.unset?delete h[e]:h[e]=a;!f.isEqual(j[e],a)||f.has(h,e)!=f.has(j,e)?(this.changed[e]=a,c.silent||(this._pending[e]=!0)):(delete this.changed[e],delete this._pending[e])}c.silent||this.change(c);return this},unset:function(a,b){(b||(b={})).unset=!0;return this.set(a,null,b)},clear:function(a){(a||(a={})).unset=!0;return this.set(f.clone(this.attributes),a)},fetch:function(a){var a=a?f.clone(a):{},b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&&c(b,d)}; -a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},save:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c=c?f.clone(c):{};if(c.wait){if(!this._validate(d,c))return!1;e=f.clone(this.attributes)}a=f.extend({},c,{silent:!0});if(d&&!this.set(d,c.wait?a:c))return!1;var h=this,i=c.success;c.success=function(a,b,e){b=h.parse(a,e);if(c.wait){delete c.wait;b=f.extend(d||{},b)}if(!h.set(b,c))return false;i?i(h,a):h.trigger("sync",h,a,c)};c.error=g.wrapError(c.error, -h,c);b=this.isNew()?"create":"update";b=(this.sync||g.sync).call(this,b,this,c);c.wait&&this.set(e,a);return b},destroy:function(a){var a=a?f.clone(a):{},b=this,c=a.success,d=function(){b.trigger("destroy",b,b.collection,a)};if(this.isNew())return d(),!1;a.success=function(e){a.wait&&d();c?c(b,e):b.trigger("sync",b,e,a)};a.error=g.wrapError(a.error,b,a);var e=(this.sync||g.sync).call(this,"delete",this,a);a.wait||d();return e},url:function(){var a=n(this,"urlRoot")||n(this.collection,"url")||t(); -return this.isNew()?a:a+("/"==a.charAt(a.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},change:function(a){a||(a={});var b=this._changing;this._changing=!0;for(var c in this._silent)this._pending[c]=!0;var d=f.extend({},a.changes,this._silent);this._silent={};for(c in d)this.trigger("change:"+c,this,this.get(c),a);if(b)return this;for(;!f.isEmpty(this._pending);){this._pending= -{};this.trigger("change",this,a);for(c in this.changed)!this._pending[c]&&!this._silent[c]&&delete this.changed[c];this._previousAttributes=f.clone(this.attributes)}this._changing=!1;return this},hasChanged:function(a){return!arguments.length?!f.isEmpty(this.changed):f.has(this.changed,a)},changedAttributes:function(a){if(!a)return this.hasChanged()?f.clone(this.changed):!1;var b,c=!1,d=this._previousAttributes,e;for(e in a)if(!f.isEqual(d[e],b=a[e]))(c||(c={}))[e]=b;return c},previous:function(a){return!arguments.length|| -!this._previousAttributes?null:this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},isValid:function(){return!this.validate(this.attributes)},_validate:function(a,b){if(b.silent||!this.validate)return!0;var a=f.extend({},this.attributes,a),c=this.validate(a,b);if(!c)return!0;b&&b.error?b.error(this,c,b):this.trigger("error",this,c,b);return!1}});var r=g.Collection=function(a,b){b||(b={});b.model&&(this.model=b.model);b.comparator&&(this.comparator=b.comparator); -this._reset();this.initialize.apply(this,arguments);a&&this.reset(a,{silent:!0,parse:b.parse})};f.extend(r.prototype,k,{model:o,initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},add:function(a,b){var c,d,e,g,i,j={},k={},l=[];b||(b={});a=f.isArray(a)?a.slice():[a];c=0;for(d=a.length;c=b))this.iframe=i('