forked from mxriverlynn/backbone.modelbinding
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackbone.modelbinding.min.js
More file actions
15 lines (15 loc) · 7.33 KB
/
Copy pathbackbone.modelbinding.min.js
File metadata and controls
15 lines (15 loc) · 7.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(function(m){var u=function(v,g,q){var d={version:"0.5.0",bind:function(a,b){a.modelBinder=new m(a,b);a.modelBinder.bind()},unbind:function(a){a.modelBinder&&a.modelBinder.unbind()}},r=function(a,b){var c=a;names=(""+b).split(".");g.each(names,function(a){a:{var b=c;if(g.isObject(b)){var i=b[a];if(i)g.isFunction(i)&&(i=i.apply(b));else if(b.get)i=b.get(a);else{c=void 0;break a}c=i}else c=void 0}});c instanceof v.Model&&(c=c.id);return c},n=function(a,b,c){var l={};"undefined"!==typeof c&&null!==c?
l[b]=c:l=b;g.each(l,function(c,i){b="set"+i.charAt(0).toUpperCase()+i.slice(1);g.isFunction(a[b])&&(a[b](c),delete l[i])});a.set(l)},m=function(a,b){this.config=new d.Configuration(b);this.modelBindings=[];this.elementBindings=[];this.bind=function(){var c=d.Conventions,b;for(b in c)if(c.hasOwnProperty(b)){var k=c[b];k.handler.bind.call(this,k.selector,a,a.model,this.config)}};this.unbind=function(){g.each(this.elementBindings,function(c){c.element.unbind(c.eventName,c.callback)});g.each(this.modelBindings,
function(c){c.model.unbind(c.eventName,c.callback)})};this.registerModelBinding=function(c,a,b){a="change:"+a;c.bind(a,b);this.modelBindings.push({model:c,eventName:a,callback:b})};this.registerDataBinding=function(a,b,d){a.bind(b,d);this.modelBindings.push({model:a,eventName:b,callback:d})};this.registerElementBinding=function(a,b){a.bind("change",b);this.elementBindings.push({element:a,eventName:"change",callback:b})}};d.Configuration=function(a){this.bindingAttrConfig={};g.extend(this.bindingAttrConfig,
d.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(a){return this.bindingAttrConfig[a]};this.getBindingValue=function(a,b){var d=this.getBindingAttr(b);return a.attr(d)}};d.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"};d.Configuration.store=function(){d.Configuration.originalConfig=g.clone(d.Configuration.bindindAttrConfig)};d.Configuration.restore=function(){d.Configuration.bindindAttrConfig=d.Configuration.originalConfig};d.Configuration.configureBindingAttributes=function(a){a.all&&(this.configureAllBindingAttributes(a.all),delete a.all);g.extend(d.Configuration.bindindAttrConfig,a)};d.Configuration.configureAllBindingAttributes=function(a){var b=d.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 j={bind:function(a,b,c,l){var k=this;b.$(a).each(function(){var a=b.$(this),e=a[0].tagName.toLowerCase();if("input"==e&&(e=a.attr("type"),void 0==e||""==e))e="text";var f=l.getBindingValue(a,e);if(f){var h=d.getMediator(a),o=function(a,b){var f={},d=f,e=c;attr_names=a.split(".");a=attr_names.pop();g.each(attr_names,function(a){var b;(b=e[a])?e=g.isFunction(b)?b():b:(d[a]=
e.get(a)||{},d=d[a])});d[a]=h.parse(b);n(e,f)};k.registerModelBinding(c,f,function(b,c){a.val(h.render(c))});k.registerElementBinding(a,function(a){o(f,b.$(a.target).val())});e=r(c,f);"undefined"!==typeof e&&null!==e?a.val(h.render(e)):(e=a.val())&&o(f,e)}})}},p={"default":""};d.Configuration.dataBindSubst=function(a){this.storeDataBindSubstConfig();g.extend(p,a)};d.Configuration.storeDataBindSubstConfig=function(){d.Configuration._dataBindSubstConfig=g.clone(p)};d.Configuration.restoreDataBindSubstConfig=
function(){d.Configuration._dataBindSubstConfig&&(p=d.Configuration._dataBindSubstConfig,delete d.Configuration._dataBindSubstConfig)};d.Configuration.getDataBindSubst=function(a,b){var c=b;void 0===b&&(c=p.hasOwnProperty(a)?p[a]:p["default"]);return c};var s=function(a,b,c){c=d.Configuration.getDataBindSubst(b,c);c=d.getMediator(a).render(c);switch(b){case "html":a.html(c);break;case "text":a.text(c);break;case "enabled":a.attr("disabled",!c);break;case "displayed":a[c?"show":"hide"]();break;case "hidden":a[c?
"hide":"show"]();break;default:a.attr(b,c)}};d.Conventions={text:{selector:"input:text",handler:j},textarea:{selector:"textarea",handler:j},password:{selector:"input:password",handler:j},radio:{selector:"input:radio",handler:{bind:function(a,b,c,d){var g=this,i=[];b.$(a).each(function(){var a=b.$(this),f=d.getBindingValue(a,"radio");if(!i[f]){i[f]=!0;var h=d.getBindingAttr("radio");g.registerModelBinding(c,f,function(a,c){b.$("input[type=radio]["+h+"='"+f+"'][value='"+c+"']").attr("checked","checked")});
var o=function(a){a=b.$(a.currentTarget);if(a.is(":checked")){var a=a.val(),d={};d[f]=a;n(c,d)}};b.$("input[type=radio]["+h+"='"+f+"']").each(function(){var a=q(this);g.registerElementBinding(a,o)});a=r(c,f);if("undefined"!==typeof a&&null!==a)b.$("input[type=radio]["+h+"='"+f+"'][value='"+a+"']").attr("checked","checked");else{var a=b.$("input[type=radio]["+h+"='"+f+"']:checked").val(),t={};t[f]=a;n(c,t)}}})}}},checkbox:{selector:"input:checkbox",handler:{bind:function(a,b,c,d){var g=this;b.$(a).each(function(){var a=
b.$(this);d.getBindingAttr("checkbox");var e=d.getBindingValue(a,"checkbox");if(e){g.registerModelBinding(c,e,function(b,c){c?a.attr("checked","checked"):a.removeAttr("checked")});g.registerElementBinding(a,function(a){var a=b.$(a.target).is(":checked")?!0:!1,d={};d[e]=a;n(c,d)});var f=r(c,e);if("undefined"!==typeof f&&null!==f)"undefined"!==typeof f&&null!==f&&!1!=f?a.attr("checked","checked"):a.removeAttr("checked");else{var f=a.is(":checked")?!0:!1,h={};h[e]=f;n(c,h)}}})}}},select:{selector:"select",
handler:{bind:function(a,b,c,d){var k=this;b.$(a).each(function(){var a=b.$(this),e=d.getBindingValue(a,"select");if(e){var f=function(a,b,d){var f={},e=f,h=c;attr_names=a.split(".");a=attr_names.pop();g.each(attr_names,function(a){var b;(b=h[a])?h=g.isFunction(b)?b():b:(e[a]=h.get(a)||{},e=e[a])});e[a]=b;e[a+"_text"]=d;n(h,f)};k.registerModelBinding(c,e,function(b,c){a.val(c)});k.registerElementBinding(a,function(a){var c=b.$(a.target),a=c.val(),c=c.find(":selected").text();f(e,a,c)});var h=r(c,
e);if("undefined"!==typeof h&&null!==h)a.val(h);else{var h=a.val(),o=a.find(":selected").text();f(e,h,o)}}})}}},databind:{selector:"*[data-bind]",handler:{bind:function(a,b,c){var j=this;b.$(a).each(function(){var a=b.$(this),i=[],e=d.Conventions.databind.selector.replace(/^(.*\[)([^\]]*)(].*)/g,"$2"),e=a.attr(e).split(";");g.each(e,function(a){a=q.trim(a).split(" ");1==a.length&&a.unshift("text");i.push({elementAttr:a[0],modelAttr:a[1]})});g.each(i,function(b){var d,e;d=b.modelAttr;0==d.indexOf("event:")?
(d=d.substr(6),e=function(c){s(a,b.elementAttr,c)}):(d="change:"+d,e=function(c,d){s(a,b.elementAttr,d)});j.registerDataBinding(c,d,e);s(a,b.elementAttr,r(c,b.modelAttr))})})}}},number:{selector:"input[type=number]",handler:j},range:{selector:"input[type=range]",handler:j},tel:{selector:"input[type=tel]",handler:j},search:{selector:"input[type=search]",handler:j},url:{selector:"input[type=url]",handler:j},email:{selector:"input[type=email]",handler:j}};d.Mediators={};d.getMediator=function(a){a=d.Mediators[q(a).attr("data-mediator")]||
{};a.parse=a.parse||function(a){return a};a.render=a.render||function(a){return a};return a};return d};"function"===typeof define&&define.amd?define(["backbone","underscore","jquery"],function(m,g,q){return u(m,g,q)}):(m.Backbone=Backbone||{},m.Backbone.ModelBinding=u(Backbone,_,jQuery))})(this);