forked from mxriverlynn/backbone.modelbinding
-
Notifications
You must be signed in to change notification settings - Fork 0
/
backbone.modelbinding.min.js
20 lines (20 loc) · 6.61 KB
/
backbone.modelbinding.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Backbone.ModelBinding v0.4.2
//
// Copyright (C)2011 Derick Bailey, Muted Solutions, LLC
// Distributed Under MIT Liscene
//
// Documentation and Full Licence Availabe at:
// http://github.com/derickbailey/backbone.modelbinding
(function(m){var p=function(i,l,q){var c={version:"0.4.2",bind:function(a,b){a.modelBinder=new m(a,b);a.modelBinder.bind()},unbind:function(a){a.modelBinder&&a.modelBinder.unbind()}},m=function(a,b){this.config=new c.Configuration(b);this.modelBindings=[];this.elementBindings=[];this.bind=function(){var b=c.Conventions,g;for(g in b)if(b.hasOwnProperty(g)){var d=b[g];d.handler.bind.call(this,d.selector,a,a.model,this.config)}};this.unbind=function(){l.each(this.elementBindings,function(b){b.element.unbind(b.eventName,
b.callback)});l.each(this.modelBindings,function(b){b.model.unbind(b.eventName,b.callback)})};this.registerModelBinding=function(b,a,d){a="change:"+a;b.bind(a,d);this.modelBindings.push({model:b,eventName:a,callback:d})};this.registerElementBinding=function(b,a){b.bind("change",a);this.elementBindings.push({element:b,eventName:"change",callback:a})}};c.Configuration=function(a){this.bindingAttrConfig={};l.extend(this.bindingAttrConfig,c.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 d=this.getBindingAttr(a);return b.attr(d)}};c.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"};c.Configuration.store=
function(){c.Configuration.originalConfig=l.clone(c.Configuration.bindindAttrConfig)};c.Configuration.restore=function(){c.Configuration.bindindAttrConfig=c.Configuration.originalConfig};c.Configuration.configureBindingAttributes=function(a){a.all&&(this.configureAllBindingAttributes(a.all),delete a.all);l.extend(c.Configuration.bindindAttrConfig,a)};c.Configuration.configureAllBindingAttributes=function(a){var b=c.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};var k=function(){var a={},b=function(b){var a=b[0].tagName.toLowerCase();if("input"==a&&(a=b.attr("type"),void 0==a||""==a))a="text";return a};a.bind=function(a,c,d,n){var e=this;c.$(a).each(function(){var a=c.$(this),f=b(a),j=n.getBindingValue(a,f),o=function(a,b){var e={};e[a]=b;d.set(e)};e.registerModelBinding(d,j,function(b,e){a.val(e)});e.registerElementBinding(a,function(b){o(j,c.$(b.target).val())});f=d.get(j);"undefined"!==
typeof f&&null!==f?a.val(f):(f=a.val())&&o(j,f)})};return a}(i),p=function(){return{bind:function(a,b,c,g){var d=this;b.$(a).each(function(){var a=b.$(this),e=g.getBindingValue(a,"select"),h=function(a,b,e){var d={};d[a]=b;d[a+"_text"]=e;c.set(d)};d.registerModelBinding(c,e,function(b,e){a.val(e)});d.registerElementBinding(a,function(a){var d=b.$(a.target),a=d.val(),d=d.find(":selected").text();h(e,a,d)});var f=c.get(e);"undefined"!==typeof f&&null!==f&&a.val(f);if(a.val()!=f){var f=a.val(),j=a.find(":selected").text();
h(e,f,j)}})}}}(i),r=function(){return{bind:function(a,b,c,g){var d=this,n=[];b.$(a).each(function(){var a=b.$(this),h=g.getBindingValue(a,"radio");if(!n[h]){n[h]=!0;var f=g.getBindingAttr("radio");d.registerModelBinding(c,h,function(a,d){b.$("input[type=radio]["+f+"="+h+"][value='"+d+"']").attr("checked","checked")});var j=function(a,b){var d={};d[a]=b;c.set(d)},o=function(a){a=b.$(a.currentTarget);a.is(":checked")&&j(h,a.val())};b.$("input[type=radio]["+f+"="+h+"]").each(function(){var a=q(this);
d.registerElementBinding(a,o)});a=c.get(h);"undefined"!==typeof a&&null!==a?b.$("input[type=radio]["+f+"="+h+"][value='"+a+"']").attr("checked","checked"):(a=b.$("input[type=radio]["+f+"="+h+"]:checked").val(),j(h,a))}})}}}(i),s=function(){return{bind:function(a,b,c,g){var d=this;b.$(a).each(function(){var a=b.$(this);g.getBindingAttr("checkbox");var e=g.getBindingValue(a,"checkbox"),h=function(a,b){var d={};d[a]=b;c.set(d)};d.registerModelBinding(c,e,function(b,d){d?a.attr("checked","checked"):a.removeAttr("checked")});
d.registerElementBinding(a,function(a){a=b.$(a.target).is(":checked")?!0:!1;h(e,a)});if(c.attributes.hasOwnProperty(e)){var f=c.get(e);"undefined"!==typeof f&&null!==f&&!1!=f?a.attr("checked","checked"):a.removeAttr("checked")}else f=a.is(":checked")?!0:!1,h(e,f)})}}}(i),i=function(a,b,i){var g={"default":""};c.Configuration.dataBindSubst=function(a){this.storeDataBindSubstConfig();b.extend(g,a)};c.Configuration.storeDataBindSubstConfig=function(){c.Configuration._dataBindSubstConfig=b.clone(g)};
c.Configuration.restoreDataBindSubstConfig=function(){if(c.Configuration._dataBindSubstConfig)g=c.Configuration._dataBindSubstConfig,delete c.Configuration._dataBindSubstConfig};c.Configuration.getDataBindSubst=function(a,b){var c=b;void 0===b&&(c=g.hasOwnProperty(a)?g[a]:g["default"]);return c};setOnElement=function(a,b,e){e=c.Configuration.getDataBindSubst(b,e);switch(b){case "html":a.html(e);break;case "text":a.text(e);break;case "enabled":a.attr("disabled",!e);break;case "displayed":a[e?"show":
"hide"]();break;case "hidden":a[e?"hide":"show"]();break;default:a.attr(b,e)}};splitBindingAttr=function(a){var g=[],e=c.Conventions.databind.selector.replace(/^(.*\[)([^\]]*)(].*)/g,"$2"),a=a.attr(e).split(";");b.each(a,function(a){a=i.trim(a).split(" ");1==a.length&&a.unshift("text");g.push({elementAttr:a[0],modelAttr:a[1]})});return g};return{bind:function(a,c,e){var g=this;c.$(a).each(function(){var a=c.$(this),d=splitBindingAttr(a);b.each(d,function(b){g.registerModelBinding(e,b.modelAttr,function(c,
d){setOnElement(a,b.elementAttr,d)});setOnElement(a,b.elementAttr,e.get(b.modelAttr))})})}}}(i,l,q);c.Conventions={text:{selector:"input:text",handler:k},textarea:{selector:"textarea",handler:k},password:{selector:"input:password",handler:k},radio:{selector:"input:radio",handler:r},checkbox:{selector:"input:checkbox",handler:s},select:{selector:"select",handler:p},databind:{selector:"*[data-bind]",handler:i},number:{selector:"input[type=number]",handler:k},range:{selector:"input[type=range]",handler:k},
tel:{selector:"input[type=tel]",handler:k},search:{selector:"input[type=search]",handler:k},url:{selector:"input[type=url]",handler:k},email:{selector:"input[type=email]",handler:k}};return c};"function"===typeof define&&define.amd?define(["backbone","underscore","jquery"],function(i,l,m){return p(i,l,m)}):(m.Backbone=Backbone||{},m.Backbone.ModelBinding=p(Backbone,_,jQuery))})(this);