forked from mxriverlynn/backbone.modelbinding
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbackbone.modelbinding.min.js
12 lines (12 loc) · 8.86 KB
/
backbone.modelbinding.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*!
* Backbone.Modelbinding v0.5.1
*
* This plugin provides a simple, convention based mechanism to create bi-directional binding between your Backbone models and your HTML elements, including form inputs, divs, spans, and so on.
*
* Documentation availabe at:
* http://oaprnd.github.com/backbone.modelbinding
*
* Distributed Under MIT License:
* https://raw.github.com/oaprnd/backbone.modelbinding/master/LICENSE.txt
*/
(function(a,f,b,d){var c={version:"0.5.1",bind:function(g,h){g.modelBinder=new ModelBinder(g,h);g.modelBinder.bind();},unbind:function(g){if(g.modelBinder){g.modelBinder.unbind();}}};var e=(function(o,p,l){var i={version:"0.5.1",bind:function(q,r){q.modelBinder=new h(q,r);q.modelBinder.bind();},unbind:function(q){if(q.modelBinder){q.modelBinder.unbind();}}};var h=function(q,r){this.config=new i.Configuration(r);this.modelBindings=[];this.elementBindings=[];this.bind=function(){var u=i.Conventions;for(var v in u){if(u.hasOwnProperty(v)){var t=u[v];var w=t.handler;var s=t.selector;w.bind.call(this,s,q,q.model,this.config);}}};this.unbind=function(){p.each(this.elementBindings,function(s){s.element.unbind(s.eventName,s.callback);});p.each(this.modelBindings,function(s){s.model.unbind(s.eventName,s.callback);});};this.registerModelBinding=function(t,u,v){var s="change:"+u;t.bind(s,v);this.modelBindings.push({model:t,eventName:s,callback:v});};this.registerDataBinding=function(t,s,u){t.bind(s,u);this.modelBindings.push({model:t,eventName:s,callback:u});};this.registerElementBinding=function(s,t){s.bind("change",t);this.elementBindings.push({element:s,eventName:"change",callback:t});};};i.Configuration=function(r){this.bindingAttrConfig={};p.extend(this.bindingAttrConfig,i.Configuration.bindindAttrConfig,r);if(this.bindingAttrConfig.all){var q=this.bindingAttrConfig.all;delete this.bindingAttrConfig.all;for(var s in this.bindingAttrConfig){if(this.bindingAttrConfig.hasOwnProperty(s)){this.bindingAttrConfig[s]=q;}}}this.getBindingAttr=function(t){return this.bindingAttrConfig[t];};this.getBindingValue=function(u,v){var t=this.getBindingAttr(v);return u.attr(t);};};i.Configuration.bindindAttrConfig={text:"id",hidden:"id",textarea:"id",password:"id",radio:"name",checkbox:"id",select:"id",number:"id",range:"id",tel:"id",search:"id",url:"id",email:"id",date:"id",datetime:"id",datetime_local:"id",month:"id",time:"id",week:"id"};i.Configuration.store=function(){i.Configuration.originalConfig=p.clone(i.Configuration.bindindAttrConfig);};i.Configuration.restore=function(){i.Configuration.bindindAttrConfig=i.Configuration.originalConfig;};i.Configuration.configureBindingAttributes=function(q){if(q.all){this.configureAllBindingAttributes(q.all);delete q.all;}p.extend(i.Configuration.bindindAttrConfig,q);};i.Configuration.configureAllBindingAttributes=function(r){var q=i.Configuration.bindindAttrConfig;q.text=r;q.hidden=r;q.textarea=r;q.password=r;q.radio=r;q.checkbox=r;q.select=r;q.number=r;q.range=r;q.tel=r;q.search=r;q.url=r;q.email=r;};i._getElementType=function(q){var r=q[0].tagName.toLowerCase();if(r=="input"){r=q.attr("type");if(r==undefined||r==""){r="text";}}return r;};i.isBindAllowed=function(q,r){var s=i._getElementType(q);var t=r.bindingAttrConfig[s];if(typeof(t)!=="undefined"){if(typeof(q.attr(t))==="undefined"){return false;}}return typeof(q.attr("data-skip"))==="undefined";};var g=(function(r){var q={};q.bind=function(s,u,w,v){var t=this;u.$(s).each(function(D){var A=u.$(this);if(!i.isBindAllowed(A,v)){return;}var E=i._getElementType(A);var C=v.getBindingValue(A,E);var F=function(G,H){A.val(H);};var y=function(I,H){var G={};G[I]=H;w.set(G);};var B=function(G){y(C,u.$(G.target).val());};t.registerModelBinding(w,C,F);t.registerElementBinding(A,B);var x=w.get(C);if(typeof x!=="undefined"&&x!==null){A.val(x);}else{var z=A.val();if(z){y(C,z);}}});};return q;})(o);var n=(function(r){var q={};q.bind=function(s,u,w,v){var t=this;u.$(s).each(function(C){var z=u.$(this);if(!i.isBindAllowed(z,v)){return;}var B=v.getBindingValue(z,"select");var D=function(G,H){z.val(H);};var y=function(G,J,I){var H={};H[G]=J;H[G+"_text"]=I;w.set(H);};var A=function(G){var J=u.$(G.target);var H=J.val();var I=J.find(":selected").text();y(B,H,I);};t.registerModelBinding(w,B,D);t.registerElementBinding(z,A);var x=w.get(B);if(typeof x!=="undefined"&&x!==null){z.val(x);}if(z.val()!=x){var E=z.val();var F=z.find(":selected").text();y(B,E,F);}});};return q;})(o);var m=(function(r){var q={};q.bind=function(s,v,x,w){var u=this;var t=[];v.$(s).each(function(D){var B=v.$(this);if(!i.isBindAllowed(B,w)){return;}var A=w.getBindingValue(B,"radio");if(!t[A]){t[A]=true;var E=w.getBindingAttr("radio");var F=function(J,L){var K="input[type=radio]["+E+"='"+A+"'][value='"+L+"']";v.$(K).attr("checked","checked");};u.registerModelBinding(x,A,F);var z=function(J,L){var K={};K[J]=L;x.set(K);};var C=function(K){var J=v.$(K.currentTarget);if(J.is(":checked")){z(A,J.val());}};var I="input[type=radio]["+E+"='"+A+"']";v.$(I).each(function(){var J=l(this);u.registerElementBinding(J,C);});var y=x.get(A);if(typeof y!=="undefined"&&y!==null){var H="input[type=radio]["+E+"='"+A+"'][value='"+y+"']";v.$(H).attr("checked","checked");}else{var H="input[type=radio]["+E+"='"+A+"']:checked";var G=v.$(H).val();z(A,G);}}});};return q;})(o);var j=(function(r){var q={};q.bind=function(s,u,w,v){var t=this;u.$(s).each(function(E){var B=u.$(this);if(!i.isBindAllowed(B,v)){return;}var G=v.getBindingAttr("checkbox");var F=v.getBindingValue(B,"checkbox");var D=F.substr(F.length-2)==="[]";var C=D?F.slice(0,-2):F;var H=function(I,J){var K=false;if(D&&J){K=l.inArray(B.val(),J)>-1;}else{K=J;}if(K){B.attr("checked","checked");}else{B.removeAttr("checked");}};var z=function(K,J){var I={};I[K]=J;w.set(I);};var A=function(K){var L=u.$(K.target||K);if(D){var I=l.map(u.$("input:checkbox["+G+"="+C+"\\[\\]]:checked"),function(M){return l(M).val();});z(C,I);}else{var J=L.is(":checked")?true:false;z(C,J);}};t.registerModelBinding(w,C,H);t.registerElementBinding(B,A);var y=w.attributes.hasOwnProperty(C);if(y){var x=w.get(C);if(typeof x!=="undefined"&&x!==null){H(w,x);}}else{A(B);}});};return q;})(o);var k=(function(x,s,w){var r={"default":""};i.Configuration.dataBindSubst=function(y){this.storeDataBindSubstConfig();s.extend(r,y);};i.Configuration.storeDataBindSubstConfig=function(){i.Configuration._dataBindSubstConfig=s.clone(r);};i.Configuration.restoreDataBindSubstConfig=function(){if(i.Configuration._dataBindSubstConfig){r=i.Configuration._dataBindSubstConfig;delete i.Configuration._dataBindSubstConfig;}};i.Configuration.getDataBindSubst=function(y,A){var z=A;if(A===undefined){if(r.hasOwnProperty(y)){z=r[y];}else{z=r["default"];}}return z;};var v=function(z,y,A){A=i.Configuration.getDataBindSubst(y,A);switch(y){case"html":z.html(A);break;case"text":z.text(A);break;case"enabled":z.attr("disabled",!A);break;case"disabled":z.attr("disabled",!!A);break;case"displayed":z.css("display",A?"block":"none");break;case"hidden":z.css("display",A?"none":"block");break;default:if(z[0].type!="checkbox"&&z[0].type!="radio"){if(typeof(A)!=="undefined"){z.attr(y,A);}else{z.removeAttr(y);}}}};var u=function(A){var B=[];var z=i.Conventions.databind.selector.replace(/^(.*\[)([^\]]*)(].*)/g,"$2");var y=A.attr(z).split(";");s.each(y,function(C){var D=w.trim(C).split(" ");if(D.length==1){D.unshift("text");}B.push({elementAttr:D[0],modelAttr:D[1]});});return B;};var t=function(B,C){var A={};var y=C.modelAttr;var z=y.indexOf("event:");if(z==0){A.name=y.substr(6);A.callback=function(D){v(B,C.elementAttr,D);};}else{A.name="change:"+y;A.callback=function(D,E){v(B,C.elementAttr,E);};}return A;};var q={};q.bind=function(y,A,C,B){var z=this;A.$(y).each(function(E){var F=A.$(this);if(!i.isBindAllowed(F,B)){return;}var D=u(F);s.each(D,function(H){var G=t(F,H);z.registerDataBinding(C,G.name,G.callback);v(F,H.elementAttr,C.get(H.modelAttr));});});};return q;})(o,p,l);i.Conventions={text:{selector:"input:text",handler:g},hidden:{selector:"input[type='hidden']",handler:g},textarea:{selector:"textarea",handler:g},password:{selector:"input:password",handler:g},radio:{selector:"input:radio",handler:m},checkbox:{selector:"input:checkbox",handler:j},select:{selector:"select",handler:n},databind:{selector:"*[data-bind]",handler:k},date:{selector:"input[type=date]",handler:g},datetime:{selector:"input[type=datetime]",handler:g},datetime_local:{selector:"input[type=datetime-local]",handler:g},email:{selector:"input[type=email]",handler:g},month:{selector:"input[type=month]",handler:g},number:{selector:"input[type=number]",handler:g},range:{selector:"input[type=range]",handler:g},search:{selector:"input[type=search]",handler:g},tel:{selector:"input[type=tel]",handler:g},time:{selector:"input[type=time]",handler:g},url:{selector:"input[type=url]",handler:g},week:{selector:"input[type=week]",handler:g}};return i;});if(typeof(define)==="function"&&define.amd){define(["backbone","underscore","jquery"],function(i,g,h){return e(i,g,h);});}else{a.Backbone=f||{};a.Backbone.ModelBinding=e(f,b,d);}})(this,Backbone,_,jQuery);