From 76ee1952be486ae52116848c8692a83ddedef09d Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Mon, 18 Apr 2016 18:01:24 +0200 Subject: [PATCH 01/14] This is changed for a particular need for dev mode. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0078ee99e90..9385a971fdb 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "swagger-ui", + "name": "swagger-ui-jensoleg", "author": "Tony Tam ", "contributors": [{ "name": "Mohsen Azimi", From 09c04188f71fcfd84b156f2ee94f43b59af0251d Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 20 Apr 2016 12:54:20 +0200 Subject: [PATCH 02/14] Adding JSON editor WIP. --- dist/css/print.css | 2 +- dist/css/screen.css | 2 +- dist/index.html | 2 + dist/lib/jsoneditor.js | 7287 +++++++++++++++++++ lib/jsoneditor.js | 7287 +++++++++++++++++++ src/main/html/css/print.css | 2 +- src/main/html/css/screen.css | 2 +- src/main/html/index.html | 2 + src/main/javascript/SwaggerUi.js | 8 + src/main/javascript/view/MainView.js | 12 + src/main/javascript/view/OperationView.js | 31 +- src/main/javascript/view/ParameterView.js | 39 + src/main/javascript/view/ResourceView.js | 2 + src/main/javascript/view/SignatureView.js | 4 + src/main/template/param.handlebars | 3 + src/main/template/param_required.handlebars | 3 + 16 files changed, 14681 insertions(+), 7 deletions(-) create mode 100644 dist/lib/jsoneditor.js create mode 100644 lib/jsoneditor.js diff --git a/dist/css/print.css b/dist/css/print.css index b4fc18036ef..fdb3b02ec70 100644 --- a/dist/css/print.css +++ b/dist/css/print.css @@ -82,7 +82,7 @@ .swagger-section pre .vhdl .attribute, .swagger-section pre .clojure .attribute, .swagger-section pre .coffeescript .property { - color: #8888ff; + color: #88F; } .swagger-section pre .keyword, .swagger-section pre .id, diff --git a/dist/css/screen.css b/dist/css/screen.css index 32b199b17b6..099cdc31825 100644 --- a/dist/css/screen.css +++ b/dist/css/screen.css @@ -82,7 +82,7 @@ .swagger-section pre .vhdl .attribute, .swagger-section pre .clojure .attribute, .swagger-section pre .coffeescript .property { - color: #8888ff; + color: #88F; } .swagger-section pre .keyword, .swagger-section pre .id, diff --git a/dist/index.html b/dist/index.html index 06c35c17658..1dde7d7cd9c 100644 --- a/dist/index.html +++ b/dist/index.html @@ -21,6 +21,7 @@ + @@ -80,6 +81,7 @@ onFailure: function (data) { log("Unable to Load SwaggerUI"); }, + jsonEditor: true, docExpansion: "none", sorter: "alpha" }); diff --git a/dist/lib/jsoneditor.js b/dist/lib/jsoneditor.js new file mode 100644 index 00000000000..b6bd5b19037 --- /dev/null +++ b/dist/lib/jsoneditor.js @@ -0,0 +1,7287 @@ +/*! JSON Editor v0.7.22 - JSON Schema -> HTML Editor + * By Jeremy Dorn - https://github.com/jdorn/json-editor/ + * Released under the MIT license + * + * Date: 2015-08-12 + */ + +/** + * See README.md for requirements and usage info + */ + +(function() { + +/*jshint loopfunc: true */ +/* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. + */ +// Inspired by base2 and Prototype +var Class; +(function(){ + var initializing = false, fnTest = /xyz/.test(function(){window.postMessage("xyz");}) ? /\b_super\b/ : /.*/; + + // The base Class implementation (does nothing) + Class = function(){}; + + // Create a new Class that inherits from this class + Class.extend = function(prop) { + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) + this.init.apply(this, arguments); + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.prototype.constructor = Class; + + // And make this class extendable + Class.extend = arguments.callee; + + return Class; + }; + + return Class; +})(); + +// CustomEvent constructor polyfill +// From MDN +(function () { + function CustomEvent ( event, params ) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + + window.CustomEvent = CustomEvent; +})(); + +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel +// MIT license +(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || + window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); + +// Array.isArray polyfill +// From MDN +(function() { + if(!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } +}()); +/** + * Taken from jQuery 2.1.3 + * + * @param obj + * @returns {boolean} + */ +var $isplainobject = function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if (typeof obj !== "object" || obj.nodeType || (obj !== null && obj === obj.window)) { + return false; + } + + if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; +}; + +var $extend = function(destination) { + var source, i,property; + for(i=1; i 0 && (obj.length - 1) in obj)) { + for(i=0; i= waiting && !callback_fired) { + callback_fired = true; + callback(); + } + }); + } + // Request failed + else { + window.console.log(r); + throw "Failed to fetch ref via ajax- "+url; + } + }; + r.send(); + }); + + if(!waiting) { + callback(); + } + }, + expandRefs: function(schema) { + schema = $extend({},schema); + + while (schema.$ref) { + var ref = schema.$ref; + delete schema.$ref; + + if(!this.refs[ref]) ref = decodeURIComponent(ref); + + schema = this.extendSchemas(schema,this.refs[ref]); + } + return schema; + }, + expandSchema: function(schema) { + var self = this; + var extended = $extend({},schema); + var i; + + // Version 3 `type` + if(typeof schema.type === 'object') { + // Array of types + if(Array.isArray(schema.type)) { + $each(schema.type, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.type[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.type = self.expandSchema(schema.type); + } + } + // Version 3 `disallow` + if(typeof schema.disallow === 'object') { + // Array of types + if(Array.isArray(schema.disallow)) { + $each(schema.disallow, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.disallow[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.disallow = self.expandSchema(schema.disallow); + } + } + // Version 4 `anyOf` + if(schema.anyOf) { + $each(schema.anyOf, function(key,value) { + schema.anyOf[key] = self.expandSchema(value); + }); + } + // Version 4 `dependencies` (schema dependencies) + if(schema.dependencies) { + $each(schema.dependencies,function(key,value) { + if(typeof value === "object" && !(Array.isArray(value))) { + schema.dependencies[key] = self.expandSchema(value); + } + }); + } + // Version 4 `not` + if(schema.not) { + schema.not = this.expandSchema(schema.not); + } + + // allOf schemas should be merged into the parent + if(schema.allOf) { + for(i=0; i= schema.maximum) { + errors.push({ + path: path, + property: 'maximum', + message: this.translate('error_maximum_excl', [schema.maximum]) + }); + } + else if(!schema.exclusiveMaximum && value > schema.maximum) { + errors.push({ + path: path, + property: 'maximum', + message: this.translate('error_maximum_incl', [schema.maximum]) + }); + } + } + + // `minimum` + if(schema.hasOwnProperty('minimum')) { + if(schema.exclusiveMinimum && value <= schema.minimum) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate('error_minimum_excl', [schema.minimum]) + }); + } + else if(!schema.exclusiveMinimum && value < schema.minimum) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate('error_minimum_incl', [schema.minimum]) + }); + } + } + } + // String specific validation + else if(typeof value === "string") { + // `maxLength` + if(schema.maxLength) { + if((value+"").length > schema.maxLength) { + errors.push({ + path: path, + property: 'maxLength', + message: this.translate('error_maxLength', [schema.maxLength]) + }); + } + } + + // `minLength` + if(schema.minLength) { + if((value+"").length < schema.minLength) { + errors.push({ + path: path, + property: 'minLength', + message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength]) + }); + } + } + + // `pattern` + if(schema.pattern) { + if(!(new RegExp(schema.pattern)).test(value)) { + errors.push({ + path: path, + property: 'pattern', + message: this.translate('error_pattern') + }); + } + } + } + // Array specific validation + else if(typeof value === "object" && value !== null && Array.isArray(value)) { + // `items` and `additionalItems` + if(schema.items) { + // `items` is an array + if(Array.isArray(schema.items)) { + for(i=0; i schema.maxItems) { + errors.push({ + path: path, + property: 'maxItems', + message: this.translate('error_maxItems', [schema.maxItems]) + }); + } + } + + // `minItems` + if(schema.minItems) { + if(value.length < schema.minItems) { + errors.push({ + path: path, + property: 'minItems', + message: this.translate('error_minItems', [schema.minItems]) + }); + } + } + + // `uniqueItems` + if(schema.uniqueItems) { + var seen = {}; + for(i=0; i schema.maxProperties) { + errors.push({ + path: path, + property: 'maxProperties', + message: this.translate('error_maxProperties', [schema.maxProperties]) + }); + } + } + + // `minProperties` + if(schema.minProperties) { + valid = 0; + for(i in value) { + if(!value.hasOwnProperty(i)) continue; + valid++; + } + if(valid < schema.minProperties) { + errors.push({ + path: path, + property: 'minProperties', + message: this.translate('error_minProperties', [schema.minProperties]) + }); + } + } + + // Version 4 `required` + if(schema.required && Array.isArray(schema.required)) { + for(i=0; i=0) { + holder = this.theme.getBlockLinkHolder(); + + link = this.theme.getBlockLink(); + link.setAttribute('target','_blank'); + + var media = document.createElement(type); + media.setAttribute('controls','controls'); + + this.theme.createMediaLink(holder,link,media); + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + link.setAttribute('href',url); + link.textContent = data.rel || url; + media.setAttribute('src',url); + }); + } + // Text links + else { + holder = this.theme.getBlockLink(); + holder.setAttribute('target','_blank'); + holder.textContent = data.rel; + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + holder.setAttribute('href',url); + holder.textContent = data.rel || url; + }); + } + + return holder; + }, + refreshWatchedFieldValues: function() { + if(!this.watched_values) return; + var watched = {}; + var changed = false; + var self = this; + + if(this.watched) { + var val,editor; + for(var name in this.watched) { + if(!this.watched.hasOwnProperty(name)) continue; + editor = self.jsoneditor.getEditor(this.watched[name]); + val = editor? editor.getValue() : null; + if(self.watched_values[name] !== val) changed = true; + watched[name] = val; + } + } + + watched.self = this.getValue(); + if(this.watched_values.self !== watched.self) changed = true; + + this.watched_values = watched; + + return changed; + }, + getWatchedFieldValues: function() { + return this.watched_values; + }, + updateHeaderText: function() { + if(this.header) { + // If the header has children, only update the text node's value + if(this.header.children.length) { + for(var i=0; i -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + getDisplayText: function(arr) { + var disp = []; + var used = {}; + + // Determine how many times each attribute name is used. + // This helps us pick the most distinct display text for the schemas. + $each(arr,function(i,el) { + if(el.title) { + used[el.title] = used[el.title] || 0; + used[el.title]++; + } + if(el.description) { + used[el.description] = used[el.description] || 0; + used[el.description]++; + } + if(el.format) { + used[el.format] = used[el.format] || 0; + used[el.format]++; + } + if(el.type) { + used[el.type] = used[el.type] || 0; + used[el.type]++; + } + }); + + // Determine display text for each element of the array + $each(arr,function(i,el) { + var name; + + // If it's a simple string + if(typeof el === "string") name = el; + // Object + else if(el.title && used[el.title]<=1) name = el.title; + else if(el.format && used[el.format]<=1) name = el.format; + else if(el.type && used[el.type]<=1) name = el.type; + else if(el.description && used[el.description]<=1) name = el.descripton; + else if(el.title) name = el.title; + else if(el.format) name = el.format; + else if(el.type) name = el.type; + else if(el.description) name = el.description; + else if(JSON.stringify(el).length < 50) name = JSON.stringify(el); + else name = "type"; + + disp.push(name); + }); + + // Replace identical display text with "text 1", "text 2", etc. + var inc = {}; + $each(disp,function(i,name) { + inc[name] = inc[name] || 0; + inc[name]++; + + if(used[name] > 1) disp[i] = name + " " + inc[name]; + }); + + return disp; + }, + getOption: function(key) { + try { + throw "getOption is deprecated"; + } + catch(e) { + window.console.error(e); + } + + return this.options[key]; + }, + showValidationErrors: function(errors) { + + } +}); + +JSONEditor.defaults.editors["null"] = JSONEditor.AbstractEditor.extend({ + getValue: function() { + return null; + }, + setValue: function() { + this.onChange(); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.string = JSONEditor.AbstractEditor.extend({ + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + setValue: function(value,initial,from_template) { + var self = this; + + if(this.template && !from_template) { + return; + } + + if(value === null || typeof value === 'undefined') value = ""; + else if(typeof value === "object") value = JSON.stringify(value); + else if(typeof value !== "string") value = ""+value; + + if(value === this.serialized) return; + + // Sanitize value before setting it + var sanitized = this.sanitize(value); + + if(this.input.value === sanitized) { + return; + } + + this.input.value = sanitized; + + // If using SCEditor, update the WYSIWYG + if(this.sceditor_instance) { + this.sceditor_instance.val(sanitized); + } + else if(this.epiceditor) { + this.epiceditor.importFile(null,sanitized); + } + else if(this.ace_editor) { + this.ace_editor.setValue(sanitized); + } + + var changed = from_template || this.getValue() !== value; + + this.refreshValue(); + + if(initial) this.is_dirty = false; + else if(this.jsoneditor.options.show_errors === "change") this.is_dirty = true; + + if(this.adjust_height) this.adjust_height(this.input); + + // Bubble this setValue to parents if the value changed + this.onChange(changed); + }, + getNumColumns: function() { + var min = Math.ceil(Math.max(this.getTitle().length,this.schema.maxLength||0,this.schema.minLength||0)/5); + var num; + + if(this.input_type === 'textarea') num = 6; + else if(['text','email'].indexOf(this.input_type) >= 0) num = 4; + else num = 2; + + return Math.min(12,Math.max(min,num)); + }, + build: function() { + var self = this, i; + if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + + this.format = this.schema.format; + if(!this.format && this.schema.media && this.schema.media.type) { + this.format = this.schema.media.type.replace(/(^(application|text)\/(x-)?(script\.)?)|(-source$)/g,''); + } + if(!this.format && this.options.default_format) { + this.format = this.options.default_format; + } + if(this.options.format) { + this.format = this.options.format; + } + + // Specific format + if(this.format) { + // Text Area + if(this.format === 'textarea') { + this.input_type = 'textarea'; + this.input = this.theme.getTextareaInput(); + } + // Range Input + else if(this.format === 'range') { + this.input_type = 'range'; + var min = this.schema.minimum || 0; + var max = this.schema.maximum || Math.max(100,min+1); + var step = 1; + if(this.schema.multipleOf) { + if(min%this.schema.multipleOf) min = Math.ceil(min/this.schema.multipleOf)*this.schema.multipleOf; + if(max%this.schema.multipleOf) max = Math.floor(max/this.schema.multipleOf)*this.schema.multipleOf; + step = this.schema.multipleOf; + } + + this.input = this.theme.getRangeInput(min,max,step); + } + // Source Code + else if([ + 'actionscript', + 'batchfile', + 'bbcode', + 'c', + 'c++', + 'cpp', + 'coffee', + 'csharp', + 'css', + 'dart', + 'django', + 'ejs', + 'erlang', + 'golang', + 'handlebars', + 'haskell', + 'haxe', + 'html', + 'ini', + 'jade', + 'java', + 'javascript', + 'json', + 'less', + 'lisp', + 'lua', + 'makefile', + 'markdown', + 'matlab', + 'mysql', + 'objectivec', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'python', + 'r', + 'ruby', + 'sass', + 'scala', + 'scss', + 'smarty', + 'sql', + 'stylus', + 'svg', + 'twig', + 'vbscript', + 'xml', + 'yaml' + ].indexOf(this.format) >= 0 + ) { + this.input_type = this.format; + this.source_code = true; + + this.input = this.theme.getTextareaInput(); + } + // HTML5 Input type + else { + this.input_type = this.format; + this.input = this.theme.getFormInputField(this.input_type); + } + } + // Normal text input + else { + this.input_type = 'text'; + this.input = this.theme.getFormInputField(this.input_type); + } + + // minLength, maxLength, and pattern + if(typeof this.schema.maxLength !== "undefined") this.input.setAttribute('maxlength',this.schema.maxLength); + if(typeof this.schema.pattern !== "undefined") this.input.setAttribute('pattern',this.schema.pattern); + else if(typeof this.schema.minLength !== "undefined") this.input.setAttribute('pattern','.{'+this.schema.minLength+',}'); + + if(this.options.compact) { + this.container.className += ' compact'; + } + else { + if(this.options.input_width) this.input.style.width = this.options.input_width; + } + + if(this.schema.readOnly || this.schema.readonly || this.schema.template) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input + .addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + // Don't allow changing if this field is a template + if(self.schema.template) { + this.value = self.value; + return; + } + + var val = this.value; + + // sanitize value + var sanitized = self.sanitize(val); + if(val !== sanitized) { + this.value = sanitized; + } + + self.is_dirty = true; + + self.refreshValue(); + self.onChange(true); + }); + + if(this.options.input_height) this.input.style.height = this.options.input_height; + if(this.options.expand_height) { + this.adjust_height = function(el) { + if(!el) return; + var i, ch=el.offsetHeight; + // Input too short + if(el.offsetHeight < el.scrollHeight) { + i=0; + while(el.offsetHeight < el.scrollHeight+3) { + if(i>100) break; + i++; + ch++; + el.style.height = ch+'px'; + } + } + else { + i=0; + while(el.offsetHeight >= el.scrollHeight+3) { + if(i>100) break; + i++; + ch--; + el.style.height = ch+'px'; + } + el.style.height = (ch+1)+'px'; + } + }; + + this.input.addEventListener('keyup',function(e) { + self.adjust_height(this); + }); + this.input.addEventListener('change',function(e) { + self.adjust_height(this); + }); + this.adjust_height(); + } + + if(this.format) this.input.setAttribute('data-schemaformat',this.format); + + this.control = this.theme.getFormControl(this.label, this.input, this.description); + this.container.appendChild(this.control); + + // Any special formatting that needs to happen after the input is added to the dom + window.requestAnimationFrame(function() { + // Skip in case the input is only a temporary editor, + // otherwise, in the case of an ace_editor creation, + // it will generate an error trying to append it to the missing parentNode + if(self.input.parentNode) self.afterInputReady(); + if(self.adjust_height) self.adjust_height(self.input); + }); + + // Compile and store the template + if(this.schema.template) { + this.template = this.jsoneditor.compileTemplate(this.schema.template, this.template_engine); + this.refreshValue(); + } + else { + this.refreshValue(); + } + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + // TODO: WYSIWYG and Markdown editors + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + // TODO: WYSIWYG and Markdown editors + this._super(); + }, + afterInputReady: function() { + var self = this, options; + + // Code editor + if(this.source_code) { + // WYSIWYG html and bbcode editor + if(this.options.wysiwyg && + ['html','bbcode'].indexOf(this.input_type) >= 0 && + window.jQuery && window.jQuery.fn && window.jQuery.fn.sceditor + ) { + options = $extend({},{ + plugins: self.input_type==='html'? 'xhtml' : 'bbcode', + emoticonsEnabled: false, + width: '100%', + height: 300 + },JSONEditor.plugins.sceditor,self.options.sceditor_options||{}); + + window.jQuery(self.input).sceditor(options); + + self.sceditor_instance = window.jQuery(self.input).sceditor('instance'); + + self.sceditor_instance.blur(function() { + // Get editor's value + var val = window.jQuery("
"+self.sceditor_instance.val()+"
"); + // Remove sceditor spans/divs + window.jQuery('#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf',val).remove(); + // Set the value and update + self.input.value = val.html(); + self.value = self.input.value; + self.is_dirty = true; + self.onChange(true); + }); + } + // EpicEditor for markdown (if it's loaded) + else if (this.input_type === 'markdown' && window.EpicEditor) { + this.epiceditor_container = document.createElement('div'); + this.input.parentNode.insertBefore(this.epiceditor_container,this.input); + this.input.style.display = 'none'; + + options = $extend({},JSONEditor.plugins.epiceditor,{ + container: this.epiceditor_container, + clientSideStorage: false + }); + + this.epiceditor = new window.EpicEditor(options).load(); + + this.epiceditor.importFile(null,this.getValue()); + + this.epiceditor.on('update',function() { + var val = self.epiceditor.exportFile(); + self.input.value = val; + self.value = val; + self.is_dirty = true; + self.onChange(true); + }); + } + // ACE editor for everything else + else if(window.ace) { + var mode = this.input_type; + // aliases for c/cpp + if(mode === 'cpp' || mode === 'c++' || mode === 'c') { + mode = 'c_cpp'; + } + + this.ace_container = document.createElement('div'); + this.ace_container.style.width = '100%'; + this.ace_container.style.position = 'relative'; + this.ace_container.style.height = '400px'; + this.input.parentNode.insertBefore(this.ace_container,this.input); + this.input.style.display = 'none'; + this.ace_editor = window.ace.edit(this.ace_container); + + this.ace_editor.setValue(this.getValue()); + + // The theme + if(JSONEditor.plugins.ace.theme) this.ace_editor.setTheme('ace/theme/'+JSONEditor.plugins.ace.theme); + // The mode + mode = window.ace.require("ace/mode/"+mode); + if(mode) this.ace_editor.getSession().setMode(new mode.Mode()); + + // Listen for changes + this.ace_editor.on('change',function() { + var val = self.ace_editor.getValue(); + self.input.value = val; + self.refreshValue(); + self.is_dirty = true; + self.onChange(true); + }); + } + } + + self.theme.afterInputReady(self.input); + }, + refreshValue: function() { + this.value = this.input.value; + if(typeof this.value !== "string") this.value = ''; + this.serialized = this.value; + }, + destroy: function() { + // If using SCEditor, destroy the editor instance + if(this.sceditor_instance) { + this.sceditor_instance.destroy(); + } + else if(this.epiceditor) { + this.epiceditor.unload(); + } + else if(this.ace_editor) { + this.ace_editor.destroy(); + } + + + this.template = null; + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + + this._super(); + }, + /** + * This is overridden in derivative editors + */ + sanitize: function(value) { + return value; + }, + /** + * Re-calculates the value if needed + */ + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor needs to be rendered by a macro template + if(this.template) { + vars = this.getWatchedFieldValues(); + this.setValue(this.template(vars),false,true); + } + + this._super(); + }, + showValidationErrors: function(errors) { + var self = this; + + if(this.jsoneditor.options.show_errors === "always") {} + else if(!this.is_dirty && this.previous_error_setting===this.jsoneditor.options.show_errors) return; + + this.previous_error_setting = this.jsoneditor.options.show_errors; + + var messages = []; + $each(errors,function(i,error) { + if(error.path === self.path) { + messages.push(error.message); + } + }); + + if(messages.length) { + this.theme.addInputError(this.input, messages.join('. ')+'.'); + } + else { + this.theme.removeInputError(this.input); + } + } +}); + +JSONEditor.defaults.editors.number = JSONEditor.defaults.editors.string.extend({ + sanitize: function(value) { + return (value+"").replace(/[^0-9\.\-eE]/g,''); + }, + getNumColumns: function() { + return 2; + }, + getValue: function() { + return this.value*1; + } +}); + +JSONEditor.defaults.editors.integer = JSONEditor.defaults.editors.number.extend({ + sanitize: function(value) { + value = value + ""; + return value.replace(/[^0-9\-]/g,''); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return $extend({},this.schema["default"] || {}); + }, + getChildEditors: function() { + return this.editors; + }, + register: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].register(); + } + } + }, + unregister: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].unregister(); + } + } + }, + getNumColumns: function() { + return Math.max(Math.min(12,this.maxwidth),3); + }, + enable: function() { + if(this.editjson_button) this.editjson_button.disabled = false; + if(this.addproperty_button) this.addproperty_button.disabled = false; + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].enable(); + } + } + }, + disable: function() { + if(this.editjson_button) this.editjson_button.disabled = true; + if(this.addproperty_button) this.addproperty_button.disabled = true; + this.hideEditJSON(); + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].disable(); + } + } + }, + layoutEditors: function() { + var self = this, i, j; + + if(!this.row_container) return; + + // Sort editors by propertyOrder + this.property_order = Object.keys(this.editors); + this.property_order = this.property_order.sort(function(a,b) { + var ordera = self.editors[a].schema.propertyOrder; + var orderb = self.editors[b].schema.propertyOrder; + if(typeof ordera !== "number") ordera = 1000; + if(typeof orderb !== "number") orderb = 1000; + + return ordera - orderb; + }); + + var container; + + if(this.format === 'grid') { + var rows = []; + $each(this.property_order, function(j,key) { + var editor = self.editors[key]; + if(editor.property_removed) return; + var found = false; + var width = editor.options.hidden? 0 : (editor.options.grid_columns || editor.getNumColumns()); + var height = editor.options.hidden? 0 : editor.container.offsetHeight; + // See if the editor will fit in any of the existing rows first + for(var i=0; i height)) { + found = i; + } + } + } + + // If there isn't a spot in any of the existing rows, start a new row + if(found === false) { + rows.push({ + width: 0, + minh: 999999, + maxh: 0, + editors: [] + }); + found = rows.length-1; + } + + rows[found].editors.push({ + key: key, + //editor: editor, + width: width, + height: height + }); + rows[found].width += width; + rows[found].minh = Math.min(rows[found].minh,height); + rows[found].maxh = Math.max(rows[found].maxh,height); + }); + + // Make almost full rows width 12 + // Do this by increasing all editors' sizes proprotionately + // Any left over space goes to the biggest editor + // Don't touch rows with a width of 6 or less + for(i=0; i rows[i].editors[biggest].width) biggest = j; + rows[i].editors[j].width *= 12/rows[i].width; + rows[i].editors[j].width = Math.floor(rows[i].editors[j].width); + new_width += rows[i].editors[j].width; + } + if(new_width < 12) rows[i].editors[biggest].width += 12-new_width; + rows[i].width = 12; + } + } + + // layout hasn't changed + if(this.layout === JSON.stringify(rows)) return false; + this.layout = JSON.stringify(rows); + + // Layout the form + container = document.createElement('div'); + for(i=0; i= this.schema.maxProperties); + + if(this.addproperty_checkboxes) { + this.addproperty_list.innerHTML = ''; + } + this.addproperty_checkboxes = {}; + + // Check for which editors can't be removed or added back + for(i in this.cached_editors) { + if(!this.cached_editors.hasOwnProperty(i)) continue; + + this.addPropertyCheckbox(i); + + if(this.isRequired(this.cached_editors[i]) && i in this.editors) { + this.addproperty_checkboxes[i].disabled = true; + } + + if(typeof this.schema.minProperties !== "undefined" && num_props <= this.schema.minProperties) { + this.addproperty_checkboxes[i].disabled = this.addproperty_checkboxes[i].checked; + if(!this.addproperty_checkboxes[i].checked) show_modal = true; + } + else if(!(i in this.editors)) { + if(!can_add && !this.schema.properties.hasOwnProperty(i)) { + this.addproperty_checkboxes[i].disabled = true; + } + else { + this.addproperty_checkboxes[i].disabled = false; + show_modal = true; + } + } + else { + show_modal = true; + can_remove = true; + } + } + + if(this.canHaveAdditionalProperties()) { + show_modal = true; + } + + // Additional addproperty checkboxes not tied to a current editor + for(i in this.schema.properties) { + if(!this.schema.properties.hasOwnProperty(i)) continue; + if(this.cached_editors[i]) continue; + show_modal = true; + this.addPropertyCheckbox(i); + } + + // If no editors can be added or removed, hide the modal button + if(!show_modal) { + this.hideAddProperty(); + this.addproperty_controls.style.display = 'none'; + } + // If additional properties are disabled + else if(!this.canHaveAdditionalProperties()) { + this.addproperty_add.style.display = 'none'; + this.addproperty_input.style.display = 'none'; + } + // If no new properties can be added + else if(!can_add) { + this.addproperty_add.disabled = true; + } + // If new properties can be added + else { + this.addproperty_add.disabled = false; + } + }, + isRequired: function(editor) { + if(typeof editor.schema.required === "boolean") return editor.schema.required; + else if(Array.isArray(this.schema.required)) return this.schema.required.indexOf(editor.key) > -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + setValue: function(value, initial) { + var self = this; + value = value || {}; + + if(typeof value !== "object" || Array.isArray(value)) value = {}; + + // First, set the values for all of the defined properties + $each(this.cached_editors, function(i,editor) { + // Value explicitly set + if(typeof value[i] !== "undefined") { + self.addObjectProperty(i); + editor.setValue(value[i],initial); + } + // Otherwise, remove value unless this is the initial set or it's required + else if(!initial && !self.isRequired(editor)) { + self.removeObjectProperty(i); + } + // Otherwise, set the value to the default + else { + editor.setValue(editor.getDefault(),initial); + } + }); + + $each(value, function(i,val) { + if(!self.cached_editors[i]) { + self.addObjectProperty(i); + if(self.editors[i]) self.editors[i].setValue(val,initial); + } + }); + + this.refreshValue(); + this.layoutEditors(); + this.onChange(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show error for the table row if this is inside a table + if(this.options.table_row) { + if(my_errors.length) { + this.theme.addTableRowError(this.container); + } + else { + this.theme.removeTableRowError(this.container); + } + } + + // Show errors for child editors + $each(this.editors, function(i,editor) { + editor.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return this.schema["default"] || []; + }, + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i= this.schema.items.length) { + if(this.schema.additionalItems===true) { + return {}; + } + else if(this.schema.additionalItems) { + return $extend({},this.schema.additionalItems); + } + } + else { + return $extend({},this.schema.items[i]); + } + } + else if(this.schema.items) { + return $extend({},this.schema.items); + } + else { + return {}; + } + }, + getItemInfo: function(i) { + var schema = this.getItemSchema(i); + + // Check if it's cached + this.item_info = this.item_info || {}; + var stringified = JSON.stringify(schema); + if(typeof this.item_info[stringified] !== "undefined") return this.item_info[stringified]; + + // Get the schema for this item + schema = this.jsoneditor.expandRefs(schema); + + this.item_info[stringified] = { + title: schema.title || "item", + 'default': schema["default"], + width: 12, + child_editors: schema.properties || schema.items + }; + + return this.item_info[stringified]; + }, + getElementEditor: function(i) { + var item_info = this.getItemInfo(i); + var schema = this.getItemSchema(i); + schema = this.jsoneditor.expandRefs(schema); + schema.title = item_info.title+' '+(i+1); + + var editor = this.jsoneditor.getEditorClass(schema); + + var holder; + if(this.tabs_holder) { + holder = this.theme.getTabContent(); + } + else if(item_info.child_editors) { + holder = this.theme.getChildEditorHolder(); + } + else { + holder = this.theme.getIndentedPanel(); + } + + this.row_holder.appendChild(holder); + + var ret = this.jsoneditor.createEditor(editor,{ + jsoneditor: this.jsoneditor, + schema: schema, + container: holder, + path: this.path+'.'+i, + parent: this, + required: true + }); + ret.preBuild(); + ret.build(); + ret.postBuild(); + + if(!ret.title_controls) { + ret.array_controls = this.theme.getButtonHolder(); + holder.appendChild(ret.array_controls); + } + + return ret; + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.row_holder && this.row_holder.parentNode) this.row_holder.parentNode.removeChild(this.row_holder); + if(this.controls && this.controls.parentNode) this.controls.parentNode.removeChild(this.controls); + if(this.panel && this.panel.parentNode) this.panel.parentNode.removeChild(this.panel); + + this.rows = this.row_cache = this.title = this.description = this.row_holder = this.panel = this.controls = null; + + this._super(); + }, + empty: function(hard) { + if(!this.rows) return; + var self = this; + $each(this.rows,function(i,row) { + if(hard) { + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + self.destroyRow(row,true); + self.row_cache[i] = null; + } + self.rows[i] = null; + }); + self.rows = []; + if(hard) self.row_cache = []; + }, + destroyRow: function(row,hard) { + var holder = row.container; + if(hard) { + row.destroy(); + if(holder.parentNode) holder.parentNode.removeChild(holder); + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + } + else { + if(row.tab) row.tab.style.display = 'none'; + holder.style.display = 'none'; + row.unregister(); + } + }, + getMax: function() { + if((Array.isArray(this.schema.items)) && this.schema.additionalItems === false) { + return Math.min(this.schema.items.length,this.schema.maxItems || Infinity); + } + else { + return this.schema.maxItems || Infinity; + } + }, + refreshTabs: function(refresh_headers) { + var self = this; + $each(this.rows, function(i,row) { + if(!row.tab) return; + + if(refresh_headers) { + row.tab_text.textContent = row.getHeaderText(); + } + else { + if(row.tab === self.active_tab) { + self.theme.markTabActive(row.tab); + row.container.style.display = ''; + } + else { + self.theme.markTabInactive(row.tab); + row.container.style.display = 'none'; + } + } + }); + }, + setValue: function(value, initial) { + // Update the array's value, adding/removing rows when necessary + value = value || []; + + if(!(Array.isArray(value))) value = [value]; + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + // Make sure value has between minItems and maxItems items in it + if(this.schema.minItems) { + while(value.length < this.schema.minItems) { + value.push(this.getItemInfo(value.length)["default"]); + } + } + if(this.getMax() && value.length > this.getMax()) { + value = value.slice(0,this.getMax()); + } + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val,initial); + } + else if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(val,initial); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(val,initial); + } + }); + + for(var j=value.length; j= this.rows.length; + + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + editor.delete_button.style.display = ''; + } + } + + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else if(this.value.length === 1) { + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.getMax() && this.getMax() <= this.rows.length) || this.hide_add_button){ + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!this.collapsed && controls_needed) { + this.controls.style.display = 'inline-block'; + } + else { + this.controls.style.display = 'none'; + } + } + }, + addRow: function(value, initial) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + self.row_cache[i] = self.rows[i]; + + if(self.tabs_holder) { + self.rows[i].tab_text = document.createElement('span'); + self.rows[i].tab_text.textContent = self.rows[i].getHeaderText(); + self.rows[i].tab = self.theme.getTab(self.rows[i].tab_text); + self.rows[i].tab.addEventListener('click', function(e) { + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + e.preventDefault(); + e.stopPropagation(); + }); + + self.theme.addTab(self.tabs_holder, self.rows[i].tab); + } + + var controls_holder = self.rows[i].title_controls || self.rows[i].array_controls; + + // Buttons to delete row, move row up, and move row down + if(!self.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete','Delete '+self.getItemTitle()); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + var new_active_tab = null; + $each(value,function(j,row) { + if(j===i) { + // If the one we're deleting is the active tab + if(self.rows[j].tab === self.active_tab) { + // Make the next tab active if there is one + // Note: the next tab is going to be the current tab after deletion + if(self.rows[j+1]) new_active_tab = self.rows[j].tab; + // Otherwise, make the previous tab active if there is one + else if(j) new_active_tab = self.rows[j-1].tab; + } + + return; // If this is the one we're deleting + } + newval.push(row); + }); + self.setValue(newval); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].delete_button); + } + } + + if(i && !self.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup','Move up'); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i-1].tab; + self.refreshTabs(); + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].moveup_button); + } + } + + if(!self.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown','Move down'); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i+1].tab; + self.refreshTabs(); + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].movedown_button); + } + } + + if(value) self.rows[i].setValue(value, initial); + self.refreshTabs(); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse','Collapse'); + this.title_controls.appendChild(this.toggle_button); + var row_holder_display = self.row_holder.style.display; + var controls_display = self.controls.style.display; + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + if(self.collapsed) { + self.collapsed = false; + if(self.panel) self.panel.style.display = ''; + self.row_holder.style.display = row_holder_display; + if(self.tabs_holder) self.tabs_holder.style.display = ''; + self.controls.style.display = controls_display; + self.setButtonText(this,'','collapse','Collapse'); + } + else { + self.collapsed = true; + self.row_holder.style.display = 'none'; + if(self.tabs_holder) self.tabs_holder.style.display = 'none'; + self.controls.style.display = 'none'; + if(self.panel) self.panel.style.display = 'none'; + self.setButtonText(this,'','expand','Expand'); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add','Add '+this.getItemTitle()); + + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = self.rows.length; + if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(self.rows[i].getDefault()); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(); + } + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + self.refreshValue(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton('Last '+this.getItemTitle(),'delete','Delete Last '+this.getItemTitle()); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var rows = self.getValue(); + + var new_active_tab = null; + if(self.rows.length > 1 && self.rows[self.rows.length-1].tab === self.active_tab) new_active_tab = self.rows[self.rows.length-2].tab; + + rows.pop(); + self.setValue(rows); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton('All','delete','Delete All'); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + + if(self.tabs) { + this.add_row_button.style.width = '100%'; + this.add_row_button.style.textAlign = 'left'; + this.add_row_button.style.marginBottom = '3px'; + + this.delete_last_row_button.style.width = '100%'; + this.delete_last_row_button.style.textAlign = 'left'; + this.delete_last_row_button.style.marginBottom = '3px'; + + this.remove_all_rows_button.style.width = '100%'; + this.remove_all_rows_button.style.textAlign = 'left'; + this.remove_all_rows_button.style.marginBottom = '3px'; + } + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show errors for child editors + $each(this.rows, function(i,row) { + row.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({ + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i this.schema.maxItems) { + value = value.slice(0,this.schema.maxItems); + } + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + var numrows_changed = false; + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val); + } + else { + self.addRow(val); + numrows_changed = true; + } + }); + + for(var j=value.length; j= this.rows.length; + + var need_row_buttons = false; + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.delete_button.style.display = ''; + } + } + + if(editor.moveup_button) { + need_row_buttons = true; + } + }); + + // Show/hide controls column in table + $each(this.rows,function(i,editor) { + if(need_row_buttons) { + editor.controls_cell.style.display = ''; + } + else { + editor.controls_cell.style.display = 'none'; + } + }); + if(need_row_buttons) { + this.controls_header_cell.style.display = ''; + } + else { + this.controls_header_cell.style.display = 'none'; + } + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + this.table.style.display = 'none'; + } + else if(this.value.length === 1 || this.hide_delete_buttons) { + this.table.style.display = ''; + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + this.table.style.display = ''; + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.schema.maxItems && this.schema.maxItems <= this.rows.length) || this.hide_add_button) { + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!controls_needed) { + this.controls.style.display = 'none'; + } + else { + this.controls.style.display = ''; + } + }, + refreshValue: function() { + var self = this; + this.value = []; + + $each(this.rows,function(i,editor) { + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + this.serialized = JSON.stringify(this.value); + }, + addRow: function(value) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + + var controls_holder = self.rows[i].table_controls; + + // Buttons to delete row, move row up, and move row down + if(!this.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton('','delete','Delete'); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + $each(value,function(j,row) { + if(j===i) return; // If this is the one we're deleting + newval.push(row); + }); + self.setValue(newval); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].delete_button); + } + + + if(i && !this.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup','Move up'); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].moveup_button); + } + + if(!this.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown','Move down'); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].movedown_button); + } + + if(value) self.rows[i].setValue(value); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse','Collapse'); + if(this.title_controls) { + this.title_controls.appendChild(this.toggle_button); + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(self.collapsed) { + self.collapsed = false; + self.panel.style.display = ''; + self.setButtonText(this,'','collapse','Collapse'); + } + else { + self.collapsed = true; + self.panel.style.display = 'none'; + self.setButtonText(this,'','expand','Expand'); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add','Add '+this.getItemTitle()); + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.addRow(); + self.refreshValue(); + self.refreshRowButtons(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton('Last '+this.getItemTitle(),'delete','Delete Last '+this.getItemTitle()); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + var rows = self.getValue(); + rows.pop(); + self.setValue(rows); + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton('All','delete','Delete All'); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + } +}); + +// Multiple Editor (for when `type` is an array) +JSONEditor.defaults.editors.multiple = JSONEditor.AbstractEditor.extend({ + register: function() { + if(this.editors) { + for(var i=0; inull'; + } + // Array or Object + else if(typeof el === "object") { + // TODO: use theme + var ret = ''; + + $each(el,function(i,child) { + var html = self.getHTML(child); + + // Add the keys to object children + if(!(Array.isArray(el))) { + // TODO: use theme + html = '
'+i+': '+html+'
'; + } + + // TODO: use theme + ret += '
  • '+html+'
  • '; + }); + + if(Array.isArray(el)) ret = '
      '+ret+'
    '; + else ret = "
      "+ret+'
    '; + + return ret; + } + // Boolean + else if(typeof el === "boolean") { + return el? 'true' : 'false'; + } + // String + else if(typeof el === "string") { + return el.replace(/&/g,'&').replace(//g,'>'); + } + // Number + else { + return el; + } + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.refreshValue(); + this.onChange(); + } + }, + destroy: function() { + if(this.display_area && this.display_area.parentNode) this.display_area.parentNode.removeChild(this.display_area); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.switcher && this.switcher.parentNode) this.switcher.parentNode.removeChild(this.switcher); + + this._super(); + } +}); + +JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + value = this.typecast(value||''); + + // Sanitize value before setting it + var sanitized = value; + if(this.enum_values.indexOf(sanitized) < 0) { + sanitized = this.enum_values[0]; + } + + if(this.value === sanitized) { + return; + } + + this.input.value = this.enum_options[this.enum_values.indexOf(sanitized)]; + if(this.select2) this.select2.select2('val',this.input.value); + this.value = sanitized; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + if(!this.enum_options) return 3; + var longest_text = this.getTitle().length; + for(var i=0; i 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.select2); + if(this.schema.options && this.schema.options.select2_options) options = $extend(options,this.schema.options.select2_options); + this.select2 = window.jQuery(this.input).select2(options); + var self = this; + this.select2.on('select2-blur',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + } + else { + this.select2 = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelect2(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; iSize: '+Math.floor((this.value.length-this.value.split(',')[0].length-1)/1.33333)+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.value; + this.preview.appendChild(img); + } + } + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.refreshPreview(); + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.upload = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var self = this; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + + // Input that holds the base64 string + this.input = this.theme.getFormInputField('hidden'); + this.container.appendChild(this.input); + + // Don't show uploader if this is readonly + if(!this.schema.readOnly && !this.schema.readonly) { + + if(!this.jsoneditor.options.upload) throw "Upload handler required for upload editor"; + + // File uploader + this.uploader = this.theme.getFormInputField('file'); + + this.uploader.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(this.files && this.files.length) { + var fr = new FileReader(); + fr.onload = function(evt) { + self.preview_value = evt.target.result; + self.refreshPreview(); + self.onChange(true); + fr = null; + }; + fr.readAsDataURL(this.files[0]); + } + }); + } + + var description = this.schema.description; + if (!description) description = ''; + + this.preview = this.theme.getFormInputDescription(description); + this.container.appendChild(this.preview); + + this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview); + this.container.appendChild(this.control); + }, + refreshPreview: function() { + if(this.last_preview === this.preview_value) return; + this.last_preview = this.preview_value; + + this.preview.innerHTML = ''; + + if(!this.preview_value) return; + + var self = this; + + var mime = this.preview_value.match(/^data:([^;,]+)[;,]/); + if(mime) mime = mime[1]; + if(!mime) mime = 'unknown'; + + var file = this.uploader.files[0]; + + this.preview.innerHTML = 'Type: '+mime+', Size: '+file.size+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.preview_value; + this.preview.appendChild(img); + } + + this.preview.innerHTML += '
    '; + var uploadButton = this.getButton('Upload', 'upload', 'Upload'); + this.preview.appendChild(uploadButton); + uploadButton.addEventListener('click',function(event) { + event.preventDefault(); + + uploadButton.setAttribute("disabled", "disabled"); + self.theme.removeInputError(self.uploader); + + if (self.theme.getProgressBar) { + self.progressBar = self.theme.getProgressBar(); + self.preview.appendChild(self.progressBar); + } + + self.jsoneditor.options.upload(self.path, file, { + success: function(url) { + self.setValue(url); + + if(self.parent) self.parent.onChildEditorChange(self); + else self.jsoneditor.onChange(); + + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + failure: function(error) { + self.theme.addInputError(self.uploader, error); + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + updateProgress: function(progress) { + if (self.progressBar) { + if (progress) self.theme.updateProgressBar(self.progressBar, progress); + else self.theme.updateProgressBarUnknown(self.progressBar); + } + } + }); + }); + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.checkbox = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + this.value = !!value; + this.input.checked = this.value; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + return Math.min(12,Math.max(this.getTitle().length/7,2)); + }, + build: function() { + var self = this; + if(!this.options.compact) { + this.label = this.header = this.theme.getCheckboxLabel(this.getTitle()); + } + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + if(this.options.compact) this.container.className += ' compact'; + + this.input = this.theme.getCheckbox(); + this.control = this.theme.getFormControl(this.label, this.input, this.description); + + if(this.schema.readOnly || this.schema.readonly) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.value = this.checked; + self.onChange(true); + }); + + this.container.appendChild(this.control); + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + this._super(); + }, + destroy: function() { + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + this._super(); + } +}); + +var matchKey = (function () { + var elem = document.documentElement; + + if (elem.matches) return 'matches'; + else if (elem.webkitMatchesSelector) return 'webkitMatchesSelector'; + else if (elem.mozMatchesSelector) return 'mozMatchesSelector'; + else if (elem.msMatchesSelector) return 'msMatchesSelector'; + else if (elem.oMatchesSelector) return 'oMatchesSelector'; +})(); + +JSONEditor.AbstractTheme = Class.extend({ + getContainer: function() { + return document.createElement('div'); + }, + getFloatRightLinkHolder: function() { + var el = document.createElement('div'); + el.style = el.style || {}; + el.style.cssFloat = 'right'; + el.style.marginLeft = '10px'; + return el; + }, + getModal: function() { + var el = document.createElement('div'); + el.style.backgroundColor = 'white'; + el.style.border = '1px solid black'; + el.style.boxShadow = '3px 3px black'; + el.style.position = 'absolute'; + el.style.zIndex = '10'; + el.style.display = 'none'; + return el; + }, + getGridContainer: function() { + var el = document.createElement('div'); + return el; + }, + getGridRow: function() { + var el = document.createElement('div'); + el.className = 'row'; + return el; + }, + getGridColumn: function() { + var el = document.createElement('div'); + return el; + }, + setGridColumnSize: function(el,size) { + + }, + getLink: function(text) { + var el = document.createElement('a'); + el.setAttribute('href','#'); + el.appendChild(document.createTextNode(text)); + return el; + }, + disableHeader: function(header) { + header.style.color = '#ccc'; + }, + disableLabel: function(label) { + label.style.color = '#ccc'; + }, + enableHeader: function(header) { + header.style.color = ''; + }, + enableLabel: function(label) { + label.style.color = ''; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.appendChild(document.createTextNode(text)); + return el; + }, + getCheckboxLabel: function(text) { + var el = this.getFormInputLabel(text); + el.style.fontWeight = 'normal'; + return el; + }, + getHeader: function(text) { + var el = document.createElement('h3'); + if(typeof text === "string") { + el.textContent = text; + } + else { + el.appendChild(text); + } + + return el; + }, + getCheckbox: function() { + var el = this.getFormInputField('checkbox'); + el.style.display = 'inline-block'; + el.style.width = 'auto'; + return el; + }, + getMultiCheckboxHolder: function(controls,label,description) { + var el = document.createElement('div'); + + if(label) { + label.style.display = 'block'; + el.appendChild(label); + } + + for(var i in controls) { + if(!controls.hasOwnProperty(i)) continue; + controls[i].style.display = 'inline-block'; + controls[i].style.marginRight = '20px'; + el.appendChild(controls[i]); + } + + if(description) el.appendChild(description); + + return el; + }, + getSelectInput: function(options) { + var select = document.createElement('select'); + if(options) this.setSelectOptions(select, options); + return select; + }, + getSwitcher: function(options) { + var switcher = this.getSelectInput(options); + switcher.style.backgroundColor = 'transparent'; + switcher.style.display = 'inline-block'; + switcher.style.fontStyle = 'italic'; + switcher.style.fontWeight = 'normal'; + switcher.style.height = 'auto'; + switcher.style.marginBottom = 0; + switcher.style.marginLeft = '5px'; + switcher.style.padding = '0 0 0 3px'; + switcher.style.width = 'auto'; + return switcher; + }, + getSwitcherOptions: function(switcher) { + return switcher.getElementsByTagName('option'); + }, + setSwitcherOptions: function(switcher, options, titles) { + this.setSelectOptions(switcher, options, titles); + }, + setSelectOptions: function(select, options, titles) { + titles = titles || []; + select.innerHTML = ''; + for(var i=0; i'); + input.errmsg = input.parentNode.getElementsByClassName('error')[0]; + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.group.className = input.group.className.replace(/ error/g,''); + input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var progressBar = document.createElement('div'); + progressBar.className = 'progress'; + + var meter = document.createElement('span'); + meter.className = 'meter'; + meter.style.width = '0%'; + progressBar.appendChild(meter); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.firstChild.style.width = progress + '%'; + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.firstChild.style.width = '100%'; + } +}); + +// Foundation 3 Specific Theme +JSONEditor.defaults.themes.foundation3 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.className = 'row'; + el.innerHTML = "
    "; + return el; + }, + setGridColumnSize: function(el,size) { + var sizes = ['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve']; + el.className = 'columns '+sizes[size]; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +// Foundation 4 Specific Theme +JSONEditor.defaults.themes.foundation4 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns large-'+size; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + } +}); + +// Foundation 5 Specific Theme +JSONEditor.defaults.themes.foundation5 = JSONEditor.defaults.themes.foundation.extend({ + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns medium-'+size; + }, + getButton: function(text, icon, title) { + var el = this._super(text,icon,title); + el.className = el.className.replace(/\s*small/g,'') + ' tiny'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.innerHTML = "
    "; + return el; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +JSONEditor.defaults.themes.html = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + el.style.marginBottom = '3px'; + el.style.fontWeight = 'bold'; + return el; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8em'; + el.style.margin = 0; + el.style.display = 'inline-block'; + el.style.fontStyle = 'italic'; + return el; + }, + getIndentedPanel: function() { + var el = this._super(); + el.style.border = '1px solid #ddd'; + el.style.padding = '5px'; + el.style.margin = '5px'; + el.style.borderRadius = '3px'; + return el; + }, + getChildEditorHolder: function() { + var el = this._super(); + el.style.marginBottom = '8px'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.display = 'inline-block'; + el.style.marginLeft = '10px'; + el.style.fontSize = '.8em'; + el.style.verticalAlign = 'middle'; + return el; + }, + getTable: function() { + var el = this._super(); + el.style.borderBottom = '1px solid #ccc'; + el.style.marginBottom = '5px'; + return el; + }, + addInputError: function(input, text) { + input.style.borderColor = 'red'; + + if(!input.errmsg) { + var group = this.closest(input,'.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class','errmsg'); + input.errmsg.style = input.errmsg.style || {}; + input.errmsg.style.color = 'red'; + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function(input) { + input.style.borderColor = ''; + if(input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); + +JSONEditor.defaults.themes.jqueryui = JSONEditor.AbstractTheme.extend({ + getTable: function() { + var el = this._super(); + el.setAttribute('cellpadding',5); + el.setAttribute('cellspacing',0); + return el; + }, + getTableHeaderCell: function(text) { + var el = this._super(text); + el.className = 'ui-state-active'; + el.style.fontWeight = 'bold'; + return el; + }, + getTableCell: function() { + var el = this._super(); + el.className = 'ui-widget-content'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.marginLeft = '10px'; + el.style.fontSize = '.6em'; + el.style.display = 'inline-block'; + return el; + }, + getFormInputDescription: function(text) { + var el = this.getDescription(text); + el.style.marginLeft = '10px'; + el.style.display = 'inline-block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = this._super(label,input,description); + if(input.type === 'checkbox') { + el.style.lineHeight = '25px'; + + el.style.padding = '3px 0'; + } + else { + el.style.padding = '4px 0 8px 0'; + } + return el; + }, + getDescription: function(text) { + var el = document.createElement('span'); + el.style.fontSize = '.8em'; + el.style.fontStyle = 'italic'; + el.textContent = text; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'ui-buttonset'; + el.style.fontSize = '.7em'; + return el; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.style.fontWeight = 'bold'; + el.style.display = 'block'; + el.textContent = text; + return el; + }, + getButton: function(text, icon, title) { + var button = document.createElement("button"); + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + + return button; + }, + setButtonText: function(button,text, icon, title) { + button.innerHTML = ''; + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + }, + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'ui-widget-content ui-corner-all'; + el.style.padding = '1em 1.4em'; + el.style.marginBottom = '20px'; + return el; + }, + afterInputReady: function(input) { + if(input.controls) return; + input.controls = this.closest(input,'.form-control'); + }, + addInputError: function(input,text) { + if(!input.controls) return; + if(!input.errmsg) { + input.errmsg = document.createElement('div'); + input.errmsg.className = 'ui-state-error'; + input.controls.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.errmsg.style.display = 'none'; + }, + markTabActive: function(tab) { + tab.className = tab.className.replace(/\s*ui-widget-header/g,'')+' ui-state-active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*ui-state-active/g,'')+' ui-widget-header'; + } +}); + +JSONEditor.AbstractIconLib = Class.extend({ + mapping: { + collapse: '', + expand: '', + "delete": '', + edit: '', + add: '', + cancel: '', + save: '', + moveup: '', + movedown: '' + }, + icon_prefix: '', + getIconClass: function(key) { + if(this.mapping[key]) return this.icon_prefix+this.mapping[key]; + else return null; + }, + getIcon: function(key) { + var iconclass = this.getIconClass(key); + + if(!iconclass) return null; + + var i = document.createElement('i'); + i.className = iconclass; + return i; + } +}); + +JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-up', + "delete": 'trash', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'ok', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.bootstrap3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'floppy-remove', + save: 'floppy-saved', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'glyphicon glyphicon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome4 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'caret-square-o-down', + expand: 'caret-square-o-right', + "delete": 'times', + edit: 'pencil', + add: 'plus', + cancel: 'ban', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fa fa-' +}); + +JSONEditor.defaults.iconlibs.foundation2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'remove', + edit: 'edit', + add: 'add-doc', + cancel: 'error', + save: 'checkmark', + moveup: 'up-arrow', + movedown: 'down-arrow' + }, + icon_prefix: 'foundicon-' +}); + +JSONEditor.defaults.iconlibs.foundation3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'x', + edit: 'pencil', + add: 'page-add', + cancel: 'x-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fi-' +}); + +JSONEditor.defaults.iconlibs.jqueryui = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'triangle-1-s', + expand: 'triangle-1-e', + "delete": 'trash', + edit: 'pencil', + add: 'plusthick', + cancel: 'closethick', + save: 'disk', + moveup: 'arrowthick-1-n', + movedown: 'arrowthick-1-s' + }, + icon_prefix: 'ui-icon ui-icon-' +}); + +JSONEditor.defaults.templates["default"] = function() { + return { + compile: function(template) { + var matches = template.match(/{{\s*([a-zA-Z0-9\-_ \.]+)\s*}}/g); + var l = matches && matches.length; + + // Shortcut if the template contains no variables + if(!l) return function() { return template; }; + + // Pre-compute the search/replace functions + // This drastically speeds up template execution + var replacements = []; + var get_replacement = function(i) { + var p = matches[i].replace(/[{}]+/g,'').trim().split('.'); + var n = p.length; + var func; + + if(n > 1) { + var cur; + func = function(vars) { + cur = vars; + for(i=0; i= 0) { + return 'multiselect'; + } +}); +// Use the multiple editor for schemas with `oneOf` set +JSONEditor.defaults.resolvers.unshift(function(schema) { + // If this schema uses `oneOf` + if(schema.oneOf) return "multiple"; +}); + +/** + * This is a small wrapper for using JSON Editor like a typical jQuery plugin. + */ +(function() { + if(window.jQuery || window.Zepto) { + var $ = window.jQuery || window.Zepto; + $.jsoneditor = JSONEditor.defaults; + + $.fn.jsoneditor = function(options) { + var self = this; + var editor = this.data('jsoneditor'); + if(options === 'value') { + if(!editor) throw "Must initialize jsoneditor before getting/setting the value"; + + // Set value + if(arguments.length > 1) { + editor.setValue(arguments[1]); + } + // Get value + else { + return editor.getValue(); + } + } + else if(options === 'validate') { + if(!editor) throw "Must initialize jsoneditor before validating"; + + // Validate a specific value + if(arguments.length > 1) { + return editor.validate(arguments[1]); + } + // Validate current value + else { + return editor.validate(); + } + } + else if(options === 'destroy') { + if(editor) { + editor.destroy(); + this.data('jsoneditor',null); + } + } + else { + // Destroy first + if(editor) { + editor.destroy(); + } + + // Create editor + editor = new JSONEditor(this.get(0),options); + this.data('jsoneditor',editor); + + // Setup event listeners + editor.on('change',function() { + self.trigger('change'); + }); + editor.on('ready',function() { + self.trigger('ready'); + }); + } + + return this; + }; + } +})(); + + window.JSONEditor = JSONEditor; +})(); + +//# sourceMappingURL=jsoneditor.js.map \ No newline at end of file diff --git a/lib/jsoneditor.js b/lib/jsoneditor.js new file mode 100644 index 00000000000..b6bd5b19037 --- /dev/null +++ b/lib/jsoneditor.js @@ -0,0 +1,7287 @@ +/*! JSON Editor v0.7.22 - JSON Schema -> HTML Editor + * By Jeremy Dorn - https://github.com/jdorn/json-editor/ + * Released under the MIT license + * + * Date: 2015-08-12 + */ + +/** + * See README.md for requirements and usage info + */ + +(function() { + +/*jshint loopfunc: true */ +/* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. + */ +// Inspired by base2 and Prototype +var Class; +(function(){ + var initializing = false, fnTest = /xyz/.test(function(){window.postMessage("xyz");}) ? /\b_super\b/ : /.*/; + + // The base Class implementation (does nothing) + Class = function(){}; + + // Create a new Class that inherits from this class + Class.extend = function(prop) { + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) + this.init.apply(this, arguments); + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.prototype.constructor = Class; + + // And make this class extendable + Class.extend = arguments.callee; + + return Class; + }; + + return Class; +})(); + +// CustomEvent constructor polyfill +// From MDN +(function () { + function CustomEvent ( event, params ) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + + window.CustomEvent = CustomEvent; +})(); + +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel +// MIT license +(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || + window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); + +// Array.isArray polyfill +// From MDN +(function() { + if(!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } +}()); +/** + * Taken from jQuery 2.1.3 + * + * @param obj + * @returns {boolean} + */ +var $isplainobject = function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if (typeof obj !== "object" || obj.nodeType || (obj !== null && obj === obj.window)) { + return false; + } + + if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; +}; + +var $extend = function(destination) { + var source, i,property; + for(i=1; i 0 && (obj.length - 1) in obj)) { + for(i=0; i= waiting && !callback_fired) { + callback_fired = true; + callback(); + } + }); + } + // Request failed + else { + window.console.log(r); + throw "Failed to fetch ref via ajax- "+url; + } + }; + r.send(); + }); + + if(!waiting) { + callback(); + } + }, + expandRefs: function(schema) { + schema = $extend({},schema); + + while (schema.$ref) { + var ref = schema.$ref; + delete schema.$ref; + + if(!this.refs[ref]) ref = decodeURIComponent(ref); + + schema = this.extendSchemas(schema,this.refs[ref]); + } + return schema; + }, + expandSchema: function(schema) { + var self = this; + var extended = $extend({},schema); + var i; + + // Version 3 `type` + if(typeof schema.type === 'object') { + // Array of types + if(Array.isArray(schema.type)) { + $each(schema.type, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.type[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.type = self.expandSchema(schema.type); + } + } + // Version 3 `disallow` + if(typeof schema.disallow === 'object') { + // Array of types + if(Array.isArray(schema.disallow)) { + $each(schema.disallow, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.disallow[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.disallow = self.expandSchema(schema.disallow); + } + } + // Version 4 `anyOf` + if(schema.anyOf) { + $each(schema.anyOf, function(key,value) { + schema.anyOf[key] = self.expandSchema(value); + }); + } + // Version 4 `dependencies` (schema dependencies) + if(schema.dependencies) { + $each(schema.dependencies,function(key,value) { + if(typeof value === "object" && !(Array.isArray(value))) { + schema.dependencies[key] = self.expandSchema(value); + } + }); + } + // Version 4 `not` + if(schema.not) { + schema.not = this.expandSchema(schema.not); + } + + // allOf schemas should be merged into the parent + if(schema.allOf) { + for(i=0; i= schema.maximum) { + errors.push({ + path: path, + property: 'maximum', + message: this.translate('error_maximum_excl', [schema.maximum]) + }); + } + else if(!schema.exclusiveMaximum && value > schema.maximum) { + errors.push({ + path: path, + property: 'maximum', + message: this.translate('error_maximum_incl', [schema.maximum]) + }); + } + } + + // `minimum` + if(schema.hasOwnProperty('minimum')) { + if(schema.exclusiveMinimum && value <= schema.minimum) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate('error_minimum_excl', [schema.minimum]) + }); + } + else if(!schema.exclusiveMinimum && value < schema.minimum) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate('error_minimum_incl', [schema.minimum]) + }); + } + } + } + // String specific validation + else if(typeof value === "string") { + // `maxLength` + if(schema.maxLength) { + if((value+"").length > schema.maxLength) { + errors.push({ + path: path, + property: 'maxLength', + message: this.translate('error_maxLength', [schema.maxLength]) + }); + } + } + + // `minLength` + if(schema.minLength) { + if((value+"").length < schema.minLength) { + errors.push({ + path: path, + property: 'minLength', + message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength]) + }); + } + } + + // `pattern` + if(schema.pattern) { + if(!(new RegExp(schema.pattern)).test(value)) { + errors.push({ + path: path, + property: 'pattern', + message: this.translate('error_pattern') + }); + } + } + } + // Array specific validation + else if(typeof value === "object" && value !== null && Array.isArray(value)) { + // `items` and `additionalItems` + if(schema.items) { + // `items` is an array + if(Array.isArray(schema.items)) { + for(i=0; i schema.maxItems) { + errors.push({ + path: path, + property: 'maxItems', + message: this.translate('error_maxItems', [schema.maxItems]) + }); + } + } + + // `minItems` + if(schema.minItems) { + if(value.length < schema.minItems) { + errors.push({ + path: path, + property: 'minItems', + message: this.translate('error_minItems', [schema.minItems]) + }); + } + } + + // `uniqueItems` + if(schema.uniqueItems) { + var seen = {}; + for(i=0; i schema.maxProperties) { + errors.push({ + path: path, + property: 'maxProperties', + message: this.translate('error_maxProperties', [schema.maxProperties]) + }); + } + } + + // `minProperties` + if(schema.minProperties) { + valid = 0; + for(i in value) { + if(!value.hasOwnProperty(i)) continue; + valid++; + } + if(valid < schema.minProperties) { + errors.push({ + path: path, + property: 'minProperties', + message: this.translate('error_minProperties', [schema.minProperties]) + }); + } + } + + // Version 4 `required` + if(schema.required && Array.isArray(schema.required)) { + for(i=0; i=0) { + holder = this.theme.getBlockLinkHolder(); + + link = this.theme.getBlockLink(); + link.setAttribute('target','_blank'); + + var media = document.createElement(type); + media.setAttribute('controls','controls'); + + this.theme.createMediaLink(holder,link,media); + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + link.setAttribute('href',url); + link.textContent = data.rel || url; + media.setAttribute('src',url); + }); + } + // Text links + else { + holder = this.theme.getBlockLink(); + holder.setAttribute('target','_blank'); + holder.textContent = data.rel; + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + holder.setAttribute('href',url); + holder.textContent = data.rel || url; + }); + } + + return holder; + }, + refreshWatchedFieldValues: function() { + if(!this.watched_values) return; + var watched = {}; + var changed = false; + var self = this; + + if(this.watched) { + var val,editor; + for(var name in this.watched) { + if(!this.watched.hasOwnProperty(name)) continue; + editor = self.jsoneditor.getEditor(this.watched[name]); + val = editor? editor.getValue() : null; + if(self.watched_values[name] !== val) changed = true; + watched[name] = val; + } + } + + watched.self = this.getValue(); + if(this.watched_values.self !== watched.self) changed = true; + + this.watched_values = watched; + + return changed; + }, + getWatchedFieldValues: function() { + return this.watched_values; + }, + updateHeaderText: function() { + if(this.header) { + // If the header has children, only update the text node's value + if(this.header.children.length) { + for(var i=0; i -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + getDisplayText: function(arr) { + var disp = []; + var used = {}; + + // Determine how many times each attribute name is used. + // This helps us pick the most distinct display text for the schemas. + $each(arr,function(i,el) { + if(el.title) { + used[el.title] = used[el.title] || 0; + used[el.title]++; + } + if(el.description) { + used[el.description] = used[el.description] || 0; + used[el.description]++; + } + if(el.format) { + used[el.format] = used[el.format] || 0; + used[el.format]++; + } + if(el.type) { + used[el.type] = used[el.type] || 0; + used[el.type]++; + } + }); + + // Determine display text for each element of the array + $each(arr,function(i,el) { + var name; + + // If it's a simple string + if(typeof el === "string") name = el; + // Object + else if(el.title && used[el.title]<=1) name = el.title; + else if(el.format && used[el.format]<=1) name = el.format; + else if(el.type && used[el.type]<=1) name = el.type; + else if(el.description && used[el.description]<=1) name = el.descripton; + else if(el.title) name = el.title; + else if(el.format) name = el.format; + else if(el.type) name = el.type; + else if(el.description) name = el.description; + else if(JSON.stringify(el).length < 50) name = JSON.stringify(el); + else name = "type"; + + disp.push(name); + }); + + // Replace identical display text with "text 1", "text 2", etc. + var inc = {}; + $each(disp,function(i,name) { + inc[name] = inc[name] || 0; + inc[name]++; + + if(used[name] > 1) disp[i] = name + " " + inc[name]; + }); + + return disp; + }, + getOption: function(key) { + try { + throw "getOption is deprecated"; + } + catch(e) { + window.console.error(e); + } + + return this.options[key]; + }, + showValidationErrors: function(errors) { + + } +}); + +JSONEditor.defaults.editors["null"] = JSONEditor.AbstractEditor.extend({ + getValue: function() { + return null; + }, + setValue: function() { + this.onChange(); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.string = JSONEditor.AbstractEditor.extend({ + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + setValue: function(value,initial,from_template) { + var self = this; + + if(this.template && !from_template) { + return; + } + + if(value === null || typeof value === 'undefined') value = ""; + else if(typeof value === "object") value = JSON.stringify(value); + else if(typeof value !== "string") value = ""+value; + + if(value === this.serialized) return; + + // Sanitize value before setting it + var sanitized = this.sanitize(value); + + if(this.input.value === sanitized) { + return; + } + + this.input.value = sanitized; + + // If using SCEditor, update the WYSIWYG + if(this.sceditor_instance) { + this.sceditor_instance.val(sanitized); + } + else if(this.epiceditor) { + this.epiceditor.importFile(null,sanitized); + } + else if(this.ace_editor) { + this.ace_editor.setValue(sanitized); + } + + var changed = from_template || this.getValue() !== value; + + this.refreshValue(); + + if(initial) this.is_dirty = false; + else if(this.jsoneditor.options.show_errors === "change") this.is_dirty = true; + + if(this.adjust_height) this.adjust_height(this.input); + + // Bubble this setValue to parents if the value changed + this.onChange(changed); + }, + getNumColumns: function() { + var min = Math.ceil(Math.max(this.getTitle().length,this.schema.maxLength||0,this.schema.minLength||0)/5); + var num; + + if(this.input_type === 'textarea') num = 6; + else if(['text','email'].indexOf(this.input_type) >= 0) num = 4; + else num = 2; + + return Math.min(12,Math.max(min,num)); + }, + build: function() { + var self = this, i; + if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + + this.format = this.schema.format; + if(!this.format && this.schema.media && this.schema.media.type) { + this.format = this.schema.media.type.replace(/(^(application|text)\/(x-)?(script\.)?)|(-source$)/g,''); + } + if(!this.format && this.options.default_format) { + this.format = this.options.default_format; + } + if(this.options.format) { + this.format = this.options.format; + } + + // Specific format + if(this.format) { + // Text Area + if(this.format === 'textarea') { + this.input_type = 'textarea'; + this.input = this.theme.getTextareaInput(); + } + // Range Input + else if(this.format === 'range') { + this.input_type = 'range'; + var min = this.schema.minimum || 0; + var max = this.schema.maximum || Math.max(100,min+1); + var step = 1; + if(this.schema.multipleOf) { + if(min%this.schema.multipleOf) min = Math.ceil(min/this.schema.multipleOf)*this.schema.multipleOf; + if(max%this.schema.multipleOf) max = Math.floor(max/this.schema.multipleOf)*this.schema.multipleOf; + step = this.schema.multipleOf; + } + + this.input = this.theme.getRangeInput(min,max,step); + } + // Source Code + else if([ + 'actionscript', + 'batchfile', + 'bbcode', + 'c', + 'c++', + 'cpp', + 'coffee', + 'csharp', + 'css', + 'dart', + 'django', + 'ejs', + 'erlang', + 'golang', + 'handlebars', + 'haskell', + 'haxe', + 'html', + 'ini', + 'jade', + 'java', + 'javascript', + 'json', + 'less', + 'lisp', + 'lua', + 'makefile', + 'markdown', + 'matlab', + 'mysql', + 'objectivec', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'python', + 'r', + 'ruby', + 'sass', + 'scala', + 'scss', + 'smarty', + 'sql', + 'stylus', + 'svg', + 'twig', + 'vbscript', + 'xml', + 'yaml' + ].indexOf(this.format) >= 0 + ) { + this.input_type = this.format; + this.source_code = true; + + this.input = this.theme.getTextareaInput(); + } + // HTML5 Input type + else { + this.input_type = this.format; + this.input = this.theme.getFormInputField(this.input_type); + } + } + // Normal text input + else { + this.input_type = 'text'; + this.input = this.theme.getFormInputField(this.input_type); + } + + // minLength, maxLength, and pattern + if(typeof this.schema.maxLength !== "undefined") this.input.setAttribute('maxlength',this.schema.maxLength); + if(typeof this.schema.pattern !== "undefined") this.input.setAttribute('pattern',this.schema.pattern); + else if(typeof this.schema.minLength !== "undefined") this.input.setAttribute('pattern','.{'+this.schema.minLength+',}'); + + if(this.options.compact) { + this.container.className += ' compact'; + } + else { + if(this.options.input_width) this.input.style.width = this.options.input_width; + } + + if(this.schema.readOnly || this.schema.readonly || this.schema.template) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input + .addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + // Don't allow changing if this field is a template + if(self.schema.template) { + this.value = self.value; + return; + } + + var val = this.value; + + // sanitize value + var sanitized = self.sanitize(val); + if(val !== sanitized) { + this.value = sanitized; + } + + self.is_dirty = true; + + self.refreshValue(); + self.onChange(true); + }); + + if(this.options.input_height) this.input.style.height = this.options.input_height; + if(this.options.expand_height) { + this.adjust_height = function(el) { + if(!el) return; + var i, ch=el.offsetHeight; + // Input too short + if(el.offsetHeight < el.scrollHeight) { + i=0; + while(el.offsetHeight < el.scrollHeight+3) { + if(i>100) break; + i++; + ch++; + el.style.height = ch+'px'; + } + } + else { + i=0; + while(el.offsetHeight >= el.scrollHeight+3) { + if(i>100) break; + i++; + ch--; + el.style.height = ch+'px'; + } + el.style.height = (ch+1)+'px'; + } + }; + + this.input.addEventListener('keyup',function(e) { + self.adjust_height(this); + }); + this.input.addEventListener('change',function(e) { + self.adjust_height(this); + }); + this.adjust_height(); + } + + if(this.format) this.input.setAttribute('data-schemaformat',this.format); + + this.control = this.theme.getFormControl(this.label, this.input, this.description); + this.container.appendChild(this.control); + + // Any special formatting that needs to happen after the input is added to the dom + window.requestAnimationFrame(function() { + // Skip in case the input is only a temporary editor, + // otherwise, in the case of an ace_editor creation, + // it will generate an error trying to append it to the missing parentNode + if(self.input.parentNode) self.afterInputReady(); + if(self.adjust_height) self.adjust_height(self.input); + }); + + // Compile and store the template + if(this.schema.template) { + this.template = this.jsoneditor.compileTemplate(this.schema.template, this.template_engine); + this.refreshValue(); + } + else { + this.refreshValue(); + } + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + // TODO: WYSIWYG and Markdown editors + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + // TODO: WYSIWYG and Markdown editors + this._super(); + }, + afterInputReady: function() { + var self = this, options; + + // Code editor + if(this.source_code) { + // WYSIWYG html and bbcode editor + if(this.options.wysiwyg && + ['html','bbcode'].indexOf(this.input_type) >= 0 && + window.jQuery && window.jQuery.fn && window.jQuery.fn.sceditor + ) { + options = $extend({},{ + plugins: self.input_type==='html'? 'xhtml' : 'bbcode', + emoticonsEnabled: false, + width: '100%', + height: 300 + },JSONEditor.plugins.sceditor,self.options.sceditor_options||{}); + + window.jQuery(self.input).sceditor(options); + + self.sceditor_instance = window.jQuery(self.input).sceditor('instance'); + + self.sceditor_instance.blur(function() { + // Get editor's value + var val = window.jQuery("
    "+self.sceditor_instance.val()+"
    "); + // Remove sceditor spans/divs + window.jQuery('#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf',val).remove(); + // Set the value and update + self.input.value = val.html(); + self.value = self.input.value; + self.is_dirty = true; + self.onChange(true); + }); + } + // EpicEditor for markdown (if it's loaded) + else if (this.input_type === 'markdown' && window.EpicEditor) { + this.epiceditor_container = document.createElement('div'); + this.input.parentNode.insertBefore(this.epiceditor_container,this.input); + this.input.style.display = 'none'; + + options = $extend({},JSONEditor.plugins.epiceditor,{ + container: this.epiceditor_container, + clientSideStorage: false + }); + + this.epiceditor = new window.EpicEditor(options).load(); + + this.epiceditor.importFile(null,this.getValue()); + + this.epiceditor.on('update',function() { + var val = self.epiceditor.exportFile(); + self.input.value = val; + self.value = val; + self.is_dirty = true; + self.onChange(true); + }); + } + // ACE editor for everything else + else if(window.ace) { + var mode = this.input_type; + // aliases for c/cpp + if(mode === 'cpp' || mode === 'c++' || mode === 'c') { + mode = 'c_cpp'; + } + + this.ace_container = document.createElement('div'); + this.ace_container.style.width = '100%'; + this.ace_container.style.position = 'relative'; + this.ace_container.style.height = '400px'; + this.input.parentNode.insertBefore(this.ace_container,this.input); + this.input.style.display = 'none'; + this.ace_editor = window.ace.edit(this.ace_container); + + this.ace_editor.setValue(this.getValue()); + + // The theme + if(JSONEditor.plugins.ace.theme) this.ace_editor.setTheme('ace/theme/'+JSONEditor.plugins.ace.theme); + // The mode + mode = window.ace.require("ace/mode/"+mode); + if(mode) this.ace_editor.getSession().setMode(new mode.Mode()); + + // Listen for changes + this.ace_editor.on('change',function() { + var val = self.ace_editor.getValue(); + self.input.value = val; + self.refreshValue(); + self.is_dirty = true; + self.onChange(true); + }); + } + } + + self.theme.afterInputReady(self.input); + }, + refreshValue: function() { + this.value = this.input.value; + if(typeof this.value !== "string") this.value = ''; + this.serialized = this.value; + }, + destroy: function() { + // If using SCEditor, destroy the editor instance + if(this.sceditor_instance) { + this.sceditor_instance.destroy(); + } + else if(this.epiceditor) { + this.epiceditor.unload(); + } + else if(this.ace_editor) { + this.ace_editor.destroy(); + } + + + this.template = null; + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + + this._super(); + }, + /** + * This is overridden in derivative editors + */ + sanitize: function(value) { + return value; + }, + /** + * Re-calculates the value if needed + */ + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor needs to be rendered by a macro template + if(this.template) { + vars = this.getWatchedFieldValues(); + this.setValue(this.template(vars),false,true); + } + + this._super(); + }, + showValidationErrors: function(errors) { + var self = this; + + if(this.jsoneditor.options.show_errors === "always") {} + else if(!this.is_dirty && this.previous_error_setting===this.jsoneditor.options.show_errors) return; + + this.previous_error_setting = this.jsoneditor.options.show_errors; + + var messages = []; + $each(errors,function(i,error) { + if(error.path === self.path) { + messages.push(error.message); + } + }); + + if(messages.length) { + this.theme.addInputError(this.input, messages.join('. ')+'.'); + } + else { + this.theme.removeInputError(this.input); + } + } +}); + +JSONEditor.defaults.editors.number = JSONEditor.defaults.editors.string.extend({ + sanitize: function(value) { + return (value+"").replace(/[^0-9\.\-eE]/g,''); + }, + getNumColumns: function() { + return 2; + }, + getValue: function() { + return this.value*1; + } +}); + +JSONEditor.defaults.editors.integer = JSONEditor.defaults.editors.number.extend({ + sanitize: function(value) { + value = value + ""; + return value.replace(/[^0-9\-]/g,''); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return $extend({},this.schema["default"] || {}); + }, + getChildEditors: function() { + return this.editors; + }, + register: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].register(); + } + } + }, + unregister: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].unregister(); + } + } + }, + getNumColumns: function() { + return Math.max(Math.min(12,this.maxwidth),3); + }, + enable: function() { + if(this.editjson_button) this.editjson_button.disabled = false; + if(this.addproperty_button) this.addproperty_button.disabled = false; + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].enable(); + } + } + }, + disable: function() { + if(this.editjson_button) this.editjson_button.disabled = true; + if(this.addproperty_button) this.addproperty_button.disabled = true; + this.hideEditJSON(); + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].disable(); + } + } + }, + layoutEditors: function() { + var self = this, i, j; + + if(!this.row_container) return; + + // Sort editors by propertyOrder + this.property_order = Object.keys(this.editors); + this.property_order = this.property_order.sort(function(a,b) { + var ordera = self.editors[a].schema.propertyOrder; + var orderb = self.editors[b].schema.propertyOrder; + if(typeof ordera !== "number") ordera = 1000; + if(typeof orderb !== "number") orderb = 1000; + + return ordera - orderb; + }); + + var container; + + if(this.format === 'grid') { + var rows = []; + $each(this.property_order, function(j,key) { + var editor = self.editors[key]; + if(editor.property_removed) return; + var found = false; + var width = editor.options.hidden? 0 : (editor.options.grid_columns || editor.getNumColumns()); + var height = editor.options.hidden? 0 : editor.container.offsetHeight; + // See if the editor will fit in any of the existing rows first + for(var i=0; i height)) { + found = i; + } + } + } + + // If there isn't a spot in any of the existing rows, start a new row + if(found === false) { + rows.push({ + width: 0, + minh: 999999, + maxh: 0, + editors: [] + }); + found = rows.length-1; + } + + rows[found].editors.push({ + key: key, + //editor: editor, + width: width, + height: height + }); + rows[found].width += width; + rows[found].minh = Math.min(rows[found].minh,height); + rows[found].maxh = Math.max(rows[found].maxh,height); + }); + + // Make almost full rows width 12 + // Do this by increasing all editors' sizes proprotionately + // Any left over space goes to the biggest editor + // Don't touch rows with a width of 6 or less + for(i=0; i rows[i].editors[biggest].width) biggest = j; + rows[i].editors[j].width *= 12/rows[i].width; + rows[i].editors[j].width = Math.floor(rows[i].editors[j].width); + new_width += rows[i].editors[j].width; + } + if(new_width < 12) rows[i].editors[biggest].width += 12-new_width; + rows[i].width = 12; + } + } + + // layout hasn't changed + if(this.layout === JSON.stringify(rows)) return false; + this.layout = JSON.stringify(rows); + + // Layout the form + container = document.createElement('div'); + for(i=0; i= this.schema.maxProperties); + + if(this.addproperty_checkboxes) { + this.addproperty_list.innerHTML = ''; + } + this.addproperty_checkboxes = {}; + + // Check for which editors can't be removed or added back + for(i in this.cached_editors) { + if(!this.cached_editors.hasOwnProperty(i)) continue; + + this.addPropertyCheckbox(i); + + if(this.isRequired(this.cached_editors[i]) && i in this.editors) { + this.addproperty_checkboxes[i].disabled = true; + } + + if(typeof this.schema.minProperties !== "undefined" && num_props <= this.schema.minProperties) { + this.addproperty_checkboxes[i].disabled = this.addproperty_checkboxes[i].checked; + if(!this.addproperty_checkboxes[i].checked) show_modal = true; + } + else if(!(i in this.editors)) { + if(!can_add && !this.schema.properties.hasOwnProperty(i)) { + this.addproperty_checkboxes[i].disabled = true; + } + else { + this.addproperty_checkboxes[i].disabled = false; + show_modal = true; + } + } + else { + show_modal = true; + can_remove = true; + } + } + + if(this.canHaveAdditionalProperties()) { + show_modal = true; + } + + // Additional addproperty checkboxes not tied to a current editor + for(i in this.schema.properties) { + if(!this.schema.properties.hasOwnProperty(i)) continue; + if(this.cached_editors[i]) continue; + show_modal = true; + this.addPropertyCheckbox(i); + } + + // If no editors can be added or removed, hide the modal button + if(!show_modal) { + this.hideAddProperty(); + this.addproperty_controls.style.display = 'none'; + } + // If additional properties are disabled + else if(!this.canHaveAdditionalProperties()) { + this.addproperty_add.style.display = 'none'; + this.addproperty_input.style.display = 'none'; + } + // If no new properties can be added + else if(!can_add) { + this.addproperty_add.disabled = true; + } + // If new properties can be added + else { + this.addproperty_add.disabled = false; + } + }, + isRequired: function(editor) { + if(typeof editor.schema.required === "boolean") return editor.schema.required; + else if(Array.isArray(this.schema.required)) return this.schema.required.indexOf(editor.key) > -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + setValue: function(value, initial) { + var self = this; + value = value || {}; + + if(typeof value !== "object" || Array.isArray(value)) value = {}; + + // First, set the values for all of the defined properties + $each(this.cached_editors, function(i,editor) { + // Value explicitly set + if(typeof value[i] !== "undefined") { + self.addObjectProperty(i); + editor.setValue(value[i],initial); + } + // Otherwise, remove value unless this is the initial set or it's required + else if(!initial && !self.isRequired(editor)) { + self.removeObjectProperty(i); + } + // Otherwise, set the value to the default + else { + editor.setValue(editor.getDefault(),initial); + } + }); + + $each(value, function(i,val) { + if(!self.cached_editors[i]) { + self.addObjectProperty(i); + if(self.editors[i]) self.editors[i].setValue(val,initial); + } + }); + + this.refreshValue(); + this.layoutEditors(); + this.onChange(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show error for the table row if this is inside a table + if(this.options.table_row) { + if(my_errors.length) { + this.theme.addTableRowError(this.container); + } + else { + this.theme.removeTableRowError(this.container); + } + } + + // Show errors for child editors + $each(this.editors, function(i,editor) { + editor.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return this.schema["default"] || []; + }, + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i= this.schema.items.length) { + if(this.schema.additionalItems===true) { + return {}; + } + else if(this.schema.additionalItems) { + return $extend({},this.schema.additionalItems); + } + } + else { + return $extend({},this.schema.items[i]); + } + } + else if(this.schema.items) { + return $extend({},this.schema.items); + } + else { + return {}; + } + }, + getItemInfo: function(i) { + var schema = this.getItemSchema(i); + + // Check if it's cached + this.item_info = this.item_info || {}; + var stringified = JSON.stringify(schema); + if(typeof this.item_info[stringified] !== "undefined") return this.item_info[stringified]; + + // Get the schema for this item + schema = this.jsoneditor.expandRefs(schema); + + this.item_info[stringified] = { + title: schema.title || "item", + 'default': schema["default"], + width: 12, + child_editors: schema.properties || schema.items + }; + + return this.item_info[stringified]; + }, + getElementEditor: function(i) { + var item_info = this.getItemInfo(i); + var schema = this.getItemSchema(i); + schema = this.jsoneditor.expandRefs(schema); + schema.title = item_info.title+' '+(i+1); + + var editor = this.jsoneditor.getEditorClass(schema); + + var holder; + if(this.tabs_holder) { + holder = this.theme.getTabContent(); + } + else if(item_info.child_editors) { + holder = this.theme.getChildEditorHolder(); + } + else { + holder = this.theme.getIndentedPanel(); + } + + this.row_holder.appendChild(holder); + + var ret = this.jsoneditor.createEditor(editor,{ + jsoneditor: this.jsoneditor, + schema: schema, + container: holder, + path: this.path+'.'+i, + parent: this, + required: true + }); + ret.preBuild(); + ret.build(); + ret.postBuild(); + + if(!ret.title_controls) { + ret.array_controls = this.theme.getButtonHolder(); + holder.appendChild(ret.array_controls); + } + + return ret; + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.row_holder && this.row_holder.parentNode) this.row_holder.parentNode.removeChild(this.row_holder); + if(this.controls && this.controls.parentNode) this.controls.parentNode.removeChild(this.controls); + if(this.panel && this.panel.parentNode) this.panel.parentNode.removeChild(this.panel); + + this.rows = this.row_cache = this.title = this.description = this.row_holder = this.panel = this.controls = null; + + this._super(); + }, + empty: function(hard) { + if(!this.rows) return; + var self = this; + $each(this.rows,function(i,row) { + if(hard) { + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + self.destroyRow(row,true); + self.row_cache[i] = null; + } + self.rows[i] = null; + }); + self.rows = []; + if(hard) self.row_cache = []; + }, + destroyRow: function(row,hard) { + var holder = row.container; + if(hard) { + row.destroy(); + if(holder.parentNode) holder.parentNode.removeChild(holder); + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + } + else { + if(row.tab) row.tab.style.display = 'none'; + holder.style.display = 'none'; + row.unregister(); + } + }, + getMax: function() { + if((Array.isArray(this.schema.items)) && this.schema.additionalItems === false) { + return Math.min(this.schema.items.length,this.schema.maxItems || Infinity); + } + else { + return this.schema.maxItems || Infinity; + } + }, + refreshTabs: function(refresh_headers) { + var self = this; + $each(this.rows, function(i,row) { + if(!row.tab) return; + + if(refresh_headers) { + row.tab_text.textContent = row.getHeaderText(); + } + else { + if(row.tab === self.active_tab) { + self.theme.markTabActive(row.tab); + row.container.style.display = ''; + } + else { + self.theme.markTabInactive(row.tab); + row.container.style.display = 'none'; + } + } + }); + }, + setValue: function(value, initial) { + // Update the array's value, adding/removing rows when necessary + value = value || []; + + if(!(Array.isArray(value))) value = [value]; + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + // Make sure value has between minItems and maxItems items in it + if(this.schema.minItems) { + while(value.length < this.schema.minItems) { + value.push(this.getItemInfo(value.length)["default"]); + } + } + if(this.getMax() && value.length > this.getMax()) { + value = value.slice(0,this.getMax()); + } + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val,initial); + } + else if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(val,initial); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(val,initial); + } + }); + + for(var j=value.length; j= this.rows.length; + + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + editor.delete_button.style.display = ''; + } + } + + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else if(this.value.length === 1) { + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.getMax() && this.getMax() <= this.rows.length) || this.hide_add_button){ + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!this.collapsed && controls_needed) { + this.controls.style.display = 'inline-block'; + } + else { + this.controls.style.display = 'none'; + } + } + }, + addRow: function(value, initial) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + self.row_cache[i] = self.rows[i]; + + if(self.tabs_holder) { + self.rows[i].tab_text = document.createElement('span'); + self.rows[i].tab_text.textContent = self.rows[i].getHeaderText(); + self.rows[i].tab = self.theme.getTab(self.rows[i].tab_text); + self.rows[i].tab.addEventListener('click', function(e) { + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + e.preventDefault(); + e.stopPropagation(); + }); + + self.theme.addTab(self.tabs_holder, self.rows[i].tab); + } + + var controls_holder = self.rows[i].title_controls || self.rows[i].array_controls; + + // Buttons to delete row, move row up, and move row down + if(!self.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete','Delete '+self.getItemTitle()); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + var new_active_tab = null; + $each(value,function(j,row) { + if(j===i) { + // If the one we're deleting is the active tab + if(self.rows[j].tab === self.active_tab) { + // Make the next tab active if there is one + // Note: the next tab is going to be the current tab after deletion + if(self.rows[j+1]) new_active_tab = self.rows[j].tab; + // Otherwise, make the previous tab active if there is one + else if(j) new_active_tab = self.rows[j-1].tab; + } + + return; // If this is the one we're deleting + } + newval.push(row); + }); + self.setValue(newval); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].delete_button); + } + } + + if(i && !self.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup','Move up'); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i-1].tab; + self.refreshTabs(); + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].moveup_button); + } + } + + if(!self.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown','Move down'); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i+1].tab; + self.refreshTabs(); + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].movedown_button); + } + } + + if(value) self.rows[i].setValue(value, initial); + self.refreshTabs(); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse','Collapse'); + this.title_controls.appendChild(this.toggle_button); + var row_holder_display = self.row_holder.style.display; + var controls_display = self.controls.style.display; + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + if(self.collapsed) { + self.collapsed = false; + if(self.panel) self.panel.style.display = ''; + self.row_holder.style.display = row_holder_display; + if(self.tabs_holder) self.tabs_holder.style.display = ''; + self.controls.style.display = controls_display; + self.setButtonText(this,'','collapse','Collapse'); + } + else { + self.collapsed = true; + self.row_holder.style.display = 'none'; + if(self.tabs_holder) self.tabs_holder.style.display = 'none'; + self.controls.style.display = 'none'; + if(self.panel) self.panel.style.display = 'none'; + self.setButtonText(this,'','expand','Expand'); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add','Add '+this.getItemTitle()); + + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = self.rows.length; + if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(self.rows[i].getDefault()); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(); + } + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + self.refreshValue(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton('Last '+this.getItemTitle(),'delete','Delete Last '+this.getItemTitle()); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var rows = self.getValue(); + + var new_active_tab = null; + if(self.rows.length > 1 && self.rows[self.rows.length-1].tab === self.active_tab) new_active_tab = self.rows[self.rows.length-2].tab; + + rows.pop(); + self.setValue(rows); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton('All','delete','Delete All'); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + + if(self.tabs) { + this.add_row_button.style.width = '100%'; + this.add_row_button.style.textAlign = 'left'; + this.add_row_button.style.marginBottom = '3px'; + + this.delete_last_row_button.style.width = '100%'; + this.delete_last_row_button.style.textAlign = 'left'; + this.delete_last_row_button.style.marginBottom = '3px'; + + this.remove_all_rows_button.style.width = '100%'; + this.remove_all_rows_button.style.textAlign = 'left'; + this.remove_all_rows_button.style.marginBottom = '3px'; + } + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show errors for child editors + $each(this.rows, function(i,row) { + row.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({ + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i this.schema.maxItems) { + value = value.slice(0,this.schema.maxItems); + } + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + var numrows_changed = false; + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val); + } + else { + self.addRow(val); + numrows_changed = true; + } + }); + + for(var j=value.length; j= this.rows.length; + + var need_row_buttons = false; + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.delete_button.style.display = ''; + } + } + + if(editor.moveup_button) { + need_row_buttons = true; + } + }); + + // Show/hide controls column in table + $each(this.rows,function(i,editor) { + if(need_row_buttons) { + editor.controls_cell.style.display = ''; + } + else { + editor.controls_cell.style.display = 'none'; + } + }); + if(need_row_buttons) { + this.controls_header_cell.style.display = ''; + } + else { + this.controls_header_cell.style.display = 'none'; + } + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + this.table.style.display = 'none'; + } + else if(this.value.length === 1 || this.hide_delete_buttons) { + this.table.style.display = ''; + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + this.table.style.display = ''; + // If there are minItems items in the array, hide the delete button beneath the rows + if(minItems || this.hide_delete_buttons) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.schema.maxItems && this.schema.maxItems <= this.rows.length) || this.hide_add_button) { + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!controls_needed) { + this.controls.style.display = 'none'; + } + else { + this.controls.style.display = ''; + } + }, + refreshValue: function() { + var self = this; + this.value = []; + + $each(this.rows,function(i,editor) { + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + this.serialized = JSON.stringify(this.value); + }, + addRow: function(value) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + + var controls_holder = self.rows[i].table_controls; + + // Buttons to delete row, move row up, and move row down + if(!this.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton('','delete','Delete'); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + $each(value,function(j,row) { + if(j===i) return; // If this is the one we're deleting + newval.push(row); + }); + self.setValue(newval); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].delete_button); + } + + + if(i && !this.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup','Move up'); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].moveup_button); + } + + if(!this.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown','Move down'); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].movedown_button); + } + + if(value) self.rows[i].setValue(value); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse','Collapse'); + if(this.title_controls) { + this.title_controls.appendChild(this.toggle_button); + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(self.collapsed) { + self.collapsed = false; + self.panel.style.display = ''; + self.setButtonText(this,'','collapse','Collapse'); + } + else { + self.collapsed = true; + self.panel.style.display = 'none'; + self.setButtonText(this,'','expand','Expand'); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add','Add '+this.getItemTitle()); + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.addRow(); + self.refreshValue(); + self.refreshRowButtons(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton('Last '+this.getItemTitle(),'delete','Delete Last '+this.getItemTitle()); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + var rows = self.getValue(); + rows.pop(); + self.setValue(rows); + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton('All','delete','Delete All'); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + } +}); + +// Multiple Editor (for when `type` is an array) +JSONEditor.defaults.editors.multiple = JSONEditor.AbstractEditor.extend({ + register: function() { + if(this.editors) { + for(var i=0; inull'; + } + // Array or Object + else if(typeof el === "object") { + // TODO: use theme + var ret = ''; + + $each(el,function(i,child) { + var html = self.getHTML(child); + + // Add the keys to object children + if(!(Array.isArray(el))) { + // TODO: use theme + html = '
    '+i+': '+html+'
    '; + } + + // TODO: use theme + ret += '
  • '+html+'
  • '; + }); + + if(Array.isArray(el)) ret = '
      '+ret+'
    '; + else ret = "
      "+ret+'
    '; + + return ret; + } + // Boolean + else if(typeof el === "boolean") { + return el? 'true' : 'false'; + } + // String + else if(typeof el === "string") { + return el.replace(/&/g,'&').replace(//g,'>'); + } + // Number + else { + return el; + } + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.refreshValue(); + this.onChange(); + } + }, + destroy: function() { + if(this.display_area && this.display_area.parentNode) this.display_area.parentNode.removeChild(this.display_area); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.switcher && this.switcher.parentNode) this.switcher.parentNode.removeChild(this.switcher); + + this._super(); + } +}); + +JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + value = this.typecast(value||''); + + // Sanitize value before setting it + var sanitized = value; + if(this.enum_values.indexOf(sanitized) < 0) { + sanitized = this.enum_values[0]; + } + + if(this.value === sanitized) { + return; + } + + this.input.value = this.enum_options[this.enum_values.indexOf(sanitized)]; + if(this.select2) this.select2.select2('val',this.input.value); + this.value = sanitized; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + if(!this.enum_options) return 3; + var longest_text = this.getTitle().length; + for(var i=0; i 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.select2); + if(this.schema.options && this.schema.options.select2_options) options = $extend(options,this.schema.options.select2_options); + this.select2 = window.jQuery(this.input).select2(options); + var self = this; + this.select2.on('select2-blur',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + } + else { + this.select2 = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelect2(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; iSize: '+Math.floor((this.value.length-this.value.split(',')[0].length-1)/1.33333)+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.value; + this.preview.appendChild(img); + } + } + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.refreshPreview(); + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.upload = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var self = this; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + + // Input that holds the base64 string + this.input = this.theme.getFormInputField('hidden'); + this.container.appendChild(this.input); + + // Don't show uploader if this is readonly + if(!this.schema.readOnly && !this.schema.readonly) { + + if(!this.jsoneditor.options.upload) throw "Upload handler required for upload editor"; + + // File uploader + this.uploader = this.theme.getFormInputField('file'); + + this.uploader.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(this.files && this.files.length) { + var fr = new FileReader(); + fr.onload = function(evt) { + self.preview_value = evt.target.result; + self.refreshPreview(); + self.onChange(true); + fr = null; + }; + fr.readAsDataURL(this.files[0]); + } + }); + } + + var description = this.schema.description; + if (!description) description = ''; + + this.preview = this.theme.getFormInputDescription(description); + this.container.appendChild(this.preview); + + this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview); + this.container.appendChild(this.control); + }, + refreshPreview: function() { + if(this.last_preview === this.preview_value) return; + this.last_preview = this.preview_value; + + this.preview.innerHTML = ''; + + if(!this.preview_value) return; + + var self = this; + + var mime = this.preview_value.match(/^data:([^;,]+)[;,]/); + if(mime) mime = mime[1]; + if(!mime) mime = 'unknown'; + + var file = this.uploader.files[0]; + + this.preview.innerHTML = 'Type: '+mime+', Size: '+file.size+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.preview_value; + this.preview.appendChild(img); + } + + this.preview.innerHTML += '
    '; + var uploadButton = this.getButton('Upload', 'upload', 'Upload'); + this.preview.appendChild(uploadButton); + uploadButton.addEventListener('click',function(event) { + event.preventDefault(); + + uploadButton.setAttribute("disabled", "disabled"); + self.theme.removeInputError(self.uploader); + + if (self.theme.getProgressBar) { + self.progressBar = self.theme.getProgressBar(); + self.preview.appendChild(self.progressBar); + } + + self.jsoneditor.options.upload(self.path, file, { + success: function(url) { + self.setValue(url); + + if(self.parent) self.parent.onChildEditorChange(self); + else self.jsoneditor.onChange(); + + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + failure: function(error) { + self.theme.addInputError(self.uploader, error); + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + updateProgress: function(progress) { + if (self.progressBar) { + if (progress) self.theme.updateProgressBar(self.progressBar, progress); + else self.theme.updateProgressBarUnknown(self.progressBar); + } + } + }); + }); + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.checkbox = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + this.value = !!value; + this.input.checked = this.value; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + return Math.min(12,Math.max(this.getTitle().length/7,2)); + }, + build: function() { + var self = this; + if(!this.options.compact) { + this.label = this.header = this.theme.getCheckboxLabel(this.getTitle()); + } + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + if(this.options.compact) this.container.className += ' compact'; + + this.input = this.theme.getCheckbox(); + this.control = this.theme.getFormControl(this.label, this.input, this.description); + + if(this.schema.readOnly || this.schema.readonly) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.value = this.checked; + self.onChange(true); + }); + + this.container.appendChild(this.control); + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + this._super(); + }, + destroy: function() { + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + this._super(); + } +}); + +var matchKey = (function () { + var elem = document.documentElement; + + if (elem.matches) return 'matches'; + else if (elem.webkitMatchesSelector) return 'webkitMatchesSelector'; + else if (elem.mozMatchesSelector) return 'mozMatchesSelector'; + else if (elem.msMatchesSelector) return 'msMatchesSelector'; + else if (elem.oMatchesSelector) return 'oMatchesSelector'; +})(); + +JSONEditor.AbstractTheme = Class.extend({ + getContainer: function() { + return document.createElement('div'); + }, + getFloatRightLinkHolder: function() { + var el = document.createElement('div'); + el.style = el.style || {}; + el.style.cssFloat = 'right'; + el.style.marginLeft = '10px'; + return el; + }, + getModal: function() { + var el = document.createElement('div'); + el.style.backgroundColor = 'white'; + el.style.border = '1px solid black'; + el.style.boxShadow = '3px 3px black'; + el.style.position = 'absolute'; + el.style.zIndex = '10'; + el.style.display = 'none'; + return el; + }, + getGridContainer: function() { + var el = document.createElement('div'); + return el; + }, + getGridRow: function() { + var el = document.createElement('div'); + el.className = 'row'; + return el; + }, + getGridColumn: function() { + var el = document.createElement('div'); + return el; + }, + setGridColumnSize: function(el,size) { + + }, + getLink: function(text) { + var el = document.createElement('a'); + el.setAttribute('href','#'); + el.appendChild(document.createTextNode(text)); + return el; + }, + disableHeader: function(header) { + header.style.color = '#ccc'; + }, + disableLabel: function(label) { + label.style.color = '#ccc'; + }, + enableHeader: function(header) { + header.style.color = ''; + }, + enableLabel: function(label) { + label.style.color = ''; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.appendChild(document.createTextNode(text)); + return el; + }, + getCheckboxLabel: function(text) { + var el = this.getFormInputLabel(text); + el.style.fontWeight = 'normal'; + return el; + }, + getHeader: function(text) { + var el = document.createElement('h3'); + if(typeof text === "string") { + el.textContent = text; + } + else { + el.appendChild(text); + } + + return el; + }, + getCheckbox: function() { + var el = this.getFormInputField('checkbox'); + el.style.display = 'inline-block'; + el.style.width = 'auto'; + return el; + }, + getMultiCheckboxHolder: function(controls,label,description) { + var el = document.createElement('div'); + + if(label) { + label.style.display = 'block'; + el.appendChild(label); + } + + for(var i in controls) { + if(!controls.hasOwnProperty(i)) continue; + controls[i].style.display = 'inline-block'; + controls[i].style.marginRight = '20px'; + el.appendChild(controls[i]); + } + + if(description) el.appendChild(description); + + return el; + }, + getSelectInput: function(options) { + var select = document.createElement('select'); + if(options) this.setSelectOptions(select, options); + return select; + }, + getSwitcher: function(options) { + var switcher = this.getSelectInput(options); + switcher.style.backgroundColor = 'transparent'; + switcher.style.display = 'inline-block'; + switcher.style.fontStyle = 'italic'; + switcher.style.fontWeight = 'normal'; + switcher.style.height = 'auto'; + switcher.style.marginBottom = 0; + switcher.style.marginLeft = '5px'; + switcher.style.padding = '0 0 0 3px'; + switcher.style.width = 'auto'; + return switcher; + }, + getSwitcherOptions: function(switcher) { + return switcher.getElementsByTagName('option'); + }, + setSwitcherOptions: function(switcher, options, titles) { + this.setSelectOptions(switcher, options, titles); + }, + setSelectOptions: function(select, options, titles) { + titles = titles || []; + select.innerHTML = ''; + for(var i=0; i'); + input.errmsg = input.parentNode.getElementsByClassName('error')[0]; + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.group.className = input.group.className.replace(/ error/g,''); + input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var progressBar = document.createElement('div'); + progressBar.className = 'progress'; + + var meter = document.createElement('span'); + meter.className = 'meter'; + meter.style.width = '0%'; + progressBar.appendChild(meter); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.firstChild.style.width = progress + '%'; + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.firstChild.style.width = '100%'; + } +}); + +// Foundation 3 Specific Theme +JSONEditor.defaults.themes.foundation3 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.className = 'row'; + el.innerHTML = "
    "; + return el; + }, + setGridColumnSize: function(el,size) { + var sizes = ['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve']; + el.className = 'columns '+sizes[size]; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +// Foundation 4 Specific Theme +JSONEditor.defaults.themes.foundation4 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns large-'+size; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + } +}); + +// Foundation 5 Specific Theme +JSONEditor.defaults.themes.foundation5 = JSONEditor.defaults.themes.foundation.extend({ + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns medium-'+size; + }, + getButton: function(text, icon, title) { + var el = this._super(text,icon,title); + el.className = el.className.replace(/\s*small/g,'') + ' tiny'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.innerHTML = "
    "; + return el; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +JSONEditor.defaults.themes.html = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + el.style.marginBottom = '3px'; + el.style.fontWeight = 'bold'; + return el; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8em'; + el.style.margin = 0; + el.style.display = 'inline-block'; + el.style.fontStyle = 'italic'; + return el; + }, + getIndentedPanel: function() { + var el = this._super(); + el.style.border = '1px solid #ddd'; + el.style.padding = '5px'; + el.style.margin = '5px'; + el.style.borderRadius = '3px'; + return el; + }, + getChildEditorHolder: function() { + var el = this._super(); + el.style.marginBottom = '8px'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.display = 'inline-block'; + el.style.marginLeft = '10px'; + el.style.fontSize = '.8em'; + el.style.verticalAlign = 'middle'; + return el; + }, + getTable: function() { + var el = this._super(); + el.style.borderBottom = '1px solid #ccc'; + el.style.marginBottom = '5px'; + return el; + }, + addInputError: function(input, text) { + input.style.borderColor = 'red'; + + if(!input.errmsg) { + var group = this.closest(input,'.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class','errmsg'); + input.errmsg.style = input.errmsg.style || {}; + input.errmsg.style.color = 'red'; + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function(input) { + input.style.borderColor = ''; + if(input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); + +JSONEditor.defaults.themes.jqueryui = JSONEditor.AbstractTheme.extend({ + getTable: function() { + var el = this._super(); + el.setAttribute('cellpadding',5); + el.setAttribute('cellspacing',0); + return el; + }, + getTableHeaderCell: function(text) { + var el = this._super(text); + el.className = 'ui-state-active'; + el.style.fontWeight = 'bold'; + return el; + }, + getTableCell: function() { + var el = this._super(); + el.className = 'ui-widget-content'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.marginLeft = '10px'; + el.style.fontSize = '.6em'; + el.style.display = 'inline-block'; + return el; + }, + getFormInputDescription: function(text) { + var el = this.getDescription(text); + el.style.marginLeft = '10px'; + el.style.display = 'inline-block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = this._super(label,input,description); + if(input.type === 'checkbox') { + el.style.lineHeight = '25px'; + + el.style.padding = '3px 0'; + } + else { + el.style.padding = '4px 0 8px 0'; + } + return el; + }, + getDescription: function(text) { + var el = document.createElement('span'); + el.style.fontSize = '.8em'; + el.style.fontStyle = 'italic'; + el.textContent = text; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'ui-buttonset'; + el.style.fontSize = '.7em'; + return el; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.style.fontWeight = 'bold'; + el.style.display = 'block'; + el.textContent = text; + return el; + }, + getButton: function(text, icon, title) { + var button = document.createElement("button"); + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + + return button; + }, + setButtonText: function(button,text, icon, title) { + button.innerHTML = ''; + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + }, + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'ui-widget-content ui-corner-all'; + el.style.padding = '1em 1.4em'; + el.style.marginBottom = '20px'; + return el; + }, + afterInputReady: function(input) { + if(input.controls) return; + input.controls = this.closest(input,'.form-control'); + }, + addInputError: function(input,text) { + if(!input.controls) return; + if(!input.errmsg) { + input.errmsg = document.createElement('div'); + input.errmsg.className = 'ui-state-error'; + input.controls.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.errmsg.style.display = 'none'; + }, + markTabActive: function(tab) { + tab.className = tab.className.replace(/\s*ui-widget-header/g,'')+' ui-state-active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*ui-state-active/g,'')+' ui-widget-header'; + } +}); + +JSONEditor.AbstractIconLib = Class.extend({ + mapping: { + collapse: '', + expand: '', + "delete": '', + edit: '', + add: '', + cancel: '', + save: '', + moveup: '', + movedown: '' + }, + icon_prefix: '', + getIconClass: function(key) { + if(this.mapping[key]) return this.icon_prefix+this.mapping[key]; + else return null; + }, + getIcon: function(key) { + var iconclass = this.getIconClass(key); + + if(!iconclass) return null; + + var i = document.createElement('i'); + i.className = iconclass; + return i; + } +}); + +JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-up', + "delete": 'trash', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'ok', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.bootstrap3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'floppy-remove', + save: 'floppy-saved', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'glyphicon glyphicon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome4 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'caret-square-o-down', + expand: 'caret-square-o-right', + "delete": 'times', + edit: 'pencil', + add: 'plus', + cancel: 'ban', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fa fa-' +}); + +JSONEditor.defaults.iconlibs.foundation2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'remove', + edit: 'edit', + add: 'add-doc', + cancel: 'error', + save: 'checkmark', + moveup: 'up-arrow', + movedown: 'down-arrow' + }, + icon_prefix: 'foundicon-' +}); + +JSONEditor.defaults.iconlibs.foundation3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'x', + edit: 'pencil', + add: 'page-add', + cancel: 'x-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fi-' +}); + +JSONEditor.defaults.iconlibs.jqueryui = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'triangle-1-s', + expand: 'triangle-1-e', + "delete": 'trash', + edit: 'pencil', + add: 'plusthick', + cancel: 'closethick', + save: 'disk', + moveup: 'arrowthick-1-n', + movedown: 'arrowthick-1-s' + }, + icon_prefix: 'ui-icon ui-icon-' +}); + +JSONEditor.defaults.templates["default"] = function() { + return { + compile: function(template) { + var matches = template.match(/{{\s*([a-zA-Z0-9\-_ \.]+)\s*}}/g); + var l = matches && matches.length; + + // Shortcut if the template contains no variables + if(!l) return function() { return template; }; + + // Pre-compute the search/replace functions + // This drastically speeds up template execution + var replacements = []; + var get_replacement = function(i) { + var p = matches[i].replace(/[{}]+/g,'').trim().split('.'); + var n = p.length; + var func; + + if(n > 1) { + var cur; + func = function(vars) { + cur = vars; + for(i=0; i= 0) { + return 'multiselect'; + } +}); +// Use the multiple editor for schemas with `oneOf` set +JSONEditor.defaults.resolvers.unshift(function(schema) { + // If this schema uses `oneOf` + if(schema.oneOf) return "multiple"; +}); + +/** + * This is a small wrapper for using JSON Editor like a typical jQuery plugin. + */ +(function() { + if(window.jQuery || window.Zepto) { + var $ = window.jQuery || window.Zepto; + $.jsoneditor = JSONEditor.defaults; + + $.fn.jsoneditor = function(options) { + var self = this; + var editor = this.data('jsoneditor'); + if(options === 'value') { + if(!editor) throw "Must initialize jsoneditor before getting/setting the value"; + + // Set value + if(arguments.length > 1) { + editor.setValue(arguments[1]); + } + // Get value + else { + return editor.getValue(); + } + } + else if(options === 'validate') { + if(!editor) throw "Must initialize jsoneditor before validating"; + + // Validate a specific value + if(arguments.length > 1) { + return editor.validate(arguments[1]); + } + // Validate current value + else { + return editor.validate(); + } + } + else if(options === 'destroy') { + if(editor) { + editor.destroy(); + this.data('jsoneditor',null); + } + } + else { + // Destroy first + if(editor) { + editor.destroy(); + } + + // Create editor + editor = new JSONEditor(this.get(0),options); + this.data('jsoneditor',editor); + + // Setup event listeners + editor.on('change',function() { + self.trigger('change'); + }); + editor.on('ready',function() { + self.trigger('ready'); + }); + } + + return this; + }; + } +})(); + + window.JSONEditor = JSONEditor; +})(); + +//# sourceMappingURL=jsoneditor.js.map \ No newline at end of file diff --git a/src/main/html/css/print.css b/src/main/html/css/print.css index b4fc18036ef..fdb3b02ec70 100644 --- a/src/main/html/css/print.css +++ b/src/main/html/css/print.css @@ -82,7 +82,7 @@ .swagger-section pre .vhdl .attribute, .swagger-section pre .clojure .attribute, .swagger-section pre .coffeescript .property { - color: #8888ff; + color: #88F; } .swagger-section pre .keyword, .swagger-section pre .id, diff --git a/src/main/html/css/screen.css b/src/main/html/css/screen.css index 32b199b17b6..099cdc31825 100644 --- a/src/main/html/css/screen.css +++ b/src/main/html/css/screen.css @@ -82,7 +82,7 @@ .swagger-section pre .vhdl .attribute, .swagger-section pre .clojure .attribute, .swagger-section pre .coffeescript .property { - color: #8888ff; + color: #88F; } .swagger-section pre .keyword, .swagger-section pre .id, diff --git a/src/main/html/index.html b/src/main/html/index.html index 06c35c17658..1dde7d7cd9c 100644 --- a/src/main/html/index.html +++ b/src/main/html/index.html @@ -21,6 +21,7 @@ + @@ -80,6 +81,7 @@ onFailure: function (data) { log("Unable to Load SwaggerUI"); }, + jsonEditor: true, docExpansion: "none", sorter: "alpha" }); diff --git a/src/main/javascript/SwaggerUi.js b/src/main/javascript/SwaggerUi.js index add0a67c585..718f055bfa8 100644 --- a/src/main/javascript/SwaggerUi.js +++ b/src/main/javascript/SwaggerUi.js @@ -61,6 +61,14 @@ window.SwaggerUi = Backbone.Router.extend({ return that.updateSwaggerUi(data); }); */ + //JSon Editor custom theming + JSONEditor.defaults.iconlibs.swagger = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'collapse', + expand: 'expand' + }, + icon_prefix: 'swagger-' + }); }, // Set an option after initializing diff --git a/src/main/javascript/view/MainView.js b/src/main/javascript/view/MainView.js index e14793a7277..b1bf1a504b2 100644 --- a/src/main/javascript/view/MainView.js +++ b/src/main/javascript/view/MainView.js @@ -86,6 +86,14 @@ SwaggerUi.Views.MainView = Backbone.View.extend({ this.model.validatorUrl = window.location.protocol + '//online.swagger.io/validator'; } } + // JSonEditor requires type='object' to be present on defined types, we add it if it's missing + // is there any valid case were it should not be added ? + var def; + for(def in this.model.definitions){ + if (!this.model.definitions[def].type){ + this.model.definitions[def].type = 'object'; + } + } }, render: function () { @@ -146,6 +154,10 @@ SwaggerUi.Views.MainView = Backbone.View.extend({ addResource: function (resource, auths) { // Render a resource and add it to resources li resource.id = resource.id.replace(/\s/g, '_'); + + // Make all definitions available at the root of the resource so that they can + // be loaded by the JSonEditor + resource.definitions = this.model.definitions; var resourceView = new SwaggerUi.Views.ResourceView({ model: resource, router: this.router, diff --git a/src/main/javascript/view/OperationView.js b/src/main/javascript/view/OperationView.js index 97292c058c6..3028fec8f33 100644 --- a/src/main/javascript/view/OperationView.js +++ b/src/main/javascript/view/OperationView.js @@ -253,12 +253,29 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ addParameter: function (param, consumes) { // Render a parameter param.consumes = consumes; + // Copy this param JSON spec so that it will be available for JsonEditor + if(param.schema){ + $.extend(true, param.schema, this.model.definitions[param.type]); + param.schema.definitions = this.model.definitions; + // This is required for JsonEditor to display the root properly + if(!param.schema.type){ + param.schema.type = 'object'; + } + // This is the title that will be used by JsonEditor for the root + // Since we already display the parameter's name in the Parameter column + // We set this to space, we can't set it to null or space otherwise JsonEditor + // will replace it with the text "root" which won't look good on screen + if(!param.schema.title){ + param.schema.title = ' '; + } + } var paramView = new SwaggerUi.Views.ParameterView({ model: param, tagName: 'div', className: 'parameter-item', - readOnly: this.model.isReadOnly - }); + readOnly: this.model.isReadOnly, + swaggerOptions: this.options.swaggerOptions + }); $('.operation-params', $(this.el)).append(paramView.render().el); }, @@ -281,7 +298,7 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ } form = $('.sandbox', $(this.el)); error_free = true; - form.find('input.required').each(function () { + form.find('input.required::visible').each(function () { $(this).removeClass('error'); if (jQuery.trim($(this).val()) === '') { $(this).addClass('error'); @@ -341,6 +358,14 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ map[o.name] = val; } } + var pi; + for(pi = 0; pi < this.model.parameters.length; pi++){ + var p = this.model.parameters[pi]; + if( p.jsonEditor && p.jsonEditor.isEnabled()){ + var json = p.jsonEditor.getValue(); + map[p.name] = JSON.stringify(json); + } + } opts.responseContentType = $('div select[name=responseContentType]', $(this.el)).val(); opts.requestContentType = $('div select[name=parameterContentType]', $(this.el)).val(); $(".submit", $(this.el)).button("loading"); diff --git a/src/main/javascript/view/ParameterView.js b/src/main/javascript/view/ParameterView.js index bec51e42e4f..97cbcae429a 100644 --- a/src/main/javascript/view/ParameterView.js +++ b/src/main/javascript/view/ParameterView.js @@ -45,8 +45,47 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var template = this.template(); $(this.el).html(template(this.model)); + var signatureModel = { + sampleJSON: this.model.sampleJSON, + isParam: true, + signature: this.model.signature, + defaultRendering: this.model.defaultRendering + }; + var isParam = false; + if( this.options.swaggerOptions.jsonEditor && this.model.isBody && this.model.schema){ + var $self = $(this.el); + this.model.schema.defaultProperties = []; + this.model.jsonEditor = + /* global JSONEditor */ + new JSONEditor($('.editor_holder', $self)[0], + {schema: this.model.schema, startval : this.model.default, + ajax:true, + disable_properties:false, + disable_edit_json:false, + remove_empty_properties:true, + iconlib: 'swagger' }); + // This is so that the signature can send back the sample to the json editor + // TODO: SignatureView should expose an event "onSampleClicked" instead + signatureModel.jsonEditor = this.model.jsonEditor; + $('.body-textarea', $self).hide(); + $('.editor_holder', $self).show(); + $('.parameter-content-type', $self) + .change(function(e){ + if(e.target.value === 'application/xml'){ + $('.body-textarea', $self).show(); + $('.editor_holder', $self).hide(); + this.model.jsonEditor.disable(); + } + else { + $('.body-textarea', $self).hide(); + $('.editor_holder', $self).show(); + this.model.jsonEditor.enable(); + } + }); + } + if (this.model.isBody) { isParam = true; } diff --git a/src/main/javascript/view/ResourceView.js b/src/main/javascript/view/ResourceView.js index 8d3ea85a6e2..aa5e85b8ae4 100644 --- a/src/main/javascript/view/ResourceView.js +++ b/src/main/javascript/view/ResourceView.js @@ -33,6 +33,8 @@ SwaggerUi.Views.ResourceView = Backbone.View.extend({ operation.nickname = id; operation.parentId = this.model.id; + operation.definitions = this.model.definitions; // make Json Schema available for JSonEditor in this operation + this.addOperation(operation); } diff --git a/src/main/javascript/view/SignatureView.js b/src/main/javascript/view/SignatureView.js index 3613a89e869..7abb8a57891 100644 --- a/src/main/javascript/view/SignatureView.js +++ b/src/main/javascript/view/SignatureView.js @@ -24,6 +24,10 @@ SwaggerUi.Views.SignatureView = Backbone.View.extend({ var textArea = $('textarea', $(this.el.parentNode.parentNode.parentNode)); if ($.trim(textArea.val()) === '') { textArea.val(this.model.sampleJSON); + // TODO move this code outside of the view and expose an event instead + if( this.model.jsonEditor && this.model.jsonEditor.isEnabled()){ + this.model.jsonEditor.setValue(JSON.parse(this.model.sampleJSON)); + } } } } diff --git a/src/main/template/param.handlebars b/src/main/template/param.handlebars index 2fc67ae0813..ed4d0a6fedf 100644 --- a/src/main/template/param.handlebars +++ b/src/main/template/param.handlebars @@ -7,10 +7,13 @@
    {{else}} {{#if default}} +
    +
    {{else}} +
    {{/if}} {{/if}} diff --git a/src/main/template/param_required.handlebars b/src/main/template/param_required.handlebars index bc77422c1be..47279f9effd 100644 --- a/src/main/template/param_required.handlebars +++ b/src/main/template/param_required.handlebars @@ -5,10 +5,13 @@ {{else}} {{#if default}} +
    {{else}} +
    +
    {{/if}} {{/if}} From d6bedfa70fa58e2b022bcc47c4fc48197f9fc5a0 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 20 Apr 2016 15:06:13 +0200 Subject: [PATCH 03/14] JSONEditor WIP css corrections. --- dist/css/api-explorer.css | 8 +- dist/css/index.css | 141 ++++++++++-------- dist/css/print.css | 12 ++ dist/css/screen.css | 18 +++ src/main/html/css/api-explorer.css | 8 +- src/main/html/css/index.css | 141 ++++++++++-------- src/main/html/css/print.css | 12 ++ src/main/html/css/screen.css | 18 +++ src/main/less/screen.less | 6 + src/main/less/specs.less | 12 ++ src/main/template/main.handlebars | 4 +- src/main/template/param.handlebars | 8 +- src/main/template/param_list.handlebars | 2 +- src/main/template/param_readonly.handlebars | 2 +- .../param_readonly_required.handlebars | 2 +- src/main/template/param_required.handlebars | 10 +- .../parameter_content_type.handlebars | 2 +- .../template/response_content_type.handlebars | 2 +- 18 files changed, 258 insertions(+), 150 deletions(-) diff --git a/dist/css/api-explorer.css b/dist/css/api-explorer.css index c2b4cf2a9e7..ef3abd4e97c 100644 --- a/dist/css/api-explorer.css +++ b/dist/css/api-explorer.css @@ -205,7 +205,7 @@ background: #ff9a57 } -.swagger-section .form-control.error { +.swagger-section .ui-form-control.error { border-color: #fd8888; border-width: 2px } @@ -346,17 +346,17 @@ } } -.swagger-section .parameter-item .form-control { +.swagger-section .parameter-item .ui-form-control { width: auto; max-width: 100% } -.swagger-section .parameter-item .form-control.body-textarea { +.swagger-section .parameter-item .ui-form-control.body-textarea { min-height: 100px; width: 100% } -.swagger-section .parameter-item select.form-control { +.swagger-section .parameter-item select.ui-form-control { width: auto } diff --git a/dist/css/index.css b/dist/css/index.css index c352d986441..96e7585f1b1 100644 --- a/dist/css/index.css +++ b/dist/css/index.css @@ -1657,6 +1657,21 @@ pre code { margin-right: -15px; margin-left: -15px; } + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.editor_holder .row { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.editor_holder .row { + margin-right: 0 !important; + margin-left: 0 !important; +} .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; @@ -2592,7 +2607,7 @@ output { line-height: 1.42857143; color: #555; } -.form-control { +.ui-form-control { display: block; width: 100%; height: 34px; @@ -2610,33 +2625,33 @@ output { -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } -.form-control:focus { +.ui-form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); } -.form-control::-moz-placeholder { +.ui-form-control::-moz-placeholder { color: #999; opacity: 1; } -.form-control:-ms-input-placeholder { +.ui-form-control:-ms-input-placeholder { color: #999; } -.form-control::-webkit-input-placeholder { +.ui-form-control::-webkit-input-placeholder { color: #999; } -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { +.ui-form-control[disabled], +.ui-form-control[readonly], +fieldset[disabled] .ui-form-control { background-color: #eee; opacity: 1; } -.form-control[disabled], -fieldset[disabled] .form-control { +.ui-form-control[disabled], +fieldset[disabled] .ui-form-control { cursor: not-allowed; } -textarea.form-control { +textarea.ui-form-control { height: auto; } input[type="search"] { @@ -2735,14 +2750,14 @@ fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { cursor: not-allowed; } -.form-control-static { +.ui-form-control-static { min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; } -.form-control-static.input-lg, -.form-control-static.input-sm { +.ui-form-control-static.input-lg, +.ui-form-control-static.input-sm { padding-right: 0; padding-left: 0; } @@ -2761,22 +2776,22 @@ textarea.input-sm, select[multiple].input-sm { height: auto; } -.form-group-sm .form-control { +.form-group-sm .ui-form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } -select.form-group-sm .form-control { +select.form-group-sm .ui-form-control { height: 30px; line-height: 30px; } -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { +textarea.form-group-sm .ui-form-control, +select[multiple].form-group-sm .ui-form-control { height: auto; } -.form-group-sm .form-control-static { +.form-group-sm .ui-form-control-static { height: 30px; min-height: 32px; padding: 5px 10px; @@ -2798,22 +2813,22 @@ textarea.input-lg, select[multiple].input-lg { height: auto; } -.form-group-lg .form-control { +.form-group-lg .ui-form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px; } -select.form-group-lg .form-control { +select.form-group-lg .ui-form-control { height: 46px; line-height: 46px; } -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { +textarea.form-group-lg .ui-form-control, +select[multiple].form-group-lg .ui-form-control { height: auto; } -.form-group-lg .form-control-static { +.form-group-lg .ui-form-control-static { height: 46px; min-height: 38px; padding: 10px 16px; @@ -2823,10 +2838,10 @@ select[multiple].form-group-lg .form-control { .has-feedback { position: relative; } -.has-feedback .form-control { +.has-feedback .ui-form-control { padding-right: 42.5px; } -.form-control-feedback { +.ui-form-control-feedback { position: absolute; top: 0; right: 0; @@ -2838,12 +2853,12 @@ select[multiple].form-group-lg .form-control { text-align: center; pointer-events: none; } -.input-lg + .form-control-feedback { +.input-lg + .ui-form-control-feedback { width: 46px; height: 46px; line-height: 46px; } -.input-sm + .form-control-feedback { +.input-sm + .ui-form-control-feedback { width: 30px; height: 30px; line-height: 30px; @@ -2860,12 +2875,12 @@ select[multiple].form-group-lg .form-control { .has-success.checkbox-inline label { color: #3c763d; } -.has-success .form-control { +.has-success .ui-form-control { border-color: #3c763d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-success .form-control:focus { +.has-success .ui-form-control:focus { border-color: #2b542c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; @@ -2875,7 +2890,7 @@ select[multiple].form-group-lg .form-control { background-color: #dff0d8; border-color: #3c763d; } -.has-success .form-control-feedback { +.has-success .ui-form-control-feedback { color: #3c763d; } .has-warning .help-block, @@ -2890,12 +2905,12 @@ select[multiple].form-group-lg .form-control { .has-warning.checkbox-inline label { color: #8a6d3b; } -.has-warning .form-control { +.has-warning .ui-form-control { border-color: #8a6d3b; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-warning .form-control:focus { +.has-warning .ui-form-control:focus { border-color: #66512c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; @@ -2905,7 +2920,7 @@ select[multiple].form-group-lg .form-control { background-color: #fcf8e3; border-color: #8a6d3b; } -.has-warning .form-control-feedback { +.has-warning .ui-form-control-feedback { color: #8a6d3b; } .has-error .help-block, @@ -2920,12 +2935,12 @@ select[multiple].form-group-lg .form-control { .has-error.checkbox-inline label { color: #a94442; } -.has-error .form-control { +.has-error .ui-form-control { border-color: #a94442; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-error .form-control:focus { +.has-error .ui-form-control:focus { border-color: #843534; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; @@ -2935,13 +2950,13 @@ select[multiple].form-group-lg .form-control { background-color: #f2dede; border-color: #a94442; } -.has-error .form-control-feedback { +.has-error .ui-form-control-feedback { color: #a94442; } -.has-feedback label ~ .form-control-feedback { +.has-feedback label ~ .ui-form-control-feedback { top: 25px; } -.has-feedback label.sr-only ~ .form-control-feedback { +.has-feedback label.sr-only ~ .ui-form-control-feedback { top: 0; } .help-block { @@ -2956,12 +2971,12 @@ select[multiple].form-group-lg .form-control { margin-bottom: 0; vertical-align: middle; } - .form-inline .form-control { + .form-inline .ui-form-control { display: inline-block; width: auto; vertical-align: middle; } - .form-inline .form-control-static { + .form-inline .ui-form-control-static { display: inline-block; } .form-inline .input-group { @@ -2970,10 +2985,10 @@ select[multiple].form-group-lg .form-control { } .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { + .form-inline .input-group .ui-form-control { width: auto; } - .form-inline .input-group > .form-control { + .form-inline .input-group > .ui-form-control { width: 100%; } .form-inline .control-label { @@ -2996,7 +3011,7 @@ select[multiple].form-group-lg .form-control { position: relative; margin-left: 0; } - .form-inline .has-feedback .form-control-feedback { + .form-inline .has-feedback .ui-form-control-feedback { top: 0; } } @@ -3023,7 +3038,7 @@ select[multiple].form-group-lg .form-control { text-align: right; } } -.form-horizontal .has-feedback .form-control-feedback { +.form-horizontal .has-feedback .ui-form-control-feedback { right: 15px; } @media (min-width: 768px) { @@ -3780,14 +3795,14 @@ tbody.collapse.in { padding-right: 0; padding-left: 0; } -.input-group .form-control { +.input-group .ui-form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0; } -.input-group-lg > .form-control, +.input-group-lg > .ui-form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { height: 46px; @@ -3796,21 +3811,21 @@ tbody.collapse.in { line-height: 1.3333333; border-radius: 6px; } -select.input-group-lg > .form-control, +select.input-group-lg > .ui-form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { height: 46px; line-height: 46px; } -textarea.input-group-lg > .form-control, +textarea.input-group-lg > .ui-form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .ui-form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } -.input-group-sm > .form-control, +.input-group-sm > .ui-form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { height: 30px; @@ -3819,28 +3834,28 @@ select[multiple].input-group-lg > .input-group-btn > .btn { line-height: 1.5; border-radius: 3px; } -select.input-group-sm > .form-control, +select.input-group-sm > .ui-form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } -textarea.input-group-sm > .form-control, +textarea.input-group-sm > .ui-form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .ui-form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } .input-group-addon, .input-group-btn, -.input-group .form-control { +.input-group .ui-form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { +.input-group .ui-form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, @@ -3874,7 +3889,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-addon input[type="checkbox"] { margin-top: 0; } -.input-group .form-control:first-child, +.input-group .ui-form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, @@ -3887,7 +3902,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-addon:first-child { border-right: 0; } -.input-group .form-control:last-child, +.input-group .ui-form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, @@ -4334,12 +4349,12 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-bottom: 0; vertical-align: middle; } - .navbar-form .form-control { + .navbar-form .ui-form-control { display: inline-block; width: auto; vertical-align: middle; } - .navbar-form .form-control-static { + .navbar-form .ui-form-control-static { display: inline-block; } .navbar-form .input-group { @@ -4348,10 +4363,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { + .navbar-form .input-group .ui-form-control { width: auto; } - .navbar-form .input-group > .form-control { + .navbar-form .input-group > .ui-form-control { width: 100%; } .navbar-form .control-label { @@ -4374,7 +4389,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { position: relative; margin-left: 0; } - .navbar-form .has-feedback .form-control-feedback { + .navbar-form .has-feedback .ui-form-control-feedback { top: 0; } } diff --git a/dist/css/print.css b/dist/css/print.css index fdb3b02ec70..32764df8378 100644 --- a/dist/css/print.css +++ b/dist/css/print.css @@ -126,6 +126,7 @@ max-width: 960px; margin-left: auto; margin-right: auto; + /* JSONEditor specific styling */ } .swagger-section .swagger-ui-wrap b, .swagger-section .swagger-ui-wrap strong { @@ -456,6 +457,17 @@ font-family: "Droid Sans", sans-serif; font-weight: bold; } +.swagger-section .swagger-ui-wrap .editor_holder { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap .editor_holder label { + font-weight: normal!important; + /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ +} +.swagger-section .swagger-ui-wrap .editor_holder label.required { + font-weight: bold!important; +} .swagger-section .swagger-ui-wrap .heading_with_menu { float: none; clear: both; diff --git a/dist/css/screen.css b/dist/css/screen.css index 099cdc31825..b6a1e5b0580 100644 --- a/dist/css/screen.css +++ b/dist/css/screen.css @@ -126,6 +126,7 @@ max-width: 960px; margin-left: auto; margin-right: auto; + /* JSONEditor specific styling */ } .swagger-section .swagger-ui-wrap b, .swagger-section .swagger-ui-wrap strong { @@ -456,6 +457,17 @@ font-family: "Droid Sans", sans-serif; font-weight: bold; } +.swagger-section .swagger-ui-wrap .editor_holder { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap .editor_holder label { + font-weight: normal!important; + /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ +} +.swagger-section .swagger-ui-wrap .editor_holder label.required { + font-weight: bold!important; +} .swagger-section .swagger-ui-wrap .heading_with_menu { float: none; clear: both; @@ -1254,3 +1266,9 @@ text-align: center; padding-top: 10px; } +.swagger-section .swagger-collapse:before { + content: "-"; +} +.swagger-section .swagger-expand:before { + content: "+"; +} diff --git a/src/main/html/css/api-explorer.css b/src/main/html/css/api-explorer.css index c2b4cf2a9e7..ef3abd4e97c 100644 --- a/src/main/html/css/api-explorer.css +++ b/src/main/html/css/api-explorer.css @@ -205,7 +205,7 @@ background: #ff9a57 } -.swagger-section .form-control.error { +.swagger-section .ui-form-control.error { border-color: #fd8888; border-width: 2px } @@ -346,17 +346,17 @@ } } -.swagger-section .parameter-item .form-control { +.swagger-section .parameter-item .ui-form-control { width: auto; max-width: 100% } -.swagger-section .parameter-item .form-control.body-textarea { +.swagger-section .parameter-item .ui-form-control.body-textarea { min-height: 100px; width: 100% } -.swagger-section .parameter-item select.form-control { +.swagger-section .parameter-item select.ui-form-control { width: auto } diff --git a/src/main/html/css/index.css b/src/main/html/css/index.css index c352d986441..96e7585f1b1 100644 --- a/src/main/html/css/index.css +++ b/src/main/html/css/index.css @@ -1657,6 +1657,21 @@ pre code { margin-right: -15px; margin-left: -15px; } + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.editor_holder .row { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.editor_holder .row { + margin-right: 0 !important; + margin-left: 0 !important; +} .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; @@ -2592,7 +2607,7 @@ output { line-height: 1.42857143; color: #555; } -.form-control { +.ui-form-control { display: block; width: 100%; height: 34px; @@ -2610,33 +2625,33 @@ output { -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } -.form-control:focus { +.ui-form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); } -.form-control::-moz-placeholder { +.ui-form-control::-moz-placeholder { color: #999; opacity: 1; } -.form-control:-ms-input-placeholder { +.ui-form-control:-ms-input-placeholder { color: #999; } -.form-control::-webkit-input-placeholder { +.ui-form-control::-webkit-input-placeholder { color: #999; } -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { +.ui-form-control[disabled], +.ui-form-control[readonly], +fieldset[disabled] .ui-form-control { background-color: #eee; opacity: 1; } -.form-control[disabled], -fieldset[disabled] .form-control { +.ui-form-control[disabled], +fieldset[disabled] .ui-form-control { cursor: not-allowed; } -textarea.form-control { +textarea.ui-form-control { height: auto; } input[type="search"] { @@ -2735,14 +2750,14 @@ fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { cursor: not-allowed; } -.form-control-static { +.ui-form-control-static { min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; } -.form-control-static.input-lg, -.form-control-static.input-sm { +.ui-form-control-static.input-lg, +.ui-form-control-static.input-sm { padding-right: 0; padding-left: 0; } @@ -2761,22 +2776,22 @@ textarea.input-sm, select[multiple].input-sm { height: auto; } -.form-group-sm .form-control { +.form-group-sm .ui-form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } -select.form-group-sm .form-control { +select.form-group-sm .ui-form-control { height: 30px; line-height: 30px; } -textarea.form-group-sm .form-control, -select[multiple].form-group-sm .form-control { +textarea.form-group-sm .ui-form-control, +select[multiple].form-group-sm .ui-form-control { height: auto; } -.form-group-sm .form-control-static { +.form-group-sm .ui-form-control-static { height: 30px; min-height: 32px; padding: 5px 10px; @@ -2798,22 +2813,22 @@ textarea.input-lg, select[multiple].input-lg { height: auto; } -.form-group-lg .form-control { +.form-group-lg .ui-form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px; } -select.form-group-lg .form-control { +select.form-group-lg .ui-form-control { height: 46px; line-height: 46px; } -textarea.form-group-lg .form-control, -select[multiple].form-group-lg .form-control { +textarea.form-group-lg .ui-form-control, +select[multiple].form-group-lg .ui-form-control { height: auto; } -.form-group-lg .form-control-static { +.form-group-lg .ui-form-control-static { height: 46px; min-height: 38px; padding: 10px 16px; @@ -2823,10 +2838,10 @@ select[multiple].form-group-lg .form-control { .has-feedback { position: relative; } -.has-feedback .form-control { +.has-feedback .ui-form-control { padding-right: 42.5px; } -.form-control-feedback { +.ui-form-control-feedback { position: absolute; top: 0; right: 0; @@ -2838,12 +2853,12 @@ select[multiple].form-group-lg .form-control { text-align: center; pointer-events: none; } -.input-lg + .form-control-feedback { +.input-lg + .ui-form-control-feedback { width: 46px; height: 46px; line-height: 46px; } -.input-sm + .form-control-feedback { +.input-sm + .ui-form-control-feedback { width: 30px; height: 30px; line-height: 30px; @@ -2860,12 +2875,12 @@ select[multiple].form-group-lg .form-control { .has-success.checkbox-inline label { color: #3c763d; } -.has-success .form-control { +.has-success .ui-form-control { border-color: #3c763d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-success .form-control:focus { +.has-success .ui-form-control:focus { border-color: #2b542c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; @@ -2875,7 +2890,7 @@ select[multiple].form-group-lg .form-control { background-color: #dff0d8; border-color: #3c763d; } -.has-success .form-control-feedback { +.has-success .ui-form-control-feedback { color: #3c763d; } .has-warning .help-block, @@ -2890,12 +2905,12 @@ select[multiple].form-group-lg .form-control { .has-warning.checkbox-inline label { color: #8a6d3b; } -.has-warning .form-control { +.has-warning .ui-form-control { border-color: #8a6d3b; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-warning .form-control:focus { +.has-warning .ui-form-control:focus { border-color: #66512c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; @@ -2905,7 +2920,7 @@ select[multiple].form-group-lg .form-control { background-color: #fcf8e3; border-color: #8a6d3b; } -.has-warning .form-control-feedback { +.has-warning .ui-form-control-feedback { color: #8a6d3b; } .has-error .help-block, @@ -2920,12 +2935,12 @@ select[multiple].form-group-lg .form-control { .has-error.checkbox-inline label { color: #a94442; } -.has-error .form-control { +.has-error .ui-form-control { border-color: #a94442; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); } -.has-error .form-control:focus { +.has-error .ui-form-control:focus { border-color: #843534; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; @@ -2935,13 +2950,13 @@ select[multiple].form-group-lg .form-control { background-color: #f2dede; border-color: #a94442; } -.has-error .form-control-feedback { +.has-error .ui-form-control-feedback { color: #a94442; } -.has-feedback label ~ .form-control-feedback { +.has-feedback label ~ .ui-form-control-feedback { top: 25px; } -.has-feedback label.sr-only ~ .form-control-feedback { +.has-feedback label.sr-only ~ .ui-form-control-feedback { top: 0; } .help-block { @@ -2956,12 +2971,12 @@ select[multiple].form-group-lg .form-control { margin-bottom: 0; vertical-align: middle; } - .form-inline .form-control { + .form-inline .ui-form-control { display: inline-block; width: auto; vertical-align: middle; } - .form-inline .form-control-static { + .form-inline .ui-form-control-static { display: inline-block; } .form-inline .input-group { @@ -2970,10 +2985,10 @@ select[multiple].form-group-lg .form-control { } .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { + .form-inline .input-group .ui-form-control { width: auto; } - .form-inline .input-group > .form-control { + .form-inline .input-group > .ui-form-control { width: 100%; } .form-inline .control-label { @@ -2996,7 +3011,7 @@ select[multiple].form-group-lg .form-control { position: relative; margin-left: 0; } - .form-inline .has-feedback .form-control-feedback { + .form-inline .has-feedback .ui-form-control-feedback { top: 0; } } @@ -3023,7 +3038,7 @@ select[multiple].form-group-lg .form-control { text-align: right; } } -.form-horizontal .has-feedback .form-control-feedback { +.form-horizontal .has-feedback .ui-form-control-feedback { right: 15px; } @media (min-width: 768px) { @@ -3780,14 +3795,14 @@ tbody.collapse.in { padding-right: 0; padding-left: 0; } -.input-group .form-control { +.input-group .ui-form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0; } -.input-group-lg > .form-control, +.input-group-lg > .ui-form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { height: 46px; @@ -3796,21 +3811,21 @@ tbody.collapse.in { line-height: 1.3333333; border-radius: 6px; } -select.input-group-lg > .form-control, +select.input-group-lg > .ui-form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { height: 46px; line-height: 46px; } -textarea.input-group-lg > .form-control, +textarea.input-group-lg > .ui-form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .ui-form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } -.input-group-sm > .form-control, +.input-group-sm > .ui-form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { height: 30px; @@ -3819,28 +3834,28 @@ select[multiple].input-group-lg > .input-group-btn > .btn { line-height: 1.5; border-radius: 3px; } -select.input-group-sm > .form-control, +select.input-group-sm > .ui-form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } -textarea.input-group-sm > .form-control, +textarea.input-group-sm > .ui-form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .ui-form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } .input-group-addon, .input-group-btn, -.input-group .form-control { +.input-group .ui-form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { +.input-group .ui-form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, @@ -3874,7 +3889,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-addon input[type="checkbox"] { margin-top: 0; } -.input-group .form-control:first-child, +.input-group .ui-form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, @@ -3887,7 +3902,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-addon:first-child { border-right: 0; } -.input-group .form-control:last-child, +.input-group .ui-form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, @@ -4334,12 +4349,12 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-bottom: 0; vertical-align: middle; } - .navbar-form .form-control { + .navbar-form .ui-form-control { display: inline-block; width: auto; vertical-align: middle; } - .navbar-form .form-control-static { + .navbar-form .ui-form-control-static { display: inline-block; } .navbar-form .input-group { @@ -4348,10 +4363,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { + .navbar-form .input-group .ui-form-control { width: auto; } - .navbar-form .input-group > .form-control { + .navbar-form .input-group > .ui-form-control { width: 100%; } .navbar-form .control-label { @@ -4374,7 +4389,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { position: relative; margin-left: 0; } - .navbar-form .has-feedback .form-control-feedback { + .navbar-form .has-feedback .ui-form-control-feedback { top: 0; } } diff --git a/src/main/html/css/print.css b/src/main/html/css/print.css index fdb3b02ec70..32764df8378 100644 --- a/src/main/html/css/print.css +++ b/src/main/html/css/print.css @@ -126,6 +126,7 @@ max-width: 960px; margin-left: auto; margin-right: auto; + /* JSONEditor specific styling */ } .swagger-section .swagger-ui-wrap b, .swagger-section .swagger-ui-wrap strong { @@ -456,6 +457,17 @@ font-family: "Droid Sans", sans-serif; font-weight: bold; } +.swagger-section .swagger-ui-wrap .editor_holder { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap .editor_holder label { + font-weight: normal!important; + /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ +} +.swagger-section .swagger-ui-wrap .editor_holder label.required { + font-weight: bold!important; +} .swagger-section .swagger-ui-wrap .heading_with_menu { float: none; clear: both; diff --git a/src/main/html/css/screen.css b/src/main/html/css/screen.css index 099cdc31825..b6a1e5b0580 100644 --- a/src/main/html/css/screen.css +++ b/src/main/html/css/screen.css @@ -126,6 +126,7 @@ max-width: 960px; margin-left: auto; margin-right: auto; + /* JSONEditor specific styling */ } .swagger-section .swagger-ui-wrap b, .swagger-section .swagger-ui-wrap strong { @@ -456,6 +457,17 @@ font-family: "Droid Sans", sans-serif; font-weight: bold; } +.swagger-section .swagger-ui-wrap .editor_holder { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap .editor_holder label { + font-weight: normal!important; + /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ +} +.swagger-section .swagger-ui-wrap .editor_holder label.required { + font-weight: bold!important; +} .swagger-section .swagger-ui-wrap .heading_with_menu { float: none; clear: both; @@ -1254,3 +1266,9 @@ text-align: center; padding-top: 10px; } +.swagger-section .swagger-collapse:before { + content: "-"; +} +.swagger-section .swagger-expand:before { + content: "+"; +} diff --git a/src/main/less/screen.less b/src/main/less/screen.less index 4867dcc74f0..9fc2a890a34 100644 --- a/src/main/less/screen.less +++ b/src/main/less/screen.less @@ -135,5 +135,11 @@ text-align: center; padding-top: 10px; } +.swagger-collapse:before { + content: "-"; +} +.swagger-expand:before { + content: "+"; +} } \ No newline at end of file diff --git a/src/main/less/specs.less b/src/main/less/specs.less index 309a8b882c3..aefbf58f498 100644 --- a/src/main/less/specs.less +++ b/src/main/less/specs.less @@ -356,6 +356,18 @@ font-family: "Droid Sans", sans-serif; font-weight: bold; } + /* JSONEditor specific styling */ + .editor_holder { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; + label { + font-weight:normal!important; /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ + } + } + + .editor_holder label.required { + font-weight:bold!important; + } .heading_with_menu { float: none; diff --git a/src/main/template/main.handlebars b/src/main/template/main.handlebars index d59a046ba3f..152ba34c61c 100644 --- a/src/main/template/main.handlebars +++ b/src/main/template/main.handlebars @@ -8,14 +8,14 @@
    -
    -
    diff --git a/src/main/template/param.handlebars b/src/main/template/param.handlebars index ed4d0a6fedf..601a43477ba 100644 --- a/src/main/template/param.handlebars +++ b/src/main/template/param.handlebars @@ -9,10 +9,10 @@ {{#if default}}
    - +
    {{else}} - +
    {{/if}} @@ -33,9 +33,9 @@
    {{else}} {{#if default}} - + {{else}} - + {{/if}} {{/if}}
    diff --git a/src/main/template/param_list.handlebars b/src/main/template/param_list.handlebars index ade02054df8..c51fdef75ca 100644 --- a/src/main/template/param_list.handlebars +++ b/src/main/template/param_list.handlebars @@ -1,7 +1,7 @@
    {{name}}
    - {{#if required}} {{else}} {{#if default}} diff --git a/src/main/template/param_readonly.handlebars b/src/main/template/param_readonly.handlebars index 8df453a5960..045b8ad3997 100644 --- a/src/main/template/param_readonly.handlebars +++ b/src/main/template/param_readonly.handlebars @@ -2,7 +2,7 @@
    {{#if isBody}} - +
    {{else}} {{#if default}} diff --git a/src/main/template/param_readonly_required.handlebars b/src/main/template/param_readonly_required.handlebars index db06b5388da..7a7d25c5a62 100644 --- a/src/main/template/param_readonly_required.handlebars +++ b/src/main/template/param_readonly_required.handlebars @@ -2,7 +2,7 @@
    {{#if isBody}} - +
    {{else}} {{#if default}} diff --git a/src/main/template/param_required.handlebars b/src/main/template/param_required.handlebars index 47279f9effd..15a684ae3e8 100644 --- a/src/main/template/param_required.handlebars +++ b/src/main/template/param_required.handlebars @@ -6,10 +6,10 @@ {{else}} {{#if default}}
    - +
    {{else}} - +

    @@ -17,12 +17,12 @@ {{/if}} {{else}} {{#if isFile}} - + {{else}} {{#if default}} - + {{else}} - + {{/if}} {{/if}} {{/if}} diff --git a/src/main/template/parameter_content_type.handlebars b/src/main/template/parameter_content_type.handlebars index 90937776624..8b3d34f1d66 100644 --- a/src/main/template/parameter_content_type.handlebars +++ b/src/main/template/parameter_content_type.handlebars @@ -1,6 +1,6 @@
    - {{#if consumes}} {{#each consumes}} diff --git a/src/main/template/response_content_type.handlebars b/src/main/template/response_content_type.handlebars index dadd29e6f54..119bba944a4 100644 --- a/src/main/template/response_content_type.handlebars +++ b/src/main/template/response_content_type.handlebars @@ -2,7 +2,7 @@
    Response Type
    - {{#if produces}} {{#each produces}} From 2b1ead1633cf9411b9c19fa4eb7218f4927cd7eb Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 20 Apr 2016 16:12:09 +0200 Subject: [PATCH 04/14] Removing non used less files. --- dist/css/screen.css | 1268 ---------------------------------- dist/index.html | 1 + src/main/html/css/screen.css | 1268 ---------------------------------- src/main/html/index.html | 1 + src/main/less/screen.less | 144 +--- 5 files changed, 6 insertions(+), 2676 deletions(-) diff --git a/dist/css/screen.css b/dist/css/screen.css index b6a1e5b0580..5e956fabad0 100644 --- a/dist/css/screen.css +++ b/dist/css/screen.css @@ -1,1271 +1,3 @@ -/* 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: #88F; -} -.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 .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} -.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 .message-fail { - color: #cc0000; -} -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_name { - 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 .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} -.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 .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal!important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold!important; -} -.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 .message-success { - color: #89BF04; -} -.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; - 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 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 div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - 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 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; -} .swagger-section .swagger-collapse:before { content: "-"; } diff --git a/dist/index.html b/dist/index.html index 1dde7d7cd9c..1953bc318e3 100644 --- a/dist/index.html +++ b/dist/index.html @@ -12,6 +12,7 @@ + diff --git a/src/main/html/css/screen.css b/src/main/html/css/screen.css index b6a1e5b0580..5e956fabad0 100644 --- a/src/main/html/css/screen.css +++ b/src/main/html/css/screen.css @@ -1,1271 +1,3 @@ -/* 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: #88F; -} -.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 .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} -.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 .message-fail { - color: #cc0000; -} -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_name { - 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 .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} -.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 .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal!important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold!important; -} -.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 .message-success { - color: #89BF04; -} -.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; - 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 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 div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - 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 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; -} .swagger-section .swagger-collapse:before { content: "-"; } diff --git a/src/main/html/index.html b/src/main/html/index.html index 1dde7d7cd9c..1953bc318e3 100644 --- a/src/main/html/index.html +++ b/src/main/html/index.html @@ -12,6 +12,7 @@ + diff --git a/src/main/less/screen.less b/src/main/less/screen.less index 9fc2a890a34..39292f4422d 100644 --- a/src/main/less/screen.less +++ b/src/main/less/screen.less @@ -1,145 +1,9 @@ -@import 'src/main/less/highlight_default.less'; -@import 'src/main/less/specs.less'; -@import 'src/main/less/auth.less'; - .swagger-section { - -.access { - float: right; -} - -.auth { - float: right; -} - -#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; - p { - .api-msg-enabled { - color: green; - } - .api-msg-disabled { - color: red; - } + .swagger-collapse:before { + content: "-"; } -} - -.api-ic { - height: 18px; - vertical-align: middle; - display: inline-block; - background: url(../images/explorer_icons.png) no-repeat; -} -.ic-info { - background-position: 0 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.ic-warning { - background-position: -60px 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.ic-error { - background-position: -30px 0; - width: 18px; - margin-top: -7px; - margin-left: 4px; -} -.ic-off { - background-position: -90px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} -.ic-on { - background-position: -160px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} - -#header { - background-color: #89bf04; - padding: 14px; - 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; - } - form#api_selector { - display: block; - clear: none; - float: right; - .input { - display: block; - clear: none; - float: left; - margin: 0 10px 0 0; - input#input_apiKey { - width: 200px; - } - input#input_baseUrl { - width: 400px; - } - 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; - } - a#explore:hover { - background-color: #547f00; - } - input { - font-size: 0.9em; - padding: 3px; - margin: 0; - } - } + .swagger-expand:before { + content: "+"; } -} - -#content_message { - margin: 10px 15px; - font-style: italic; - color: #999999; -} - -#message-bar { - min-height: 30px; - text-align: center; - padding-top: 10px; -} -.swagger-collapse:before { - content: "-"; -} - -.swagger-expand:before { - content: "+"; -} } \ No newline at end of file From 0cbc58be0f6dbbf8d1e43a94e7b102295d3487ba Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 20 Apr 2016 17:09:39 +0200 Subject: [PATCH 05/14] Typo bugfix. --- src/main/javascript/view/OperationView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/javascript/view/OperationView.js b/src/main/javascript/view/OperationView.js index 3028fec8f33..71079045a8a 100644 --- a/src/main/javascript/view/OperationView.js +++ b/src/main/javascript/view/OperationView.js @@ -298,7 +298,7 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ } form = $('.sandbox', $(this.el)); error_free = true; - form.find('input.required::visible').each(function () { + form.find('input.required:visible').each(function () { $(this).removeClass('error'); if (jQuery.trim($(this).val()) === '') { $(this).addClass('error'); From c269b7a0728c7b834f0385cd961b6737659da5b1 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 20 Apr 2016 17:39:29 +0200 Subject: [PATCH 06/14] CSS fixes. --- dist/css/screen.css | 3 +++ src/main/html/css/screen.css | 3 +++ src/main/less/screen.less | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/dist/css/screen.css b/dist/css/screen.css index 5e956fabad0..12ec0c57d5b 100644 --- a/dist/css/screen.css +++ b/dist/css/screen.css @@ -4,3 +4,6 @@ .swagger-section .swagger-expand:before { content: "+"; } +.swagger-section .property-selector input[type="checkbox"] { + margin: 3px; +} diff --git a/src/main/html/css/screen.css b/src/main/html/css/screen.css index 5e956fabad0..12ec0c57d5b 100644 --- a/src/main/html/css/screen.css +++ b/src/main/html/css/screen.css @@ -4,3 +4,6 @@ .swagger-section .swagger-expand:before { content: "+"; } +.swagger-section .property-selector input[type="checkbox"] { + margin: 3px; +} diff --git a/src/main/less/screen.less b/src/main/less/screen.less index 39292f4422d..59de2b5340c 100644 --- a/src/main/less/screen.less +++ b/src/main/less/screen.less @@ -6,4 +6,8 @@ .swagger-expand:before { content: "+"; } -} \ No newline at end of file + + .property-selector input[type="checkbox"] { + margin: 3px; + } +} From 7ad74a95f97f2c86224d5144cfe4239c1d67a762 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Thu, 21 Apr 2016 11:24:32 +0200 Subject: [PATCH 07/14] Start with no properties, expose configurations to index.html. --- dist/index.html | 6 +++++- src/main/html/index.html | 6 +++++- src/main/javascript/view/ParameterView.js | 23 +++++++++++++++++++---- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dist/index.html b/dist/index.html index 1953bc318e3..b901f4309a9 100644 --- a/dist/index.html +++ b/dist/index.html @@ -84,7 +84,11 @@ }, jsonEditor: true, docExpansion: "none", - sorter: "alpha" + sorter: "alpha", + disableProperties:false, + disableEditJson:false, + removeEmptyProperties:true, + noDefaultProperties:true }); function addApiKeyAuthorization() { diff --git a/src/main/html/index.html b/src/main/html/index.html index 1953bc318e3..b901f4309a9 100644 --- a/src/main/html/index.html +++ b/src/main/html/index.html @@ -84,7 +84,11 @@ }, jsonEditor: true, docExpansion: "none", - sorter: "alpha" + sorter: "alpha", + disableProperties:false, + disableEditJson:false, + removeEmptyProperties:true, + noDefaultProperties:true }); function addApiKeyAuthorization() { diff --git a/src/main/javascript/view/ParameterView.js b/src/main/javascript/view/ParameterView.js index 97cbcae429a..480364b9d33 100644 --- a/src/main/javascript/view/ParameterView.js +++ b/src/main/javascript/view/ParameterView.js @@ -1,5 +1,19 @@ 'use strict'; +function setDefaultProperties(obj) { + if (obj instanceof Object) { + for (k in obj){ + if(obj.hasOwnProperty("type") && obj.type == "object") { + obj.defaultProperties = []; + } + //recursive call to setDefaultProperties + setDefaultProperties( obj[k] ); + } + } else { + // not an Object, break the recursion. + }; +} + SwaggerUi.Views.ParameterView = Backbone.View.extend({ initialize: function(){ Handlebars.registerHelper('isArray', function(param, opts) { @@ -55,16 +69,17 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var isParam = false; if( this.options.swaggerOptions.jsonEditor && this.model.isBody && this.model.schema){ + var swaggerOpt = this.options.swaggerOptions; var $self = $(this.el); - this.model.schema.defaultProperties = []; + if (swaggerOpt.noDefaultProperties) setDefaultProperties(this.model.schema); this.model.jsonEditor = /* global JSONEditor */ new JSONEditor($('.editor_holder', $self)[0], {schema: this.model.schema, startval : this.model.default, ajax:true, - disable_properties:false, - disable_edit_json:false, - remove_empty_properties:true, + disable_properties:swaggerOpt.disableProperties, + disable_edit_json:swaggerOpt.disableEditJson, + remove_empty_properties:swaggerOpt.removeEmptyProperties, iconlib: 'swagger' }); // This is so that the signature can send back the sample to the json editor // TODO: SignatureView should expose an event "onSampleClicked" instead From b7af84042d56e494f0b5d6b32560a2cd331f6d14 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Thu, 21 Apr 2016 11:48:08 +0200 Subject: [PATCH 08/14] Expose JSONEditor options as an object. --- dist/index.html | 10 ++++++---- src/main/html/index.html | 10 ++++++---- src/main/javascript/view/ParameterView.js | 10 +++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/dist/index.html b/dist/index.html index b901f4309a9..668e6d400d3 100644 --- a/dist/index.html +++ b/dist/index.html @@ -83,12 +83,14 @@ log("Unable to Load SwaggerUI"); }, jsonEditor: true, + jsonEditorOptions: { + disableProperties:false, + disableEditJson:false, + removeEmptyProperties:true, + noDefaultProperties:true + }, docExpansion: "none", sorter: "alpha", - disableProperties:false, - disableEditJson:false, - removeEmptyProperties:true, - noDefaultProperties:true }); function addApiKeyAuthorization() { diff --git a/src/main/html/index.html b/src/main/html/index.html index b901f4309a9..668e6d400d3 100644 --- a/src/main/html/index.html +++ b/src/main/html/index.html @@ -83,12 +83,14 @@ log("Unable to Load SwaggerUI"); }, jsonEditor: true, + jsonEditorOptions: { + disableProperties:false, + disableEditJson:false, + removeEmptyProperties:true, + noDefaultProperties:true + }, docExpansion: "none", sorter: "alpha", - disableProperties:false, - disableEditJson:false, - removeEmptyProperties:true, - noDefaultProperties:true }); function addApiKeyAuthorization() { diff --git a/src/main/javascript/view/ParameterView.js b/src/main/javascript/view/ParameterView.js index 480364b9d33..bf7e37a0c24 100644 --- a/src/main/javascript/view/ParameterView.js +++ b/src/main/javascript/view/ParameterView.js @@ -69,17 +69,17 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var isParam = false; if( this.options.swaggerOptions.jsonEditor && this.model.isBody && this.model.schema){ - var swaggerOpt = this.options.swaggerOptions; + var jsonEditorOptions = this.options.swaggerOptions.jsonEditorOptions; var $self = $(this.el); - if (swaggerOpt.noDefaultProperties) setDefaultProperties(this.model.schema); + if (jsonEditorOptions && jsonEditorOptions.noDefaultProperties) setDefaultProperties(this.model.schema); this.model.jsonEditor = /* global JSONEditor */ new JSONEditor($('.editor_holder', $self)[0], {schema: this.model.schema, startval : this.model.default, ajax:true, - disable_properties:swaggerOpt.disableProperties, - disable_edit_json:swaggerOpt.disableEditJson, - remove_empty_properties:swaggerOpt.removeEmptyProperties, + disable_properties:jsonEditorOptions && jsonEditorOptions.disableProperties, + disable_edit_json:jsonEditorOptions && jsonEditorOptions.disableEditJson, + remove_empty_properties:jsonEditorOptions && jsonEditorOptions.removeEmptyProperties, iconlib: 'swagger' }); // This is so that the signature can send back the sample to the json editor // TODO: SignatureView should expose an event "onSampleClicked" instead From 2a1073fb3999ac4b126a7ac8894498f5e576c674 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Thu, 21 Apr 2016 15:19:20 +0200 Subject: [PATCH 09/14] Default properties. --- dist/lib/jsoneditor.js | 24 +++++++++++------------ lib/jsoneditor.js | 24 +++++++++++------------ src/main/javascript/view/ParameterView.js | 19 ++++++++++++++---- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/dist/lib/jsoneditor.js b/dist/lib/jsoneditor.js index b6bd5b19037..feea6f75b04 100644 --- a/dist/lib/jsoneditor.js +++ b/dist/lib/jsoneditor.js @@ -1200,19 +1200,19 @@ JSONEditor.Validator = Class.extend({ }); } } - + // [TODO] find why defaultProperties is not functioning. // Version 4 `required` - if(schema.required && Array.isArray(schema.required)) { - for(i=0; i Date: Mon, 25 Apr 2016 14:42:56 +0200 Subject: [PATCH 10/14] Readme edit. --- README.md | 18 ++++++++++++++++++ dist/images/json_editor_integration.png | Bin 0 -> 97694 bytes 2 files changed, 18 insertions(+) create mode 100644 dist/images/json_editor_integration.png diff --git a/README.md b/README.md index 3fc67e34fec..a0f7ec8056b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,24 @@ The theme will adapt to screen size and works on tablets and mobile phones. [![Swagger Theme example](dist/images/Swagger_explorer_min.png)](http://ecs.bobbytech.dk/api) +A JSON editor for the request body. + +![Swagger JSON editor example](dist/images/json_editor_integration.png) + +JSON editor configuration example: + +```javascript + jsonEditor: true, + jsonEditorOptions: { + disableProperties:false, + disableEditJson:false, + removeEmptyProperties:true, + noDefaultProperties:true + }, + docExpansion: "none", + sorter: "alpha", +``` + Give it a [try](http://swaggerui.herokuapp.com/) and enter your own swagger definition. diff --git a/dist/images/json_editor_integration.png b/dist/images/json_editor_integration.png new file mode 100644 index 0000000000000000000000000000000000000000..faa85602bb37866119255c7ffa61d244cdccfdb1 GIT binary patch literal 97694 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�nse`fkb; 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 Date: Mon, 25 Apr 2016 14:48:02 +0200 Subject: [PATCH 11/14] Deactivate the JSON editor. --- dist/index.html | 7 ------- src/main/html/index.html | 7 ------- 2 files changed, 14 deletions(-) diff --git a/dist/index.html b/dist/index.html index 668e6d400d3..6eb256e8b3b 100644 --- a/dist/index.html +++ b/dist/index.html @@ -82,13 +82,6 @@ onFailure: function (data) { log("Unable to Load SwaggerUI"); }, - jsonEditor: true, - jsonEditorOptions: { - disableProperties:false, - disableEditJson:false, - removeEmptyProperties:true, - noDefaultProperties:true - }, docExpansion: "none", sorter: "alpha", }); diff --git a/src/main/html/index.html b/src/main/html/index.html index 668e6d400d3..6eb256e8b3b 100644 --- a/src/main/html/index.html +++ b/src/main/html/index.html @@ -82,13 +82,6 @@ onFailure: function (data) { log("Unable to Load SwaggerUI"); }, - jsonEditor: true, - jsonEditorOptions: { - disableProperties:false, - disableEditJson:false, - removeEmptyProperties:true, - noDefaultProperties:true - }, docExpansion: "none", sorter: "alpha", }); From ddd85c6a6f2fafae2c92249074ac79a913be3353 Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Mon, 25 Apr 2016 14:48:30 +0200 Subject: [PATCH 12/14] Readme retouch. --- README.md | 2 +- .../html/images/json_editor_integration.png | Bin 0 -> 97694 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/main/html/images/json_editor_integration.png diff --git a/README.md b/README.md index a0f7ec8056b..3df737df4f7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The theme will adapt to screen size and works on tablets and mobile phones. [![Swagger Theme example](dist/images/Swagger_explorer_min.png)](http://ecs.bobbytech.dk/api) -A JSON editor for the request body. +A JSON editor for the request body (disabled by default). ![Swagger JSON editor example](dist/images/json_editor_integration.png) diff --git a/src/main/html/images/json_editor_integration.png b/src/main/html/images/json_editor_integration.png new file mode 100644 index 0000000000000000000000000000000000000000..faa85602bb37866119255c7ffa61d244cdccfdb1 GIT binary patch literal 97694 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�nse`fkb; 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 Date: Mon, 25 Apr 2016 15:01:32 +0200 Subject: [PATCH 13/14] Adding contribution to package.json --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9385a971fdb..66a8dc088e7 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,13 @@ { - "name": "swagger-ui-jensoleg", + "name": "swagger-ui", "author": "Tony Tam ", "contributors": [{ "name": "Mohsen Azimi", "email": "me@azimi.me" + }, + { + "name": "Fares Droubi", + "email": "fares.droubi@gmail.com" }], "description": "Swagger UI is a dependency-free collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API", "version": "2.1.1-M2", From b77e4bc676ffb5a56a31ab9ec7f39bee1de88cbb Mon Sep 17 00:00:00 2001 From: Fares droubi Date: Wed, 4 May 2016 15:32:22 +0200 Subject: [PATCH 14/14] Generating the dist. --- dist/swagger-ui.js | 156 +++++++++++++++++++++++++++++++++++------ dist/swagger-ui.min.js | 18 ++--- 2 files changed, 145 insertions(+), 29 deletions(-) diff --git a/dist/swagger-ui.js b/dist/swagger-ui.js index 65717a5e802..1e11cb1d4f7 100644 --- a/dist/swagger-ui.js +++ b/dist/swagger-ui.js @@ -176,7 +176,7 @@ this["Handlebars"]["templates"]["main"] = Handlebars.template({"1":function(dept + escapeExpression(lambda(((stack1 = (depth0 != null ? depth0.info : depth0)) != null ? stack1.version : stack1), depth0)) + "\n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "
    \n
    \n
    \n
    \n API Reference: \n
    \n\n
    \n \n \n \n\n
    \n \n\n
    \n \n
    \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Swagger resource
    \n
    \n
    \n
    \n
    \n\n

    \n \n"; + var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "

    \n
    \n
    \n
    \n API Reference: \n
    \n\n
    \n \n \n \n\n
    \n \n\n
    \n \n
    \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Swagger resource
    \n
    \n
    \n
    \n
    \n\n

    \n \n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.info : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.noop,"data":data}); if (stack1 != null) { buffer += stack1; } buffer += "\n \n\n \n"; @@ -348,7 +348,7 @@ this["Handlebars"]["templates"]["param_list"] = Handlebars.template({"1":functio + "'>\n

    \n \n"; },"12":function(depth0,helpers,partials,data) { @@ -494,7 +494,7 @@ this["Handlebars"]["templates"]["param_required"] = Handlebars.template({"1":fun return buffer; },"13":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " \n"; },"15":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " \n
    \n"; + + "'>\n
    \n
    \n"; },"9":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; return " " @@ -595,7 +595,7 @@ this["Handlebars"]["templates"]["param"] = Handlebars.template({"1":function(dep return buffer; },"15":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " \n"; },"17":function(depth0,helpers,partials,data) { var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " \n
    \n"; @@ -666,7 +666,7 @@ this["Handlebars"]["templates"]["response_content_type"] = Handlebars.template({ },"4":function(depth0,helpers,partials,data) { return " \n"; },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, buffer = "
    \n
    Response Type
    \n
    \n
    \n \n"; stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.produces : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.program(4, data),"data":data}); if (stack1 != null) { buffer += stack1; } return buffer + " \n
    \n
    \n
    \n\n"; @@ -20817,6 +20817,14 @@ window.SwaggerUi = Backbone.Router.extend({ return that.updateSwaggerUi(data); }); */ + //JSon Editor custom theming + JSONEditor.defaults.iconlibs.swagger = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'collapse', + expand: 'expand' + }, + icon_prefix: 'swagger-' + }); }, // Set an option after initializing @@ -21283,6 +21291,14 @@ SwaggerUi.Views.MainView = Backbone.View.extend({ this.model.validatorUrl = window.location.protocol + '//online.swagger.io/validator'; } } + // JSonEditor requires type='object' to be present on defined types, we add it if it's missing + // is there any valid case were it should not be added ? + var def; + for(def in this.model.definitions){ + if (!this.model.definitions[def].type){ + this.model.definitions[def].type = 'object'; + } + } }, render: function () { @@ -21343,6 +21359,10 @@ SwaggerUi.Views.MainView = Backbone.View.extend({ addResource: function (resource, auths) { // Render a resource and add it to resources li resource.id = resource.id.replace(/\s/g, '_'); + + // Make all definitions available at the root of the resource so that they can + // be loaded by the JSonEditor + resource.definitions = this.model.definitions; var resourceView = new SwaggerUi.Views.ResourceView({ model: resource, router: this.router, @@ -21702,12 +21722,29 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ addParameter: function (param, consumes) { // Render a parameter param.consumes = consumes; + // Copy this param JSON spec so that it will be available for JsonEditor + if(param.schema){ + $.extend(true, param.schema, this.model.definitions[param.type]); + param.schema.definitions = this.model.definitions; + // This is required for JsonEditor to display the root properly + if(!param.schema.type){ + param.schema.type = 'object'; + } + // This is the title that will be used by JsonEditor for the root + // Since we already display the parameter's name in the Parameter column + // We set this to space, we can't set it to null or space otherwise JsonEditor + // will replace it with the text "root" which won't look good on screen + if(!param.schema.title){ + param.schema.title = ' '; + } + } var paramView = new SwaggerUi.Views.ParameterView({ model: param, tagName: 'div', className: 'parameter-item', - readOnly: this.model.isReadOnly - }); + readOnly: this.model.isReadOnly, + swaggerOptions: this.options.swaggerOptions + }); $('.operation-params', $(this.el)).append(paramView.render().el); }, @@ -21730,7 +21767,7 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ } form = $('.sandbox', $(this.el)); error_free = true; - form.find('input.required').each(function () { + form.find('input.required:visible').each(function () { $(this).removeClass('error'); if (jQuery.trim($(this).val()) === '') { $(this).addClass('error'); @@ -21790,6 +21827,14 @@ SwaggerUi.Views.OperationView = Backbone.View.extend({ map[o.name] = val; } } + var pi; + for(pi = 0; pi < this.model.parameters.length; pi++){ + var p = this.model.parameters[pi]; + if( p.jsonEditor && p.jsonEditor.isEnabled()){ + var json = p.jsonEditor.getValue(); + map[p.name] = JSON.stringify(json); + } + } opts.responseContentType = $('div select[name=responseContentType]', $(this.el)).val(); opts.requestContentType = $('div select[name=parameterContentType]', $(this.el)).val(); $(".submit", $(this.el)).button("loading"); @@ -22189,6 +22234,31 @@ SwaggerUi.Views.ParameterContentTypeView = Backbone.View.extend({ }); 'use strict'; +/* + * [TODO] defaultProperties is not take in the required properties into consideration, this implementation respects the specs of JSON Editor v0.7.22 + { + { + "type": "object", + "properties": { + "name": {"type": "string"}, + "age": {"type": "integer"} + }, + defaultProperties": ["name"] + } + */ +function setDefaultProperties(obj) { + if (obj instanceof Object) { + for (var k in obj){ + if(obj.hasOwnProperty("type") && obj.type == "object") { + obj.defaultProperties = obj.required ? obj.required : []; + } + // recursive call to setDefaultProperties + setDefaultProperties( obj[k] ); + } + } else { + // not an Object, break the recursion. + }; +} SwaggerUi.Views.ParameterView = Backbone.View.extend({ initialize: function(){ @@ -22235,8 +22305,48 @@ SwaggerUi.Views.ParameterView = Backbone.View.extend({ var template = this.template(); $(this.el).html(template(this.model)); + var signatureModel = { + sampleJSON: this.model.sampleJSON, + isParam: true, + signature: this.model.signature, + defaultRendering: this.model.defaultRendering + }; + var isParam = false; + if( this.options.swaggerOptions.jsonEditor && this.model.isBody && this.model.schema){ + var jsonEditorOptions = this.options.swaggerOptions.jsonEditorOptions; + var $self = $(this.el); + if (jsonEditorOptions && jsonEditorOptions.noDefaultProperties) setDefaultProperties(this.model.schema); + this.model.jsonEditor = + /* global JSONEditor */ + new JSONEditor($('.editor_holder', $self)[0], + {schema: this.model.schema, startval : this.model.default, + ajax:true, + disable_properties:jsonEditorOptions && jsonEditorOptions.disableProperties, + disable_edit_json:jsonEditorOptions && jsonEditorOptions.disableEditJson, + remove_empty_properties:jsonEditorOptions && jsonEditorOptions.removeEmptyProperties, + iconlib: 'swagger' }); + // This is so that the signature can send back the sample to the json editor + // TODO: SignatureView should expose an event "onSampleClicked" instead + signatureModel.jsonEditor = this.model.jsonEditor; + $('.body-textarea', $self).hide(); + $('.editor_holder', $self).show(); + $('.parameter-content-type', $self) + .change(function(e){ + if(e.target.value === 'application/xml'){ + $('.body-textarea', $self).show(); + $('.editor_holder', $self).hide(); + this.model.jsonEditor.disable(); + } + else { + $('.body-textarea', $self).hide(); + $('.editor_holder', $self).show(); + this.model.jsonEditor.enable(); + } + }); + } + if (this.model.isBody) { isParam = true; } @@ -22316,6 +22426,8 @@ SwaggerUi.Views.ResourceView = Backbone.View.extend({ operation.nickname = id; operation.parentId = this.model.id; + operation.definitions = this.model.definitions; // make Json Schema available for JSonEditor in this operation + this.addOperation(operation); } @@ -22495,6 +22607,10 @@ SwaggerUi.Views.SignatureView = Backbone.View.extend({ var textArea = $('textarea', $(this.el.parentNode.parentNode.parentNode)); if ($.trim(textArea.val()) === '') { textArea.val(this.model.sampleJSON); + // TODO move this code outside of the view and expose an event instead + if( this.model.jsonEditor && this.model.jsonEditor.isEnabled()){ + this.model.jsonEditor.setValue(JSON.parse(this.model.sampleJSON)); + } } } } diff --git a/dist/swagger-ui.min.js b/dist/swagger-ui.min.js index 7f3562432b9..b55501a2eea 100644 --- a/dist/swagger-ui.min.js +++ b/dist/swagger-ui.min.js @@ -1,9 +1,9 @@ -(function(){function e(){e.history=e.history||[],e.history.push(arguments),this.console&&console.log(Array.prototype.slice.call(arguments)[0])}this.Handlebars=this.Handlebars||{},this.Handlebars.templates=this.Handlebars.templates||{},this.Handlebars.templates.apikey_button_view=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return"
    \n \n
    \n
    \n
    \n
    "+s((i=null!=(i=t.keyName||(null!=e?e.keyName:e))?i:o,typeof i===a?i.call(e,{name:"keyName",hash:{},data:r}):i))+'
    \n \n \n
    \n
    \n\n'},useData:!0}),this.Handlebars.templates.basic_auth_button_view=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){return'
    \n
    \n
    \n
    Username
    \n \n
    Password
    \n \n \n
    \n
    \n\n'},useData:!0}),this.Handlebars.templates.content_type=Handlebars.template({1:function(e,t,n,r){var i,a="";return i=t.each.call(e,null!=e?e.produces:e,{name:"each",hash:{},fn:this.program(2,r),inverse:this.noop,data:r}),null!=i&&(a+=i),a},2:function(e,t,n,r){var i,a=this.lambda,o=' \n"},4:function(e,t,n,r){return' \n'},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a='\n\n"},useData:!0}),$(function(){$.fn.vAlign=function(){return this.each(function(){var e=$(this).height(),t=$(this).parent().height(),n=(t-e)/2;$(this).css("margin-top",n)})},$.fn.stretchFormtasticInputWidthToParent=function(){return this.each(function(){var e=$(this).closest("form").innerWidth(),t=parseInt($(this).closest("form").css("padding-left"),10)+parseInt($(this).closest("form").css("padding-right"),10),n=parseInt($(this).css("padding-left"),10)+parseInt($(this).css("padding-right"),10);$(this).css("width",e-t-n)})},$("form.formtastic li.string input, form.formtastic textarea").stretchFormtasticInputWidthToParent(),$("ul.downplayed li div.content p").vAlign(),$("form.sandbox").submit(function(){var e=!0;return $(this).find("input.required").each(function(){$(this).removeClass("error"),""===$(this).val()&&($(this).addClass("error"),$(this).wiggle(),e=!1)}),e})}),Function.prototype.bind&&console&&"object"==typeof console.log&&["log","info","warn","error","assert","dir","clear","profile","profileEnd"].forEach(function(e){console[e]=this.bind(console[e],console)},Function.prototype.call),window.Docs={shebang:function(){var e=$.param.fragment().split("/");switch(e.shift(),e.length){case 1:break;case 2:var t="#resources_nav [data-resource] [data-endpoint="+e[0]+"_"+e[1]+"]",n=$("#swagger_sidebar").find(t),r=n.attr("data-selected");"undefined"==typeof r&&n.trigger("click")}}},Handlebars.registerHelper("sanitize",function(e){return e=e.replace(/)<[^<]*)*<\/script>/gi,""),new Handlebars.SafeString(e)}),this.Handlebars.templates.main=Handlebars.template({1:function(e,t,n,r){var i,a=this.lambda,o=this.escapeExpression,s=' '+o(a(null!=(i=null!=e?e.info:e)?i.title:i,e))+'\n ';return i=a(null!=(i=null!=e?e.info:e)?i.description:i,e),null!=i&&(s+=i),s+"\n"},3:function(e,t,n,r){var i,a=this.lambda,o=this.escapeExpression;return" \n Contact: '+o(a(null!=(i=null!=(i=null!=e?e.info:e)?i.contact:i)?i.email:i,e))+"\n

    \n"},5:function(e,t,n,r){var i,a=this.lambda,o=this.escapeExpression;return' api version: '+o(a(null!=(i=null!=e?e.info:e)?i.version:i,e))+"\n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
    \n \n
    \n\n
    \n
      \n
      \n"},useData:!0}),this.Handlebars.templates.operation=Handlebars.template({1:function(e,t,n,r){return"deprecated"},3:function(e,t,n,r){return"

      Warning: Deprecated

      \n"},5:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l='
      ';return a=null!=(a=t.description||(null!=e?e.description:e))?a:s,i=typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a,null!=i&&(l+=i),l+"
      \n"},7:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return'

      \n Parameters\n

      \n\n
      \n
      \n\n'},9:function(e,t,n,r){return'
      \n'},11:function(e,t,n,r){var i,a=' \n"},12:function(e,t,n,r){var i,a=this.lambda,o=this.escapeExpression,s="
      "+o(a(null!=e?e.scope:e,e))+"
      \n"},14:function(e,t,n,r){return' \n
      \n'},16:function(e,t,n,r){return'
      \n'},18:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return'
      \n

      \n Response Messages\n

      \n\n
      \n \n \n \n
      \n
      \n'},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o,s="function",l=t.helperMissing,u=this.escapeExpression,c=t.blockHelperMissing,p="
        \n
      • \n
        \n
        \n

        "+u((a=null!=(a=t.summary||(null!=e?e.summary:e))?a:l,typeof a===s?a.call(e,{name:"summary",hash:{},data:r}):a))+"

        \n\n

        \n \n "+u((a=null!=(a=t.method||(null!=e?e.method:e))?a:l,typeof a===s?a.call(e,{name:"method",hash:{},data:r}):a))+"\n \n \n '+u((a=null!=(a=t.path||(null!=e?e.path:e))?a:l,typeof a===s?a.call(e,{name:"path",hash:{},data:r}):a))+'\n \n

        \n
        \n\n \n Show samples\n \n\n',i=t["if"].call(e,null!=e?e.deprecated:e,{name:"if",hash:{},fn:this.program(3,r),inverse:this.noop,data:r}),null!=i&&(p+=i),i=t["if"].call(e,null!=e?e.description:e,{name:"if",hash:{},fn:this.program(5,r),inverse:this.noop,data:r}),null!=i&&(p+=i),p+='\n\n
        \n\n',i=t["if"].call(e,null!=e?e.parameters:e,{name:"if",hash:{},fn:this.program(7,r),inverse:this.noop,data:r}),null!=i&&(p+=i),p+='\n

        \n Test this endpoint\n

        \n\n
        \n
        \n \n Hide Response\n \n \n\n',a=null!=(a=t.oauth||(null!=e?e.oauth:e))?a:l,o={name:"oauth",hash:{},fn:this.program(9,r),inverse:this.noop,data:r},i=typeof a===s?a.call(e,o):a,t.oauth||(i=c.call(e,i,o)),null!=i&&(p+=i),p+="\n",i=t.each.call(e,null!=e?e.oauth:e,{name:"each",hash:{},fn:this.program(11,r),inverse:this.noop,data:r}),null!=i&&(p+=i),p+="\n",a=null!=(a=t.oauth||(null!=e?e.oauth:e))?a:l,o={name:"oauth",hash:{},fn:this.program(14,r),inverse:this.noop,data:r},i=typeof a===s?a.call(e,o):a,t.oauth||(i=c.call(e,i,o)),null!=i&&(p+=i),p+="\n
        \n\n",i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(16,r),inverse:this.noop,data:r}),null!=i&&(p+=i),p+="\n
        \n\n",i=t["if"].call(e,null!=e?e.responseMessages:e,{name:"if",hash:{},fn:this.program(18,r),inverse:this.noop,data:r}),null!=i&&(p+=i),p+'
        \n\n
        \n\n
        \n \n \n
        \n\n \n
      • \n
      "},useData:!0}),this.Handlebars.templates.param_list=Handlebars.template({1:function(e,t,n,r){return" multiple='multiple'"},3:function(e,t,n,r){return""},5:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(3,r),inverse:this.program(6,r),data:r}),null!=i&&(a+=i),a},6:function(e,t,n,r){return" \n"},8:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e.isDefault:e,{name:"if",hash:{},fn:this.program(9,r),inverse:this.program(11,r),data:r}),null!=i&&(a+=i),a},9:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' \n"},11:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},13:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' '+s((i=null!=(i=t.type||(null!=e?e.type:e))?i:o,typeof i===a?i.call(e,{name:"type",hash:{},data:r}):i))+"\n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
      '+l((a=null!=(a=t.name||(null!=e?e.name:e))?a:s,typeof a===o?a.call(e,{name:"name",hash:{},data:r}):a))+'
      \n
      \n
      \n \n
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(13,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n
      \n
      \n\n"},useData:!0}),this.Handlebars.templates.param_readonly_required=Handlebars.template({1:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},3:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(4,r),inverse:this.program(6,r),data:r}),null!=i&&(a+=i),a},4:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" "+s((i=null!=(i=t["default"]||(null!=e?e["default"]:e))?i:o,typeof i===a?i.call(e,{name:"default",hash:{},data:r}):i))+"\n"},6:function(e,t,n,r){return" (empty)\n"},8:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' '+s((i=null!=(i=t.type||(null!=e?e.type:e))?i:o,typeof i===a?i.call(e,{name:"type",hash:{},data:r}):i))+"\n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
      '+l((a=null!=(a=t.name||(null!=e?e.name:e))?a:s,typeof a===o?a.call(e,{name:"name",hash:{},data:r}):a))+'
      \n
      \n
      \n";return i=t["if"].call(e,null!=e?e.isBody:e,{name:"if",hash:{},fn:this.program(1,r),inverse:this.program(3,r),data:r}),null!=i&&(u+=i),u+='
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(8,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n
      \n
      \n"},useData:!0}),this.Handlebars.templates.param_readonly=Handlebars.template({1:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},3:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(4,r),inverse:this.program(6,r),data:r}),null!=i&&(a+=i),a},4:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" "+s((i=null!=(i=t["default"]||(null!=e?e["default"]:e))?i:o,typeof i===a?i.call(e,{name:"default",hash:{},data:r}):i))+"\n"},6:function(e,t,n,r){return" (empty)\n"},8:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' '+s((i=null!=(i=t.type||(null!=e?e.type:e))?i:o,typeof i===a?i.call(e,{name:"type",hash:{},data:r}):i))+"\n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
      '+l((a=null!=(a=t.name||(null!=e?e.name:e))?a:s,typeof a===o?a.call(e,{name:"name",hash:{},data:r}):a))+'
      \n
      \n
      \n";return i=t["if"].call(e,null!=e?e.isBody:e,{name:"if",hash:{},fn:this.program(1,r),inverse:this.program(3,r),data:r}),null!=i&&(u+=i),u+='
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(8,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n
      \n
      \n"},useData:!0}),this.Handlebars.templates.param_required=Handlebars.template({1:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e.isFile:e,{name:"if",hash:{},fn:this.program(2,r),inverse:this.program(4,r),data:r}),null!=i&&(a+=i),a},2:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' \n"},4:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(5,r),inverse:this.program(7,r),data:r}),null!=i&&(a+=i),a},5:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},7:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},9:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e.isFile:e,{name:"if",hash:{},fn:this.program(10,r),inverse:this.program(12,r),data:r}),null!=i&&(a+=i),a},10:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},12:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(13,r),inverse:this.program(15,r),data:r}),null!=i&&(a+=i),a},13:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},15:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},17:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' '+s((i=null!=(i=t.type||(null!=e?e.type:e))?i:o,typeof i===a?i.call(e,{name:"type",hash:{},data:r}):i))+"\n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
      '+l((a=null!=(a=t.name||(null!=e?e.name:e))?a:s,typeof a===o?a.call(e,{name:"name",hash:{},data:r}):a))+'
      \n
      \n";return i=t["if"].call(e,null!=e?e.isBody:e,{name:"if",hash:{},fn:this.program(1,r),inverse:this.program(9,r),data:r}),null!=i&&(u+=i),u+='
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(17,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n
      \n\n"},useData:!0}),this.Handlebars.templates.param=Handlebars.template({1:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u="";return i=t["if"].call(e,null!=e?e.isFile:e,{name:"if",hash:{},fn:this.program(2,r),inverse:this.program(4,r),data:r}),null!=i&&(u+=i),u+='
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(9,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n"},2:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' \n\n
      \n'},4:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(5,r),inverse:this.program(7,r),data:r}), -null!=i&&(a+=i),a},5:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},7:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n
      \n'},9:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return' '+s((i=null!=(i=t.type||(null!=e?e.type:e))?i:o,typeof i===a?i.call(e,{name:"type",hash:{},data:r}):i))+"\n"},11:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u="";return i=t["if"].call(e,null!=e?e.isFile:e,{name:"if",hash:{},fn:this.program(12,r),inverse:this.program(14,r),data:r}),null!=i&&(u+=i),u+='
      \n',i=t["if"].call(e,null!=e?e.type:e,{name:"if",hash:{},fn:this.program(9,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u+'
      '+l((a=null!=(a=t.description||(null!=e?e.description:e))?a:s,typeof a===o?a.call(e,{name:"description",hash:{},data:r}):a))+"
      \n
      \n"},12:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return'\n \n
      \n'},14:function(e,t,n,r){var i,a="";return i=t["if"].call(e,null!=e?e["default"]:e,{name:"if",hash:{},fn:this.program(15,r),inverse:this.program(17,r),data:r}),null!=i&&(a+=i),a},15:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},17:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return" \n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='
      '+l((a=null!=(a=t.name||(null!=e?e.name:e))?a:s,typeof a===o?a.call(e,{name:"name",hash:{},data:r}):a))+'
      \n
      \n";return i=t["if"].call(e,null!=e?e.isBody:e,{name:"if",hash:{},fn:this.program(1,r),inverse:this.program(11,r),data:r}),null!=i&&(u+=i),u+"
      "},useData:!0}),this.Handlebars.templates.parameter_content_type=Handlebars.template({1:function(e,t,n,r){var i,a="";return i=t.each.call(e,null!=e?e.consumes:e,{name:"each",hash:{},fn:this.program(2,r),inverse:this.noop,data:r}),null!=i&&(a+=i),a},2:function(e,t,n,r){var i,a=this.lambda,o=' \n"},4:function(e,t,n,r){return' \n'},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a='
      \n \n \n
      \n"},useData:!0}),this.Handlebars.templates.resource=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return"
        \n
      "},useData:!0}),this.Handlebars.templates.response_content_type=Handlebars.template({1:function(e,t,n,r){var i,a="";return i=t.each.call(e,null!=e?e.produces:e,{name:"each",hash:{},fn:this.program(2,r),inverse:this.noop,data:r}),null!=i&&(a+=i),a},2:function(e,t,n,r){var i,a=this.lambda,o=' \n"},4:function(e,t,n,r){return' \n'},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a='
      \n
      Response Type
      \n
      \n
      \n \n
      \n
      \n
      \n\n"},useData:!0}),this.Handlebars.templates.sidebar_header=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){return""},useData:!0}),this.Handlebars.templates.sidebar_item=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a="function",o=t.helperMissing,s=this.escapeExpression;return s((i=null!=(i=t.summary||(null!=e?e.summary:e))?i:o,typeof i===a?i.call(e,{name:"summary",hash:{},data:r}):i))+"\n"},useData:!0}),this.Handlebars.templates.signature=Handlebars.template({1:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u=' \n
      \n
      \n ';return a=null!=(a=t.signature||(null!=e?e.signature:e))?a:s,i=typeof a===o?a.call(e,{name:"signature",hash:{},data:r}):a,null!=i&&(u+=i),u+"\n
      \n
      \n"},compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u='

      '+l((a=null!=(a=t.type||(null!=e?e.type:e))?a:s,typeof a===o?a.call(e,{name:"type",hash:{},data:r}):a))+' Sample

      \n
      \n
      \n
      '+l((a=null!=(a=t.sampleJSON||(null!=e?e.sampleJSON:e))?a:s,typeof a===o?a.call(e,{name:"sampleJSON",hash:{},data:r}):a))+"
      \n
      \n
      \n\n";return i=t["if"].call(e,null!=e?e.signature:e,{name:"if",hash:{},fn:this.program(1,r),inverse:this.noop,data:r}),null!=i&&(u+=i),u},useData:!0}),this.Handlebars.templates.status_code=Handlebars.template({compiler:[6,">= 2.0.0-beta.1"],main:function(e,t,n,r){var i,a,o="function",s=t.helperMissing,l=this.escapeExpression,u=''+l((a=null!=(a=t.code||(null!=e?e.code:e))?a:s,typeof a===o?a.call(e,{name:"code",hash:{},data:r}):a))+"\n";return a=null!=(a=t.message||(null!=e?e.message:e))?a:s,i=typeof a===o?a.call(e,{name:"message",hash:{},data:r}):a,null!=i&&(u+=i),u+"\n"},useData:!0}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.SwaggerClient=e()}}(function(){var e;return function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return i(n?n:t)},c,c.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;on;n++)if(this[n]===e)return n;return-1}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),String.prototype.endsWith||(String.prototype.endsWith=function(e){return-1!==this.indexOf(e,this.length-e.length)}),t.exports=a,a.ApiKeyAuthorization=r.ApiKeyAuthorization,a.PasswordAuthorization=r.PasswordAuthorization,a.CookieAuthorization=r.CookieAuthorization,a.SwaggerApi=o,a.SwaggerClient=o},{"./lib/auth":2,"./lib/client":3,"./lib/helpers":4}],2:[function(e,t,n){"use strict";var r=e("btoa"),i=e("cookiejar"),a=t.exports.SwaggerAuthorizations=function(){this.authz={}};a.prototype.add=function(e,t){return this.authz[e]=t,t},a.prototype.remove=function(e){return delete this.authz[e]},a.prototype.apply=function(e,t){var n,r,i,a,o=null;if("undefined"==typeof t)for(n in this.authz)i=this.authz[n],a=i.apply(e,t),a===!0&&(o=!0);else if(Array.isArray(t))for(var s=0;s0?e.url=e.url+"&"+this.name+"="+this.value:e.url=e.url+"?"+this.name+"="+this.value,!0):"header"===this.type?(e.headers[this.name]=this.value,!0):void 0};var s=t.exports.CookieAuthorization=function(e){this.cookie=e};s.prototype.apply=function(e){return e.cookieJar=e.cookieJar||new i,e.cookieJar.setCookie(this.cookie),!0};var l=t.exports.PasswordAuthorization=function(e,t,n){this.name=e,this.username=t,this.password=n};l.prototype.apply=function(e){return e.headers.Authorization="Basic "+r(this.username+":"+this.password),!0}},{btoa:16,cookiejar:17}],3:[function(e,t,n){"use strict";var r={bind:e("lodash-compat/function/bind"),cloneDeep:e("lodash-compat/lang/cloneDeep"),find:e("lodash-compat/collection/find"),forEach:e("lodash-compat/collection/forEach"),indexOf:e("lodash-compat/array/indexOf"),isArray:e("lodash-compat/lang/isArray"),isFunction:e("lodash-compat/lang/isFunction"),isPlainObject:e("lodash-compat/lang/isPlainObject"),isUndefined:e("lodash-compat/lang/isUndefined")},i=e("./auth"),a=e("./helpers"),o=e("./types/model"),s=e("./types/operation"),l=e("./types/operationGroup"),u=e("./resolver"),c=e("./http"),p=e("./spec-converter"),h=["apis","authorizationScheme","authorizations","basePath","build","buildFrom1_1Spec","buildFrom1_2Spec","buildFromSpec","clientAuthorizations","convertInfo","debug","defaultErrorCallback","defaultSuccessCallback","fail","failure","finish","help","idFromOp","info","initialize","isBuilt","isValid","modelPropertyMacro","models","modelsArray","options","parameterMacro","parseUri","progress","resourceCount","sampleModels","selfReflect","setConsolidatedModels","spec","supportedSubmitMethods","swaggerRequestHeaders","tagFromLabel","url","useJQuery"],f=["apis","asCurl","description","externalDocs","help","label","name","operation","operations","operationsArray","path","tag"],d=["delete","get","head","options","patch","post","put"],m=t.exports=function(e,t){return this.authorizationScheme=null,this.authorizations=null,this.basePath=null,this.debug=!1,this.info=null,this.isBuilt=!1,this.isValid=!1,this.modelsArray=[],this.resourceCount=0,this.url=null,this.useJQuery=!1,"undefined"!=typeof e?this.initialize(e,t):this};m.prototype.initialize=function(e,t){this.models={},this.sampleModels={},t=t||{},"string"==typeof e?this.url=e:"object"==typeof e&&(t=e,this.url=t.url),this.swaggerRequestHeaders=t.swaggerRequestHeaders||"application/json;charset=utf-8,*/*",this.defaultSuccessCallback=t.defaultSuccessCallback||null,this.defaultErrorCallback=t.defaultErrorCallback||null,this.modelPropertyMacro=t.modelPropertyMacro||null,this.parameterMacro=t.modelPropertyMacro||null,"function"==typeof t.success&&(this.success=t.success),t.useJQuery&&(this.useJQuery=t.useJQuery),t.authorizations?this.clientAuthorizations=t.authorizations:this.clientAuthorizations=new i.SwaggerAuthorizations,this.options=t||{},this.supportedSubmitMethods=t.supportedSubmitMethods||[],this.failure=t.failure||function(){},this.progress=t.progress||function(){},this.spec=r.cloneDeep(t.spec),"function"==typeof t.success&&(this.ready=!0,this.build())},m.prototype.build=function(e){if(this.isBuilt)return this;var t=this;this.progress("fetching resource list: "+this.url);var n={useJQuery:this.useJQuery,url:this.url,method:"get",headers:{accept:this.swaggerRequestHeaders},on:{error:function(e){return"http"!==t.url.substring(0,4)?t.fail("Please specify the protocol for "+t.url):0===e.status?t.fail("Can't read from server. It may not have the appropriate access-control-origin settings."):404===e.status?t.fail("Can't read swagger JSON from "+t.url):t.fail(e.status+" : "+e.statusText+" "+t.url)},response:function(e){var n=e.obj||JSON.parse(e.data);if(t.swaggerVersion=n.swaggerVersion,n.swagger&&2===parseInt(n.swagger))t.swaggerVersion=n.swagger,(new u).resolve(n,t.buildFromSpec,t),t.isValid=!0;else{var r=new p;r.setDocumentationLocation(t.url),r.convert(n,t.clientAuthorizations,function(e){(new u).resolve(e,t.buildFromSpec,t),t.isValid=!0})}}}};if(this.spec)setTimeout(function(){(new u).resolve(t.spec,t.buildFromSpec,t)},10);else{if(this.clientAuthorizations.apply(n),e)return n;(new c).execute(n,this.options)}return this},m.prototype.buildFromSpec=function(e){if(this.isBuilt)return this;this.apis={},this.apisArray=[],this.basePath=e.basePath||"",this.consumes=e.consumes,this.host=e.host||"",this.info=e.info||{},this.produces=e.produces,this.schemes=e.schemes||[],this.securityDefinitions=e.securityDefinitions,this.title=e.title||"",e.externalDocs&&(this.externalDocs=e.externalDocs),this.authSchemes=e.securityDefinitions;var t,n={};if(Array.isArray(e.tags))for(n={},t=0;t-1?"_"+e:e,i=r.indexOf(f,e)>-1?"_"+e:e,o=m[t];if(t!==e&&a.log("The '"+e+"' tag conflicts with a SwaggerClient function/property name. Use 'client."+t+"' or 'client.apis."+e+"' instead of 'client."+e+"'."),i!==e&&a.log("The '"+e+"' tag conflicts with a SwaggerClient operation function/property name. Use 'client.apis."+i+"' instead of 'client.apis."+e+"'."),r.indexOf(f,c)>-1&&(a.log("The '"+c+"' operationId conflicts with a SwaggerClient operation function/property name. Use 'client.apis."+i+"._"+c+"' instead of 'client.apis."+i+"."+c+"'."),c="_"+c,p.nickname=c),r.isUndefined(o)){o=m[t]=m.apis[i]={},o.operations={},o.label=i,o.apis={};var s=n[e];r.isUndefined(s)||(o.description=s.description,o.externalDocs=s.externalDocs),m[t].help=r.bind(m.help,o),m.apisArray.push(new l(e,o.description,o.externalDocs,p))}r.isFunction(o.help)||(o.help=r.bind(m.help,o)),m.apis[i][c]=o[c]=r.bind(p.execute,p),m.apis[i][c].help=o[c].help=r.bind(p.help,p),m.apis[i][c].asCurl=o[c].asCurl=r.bind(p.asCurl,p),o.apis[c]=o.operations[c]=p;var u=r.find(m.apisArray,function(t){return t.tag===e});u&&u.operationsArray.push(p)})}})}),this.isBuilt=!0,this.success&&(this.isValid=!0,this.isBuilt=!0,this.success()),this},m.prototype.parseUri=function(e){var t=/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,n=t.exec(e);return{scheme:n[4].replace(":",""),host:n[11],port:n[12],path:n[15]}},m.prototype.help=function(e){var t="";return this instanceof m?r.forEach(this.apis,function(e,n){r.isPlainObject(e)&&(t+="operations for the '"+n+"' tag\n",r.forEach(e.operations,function(e,n){t+=" * "+n+": "+e.summary+"\n"}))}):(this instanceof l||r.isPlainObject(this))&&(t+="operations for the '"+this.label+"' tag\n",r.forEach(this.apis,function(e,n){t+=" * "+n+": "+e.summary+"\n"})),e?t:(a.log(t),t)},m.prototype.tagFromLabel=function(e){return e},m.prototype.idFromOp=function(e,t,n){n&&n.operationId||(n=n||{},n.operationId=t+"_"+e);var r=n.operationId.replace(/[\s!@#$%^&*()_+=\[{\]};:<>|.\/?,\\'""-]/g,"_")||e.substring(1)+"_"+t;return r=r.replace(/((_){2,})/g,"_"),r=r.replace(/^(_)*/g,""),r=r.replace(/([_])*$/g,"")},m.prototype.fail=function(e){throw this.failure(e),e}},{"./auth":2,"./helpers":4,"./http":5,"./resolver":6,"./spec-converter":7,"./types/model":8,"./types/operation":9,"./types/operationGroup":10,"lodash-compat/array/indexOf":19,"lodash-compat/collection/find":22,"lodash-compat/collection/forEach":23,"lodash-compat/function/bind":26,"lodash-compat/lang/cloneDeep":106,"lodash-compat/lang/isArray":108,"lodash-compat/lang/isFunction":109,"lodash-compat/lang/isPlainObject":112,"lodash-compat/lang/isUndefined":115}],4:[function(e,t,n){(function(n){"use strict";var r={isPlainObject:e("lodash-compat/lang/isPlainObject")};t.exports.__bind=function(e,t){return function(){return e.apply(t,arguments)}};var i=t.exports.log=function(){console&&"test"!==n.env.NODE_ENV&&console.log(Array.prototype.slice.call(arguments)[0])};t.exports.fail=function(e){i(e)},t.exports.optionHtml=function(e,t){return''+e+":"+t+""};var a=t.exports.resolveSchema=function(e){return r.isPlainObject(e.schema)&&(e=a(e.schema)),e};t.exports.typeFromJsonSchema=function(e,t){var n;return"integer"===e&&"int32"===t?n="integer":"integer"===e&&"int64"===t?n="long":"integer"===e&&"undefined"==typeof t?n="long":"string"===e&&"date-time"===t?n="date-time":"string"===e&&"date"===t?n="date":"number"===e&&"float"===t?n="float":"number"===e&&"double"===t?n="double":"number"===e&&"undefined"==typeof t?n="double":"boolean"===e?n="boolean":"string"===e&&(n="string"),n};var o=t.exports.simpleRef=function(e){return"undefined"==typeof e?null:0===e.indexOf("#/definitions/")?e.substring("#/definitions/".length):e},s=t.exports.getStringSignature=function(e,t){var n="";return"undefined"!=typeof e.$ref?n+=o(e.$ref):"undefined"==typeof e.type?n+="object":"array"===e.type?t?n+=s(e.items||e.$ref||{}):(n+="Array[",n+=s(e.items||e.$ref||{}),n+="]"):n+="integer"===e.type&&"int32"===e.format?"integer":"integer"===e.type&&"int64"===e.format?"long":"integer"===e.type&&"undefined"==typeof e.format?"long":"string"===e.type&&"date-time"===e.format?"date-time":"string"===e.type&&"date"===e.format?"date":"string"===e.type&&"undefined"==typeof e.format?"string":"number"===e.type&&"float"===e.format?"float":"number"===e.type&&"double"===e.format?"double":"number"===e.type&&"undefined"==typeof e.format?"double":"boolean"===e.type?"boolean":e.$ref?o(e.$ref):e.type,n}}).call(this,e("_process"))},{_process:15,"lodash-compat/lang/isPlainObject":112}],5:[function(e,t,n){"use strict";var r=e("./helpers"),i=e("jquery"),a=e("superagent"),o=function(){},s=function(){},l=t.exports=function(){};l.prototype.execute=function(e,t){var n;n=t&&t.client?t.client:new s(t),(e&&e.useJQuery===!0||this.isInternetExplorer())&&(n=new o(t));var r=e.on.response,i=function(e){t&&t.responseInterceptor&&(e=t.responseInterceptor.apply(e)),r(e)};e.on.response=function(e){i(e)},e&&"object"==typeof e.body&&(e.body.type&&"formData"===e.body.type?(e.contentType=!1,e.processData=!1,delete e.headers["Content-Type"]):e.body=JSON.stringify(e.body)),n.execute(e)},l.prototype.isInternetExplorer=function(){var e=!1;if("undefined"!=typeof navigator&&navigator.userAgent){var t=navigator.userAgent.toLowerCase();if(-1!==t.indexOf("msie")){var n=parseInt(t.split("msie")[1]);8>=n&&(e=!0)}}return e},o.prototype.execute=function(e){var t=e.on,n=e;return e.type=e.method,e.cache=!1,delete e.useJQuery,e.data=e.body,delete e.body,e.complete=function(e){for(var i={},a=e.getAllResponseHeaders().split("\n"),o=0;o0))try{p.obj=e.responseJSON||JSON.parse(p.data)||{}}catch(f){r.log("unable to parse JSON content")}if(e.status>=200&&e.status<300)t.response(p);else{if(!(0===e.status||e.status>=400&&e.status<599))return t.response(p);t.error(p)}},i.support.cors=!0,i.ajax(e)},s.prototype.execute=function(e){var t=e.method.toLowerCase();"delete"===t&&(t="del");var n,r=e.headers||{},i=a[t](e.url);for(n in r)i.set(n,r[n]);e.body&&i.send(e.body),i.end(function(t,n){n=n||{status:0,headers:{error:"no response from server"}};var r,i={url:e.url,method:e.method,headers:n.headers};!t&&n.error&&(t=n.error),t&&e.on&&e.on.error?(i.obj=t,i.status=n?n.status:500,i.statusText=n?n.text:t.message,r=e.on.error):n&&e.on&&e.on.response&&(i.obj="undefined"!=typeof n.body?n.body:n.text,i.status=n.status,i.statusText=n.text,r=e.on.response),i.data=i.statusText,r&&r(i)})}},{"./helpers":4,jquery:18,superagent:125}],6:[function(e,t,n){"use strict";var r=e("./http"),i=t.exports=function(){};i.prototype.resolve=function(e,t,n){this.scope=n||this,this.iteration=this.iteration||0;var i,a,o,s,l,u=0,c={},p={},h={};for(a in e.definitions){var f=e.definitions[a];for(l in f.properties)s=f.properties[l],this.resolveTo(s,h)}for(a in e.paths){var d,m,g;o=e.paths[a];for(d in o)if("$ref"===d)this.resolveInline(e,o,h,p);else{m=o[d];var y,v=m.parameters;for(y in v){var b=v[y];"body"===b["in"]&&b.schema&&this.resolveTo(b.schema,h),b.$ref&&this.resolveInline(e,b,h,p)}for(g in m.responses){var w=m.responses[g];"object"==typeof w&&w.$ref&&this.resolveInline(e,w,h,p),w.schema&&w.schema.$ref&&this.resolveTo(w.schema,h)}}}var x={},A=0;for(a in h){var j=a.split("#");2===j.length?(i=j[0],o=j[1],Array.isArray(x[i])||(x[i]=[],A+=1),x[i].push(o)):(Array.isArray(x[a])||(x[a]=[],A+=1),x[a].push(null))}for(a in x){var S=this,C=x[a];i=a;var E={useJQuery:!1,url:i,method:"get",headers:{accept:this.scope.swaggerRequestHeaders||"application/json"},on:{error:function(){u+=1;var n;for(n=0;n0&&(d=d[g])}var y=i+"#"+f,v=m[o-1];"undefined"!=typeof d?c[y]={name:v,obj:d}:p[y]=null}}u===A&&S.finish(e,h,c,p,t)}}};n&&n.clientAuthorizations&&n.clientAuthorizations.apply(E),(new r).execute(E)}0===Object.keys(x).length&&t.call(this.scope,e,p)},i.prototype.finish=function(e,t,n,r,i){var a;for(a in t){var o,s=t[a];for(o=0;o0&&(l=l[u])}if(l){delete t.$ref;var c;for(c in l)t[c]=l[c]}else r[i]=null}}else"array"===t.type&&this.resolveTo(t.items,n)},i.prototype.resolveTo=function(e,t){var n=e.$ref;if(n)0===n.indexOf("http")&&(Array.isArray(t[n])?t[n].push({obj:e,resolveAs:"$ref"}):t[n]=[{obj:e,resolveAs:"$ref"}]);else if("array"===e.type){var r=e.items;this.resolveTo(r,t)}}},{"./http":5}],7:[function(e,t,n){"use strict";var r=e("./http"),i=t.exports=function(){this.errors=[],this.warnings=[],this.modelMap={}};i.prototype.setDocumentationLocation=function(e){this.docLocation=e},i.prototype.convert=function(e,t,n){if(!e||!Array.isArray(e.apis))return this.finish(n,null);this.clientAuthorizations=t;var r={swagger:"2.0"};r.originalVersion=e.swaggerVersion,this.apiInfo(e,r),this.securityDefinitions(e,r),e.basePath&&this.setDocumentationLocation(e.basePath),e.basePath&&this.setDocumentationLocation(e.basePath);var i,a=!1;for(i=0;i0?(t.host=i.substring(0,a),t.basePath=i.substring(a)):(t.host=i,t.basePath="/")):0===e.basePath.indexOf("https://")?(i=e.basePath.substring("https://".length),a=i.indexOf("/"),a>0?(t.host=i.substring(0,a),t.basePath=i.substring(a)):(t.host=i,t.basePath="/")):t.basePath=e.basePath;var o;if(e.authorizations&&(o=e.authorizations),e.consumes&&(t.consumes=e.consumes),e.produces&&(t.produces=e.produces),"object"==typeof e)for(n in e.models){var s=e.models[n],l=s.id||n;this.modelMap[l]=n}for(r=0;r0&&(o["enum"]=a),i.required instanceof Array)for(var u=0,c=i.required.length;c>u;u++){var p=i.required[u];o.properties[p]&&(o.properties[p].required=!0)}t.definitions[n]=o}}},i.prototype.extractTag=function(e){var t=e||"default";return 0!==t.indexOf("http:")&&0!==t.indexOf("https:")||(t=t.split(["/"]),t=t[t.length-1].substring()),t.endsWith(".json")&&(t=t.substring(0,t.length-".json".length)),t.replace("/","")},i.prototype.operations=function(e,t,n,r,i){if(Array.isArray(n)){var a;i.paths||(i.paths={});var o=i.paths[e]||{},s=this.extractTag(t);i.tags=i.tags||[];var l=!1;for(a=0;ai;i++){var u=e.apis[i],c=u.path,p=this.getAbsolutePath(e.swaggerVersion,this.docLocation,c);u.description&&(t.tags=t.tags||[],t.tags.push({name:this.extractTag(u.path),description:u.description||""}));var h={url:p,headers:{accept:"application/json"},on:{},method:"get"};h.on.response=function(e){a+=1;var t=e.obj;if("undefined"==typeof t||null===t)try{t=JSON.parse(e.statusText)}catch(r){}t&&o.declaration(t,l),a===s&&o.finish(n,l)},h.on.error=function(e){console.error(e),a+=1,a===s&&o.finish(n,l)},this.clientAuthorizations&&"function"==typeof this.clientAuthorizations.apply&&this.clientAuthorizations.apply(h),(new r).execute(h)}},i.prototype.getAbsolutePath=function(e,t,n){if("1.0"===e&&t.endsWith(".json")){var r=t.lastIndexOf("/");r>0&&(t=t.substring(0,r))}var i=t;return 0===n.indexOf("http://")||0===n.indexOf("https://")?i=n:(t.endsWith("/")&&(i=t.substring(0,t.length-1)),i+=n),i=i.replace("{format}","json")},i.prototype.securityDefinitions=function(e,t){if(e.authorizations){var n;for(n in e.authorizations){var r=!1,i={},a=e.authorizations[n];if("apiKey"===a.type)i.type="apiKey",i["in"]=a.passAs,i.name=a.keyname||n,r=!0;else if("oauth2"===a.type){var o,s=a.scopes||[],l={};for(o in s){var u=s[o];l[u.scope]=u.description}if(i.type="oauth2",o>0&&(i.scopes=l),a.grantTypes){if(a.grantTypes.implicit){var c=a.grantTypes.implicit;i.flow="implicit",i.authorizationUrl=c.loginEndpoint,r=!0}if(a.grantTypes.authorization_code&&!i.flow){var p=a.grantTypes.authorization_code;i.flow="accessCode",i.authorizationUrl=p.tokenRequestEndpoint.url,i.tokenUrl=p.tokenEndpoint.url,r=!0}}}r&&(t.securityDefinitions=t.securityDefinitions||{},t.securityDefinitions[n]=i)}}},i.prototype.apiInfo=function(e,t){if(e.info){var n=e.info;t.info={},n.contact&&(t.info.contact={},t.info.contact.email=n.contact),n.description&&(t.info.description=n.description),n.title&&(t.info.title=n.title),n.termsOfServiceUrl&&(t.info.termsOfService=n.termsOfServiceUrl),(n.license||n.licenseUrl)&&(t.license={},n.license&&(t.license.name=n.license),n.licenseUrl&&(t.license.url=n.licenseUrl))}else this.warnings.push("missing info section")},i.prototype.finish=function(e,t){e(t)}},{"./http":5}],8:[function(e,t,n){"use strict";var r={cloneDeep:e("lodash-compat/lang/cloneDeep"),forEach:e("lodash-compat/collection/forEach"),indexOf:e("lodash-compat/array/indexOf"),isArray:e("lodash-compat/lang/isArray"),isPlainObject:e("lodash-compat/lang/isPlainObject"),isString:e("lodash-compat/lang/isString"),isUndefined:e("lodash-compat/lang/isUndefined"),keys:e("lodash-compat/object/keys"),map:e("lodash-compat/collection/map")},i=e("../helpers"),a=t.exports=function(e,t,n,r){return this.definition=t||{},this.isArray="array"===t.type,this.models=n||{},this.name=t.title||e||"Inline Model",this.modelPropertyMacro=r||function(e){return e["default"]},this},o=function(e,t,n,o){var s={},l=[],u=0,c=function(e,t,l){var c,p=t;return e.$ref?(p=e.title||i.simpleRef(e.$ref),c=n[p],null!==c&&null!==c.definition.title&&"undefined"!=typeof c.definition.title&&(p=c.definition.title)):r.isUndefined(t)&&(p=e.title||"Inline Model "+ ++u,c=new a(p,e,n,o)),l!==!0&&(s[p]=r.isUndefined(c)?{}:c.definition),p},p=function(e){var t,n='"+t):"object"===a?r.isUndefined(e.properties)?n+=' title="object">object':(t=c(e),n+=" title="+t+">"+t):"array"===a?(r.isArray(e.items)?t=r.map(e.items,c).join(","):r.isPlainObject(e.items)?t=r.isUndefined(e.items.$ref)?r.isUndefined(e.items.type)||-1!==r.indexOf(["array","object"],e.items.type)?c(e.items):e.items.type:c(e.items,i.simpleRef(e.items.$ref)):(i.log("Array type's 'items' schema is not an array or an object, cannot process"),t="object"),n+=" title=array["+t+"]>array["+t+"]"):n+=" title="+e.type+">"+e.type,n+=""},h=function(e,t){var n="",a=e.type||"object",o="array"===a;switch(o&&(a=r.isPlainObject(e.items)&&!r.isUndefined(e.items.type)?e.items.type:"object"),r.isUndefined(e["default"])||(n+=i.optionHtml("Default",e["default"])),a){case"string":e.minLength&&(n+=i.optionHtml("Min. Length",e.minLength)),e.maxLength&&(n+=i.optionHtml("Max. Length",e.maxLength)),e.pattern&&(n+=i.optionHtml("Reg. Exp.",e.pattern));break;case"integer":case"number":e.minimum&&(n+=i.optionHtml("Min. Value",e.minimum)),e.exclusiveMinimum&&(n+=i.optionHtml("Exclusive Min.","true")),e.maximum&&(n+=i.optionHtml("Max. Value",e.maximum)),e.exclusiveMaximum&&(n+=i.optionHtml("Exclusive Max.","true")),e.multipleOf&&(n+=i.optionHtml("Multiple Of",e.multipleOf))}if(o&&(e.minItems&&(n+=i.optionHtml("Min. Items",e.minItems)),e.maxItems&&(n+=i.optionHtml("Max. Items",e.maxItems)),e.uniqueItems&&(n+=i.optionHtml("Unique Items","true")),e.collectionFormat&&(n+=i.optionHtml("Coll. Format",e.collectionFormat))),r.isUndefined(e.items)&&r.isArray(e["enum"])){var s;s="number"===a||"integer"===a?e["enum"].join(", "):'"'+e["enum"].join('", "')+'"',n+=i.optionHtml("Enum",s)}return t},f=function(e,t){var a=e.type||"object",s="array"===e.type,u=''+(s?"[]":"{}")+' ',f="",d="";if("Inline Model"!==t&&(d=r.isUndefined(e.title)?u+t+f:u+e.title+f),t&&l.push(t),s)if(r.isArray(e.items))d+="
      "+r.map(e.items,function(e){var t=e.type||"object";return r.isUndefined(e.$ref)?r.indexOf(["array","object"],t)>-1?"object"===t&&r.isUndefined(e.properties)?"object":c(e):h(e,t):c(e,i.simpleRef(e.$ref))}).join("
      ");else if(r.isPlainObject(e.items)){var m="";m=r.isUndefined(e.items.$ref)?r.indexOf(["array","object"],e.items.type||"object")>-1?(r.isUndefined(e.items.type)||"object"===e.items.type)&&r.isUndefined(e.items.properties)?"object":c(e.items):h(e.items,e.items.type):c(e.items,i.simpleRef(e.items.$ref)),"Inline Model"!==t&&(d+="
      "+m+"
      ")}else i.log("Array type's 'items' property is not an array or an object, cannot process"),d+="
      object
      ";else e.$ref?d+="
      "+c(e,t)+"
      ":"object"===a?(d+="
      ",r.isPlainObject(e.properties)&&(d+=r.map(e.properties,function(t,a){var s,l=r.indexOf(e.required,a)>=0,u=r.cloneDeep(t),c='';return c+=''+a+"",u["default"]=o(u),u=i.resolveSchema(u),r.isUndefined(u.$ref)||(s=n[i.simpleRef(u.$ref)],r.isUndefined(s)||-1!==r.indexOf([void 0,"array","object"],s.definition.type)||(u=i.resolveSchema(s.definition))),c+=p(u),l||(c+='(optional)'),c+="",c+='',r.isUndefined(t.description)||(c+=t.description),u["enum"]&&(c+='
      Can be ',r.forEach(u["enum"],function(e,t){c+=""+e+"",t===u["enum"].length-2?c+=" or ":t
      ")),d+="
      "):d="
      "+h(e,a)+"
      ";return d};t=i.resolveSchema(t);for(var d=f(t,e);r.keys(s).length>0;)r.forEach(s,function(e,t){var n=r.indexOf(l,t)>-1;delete s[t],n||(l.push(t),d+=f(e,t))});return d},s=function(e,t,n,a){e=i.resolveSchema(e);var o,l,u=e.type||"object",c=e.format;return e.example?l=e.example:r.isUndefined(e.items)&&r.isArray(e["enum"])&&(l=e["enum"][0]),r.isUndefined(l)&&(e.$ref?(o=t[i.simpleRef(e.$ref)],r.isUndefined(o)||(r.isUndefined(n[o.name])?(n[o.name]=o,l=s(o.definition,t,n,a),delete n[o.name]):l="array"===o.type?[]:{})):r.isUndefined(e["default"])?"string"===u?l="date-time"===c?(new Date).toISOString():"date"===c?(new Date).toISOString().split("T")[0]:"string":"integer"===u?l=0:"number"===u?l=0:"boolean"===u?l=!0:"object"===u?(l={},r.forEach(e.properties,function(e,i){var o=r.cloneDeep(e);o["default"]=a(e),l[i]=s(o,t,n,a)})):"array"===u&&(l=[],r.isArray(e.items)?r.forEach(e.items,function(e){l.push(s(e,t,n,a))}):r.isPlainObject(e.items)?l.push(s(e.items,t,n,a)):r.isUndefined(e.items)?l.push({}):i.log("Array type's 'items' property is not an array or an object, cannot process")):l=e["default"]),l};a.prototype.createJSONSample=a.prototype.getSampleValue=function(e){return e=e||{},e[this.name]=this,this.examples&&r.isPlainObject(this.examples)&&this.examples["application/json"]?(this.definition.example=this.examples["application/json"],r.isString(this.definition.example)&&(this.definition.example=JSON.parse(this.definition.example))):this.definition.example||(this.definition.example=this.examples),s(this.definition,this.models,e,this.modelPropertyMacro)},a.prototype.getMockSignature=function(){return o(this.name,this.definition,this.models,this.modelPropertyMacro)}},{"../helpers":4,"lodash-compat/array/indexOf":19,"lodash-compat/collection/forEach":23,"lodash-compat/collection/map":24,"lodash-compat/lang/cloneDeep":106,"lodash-compat/lang/isArray":108,"lodash-compat/lang/isPlainObject":112,"lodash-compat/lang/isString":113,"lodash-compat/lang/isUndefined":115,"lodash-compat/object/keys":116}],9:[function(e,t,n){"use strict";var r={cloneDeep:e("lodash-compat/lang/cloneDeep"),isUndefined:e("lodash-compat/lang/isUndefined")},i=e("../helpers"),a=e("./model"),o=e("../http"),s=t.exports=function(e,t,n,r,o,s,l,u,c){var p=[];if(e=e||{},s=s||{},e&&e.options&&(this.client=e.options.client||null,this.responseInterceptor=e.options.responseInterceptor||null),this.authorizations=s.security,this.basePath=e.basePath||"/",this.clientAuthorizations=c,this.consumes=s.consumes||e.consumes||["application/json"],this.produces=s.produces||e.produces||["application/json"],this.deprecated=s.deprecated,this.description=s.description,this.host=e.host||"localhost",this.method=r||p.push("Operation "+n+" is missing method."),this.models=u||{},this.nickname=n||p.push("Operations must have a nickname."),this.operation=s,this.operations={},this.parameters=null!==s?s.parameters||[]:{},this.parent=e,this.path=o||p.push("Operation "+this.nickname+" is missing path."),this.responses=s.responses||{},this.scheme=t||e.scheme||"http",this.schemes=e.schemes,this.security=s.security,this.summary=s.summary||"",this.type=null,this.useJQuery=e.useJQuery,this.parameterMacro=e.parameterMacro||function(e){return e["default"]},this.inlineModels=[],"string"==typeof this.deprecated)switch(this.deprecated.toLowerCase()){case"true":case"yes":case"1":this.deprecated=!0;break;case"false":case"no":case"0":case null:this.deprecated=!1;break;default:this.deprecated=Boolean(this.deprecated)}var h,f;if(l){var d;for(d in l)f=new a(d,l[d],this.models,e.modelPropertyMacro),f&&(this.models[d]=f)}for(h=0;h0&&this.resource&&this.resource.api&&this.resource.api.fail&&this.resource.api.fail(p),this};s.prototype.isDefaultArrayItemValue=function(e,t){return t["default"]&&Array.isArray(t["default"])?-1!==t["default"].indexOf(e):e===t["default"]},s.prototype.getType=function(e){var t,n=e.type,r=e.format,a=!1;"integer"===n&&"int32"===r?t="integer":"integer"===n&&"int64"===r?t="long":"integer"===n?t="integer":"string"===n?t="date-time"===r?"date-time":"date"===r?"date":"string":"number"===n&&"float"===r?t="float":"number"===n&&"double"===r?t="double":"number"===n?t="double":"boolean"===n?t="boolean":"array"===n&&(a=!0,e.items&&(t=this.getType(e.items))),e.$ref&&(t=i.simpleRef(e.$ref));var o=e.schema;if(o){var s=o.$ref;return s?(s=i.simpleRef(s),a?[s]:s):"object"===o.type?this.addInlineModel(o):this.getType(o)}return a?[t]:t},s.prototype.addInlineModel=function(e){var t=this.inlineModels.length,n=this.resolveModel(e,{});return n?(this.inlineModels.push(n),"Inline Model "+t):null},s.prototype.getInlineModel=function(e){if(/^Inline Model \d+$/.test(e)){var t=parseInt(e.substr("Inline Model".length).trim(),10),n=this.inlineModels[t];return n}return null},s.prototype.resolveModel=function(e,t){if("undefined"!=typeof e.$ref){var n=e.$ref;if(0===n.indexOf("#/definitions/")&&(n=n.substring("#/definitions/".length)),t[n])return new a(n,t[n],this.models,this.parent.modelPropertyMacro)}else if(e&&"object"==typeof e&&("object"===e.type||r.isUndefined(e.type)))return new a(void 0,e,this.models,this.parent.modelPropertyMacro);return null},s.prototype.help=function(e){for(var t=this.nickname+": "+this.summary+"\n",n=0;n=0&&n.useJQuery){var h=new FormData;h.type="formData";for(i in o)a=t[i],"undefined"!=typeof a&&("file"===a.type&&a.value?(delete e["Content-Type"],h.append(i,a.value)):h.append(i,a));r=h}return r},s.prototype.getModelSampleJSON=function(e,t){var n,r,i;if(t=t||{},n=e instanceof Array,i=n?e[0]:e,t[i]?r=t[i].createJSONSample():this.getInlineModel(i)&&(r=this.getInlineModel(i).createJSONSample()),r){if(r=n?[r]:r,"string"==typeof r)return r;if("object"==typeof r){var a=r;if(r instanceof Array&&r.length>0&&(a=r[0]),a.nodeName){var o=(new XMLSerializer).serializeToString(a);return this.formatXml(o)}return JSON.stringify(r,null,2)}return r}},s.prototype["do"]=function(e,t,n,r,i){return this.execute(e,t,n,r,i)},s.prototype.execute=function(e,t,n,r,a){var s,l,u=e||{},c={};"object"==typeof t&&(c=t,s=n,l=r),this.client&&(c.client=this.client),this.responseInterceptor&&(c.responseInterceptor=this.responseInterceptor),"function"==typeof t&&(s=t,l=n),s=s||this.parent.defaultSuccessCallback||i.log,l=l||this.parent.defaultErrorCallback||i.log,"undefined"==typeof c.useJQuery&&(c.useJQuery=this.useJQuery);var p=this.getMissingParams(u);if(p.length>0){var h="missing required params: "+p;return i.fail(h),void l(h)}var f,d=this.getHeaderParams(u),m=this.setContentTypes(u,c),g={};for(f in d)g[f]=d[f];for(f in m)g[f]=m[f];var y=this.getBody(m,u,c),v=this.urlify(u);if(v.indexOf(".{format}")>0&&g){var b=g.Accept||g.accept;b&&b.indexOf("json")>0?v=v.replace(".{format}",".json"):b&&b.indexOf("xml")>0&&(v=v.replace(".{format}",".xml"))}var w={url:v,method:this.method.toUpperCase(),body:y,useJQuery:c.useJQuery,headers:g,on:{response:function(e){return s(e,a)},error:function(e){return l(e,a)}}};return this.clientAuthorizations.apply(w,this.operation.security),c.mock===!0?w:void(new o).execute(w,c)},s.prototype.setContentTypes=function(e,t){var n,r,a=this.parameters,o=e.parameterContentType||this.consumes[0],s=t.responseContentType||this.produces[0],l=[],u=[],c={};for(r=0;r0&&(o=t.requestContentType?t.requestContentType:l.length>0?"multipart/form-data":"application/x-www-form-urlencoded")):o=null,o&&this.consumes&&-1===this.consumes.indexOf(o)&&i.log("server doesn't consume "+o+", try "+JSON.stringify(this.consumes)),s&&this.produces&&-1===this.produces.indexOf(s)&&i.log("server can't produce "+s),(o&&""!==n||"application/x-www-form-urlencoded"===o)&&(c["Content-Type"]=o),s&&(c.Accept=s),c},s.prototype.asCurl=function(e){var t=this.execute(e,{mock:!0});this.clientAuthorizations.apply(t);var n=[];if(n.push("-X "+this.method.toUpperCase()),t.headers){var r;for(r in t.headers)n.push('--header "'+r+": "+t.headers[r]+'"')}if(t.body){var i;i="object"==typeof t.body?JSON.stringify(t.body):t.body,n.push('-d "'+i.replace(/"/g,'\\"')+'"')}return"curl "+n.join(" ")+' "'+t.url+'"'},s.prototype.encodePathCollection=function(e,t,n){var r,i="",a="";for(a="ssv"===e?"%20":"tsv"===e?"\\t":"pipes"===e?"|":",",r=0;r0&&(i+="&"),i+=this.encodeQueryParam(t)+"="+this.encodeQueryParam(n[r]);else{var a="";if("csv"===e)a=",";else if("ssv"===e)a="%20";else if("tsv"===e)a="\\t";else if("pipes"===e)a="|";else if("brackets"===e)for(r=0;rr;r++)t.push(encodeURIComponent(n[r]));return t.join("/")}},{"../helpers":4,"../http":5,"./model":8,"lodash-compat/lang/cloneDeep":106,"lodash-compat/lang/isUndefined":115}],10:[function(e,t,n){"use strict";var r=t.exports=function(e,t,n,r){this.description=t,this.externalDocs=n,this.name=e,this.operation=r,this.operationsArray=[],this.path=e,this.tag=e};r.prototype.sort=function(){}},{}],11:[function(e,t,n){function r(e){return this instanceof r?(this.length=0,this.parent=void 0,"number"==typeof e?i(this,e):"string"==typeof e?a(this,e,arguments.length>1?arguments[1]:"utf8"):o(this,e)):arguments.length>1?new r(e,arguments[1]):new r(e)}function i(e,t){if(e=h(e,0>t?0:0|f(t)),!r.TYPED_ARRAY_SUPPORT)for(var n=0;t>n;n++)e[n]=0;return e}function a(e,t,n){"string"==typeof n&&""!==n||(n="utf8");var r=0|m(t,n);return e=h(e,r),e.write(t,n),e}function o(e,t){if(r.isBuffer(t))return s(e,t);if(W(t))return l(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");return"undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer?u(e,t):t.length?c(e,t):p(e,t)}function s(e,t){var n=0|f(t.length);return e=h(e,n),t.copy(e,0,0,n),e}function l(e,t){var n=0|f(t.length);e=h(e,n);for(var r=0;n>r;r+=1)e[r]=255&t[r];return e}function u(e,t){var n=0|f(t.length);e=h(e,n);for(var r=0;n>r;r+=1)e[r]=255&t[r];return e}function c(e,t){var n=0|f(t.length);e=h(e,n);for(var r=0;n>r;r+=1)e[r]=255&t[r];return e}function p(e,t){var n,r=0;"Buffer"===t.type&&W(t.data)&&(n=t.data,r=0|f(n.length)),e=h(e,r);for(var i=0;r>i;i+=1)e[i]=255&n[i];return e}function h(e,t){r.TYPED_ARRAY_SUPPORT?e=r._augment(new Uint8Array(t)):(e.length=t,e._isBuffer=!0);var n=0!==t&&t<=r.poolSize>>>1;return n&&(e.parent=Y),e}function f(e){if(e>=J)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+J.toString(16)+" bytes");return 0|e}function d(e,t){if(!(this instanceof d))return new d(e,t);var n=new r(e,t);return delete n.parent,n}function m(e,t){if("string"!=typeof e&&(e=String(e)),0===e.length)return 0;switch(t||"utf8"){case"ascii":case"binary":case"raw":return e.length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e.length;case"hex":return e.length>>>1;case"utf8":case"utf-8":return U(e).length;case"base64":return B(e).length;default:return e.length}}function g(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r),r>i&&(r=i)):r=i;var a=t.length;if(a%2!==0)throw new Error("Invalid hex string");r>a/2&&(r=a/2);for(var o=0;r>o;o++){var s=parseInt(t.substr(2*o,2),16);if(isNaN(s))throw new Error("Invalid hex string");e[n+o]=s}return o}function y(e,t,n,r){return q(U(t,e.length-n),e,n,r)}function v(e,t,n,r){return q(R(t),e,n,r)}function b(e,t,n,r){return v(e,t,n,r)}function w(e,t,n,r){return q(B(t),e,n,r)}function x(e,t,n,r){return q(H(t,e.length-n),e,n,r)}function A(e,t,n){return 0===t&&n===e.length?z.fromByteArray(e):z.fromByteArray(e.slice(t,n))}function j(e,t,n){var r="",i="";n=Math.min(e.length,n);for(var a=t;n>a;a++)e[a]<=127?(r+=F(i)+String.fromCharCode(e[a]),i=""):i+="%"+e[a].toString(16);return r+F(i)}function S(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(127&e[i]);return r}function C(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;n>i;i++)r+=String.fromCharCode(e[i]);return r}function E(e,t,n){var r=e.length;(!t||0>t)&&(t=0),(!n||0>n||n>r)&&(n=r);for(var i="",a=t;n>a;a++)i+=L(e[a]);return i}function T(e,t,n){for(var r=e.slice(t,n),i="",a=0;ae)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function _(e,t,n,i,a,o){if(!r.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>a||o>t)throw new RangeError("value is out of bounds");if(n+i>e.length)throw new RangeError("index out of range")}function O(e,t,n,r){0>t&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-n,2);a>i;i++)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function $(e,t,n,r){0>t&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-n,4);a>i;i++)e[n+i]=t>>>8*(r?i:3-i)&255}function I(e,t,n,r,i,a){if(t>i||a>t)throw new RangeError("value is out of bounds");if(n+r>e.length)throw new RangeError("index out of range");if(0>n)throw new RangeError("index out of range")}function D(e,t,n,r,i){return i||I(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),V.write(e,t,n,r,23,4),n+4}function P(e,t,n,r,i){return i||I(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),V.write(e,t,n,r,52,8),n+8}function M(e){if(e=N(e).replace(X,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function N(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function L(e){return 16>e?"0"+e.toString(16):e.toString(16)}function U(e,t){t=t||1/0;for(var n,r=e.length,i=null,a=[],o=0;r>o;o++){if(n=e.charCodeAt(o),n>55295&&57344>n){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(56320>n){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&((t-=3)>-1&&a.push(239,191,189),i=null);if(128>n){if((t-=1)<0)break;a.push(n)}else if(2048>n){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(65536>n){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(2097152>n))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function R(e){for(var t=[],n=0;n>8,i=n%256,a.push(i),a.push(r);return a}function B(e){return z.toByteArray(M(e))}function q(e,t,n,r){for(var i=0;r>i&&!(i+n>=t.length||i>=e.length);i++)t[i+n]=e[i];return i}function F(e){try{return decodeURIComponent(e)}catch(t){return String.fromCharCode(65533)}}var z=e("base64-js"),V=e("ieee754"),W=e("is-array");n.Buffer=r,n.SlowBuffer=d,n.INSPECT_MAX_BYTES=50,r.poolSize=8192;var J=1073741823,Y={};r.TYPED_ARRAY_SUPPORT=function(){try{var e=new ArrayBuffer(0),t=new Uint8Array(e);return t.foo=function(){return 42},42===t.foo()&&"function"==typeof t.subarray&&0===new Uint8Array(1).subarray(1,1).byteLength}catch(n){return!1}}(),r.isBuffer=function(e){return!(null==e||!e._isBuffer)},r.compare=function(e,t){if(!r.isBuffer(e)||!r.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,i=t.length,a=0,o=Math.min(n,i);o>a&&e[a]===t[a];)++a;return a!==o&&(n=e[a],i=t[a]),i>n?-1:n>i?1:0},r.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},r.concat=function(e,t){if(!W(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new r(0);if(1===e.length)return e[0];var n;if(void 0===t)for(t=0,n=0;nt&&(t=0),n>this.length&&(n=this.length),t>=n)return"";for(;;)switch(e){case"hex":return E(this,t,n);case"utf8":case"utf-8":return j(this,t,n);case"ascii":return S(this,t,n);case"binary":return C(this,t,n);case"base64":return A(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}},r.prototype.equals=function(e){if(!r.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:0===r.compare(this,e)},r.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},r.prototype.compare=function(e){if(!r.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:r.compare(this,e)},r.prototype.indexOf=function(e,t){function n(e,t,n){for(var r=-1,i=0;n+i2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(r.isBuffer(e))return n(this,e,t);if("number"==typeof e)return r.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):n(this,[e],t);throw new TypeError("val must be string, number or Buffer")},r.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},r.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},r.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(n)?(n=0|n,void 0===r&&(r="utf8")):(r=n,n=void 0);else{var i=r;r=t,t=0|n,n=i}var a=this.length-t;if((void 0===n||n>a)&&(n=a),e.length>0&&(0>n||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return g(this,e,t,n);case"utf8":case"utf-8":return y(this,e,t,n);case"ascii":return v(this,e,t,n);case"binary":return b(this,e,t,n);case"base64":return w(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},r.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),e>t&&(t=e);var i;if(r.TYPED_ARRAY_SUPPORT)i=r._augment(this.subarray(e,t));else{var a=t-e;i=new r(a,void 0);for(var o=0;a>o;o++)i[o]=this[o+e]; -}return i.length&&(i.parent=this.parent||this),i},r.prototype.readUIntLE=function(e,t,n){e=0|e,t=0|t,n||k(e,t,this.length);for(var r=this[e],i=1,a=0;++a0&&(i*=256);)r+=this[e+--t]*i;return r},r.prototype.readUInt8=function(e,t){return t||k(e,1,this.length),this[e]},r.prototype.readUInt16LE=function(e,t){return t||k(e,2,this.length),this[e]|this[e+1]<<8},r.prototype.readUInt16BE=function(e,t){return t||k(e,2,this.length),this[e]<<8|this[e+1]},r.prototype.readUInt32LE=function(e,t){return t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},r.prototype.readUInt32BE=function(e,t){return t||k(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},r.prototype.readIntLE=function(e,t,n){e=0|e,t=0|t,n||k(e,t,this.length);for(var r=this[e],i=1,a=0;++a=i&&(r-=Math.pow(2,8*t)),r},r.prototype.readIntBE=function(e,t,n){e=0|e,t=0|t,n||k(e,t,this.length);for(var r=t,i=1,a=this[e+--r];r>0&&(i*=256);)a+=this[e+--r]*i;return i*=128,a>=i&&(a-=Math.pow(2,8*t)),a},r.prototype.readInt8=function(e,t){return t||k(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},r.prototype.readInt16LE=function(e,t){t||k(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},r.prototype.readInt16BE=function(e,t){t||k(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},r.prototype.readInt32LE=function(e,t){return t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},r.prototype.readInt32BE=function(e,t){return t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},r.prototype.readFloatLE=function(e,t){return t||k(e,4,this.length),V.read(this,e,!0,23,4)},r.prototype.readFloatBE=function(e,t){return t||k(e,4,this.length),V.read(this,e,!1,23,4)},r.prototype.readDoubleLE=function(e,t){return t||k(e,8,this.length),V.read(this,e,!0,52,8)},r.prototype.readDoubleBE=function(e,t){return t||k(e,8,this.length),V.read(this,e,!1,52,8)},r.prototype.writeUIntLE=function(e,t,n,r){e=+e,t=0|t,n=0|n,r||_(this,e,t,n,Math.pow(2,8*n),0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+n},r.prototype.writeUInt8=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,1,255,0),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=e,t+1},r.prototype.writeUInt16LE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e,this[t+1]=e>>>8):O(this,e,t,!0),t+2},r.prototype.writeUInt16BE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=e):O(this,e,t,!1),t+2},r.prototype.writeUInt32LE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e):$(this,e,t,!0),t+4},r.prototype.writeUInt32BE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e):$(this,e,t,!1),t+4},r.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);_(this,e,t,n,i-1,-i)}var a=0,o=1,s=0>e?1:0;for(this[t]=255&e;++a>0)-s&255;return t+n},r.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t=0|t,!r){var i=Math.pow(2,8*n-1);_(this,e,t,n,i-1,-i)}var a=n-1,o=1,s=0>e?1:0;for(this[t+a]=255&e;--a>=0&&(o*=256);)this[t+a]=(e/o>>0)-s&255;return t+n},r.prototype.writeInt8=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,1,127,-128),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=e,t+1},r.prototype.writeInt16LE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=e,this[t+1]=e>>>8):O(this,e,t,!0),t+2},r.prototype.writeInt16BE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=e):O(this,e,t,!1),t+2},r.prototype.writeInt32LE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,4,2147483647,-2147483648),r.TYPED_ARRAY_SUPPORT?(this[t]=e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):$(this,e,t,!0),t+4},r.prototype.writeInt32BE=function(e,t,n){return e=+e,t=0|t,n||_(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),r.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e):$(this,e,t,!1),t+4},r.prototype.writeFloatLE=function(e,t,n){return D(this,e,t,!0,n)},r.prototype.writeFloatBE=function(e,t,n){return D(this,e,t,!1,n)},r.prototype.writeDoubleLE=function(e,t,n){return P(this,e,t,!0,n)},r.prototype.writeDoubleBE=function(e,t,n){return P(this,e,t,!1,n)},r.prototype.copy=function(e,t,n,i){if(n||(n=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&n>i&&(i=n),i===n)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>n||n>=this.length)throw new RangeError("sourceStart out of bounds");if(0>i)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-ta||!r.TYPED_ARRAY_SUPPORT)for(var o=0;a>o;o++)e[o+t]=this[o+n];else e._set(this.subarray(n,n+a),t);return a},r.prototype.fill=function(e,t,n){if(e||(e=0),t||(t=0),n||(n=this.length),t>n)throw new RangeError("end < start");if(n!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>n||n>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof e)for(r=t;n>r;r++)this[r]=e;else{var i=U(e.toString()),a=i.length;for(r=t;n>r;r++)this[r]=i[r%a]}return this}},r.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(r.TYPED_ARRAY_SUPPORT)return new r(this).buffer;for(var e=new Uint8Array(this.length),t=0,n=e.length;n>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=r.prototype;r._augment=function(e){return e.constructor=r,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var X=/[^+\/0-9A-z\-]/g},{"base64-js":12,ieee754:13,"is-array":14}],12:[function(e,t,n){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===o||t===p?62:t===s||t===h?63:l>t?-1:l+10>t?t-l+26+26:c+26>t?t-c:u+26>t?t-u+26:void 0}function n(e){function n(e){u[p++]=e}var r,i,o,s,l,u;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var c=e.length;l="="===e.charAt(c-2)?2:"="===e.charAt(c-1)?1:0,u=new a(3*e.length/4-l),o=l>0?e.length-4:e.length;var p=0;for(r=0,i=0;o>r;r+=4,i+=3)s=t(e.charAt(r))<<18|t(e.charAt(r+1))<<12|t(e.charAt(r+2))<<6|t(e.charAt(r+3)),n((16711680&s)>>16),n((65280&s)>>8),n(255&s);return 2===l?(s=t(e.charAt(r))<<2|t(e.charAt(r+1))>>4,n(255&s)):1===l&&(s=t(e.charAt(r))<<10|t(e.charAt(r+1))<<4|t(e.charAt(r+2))>>2,n(s>>8&255),n(255&s)),u}function i(e){function t(e){return r.charAt(e)}function n(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var i,a,o,s=e.length%3,l="";for(i=0,o=e.length-s;o>i;i+=3)a=(e[i]<<16)+(e[i+1]<<8)+e[i+2],l+=n(a);switch(s){case 1:a=e[e.length-1],l+=t(a>>2),l+=t(a<<4&63),l+="==";break;case 2:a=(e[e.length-2]<<8)+e[e.length-1],l+=t(a>>10),l+=t(a>>4&63),l+=t(a<<2&63),l+="="}return l}var a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="+".charCodeAt(0),s="/".charCodeAt(0),l="0".charCodeAt(0),u="a".charCodeAt(0),c="A".charCodeAt(0),p="-".charCodeAt(0),h="_".charCodeAt(0);e.toByteArray=n,e.fromByteArray=i}("undefined"==typeof n?this.base64js={}:n)},{}],13:[function(e,t,n){n.read=function(e,t,n,r,i){var a,o,s=8*i-r-1,l=(1<>1,c=-7,p=n?i-1:0,h=n?-1:1,f=e[t+p];for(p+=h,a=f&(1<<-c)-1,f>>=-c,c+=s;c>0;a=256*a+e[t+p],p+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=r;c>0;o=256*o+e[t+p],p+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:(f?-1:1)*(1/0);o+=Math.pow(2,r),a-=u}return(f?-1:1)*o*Math.pow(2,a-r)},n.write=function(e,t,n,r,i,a){var o,s,l,u=8*a-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:a-1,d=r?1:-1,m=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),t+=o+p>=1?h/l:h*Math.pow(2,1-p),t*l>=2&&(o++,l/=2),o+p>=c?(s=0,o=c):o+p>=1?(s=(t*l-1)*Math.pow(2,i),o+=p):(s=t*Math.pow(2,p-1)*Math.pow(2,i),o=0));i>=8;e[n+f]=255&s,f+=d,s/=256,i-=8);for(o=o<0;e[n+f]=255&o,f+=d,o/=256,u-=8);e[n+f-d]|=128*m}},{}],14:[function(e,t,n){var r=Array.isArray,i=Object.prototype.toString;t.exports=r||function(e){return!!e&&"[object Array]"==i.call(e)}},{}],15:[function(e,t,n){function r(){if(!s){s=!0;for(var e,t=o.length;t;){e=o,o=[];for(var n=-1;++n0&&t-1 in e}function i(e,t,n){if(ee.isFunction(t))return ee.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ee.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(le.test(t))return ee.filter(t,e,n);t=ee.filter(t,e)}return ee.grep(e,function(e){return J.call(t,e)>=0!==n})}function a(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function o(e){var t=me[e]={};return ee.each(e.match(de)||[],function(e,n){t[n]=!0}),t}function s(){G.removeEventListener("DOMContentLoaded",s,!1),t.removeEventListener("load",s,!1),ee.ready()}function l(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=ee.expando+l.uid++}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(xe,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:we.test(n)?ee.parseJSON(n):n}catch(i){}be.set(e,t,n)}else n=void 0;return n}function c(){return!0}function p(){return!1}function h(){try{return G.activeElement}catch(e){}}function f(e,t){return ee.nodeName(e,"table")&&ee.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function d(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function m(e){var t=Le.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function g(e,t){for(var n=0,r=e.length;r>n;n++)ve.set(e[n],"globalEval",!t||ve.get(t[n],"globalEval"))}function y(e,t){var n,r,i,a,o,s,l,u;if(1===t.nodeType){if(ve.hasData(e)&&(a=ve.access(e),o=ve.set(t,a),u=a.events)){delete o.handle,o.events={};for(i in u)for(n=0,r=u[i].length;r>n;n++)ee.event.add(t,i,u[i][n])}be.hasData(e)&&(s=be.access(e),l=ee.extend({},s),be.set(t,l))}}function v(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ee.nodeName(e,t)?ee.merge([e],n):n}function b(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ce.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function w(e,n){var r,i=ee(n.createElement(e)).appendTo(n.body),a=t.getDefaultComputedStyle&&(r=t.getDefaultComputedStyle(i[0]))?r.display:ee.css(i[0],"display");return i.detach(),a}function x(e){var t=G,n=Be[e];return n||(n=w(e,t),"none"!==n&&n||(He=(He||ee("