From a6fc14e7bb564375e537acf2e7e74ecb698b7d11 Mon Sep 17 00:00:00 2001 From: Derick Bailey Date: Thu, 10 Nov 2011 13:02:20 -0600 Subject: [PATCH] bump version to v0.4.1, release notes, and minified --- backbone.modelbinding.js | 4 ++-- backbone.modelbinding.min.js | 28 +++++++++++++++------------- readme.md | 12 +++++++++++- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/backbone.modelbinding.js b/backbone.modelbinding.js index b7fe230..7997683 100644 --- a/backbone.modelbinding.js +++ b/backbone.modelbinding.js @@ -1,4 +1,4 @@ -// Backbone.ModelBinding v0.4.0 +// Backbone.ModelBinding v0.4.1 // // Copyright (C)2011 Derick Bailey, Muted Solutions, LLC // Distributed Under MIT Liscene @@ -12,7 +12,7 @@ Backbone.ModelBinding = (function(Backbone, _, $){ modelBinding = { - version: "0.4.0", + version: "0.4.1", bind: function(view, options){ view.modelBinder = new ModelBinder(view, options); diff --git a/backbone.modelbinding.min.js b/backbone.modelbinding.min.js index ef34b07..36aa8a6 100644 --- a/backbone.modelbinding.min.js +++ b/backbone.modelbinding.min.js @@ -1,19 +1,21 @@ -// Backbone.ModelBinding v0.4.0 +// Backbone.ModelBinding v0.4.1 // // Copyright (C)2011 Derick Bailey, Muted Solutions, LLC // Distributed Under MIT Liscene // // Documentation and Full Licence Availabe at: // http://github.com/derickbailey/backbone.modelbinding -Backbone.ModelBinding=function(j,i,l){modelBinding={version:"0.4.0",bind:function(a,d){a.modelBinder=new ModelBinder(a,d);a.modelBinder.bind()},unbind:function(a){a.modelBinder&&a.modelBinder.unbind()}};ModelBinder=function(a,d){this.config=new modelBinding.Configuration(d);this.modelBindings=[];this.elementBindings=[];this.bind=function(){var c=modelBinding.Conventions,b;for(b in c)if(c.hasOwnProperty(b)){var e=c[b];e.handler.bind.call(this,e.selector,a,a.model,this.config)}};this.unbind=function(){i.each(this.elementBindings, -function(c){c.element.unbind(c.eventName,c.callback)});i.each(this.modelBindings,function(c){c.model.unbind(c.eventName,c.callback)})};this.registerModelBinding=function(c,b,e){b="change:"+b;c.bind(b,e);this.modelBindings.push({model:c,eventName:b,callback:e})};this.registerElementBinding=function(c,b){c.bind("change",b);this.elementBindings.push({element:c,eventName:"change",callback:b})}};modelBinding.Configuration=function(a){this.bindingAttrConfig={};i.extend(this.bindingAttrConfig,modelBinding.Configuration.bindindAttrConfig, -a);if(this.bindingAttrConfig.all){a=this.bindingAttrConfig.all;delete this.bindingAttrConfig.all;for(var d in this.bindingAttrConfig)this.bindingAttrConfig.hasOwnProperty(d)&&(this.bindingAttrConfig[d]=a)}this.getBindingAttr=function(c){return this.bindingAttrConfig[c]};this.getBindingValue=function(c,b){var e=this.getBindingAttr(b);return c.attr(e)}};modelBinding.Configuration.bindindAttrConfig={text:"id",textarea:"id",password:"id",radio:"name",checkbox:"id",select:"id"};modelBinding.Configuration.store= -function(){modelBinding.Configuration.originalConfig=i.clone(modelBinding.Configuration.bindindAttrConfig)};modelBinding.Configuration.restore=function(){modelBinding.Configuration.bindindAttrConfig=modelBinding.Configuration.originalConfig};modelBinding.Configuration.configureBindingAttributes=function(a){a.all&&(this.configureAllBindingAttributes(a.all),delete a.all);i.extend(modelBinding.Configuration.bindindAttrConfig,a)};modelBinding.Configuration.configureAllBindingAttributes=function(a){var d= -modelBinding.Configuration.bindindAttrConfig;d.text=a;d.textarea=a;d.password=a;d.radio=a;d.checkbox=a;d.select=a};StandardBinding=function(){var a={},d=function(c){var b=c[0].tagName.toLowerCase();if(b=="input"&&(b=c.attr("type"),b==void 0||b==""))b="text";return b};a.bind=function(c,b,e,a){var f=this;b.$(c).each(function(){var c=b.$(this),h=d(c),k=a.getBindingValue(c,h);f.registerModelBinding(e,k,function(f,b){c.val(b)});f.registerElementBinding(c,function(c){var f={};f[k]=b.$(c.target).val();e.set(f)}); -h=e.get(k);typeof h!=="undefined"&&h!==null&&c.val(h)})};return a}(j);SelectBoxBinding=function(){return{bind:function(a,d,c,b){var e=this;d.$(a).each(function(){var a=d.$(this),f=b.getBindingValue(a,"select");e.registerModelBinding(c,f,function(c,f){a.val(f)});e.registerElementBinding(a,function(a){var b={},a=d.$(a.target);b[f]=a.val();b[f+"_text"]=a.find(":selected").text();c.set(b)});var g=c.get(f);typeof g!=="undefined"&&g!==null&&(a.val(g),a.val()!=g&&(g={},g[f]=a.val(),c.set(g)))})}}}(j);RadioGroupBinding= -function(){return{bind:function(a,d,c,b){var e=this,m=[];d.$(a).each(function(){var a=d.$(this),g=b.getBindingValue(a,"radio");if(!m[g]){m[g]=true;var h=b.getBindingAttr("radio");e.registerModelBinding(c,g,function(a,c){d.$("input[type=radio]["+h+"="+g+"][value="+c+"]").attr("checked","checked")});var k=function(a){a=d.$(a.currentTarget);if(a.is(":checked")){var b={};b[g]=a.val();c.set(b)}};d.$("input[type=radio]["+h+"="+g+"]").each(function(){var a=l(this);e.registerElementBinding(a,k)});a=c.get(g); -typeof a!=="undefined"&&a!==null&&d.$("input[type=radio]["+h+"="+g+"][value="+a+"]").attr("checked","checked")}})}}}(j);CheckboxBinding=function(){return{bind:function(a,d,c,b){var e=this;d.$(a).each(function(){var a=d.$(this);b.getBindingAttr("checkbox");var f=b.getBindingValue(a,"checkbox");e.registerModelBinding(c,f,function(c,b){b?a.attr("checked","checked"):a.removeAttr("checked")});e.registerElementBinding(a,function(a){var b={},a=d.$(a.target).is(":checked")?true:false;b[f]=a;c.set(b)});if(c.attributes.hasOwnProperty(f)){var g= -c.get(f);typeof g!=="undefined"&&g!==null&&g!=false?a.attr("checked","checked"):a.removeAttr("checked")}})}}}(j);DataBindBinding=function(a,d,c){var b={"default":""};modelBinding.Configuration.dataBindSubst=function(a){this.storeDataBindSubstConfig();d.extend(b,a)};modelBinding.Configuration.storeDataBindSubstConfig=function(){modelBinding.Configuration._dataBindSubstConfig=d.clone(b)};modelBinding.Configuration.restoreDataBindSubstConfig=function(){if(modelBinding.Configuration._dataBindSubstConfig)b= -modelBinding.Configuration._dataBindSubstConfig,delete modelBinding.Configuration._dataBindSubstConfig};modelBinding.Configuration.getDataBindSubst=function(a,c){var f=c;c===void 0&&(f=b.hasOwnProperty(a)?b[a]:b["default"]);return f};setOnElement=function(a,c,b){b=modelBinding.Configuration.getDataBindSubst(c,b);switch(c){case "html":a.html(b);break;case "text":a.text(b);break;case "enabled":a.attr("disabled",!b);break;case "displayed":a[b?"show":"hide"]();break;case "hidden":a[b?"hide":"show"](); -break;default:a.attr(c,b)}};splitBindingAttr=function(a){var b=[],a=a.attr("data-bind").split(";");d.each(a,function(a){a=c.trim(a).split(" ");a.length==1&&a.unshift("text");b.push({elementAttr:a[0],modelAttr:a[1]})});return b};return{bind:function(a,b,c){var g=this;b.$(a).each(function(){var a=b.$(this),e=splitBindingAttr(a);d.each(e,function(b){g.registerModelBinding(c,b.modelAttr,function(c,d){setOnElement(a,b.elementAttr,d)});setOnElement(a,b.elementAttr,c.get(b.modelAttr))})})}}}(j,i,l);modelBinding.Conventions= -{text:{selector:"input:text",handler:StandardBinding},textarea:{selector:"textarea",handler:StandardBinding},password:{selector:"input:password",handler:StandardBinding},radio:{selector:"input:radio",handler:RadioGroupBinding},checkbox:{selector:"input:checkbox",handler:CheckboxBinding},select:{selector:"select",handler:SelectBoxBinding},databind:{selector:"*[data-bind]",handler:DataBindBinding}};return modelBinding}(Backbone,_,jQuery); +Backbone.ModelBinding=function(k,j,n){modelBinding={version:"0.4.1",bind:function(a,b){a.modelBinder=new ModelBinder(a,b);a.modelBinder.bind()},unbind:function(a){a.modelBinder&&a.modelBinder.unbind()}};ModelBinder=function(a,b){this.config=new modelBinding.Configuration(b);this.modelBindings=[];this.elementBindings=[];this.bind=function(){var b=modelBinding.Conventions,e;for(e in b)if(b.hasOwnProperty(e)){var c=b[e];c.handler.bind.call(this,c.selector,a,a.model,this.config)}};this.unbind=function(){j.each(this.elementBindings, +function(b){b.element.unbind(b.eventName,b.callback)});j.each(this.modelBindings,function(b){b.model.unbind(b.eventName,b.callback)})};this.registerModelBinding=function(b,a,c){a="change:"+a;b.bind(a,c);this.modelBindings.push({model:b,eventName:a,callback:c})};this.registerElementBinding=function(b,a){b.bind("change",a);this.elementBindings.push({element:b,eventName:"change",callback:a})}};modelBinding.Configuration=function(a){this.bindingAttrConfig={};j.extend(this.bindingAttrConfig,modelBinding.Configuration.bindindAttrConfig, +a);if(this.bindingAttrConfig.all){a=this.bindingAttrConfig.all;delete this.bindingAttrConfig.all;for(var b in this.bindingAttrConfig)this.bindingAttrConfig.hasOwnProperty(b)&&(this.bindingAttrConfig[b]=a)}this.getBindingAttr=function(b){return this.bindingAttrConfig[b]};this.getBindingValue=function(b,a){var c=this.getBindingAttr(a);return b.attr(c)}};modelBinding.Configuration.bindindAttrConfig={text:"id",textarea:"id",password:"id",radio:"name",checkbox:"id",select:"id",number:"id",range:"id",tel:"id", +search:"id",url:"id",email:"id"};modelBinding.Configuration.store=function(){modelBinding.Configuration.originalConfig=j.clone(modelBinding.Configuration.bindindAttrConfig)};modelBinding.Configuration.restore=function(){modelBinding.Configuration.bindindAttrConfig=modelBinding.Configuration.originalConfig};modelBinding.Configuration.configureBindingAttributes=function(a){a.all&&(this.configureAllBindingAttributes(a.all),delete a.all);j.extend(modelBinding.Configuration.bindindAttrConfig,a)};modelBinding.Configuration.configureAllBindingAttributes= +function(a){var b=modelBinding.Configuration.bindindAttrConfig;b.text=a;b.textarea=a;b.password=a;b.radio=a;b.checkbox=a;b.select=a;b.number=a;b.range=a;b.tel=a;b.search=a;b.url=a;b.email=a};StandardBinding=function(){var a={},b=function(b){var a=b[0].tagName.toLowerCase();if(a=="input"&&(a=b.attr("type"),a==void 0||a==""))a="text";return a};a.bind=function(a,e,c,l){var d=this;e.$(a).each(function(){var a=e.$(this),f=b(a),i=l.getBindingValue(a,f),m=function(a,b){var d={};d[a]=b;c.set(d)};d.registerModelBinding(c, +i,function(b,d){a.val(d)});d.registerElementBinding(a,function(b){m(i,e.$(b.target).val())});f=c.get(i);typeof f!=="undefined"&&f!==null?a.val(f):(f=a.val())&&m(i,f)})};return a}(k);SelectBoxBinding=function(){return{bind:function(a,b,h,e){var c=this;b.$(a).each(function(){var a=b.$(this),d=e.getBindingValue(a,"select"),g=function(a,b,d){var c={};c[a]=b;c[a+"_text"]=d;h.set(c)};c.registerModelBinding(h,d,function(b,d){a.val(d)});c.registerElementBinding(a,function(a){var c=b.$(a.target),a=c.val(), +c=c.find(":selected").text();g(d,a,c)});var f=h.get(d);typeof f!=="undefined"&&f!==null&&a.val(f);if(a.val()!=f){var f=a.val(),i=a.find(":selected").text();g(d,f,i)}})}}}(k);RadioGroupBinding=function(){return{bind:function(a,b,h,e){var c=this,l=[];b.$(a).each(function(){var a=b.$(this),g=e.getBindingValue(a,"radio");if(!l[g]){l[g]=true;var f=e.getBindingAttr("radio");c.registerModelBinding(h,g,function(a,c){b.$("input[type=radio]["+f+"="+g+"][value="+c+"]").attr("checked","checked")});var i=function(a, +b){var c={};c[a]=b;h.set(c)},m=function(a){a=b.$(a.currentTarget);a.is(":checked")&&i(g,a.val())};b.$("input[type=radio]["+f+"="+g+"]").each(function(){var a=n(this);c.registerElementBinding(a,m)});a=h.get(g);typeof a!=="undefined"&&a!==null?b.$("input[type=radio]["+f+"="+g+"][value="+a+"]").attr("checked","checked"):(a=b.$("input[type=radio]["+f+"="+g+"]:checked").val(),i(g,a))}})}}}(k);CheckboxBinding=function(){return{bind:function(a,b,h,e){var c=this;b.$(a).each(function(){var a=b.$(this);e.getBindingAttr("checkbox"); +var d=e.getBindingValue(a,"checkbox"),g=function(a,b){var c={};c[a]=b;h.set(c)};c.registerModelBinding(h,d,function(b,c){c?a.attr("checked","checked"):a.removeAttr("checked")});c.registerElementBinding(a,function(a){a=b.$(a.target).is(":checked")?true:false;g(d,a)});if(h.attributes.hasOwnProperty(d)){var f=h.get(d);typeof f!=="undefined"&&f!==null&&f!=false?a.attr("checked","checked"):a.removeAttr("checked")}else f=a.is(":checked")?true:false,g(d,f)})}}}(k);DataBindBinding=function(a,b,h){var e={"default":""}; +modelBinding.Configuration.dataBindSubst=function(a){this.storeDataBindSubstConfig();b.extend(e,a)};modelBinding.Configuration.storeDataBindSubstConfig=function(){modelBinding.Configuration._dataBindSubstConfig=b.clone(e)};modelBinding.Configuration.restoreDataBindSubstConfig=function(){if(modelBinding.Configuration._dataBindSubstConfig)e=modelBinding.Configuration._dataBindSubstConfig,delete modelBinding.Configuration._dataBindSubstConfig};modelBinding.Configuration.getDataBindSubst=function(a,b){var d= +b;b===void 0&&(d=e.hasOwnProperty(a)?e[a]:e["default"]);return d};setOnElement=function(a,b,d){d=modelBinding.Configuration.getDataBindSubst(b,d);switch(b){case "html":a.html(d);break;case "text":a.text(d);break;case "enabled":a.attr("disabled",!d);break;case "displayed":a[d?"show":"hide"]();break;case "hidden":a[d?"hide":"show"]();break;default:a.attr(b,d)}};splitBindingAttr=function(a){var e=[],a=a.attr("data-bind").split(";");b.each(a,function(a){a=h.trim(a).split(" ");a.length==1&&a.unshift("text"); +e.push({elementAttr:a[0],modelAttr:a[1]})});return e};return{bind:function(a,e,d){var g=this;e.$(a).each(function(){var a=e.$(this),c=splitBindingAttr(a);b.each(c,function(b){g.registerModelBinding(d,b.modelAttr,function(c,d){setOnElement(a,b.elementAttr,d)});setOnElement(a,b.elementAttr,d.get(b.modelAttr))})})}}}(k,j,n);modelBinding.Conventions={text:{selector:"input:text",handler:StandardBinding},textarea:{selector:"textarea",handler:StandardBinding},password:{selector:"input:password",handler:StandardBinding}, +radio:{selector:"input:radio",handler:RadioGroupBinding},checkbox:{selector:"input:checkbox",handler:CheckboxBinding},select:{selector:"select",handler:SelectBoxBinding},databind:{selector:"*[data-bind]",handler:DataBindBinding},number:{selector:"input[type=number]",handler:StandardBinding},range:{selector:"input[type=range]",handler:StandardBinding},tel:{selector:"input[type=tel]",handler:StandardBinding},search:{selector:"input[type=search]",handler:StandardBinding},url:{selector:"input[type=url]", +handler:StandardBinding},email:{selector:"input[type=email]",handler:StandardBinding}};return modelBinding}(Backbone,_,jQuery); diff --git a/readme.md b/readme.md index da59f62..5766e3c 100644 --- a/readme.md +++ b/readme.md @@ -544,7 +544,12 @@ The list of existing conventions includes: * checkbox * select * textarea -* formbinding +* number +* range +* tel +* search +* url +* email * databind For fully functional, bi-directional binding convention examples, check out the source code @@ -552,6 +557,11 @@ to Backbone.ModelBinding in the `backbone.modelbinding.js` file. ## Release Notes +### v0.4.1 + +* Bind the existing value from an input element to the model on render, if no model value exists +* Added HTML5 input types to the form binding conventions: number, range, tel, search, url, email + ### v0.4.0 * Major internal rewrite to facilitate maintenance, new features, etc