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("
").appendTo(this.div);this.controls=this.theme.getControls().appendTo(this.div),this.row_holder.on("change",function(){b.refresh()}),this.rows=[],this.addControls(),this.refresh(),this.options.collapsed&&b.toggle_button.trigger("click")},addControls:function(){var b=this;this.toggle_button=this.theme.getButton("Toggle All").appendTo(this.title_controls).css({marginLeft:20}).addClass("toggle-all").attr("data-toggle","shown").on("click",function(c){return"shown"===a(this).attr("data-toggle")?(a(this).attr("data-toggle","hidden"),b.options.table_format?(b.row_holder.hide(),b.controls.hide()):a('.toggle[data-toggle="shown"]',b.row_holder).trigger("click")):(a(this).attr("data-toggle","shown"),b.options.table_format?(b.row_holder.show(),b.controls.show()):a('.toggle[data-toggle="hidden"]',b.row_holder).trigger("click")),c.stopPropagation(),c.preventDefault(),!1}),this.add_row_button=this.theme.getButton("Add "+(this.schema.items.title||this.schema.items.id||this.schema.title||this.schema.id||this.key)).on("click",function(){b.addRow(),b.refresh(),b.div.trigger("change")}).appendTo(b.controls),this.delete_last_row_button=this.theme.getButton("Delete Last "+(this.schema.items.title||this.schema.items.id||this.schema.title||this.schema.id||this.key)).on("click",function(){var a=b.getValue();a.pop(),b.setValue(a),b.div.trigger("change")}).appendTo(b.controls),this.remove_all_rows_button=this.theme.getButton("Delete All Rows").on("click",function(){b.setValue([]),b.div.trigger("change")}).appendTo(b.controls),this.row_holder.on("sortupdate",function(c,d){var e=d.oldindex,f=d.item.index();if(c.stopPropagation(),c.preventDefault(),e!=f){var g=b.getValue(),h=[],i=g[e],j=e>f;a.each(g,function(a,b){a!==e&&(j?(a===f&&h.push(i),h.push(b)):(h.push(b),a===f&&h.push(i)))}),d.item.detach(),e?b.row_holder.children().eq(e-1).after(d.item):b.row_holder.children().eq(0).before(d.item),b.setValue(h),b.div.trigger("change")}})},destroy:function(){this.empty(),this.rows=null,this._super()},addRow:function(b){var c=this,d=this.rows.length,e=a.extend({},c.schema.items);e.title=(e.title||e.id||c.schema.title||c.schema.id||c.key)+" "+d;var f=a.jsoneditor.getEditorClass(e,c.jsoneditor);c.rows[d]=new f({jsoneditor:c.jsoneditor,schema:e,container:c.row_holder,path:c.path+"."+d,parent:c,table_row:c.options.table_format}),c.rows[d].delete_button=this.theme.getButton("Delete "+(c.schema.items.title||c.schema.items.id||c.schema.title||c.schema.id||c.key)).addClass("delete").data("i",d).on("click",function(){var b=a(this).data("i"),d=c.getValue(),e=[];a.each(d,function(a,c){a!==b&&e.push(c)}),c.setValue(e),c.div.trigger("change")}),c.rows[d].moveup_button=this.theme.getButton("Move up").data("i",d).addClass("moveup").on("click",function(){var b=a(this).data("i");if(!(0>=b)){var d=c.getValue(),e=d[b-1];d[b-1]=d[b],d[b]=e,c.setValue(d),c.div.trigger("change")}}),c.rows[d].movedown_button=this.theme.getButton("Move down").addClass("movedown").data("i",d).on("click",function(){var b=a(this).data("i"),d=c.getValue();if(!(b>=d.length-1)){var e=d[b+1];d[b+1]=d[b],d[b]=e,c.setValue(d),c.div.trigger("change")}});var g;if(g=this.options.table_format?this.theme.getControls().appendTo(this.theme.getTableCell().appendTo(c.rows[d].div)):c.rows[d].title_controls,g.append(c.rows[d].delete_button),d&&g.append(c.rows[d].moveup_button),g.append(c.rows[d].movedown_button),this.options.table_format){var h=this.rows[this.rows.length-1];a("label,h1,h2,h3,h4,h5,h6",h.div).remove(),a(".well",h.div).removeClass("well").css({marginLeft:0,paddingLeft:0}),a(".input-xxlarge",h.div).removeClass("input-xxlarge").css("margin-bottom",0),a("select",h.div).css("margin-bottom",0)}b&&c.rows[d].setValue(b)},refresh:function(){var b=this;this.value=[];var c=this.schema.minItems&&this.schema.minItems>=this.rows.length;a.each(this.rows,function(a,d){a===b.rows.length-1?d.movedown_button.hide():d.movedown_button.show(),c?d.delete_button.hide():d.delete_button.show(),b.value[a]=d.getValue()}),this.value.length?1===this.value.length?(this.remove_all_rows_button.hide(),c?this.delete_last_row_button.hide():this.delete_last_row_button.show()):c?(this.delete_last_row_button.hide(),this.delete_last_row_button.hide()):(this.delete_last_row_button.show(),this.remove_all_rows_button.show()):(this.delete_last_row_button.hide(),this.remove_all_rows_button.hide()),this.schema.maxItems&&this.schema.maxItems<=this.rows.length?this.add_row_button.hide():this.add_row_button.show(),this.table&&(this.value.length?this.table.show():this.table.hide())},empty:function(){var b=this;a.each(this.rows,function(a,c){c.destroy(),b.rows[a]=null}),b.rows=[]},setValue:function(b){if(b=b||[],this.schema.minItems)for(;b.lengththis.schema.maxItems&&(b=b.slice(0,this.schema.maxItems));var c=this;a.each(b,function(a,b){c.rows[a]?c.rows[a].setValue(b):c.addRow(b)});for(var d=b.length;d"+c.theme.getTableCell().html(" ")+"",forcePlaceholderSize:!0}))}}),a.jsoneditor.editors.table=a.jsoneditor.editors.array.extend({initialize:function(){this.options.table_format=!0,this._super()}}),a.jsoneditor.AbstractTheme=b.extend({getFormInputField:function(b){return a("")},getFormInputLabel:function(b){return a("