diff --git a/.gitignore b/.gitignore index 2ccbe4656..6bdbe62b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /node_modules/ +/.idea/ diff --git a/dist/jquery.jsoneditor.js b/dist/jquery.jsoneditor.js index 847df944d..57395b9ee 100644 --- a/dist/jquery.jsoneditor.js +++ b/dist/jquery.jsoneditor.js @@ -289,8 +289,18 @@ // Set the min/max for format="range" if(this.input_type === 'range') { - this.input.attr('min',(this.schema.minimum || 0)); - this.input.attr('max',(this.schema.maximum || 100)); + var min = this.schema.minimum || 0; + var max = this.schema.maximum || 100; + + // If multipleOf is set, make sure minimum and maximum are multiples of multipleOf + 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; + this.input.attr('step',this.schema.multipleOf); + } + + this.input.attr('min',min); + this.input.attr('max',max); this.input.css({ marginBottom: '10px' }); diff --git a/dist/jquery.jsoneditor.min.js b/dist/jquery.jsoneditor.min.js index a0f0aa7b0..3dc8a2af6 100644 --- a/dist/jquery.jsoneditor.min.js +++ b/dist/jquery.jsoneditor.min.js @@ -1 +1 @@ -!function(a){var b;!function(){var a=!1,c=/xyz/.test(function(){})?/\b_super\b/:/.*/;b=function(){},b.extend=function(b){function d(){!a&&this.init&&this.init.apply(this,arguments)}var e=this.prototype;a=!0;var f=new this;a=!1;for(var g in b)f[g]="function"==typeof b[g]&&"function"==typeof e[g]&&c.test(b[g])?function(a,b){return function(){var c=this._super;this._super=e[a];var d=b.apply(this,arguments);return this._super=c,d}}(g,b[g]):b[g];return d.prototype=f,d.prototype.constructor=d,d.extend=arguments.callee,d}}(),a.fn.jsoneditor=function(b){var c,d=a(this);if("value"===b)return c=d.data("jsoneditor"),c?arguments.length>1?(c.root.setValue(arguments[1]),this):c.root.getValue():{};if("destroy"===b)return(c=d.data("jsoneditor"))?(c.schema=null,c.options=null,c.root.destroy(),c=null,d.data("jsoneditor",null),this):this;b=b||{};var e=b.schema,f=b.startval,g=a.jsoneditor.getEditorClass(e),c={schema:e,options:b,definitions:{},theme:new a.jsoneditor.themes[b.theme||"bootstrap2"]};return d.data("jsoneditor",c),c.root=new g({jsoneditor:d,schema:e,container:d}),f&&c.root.setValue(f),this},a.jsoneditor={template:window.swig,editors:{},themes:{},expandSchema:function(b,c){if(b.$ref){if(!b.$ref.match(/^#\/definitions\//g))throw"JSON Editor only supports local references to schema definitions defined for the root node";var d=b.$ref.substr(14),e=c.data("jsoneditor").definitions;if(!e[d])throw"Schema definition not found - "+b.$ref;return a.extend(!0,{},e[d])}return b},getEditorClass:function(b,c){b=a.jsoneditor.expandSchema(b,c);var c=b.editor||b.type;if(!a.jsoneditor.editors[c])throw"Unknown editor "+c;return a.jsoneditor.editors[c]}},a.jsoneditor.AbstractEditor=b.extend({"default":null,init:function(b){if(this.container=b.container,this.jsoneditor=b.jsoneditor,this.schema=b.schema,this.schema=a.jsoneditor.expandSchema(this.schema,this.jsoneditor),this.theme=this.jsoneditor.data("jsoneditor").theme,this.schema.definitions){var c=this.jsoneditor.data("jsoneditor").definitions;a.each(this.schema.definitions,function(a,b){c[a]=b})}this.options=a.extend(!0,{},this.options||{},this.schema.options||{},b),b.path||this.schema.id||(this.schema.id="root"),this.path=b.path||this.schema.id,this.key=this.path.split(".").pop(),this.parent=b.parent,this.value=null;var d=b.tag||"div";this.div="td"===d?this.theme.getTableCell():a("<"+d+">"),this.div.appendTo(this.container),this.schema.description&&this.div.attr("title",this.schema.description),this.div.data("editor",this),this.div.attr("data-schematype",this.schema.type),this.schema.id&&this.div.attr("data-schemaid",this.schema.id),this.initialize(),this.setValue(this.schema.default||this.default)},initialize:function(){},getValue:function(){return this.value},setValue:function(a){this.value=a},destroy:function(){this.div.remove(),this.value=null,this.container=null,this.jsoneditor=null,this.schema=null,this.path=null,this.key=null,this.parent=null,this.div=null}}),a.jsoneditor.editors.string=a.jsoneditor.AbstractEditor.extend({"default":"",initialize:function(){this.value="";var b=this;this.label=this.theme.getFormInputLabel(this.schema.title||this.schema.id||this.key).appendTo(this.div),this.schema.enum?(this.input_type="select",this.input=this.theme.getSelectInput().css("width","auto"),a.each(this.schema.enum,function(a,c){b.input.append(b.theme.getSelectOption(c))})):this.options.textarea?(this.input_type="textarea",this.input=this.theme.getTextareaInput()):(this.input_type=this.schema.format?this.schema.format:"text",this.input=this.theme.getFormInputField(this.input_type),"range"===this.input_type&&(this.input.attr("min",this.schema.minimum||0),this.input.attr("max",this.schema.maximum||100),this.input.css({marginBottom:"10px"}))),this.input.attr("data-schemapath",this.path).attr("data-schematype",this.schema.type).on("change keyup",function(c){if(b.schema.template)return a(this).val(b.value),void 0;var d=a(this).val(),e=b.sanitize(d);d!==e&&(c.preventDefault(),c.stopPropagation(),a(this).val(e)),b.updateValue()}).appendTo(this.div),"range"===this.input_type&&(this.output=this.theme.getFormOutput().insertAfter(this.input)),this.schema.template?this.setupTemplate():this.updateValue()},updateValue:function(){this.value=this.input.val(),this.output&&this.output.val(this.value)},destroy:function(){if(this.vars){var b=this;a.each(this.vars,function(a,c){c.root.off("change",'[data-schemapath="'+c.adjusted_path+'"]',b.var_listener)}),b.var_listener=null}this.template=null,this.vars=null,this._super()},setValue:function(a,b){if(!this.template||b){a=a||"";var c=this.sanitize(a);this.schema.enum&&this.schema.enum.indexOf(c)<0&&(c=this.schema.enum[0]),this.input.val(c),this.updateValue(),b&&this.input.trigger("change")}},setupTemplate:function(){if(this.input.addClass("disabled"),this.template=a.jsoneditor.template.compile(this.schema.template),this.vars={},this.schema.vars){var b=this;this.var_listener=function(){window.setTimeout(function(){b.refresh()})},a.each(this.schema.vars,function(a,c){var d=c.split("."),e=d.shift(),f=b.div.closest('[data-schemaid="'+e+'"]');if(!f.length)throw"Unknown template variable path "+c;var g=f.data("editor").path+"."+d.join(".");b.vars[a]={root:f,path:d,adjusted_path:g},f.on("change",'[data-schemapath="'+g+'"]',b.var_listener)}),b.var_listener()}},sanitize:function(a){return a},refresh:function(){if(this.template){var b={};a.each(this.vars,function(a,c){for(var d=c.root.data("editor").getValue(),e=-1,f=null;;){if(e++,e>=c.path.length){f=d;break}if(!d||"undefined"==typeof d[c.path[e]])break;d=d[c.path[e]]}b[a]=f}),this.setValue(this.template(b),!0)}}}),a.jsoneditor.editors.number=a.jsoneditor.editors.string.extend({sanitize:function(a){return(a+"").replace(/[^0-9\.\-]/g,"")},getValue:function(){return 1*this.value}}),a.jsoneditor.editors.integer=a.jsoneditor.editors.string.extend({sanitize:function(a){return a+="",a.replace(/[^0-9\-]/g,"")},getValue:function(){return 1*this.value}}),a.jsoneditor.editors.boolean=a.jsoneditor.AbstractEditor.extend({"default":!1,initialize:function(){var b=this;this.value=!1,this.input_holder=a("
").css({padding:"10px 0"}).appendTo(this.div),this.label=this.theme.getFormInputLabel(this.schema.title||this.schema.id||this.key),this.input=this.theme.getFormInputField("checkbox"),this.theme.addFormInputControl(this.input_holder,this.label,this.input),this.input.attr("data-schemapath",this.path).attr("data-schematype",this.schema.type).on("change",function(){b.updateValue()})},updateValue:function(){this.value=this.input.prop("checked")},setValue:function(a){a?this.input.prop("checked",!0):this.input.prop("checked",!1),this.updateValue()}}),a.jsoneditor.editors.object=a.jsoneditor.AbstractEditor.extend({"default":{},init:function(a){a.table_row&&(a.tag="tr"),this._super(a)},initialize:function(){var b=this;this.value={},this.options.table_row?this.editor_holder=this.div:(this.theme.indentDiv(this.div),this.title=this.theme.getTitle(this.schema.title||this.schema.id||this.key).appendTo(this.div),this.title_controls=this.theme.getTitleControls().appendTo(this.title),this.toggle_button=this.theme.getButton("Toggle").addClass("toggle").appendTo(this.title_controls).attr("data-toggle","shown").css({marginLeft:20}).on("click",function(c){return"hidden"===a(this).attr("data-toggle")?(a(this).attr("data-toggle","shown"),b.editor_holder.show(300)):(a(this).attr("data-toggle","hidden"),b.editor_holder.hide(300)),c.stopPropagation(),c.preventDefault(),!1}),this.editor_holder=this.theme.getChildEditorHolder().appendTo(this.div)),this.editors={},a.each(this.schema.properties,function(c,d){var e=a.jsoneditor.getEditorClass(d,b.jsoneditor);b.editors[c]=new e({jsoneditor:b.jsoneditor,schema:d,container:b.editor_holder,path:b.path+"."+c,parent:b,tag:b.options.table_row?"td":"div"})}),b.editor_holder.on("change",function(){b.refresh()}),this.refresh(),this.options.collapsed&&this.toggle_button&&this.toggle_button.trigger("click")},refresh:function(){var b=this;this.value={},a.each(this.editors,function(a,c){b.value[a]=c.getValue()})},setValue:function(b){b=b||{},a.each(this.editors,function(a,c){"undefined"!=typeof b[a]&&c.setValue(b[a])}),this.refresh()},getValue:function(){return a.extend({},this.value)},destroy:function(){var b=this;a.each(this.editors,function(a,c){c.destroy(),b.editors[a]=null}),b.editors=null,this._super()}}),a.jsoneditor.editors.array=a.jsoneditor.AbstractEditor.extend({"default":[],initialize:function(){var b=this;if(this.value=[],this.title=this.theme.getTitle(this.schema.title||this.schema.id||this.key).addClass("title").appendTo(this.div),this.title_controls=this.theme.getTitleControls().appendTo(this.title),this.options.table_format){this.table=this.theme.getTable().appendTo(this.div);var c=[];a.each(this.schema.items.properties,function(a,b){c.push(b.title||b.id||a)}),c.push("actions"),this.theme.addTableHeader(this.table,c),this.row_holder=this.theme.addTableBody(this.table)}else this.theme.indentChildEditor(this.div),this.row_holder=a("