forked from jashkenas/backbone
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackbone-min.js
1 lines (1 loc) · 8.04 KB
/
backbone-min.js
1
(function(){var f;if(typeof exports!=="undefined"){f=exports}else{f=this.Backbone={}}f.VERSION="0.2.0";var h=this._;if(!h&&(typeof require!=="undefined")){h=require("underscore")._}f.emulateHttp=false;f.Events={bind:function(k,m){var j=this._callbacks||(this._callbacks={});var l=this._callbacks[k]||(this._callbacks[k]=[]);l.push(m);return this},unbind:function(n,p){var m;if(!n){this._callbacks={}}else{if(m=this._callbacks){if(!p){m[n]=[]}else{var o=m[n];if(!o){return this}for(var k=0,j=o.length;k<j;k++){if(p===o[k]){o.splice(k,1);break}}}}}return this},trigger:function(n){var o,m,k,j;if(!(m=this._callbacks)){return this}if(o=m[n]){for(k=0,j=o.length;k<j;k++){o[k].apply(this,Array.prototype.slice.call(arguments,1))}}if(o=m.all){for(k=0,j=o.length;k<j;k++){o[k].apply(this,arguments)}}return this}};f.Model=function(j){this.attributes={};this.cid=h.uniqueId("c");this.set(j||{},{silent:true});this._previousAttributes=h.clone(this.attributes);if(this.initialize){this.initialize(j)}};h.extend(f.Model.prototype,f.Events,{_previousAttributes:null,_changed:false,toJSON:function(){return h.clone(this.attributes)},get:function(j){return this.attributes[j]},set:function(n,m){m||(m={});if(!n){return this}if(n.attributes){n=n.attributes}var l=this.attributes;if(this.validate){var k=this.validate(n);if(k){if(m.error){m.error(this,k)}else{this.trigger("error",this,k)}return false}}if("id" in n){this.id=n.id}for(var j in n){var o=n[j];if(o===""){o=null}if(!h.isEqual(l[j],o)){l[j]=o;if(!m.silent){this._changed=true;this.trigger("change:"+j,this,o)}}}if(!m.silent&&this._changed){this.change()}return this},unset:function(j,k){k||(k={});var l=this.attributes[j];delete this.attributes[j];if(!k.silent){this._changed=true;this.trigger("change:"+j,this);this.change()}return l},fetch:function(l){l||(l={});var k=this;var m=function(n){if(!k.set(k.parse(n),l)){return false}if(l.success){l.success(k,n)}};var j=l.error&&h.bind(l.error,null,k);f.sync("read",this,m,j);return this},save:function(m,l){m||(m={});l||(l={});if(!this.set(m,l)){return false}var k=this;var n=function(p){if(!k.set(k.parse(p),l)){return false}if(l.success){l.success(k,p)}};var j=l.error&&h.bind(l.error,null,k);var o=this.isNew()?"create":"update";f.sync(o,this,n,j);return this},destroy:function(l){l||(l={});var k=this;var m=function(n){if(k.collection){k.collection.remove(k)}if(l.success){l.success(k,n)}};var j=l.error&&h.bind(l.error,null,k);f.sync("delete",this,m,j);return this},url:function(){var j=d(this.collection);if(this.isNew()){return j}return j+"/"+this.id},parse:function(j){return j},clone:function(){return new this.constructor(this)},isNew:function(){return !this.id},change:function(){this.trigger("change",this);this._previousAttributes=h.clone(this.attributes);this._changed=false},hasChanged:function(j){if(j){return this._previousAttributes[j]!=this.attributes[j]}return this._changed},changedAttributes:function(l){l||(l=this.attributes);var k=this._previousAttributes;var m=false;for(var j in l){if(!h.isEqual(k[j],l[j])){m=m||{};m[j]=l[j]}}return m},previous:function(j){if(!j||!this._previousAttributes){return null}return this._previousAttributes[j]},previousAttributes:function(){return h.clone(this._previousAttributes)}});f.Collection=function(k,j){j||(j={});if(j.comparator){this.comparator=j.comparator;delete j.comparator}this._boundOnModelEvent=h.bind(this._onModelEvent,this);this._reset();if(k){this.refresh(k,{silent:true})}if(this.initialize){this.initialize(k,j)}};h.extend(f.Collection.prototype,f.Events,{model:f.Model,toJSON:function(){return this.map(function(j){return j.toJSON()})},add:function(n,k){if(h.isArray(n)){for(var m=0,j=n.length;m<j;m++){this._add(n[m],k)}}else{this._add(n,k)}return this},remove:function(n,k){if(h.isArray(n)){for(var m=0,j=n.length;m<j;m++){this._remove(n[m],k)}}else{this._remove(n,k)}return this},get:function(j){return j&&this._byId[j.id!=null?j.id:j]},getByCid:function(j){return j&&this._byCid[j.cid||j]},at:function(j){return this.models[j]},sort:function(j){j||(j={});if(!this.comparator){throw new Error("Cannot sort a set without a comparator")}this.models=this.sortBy(this.comparator);if(!j.silent){this.trigger("refresh",this)}return this},pluck:function(j){return h.map(this.models,function(k){return k.get(j)})},refresh:function(k,j){k||(k=[]);j||(j={});this._reset();this.add(k,{silent:true});if(!j.silent){this.trigger("refresh",this)}return this},fetch:function(k){k||(k={});var m=this;var l=function(n){m.refresh(m.parse(n));if(k.success){k.success(m,n)}};var j=k.error&&h.bind(k.error,null,m);f.sync("read",this,l,j);return this},create:function(k,j){j||(j={});if(!(k instanceof f.Model)){k=new this.model(k)}var l=k.collection=this;var m=function(n,o){l.add(n);if(j.success){j.success(n,o)}};return k.save(null,{success:m,error:j.error})},parse:function(j){return j},chain:function(){return h(this.models).chain()},_reset:function(j){this.length=0;this.models=[];this._byId={};this._byCid={}},_add:function(l,k){k||(k={});if(!(l instanceof f.Model)){l=new this.model(l)}var m=this.getByCid(l);if(m){throw new Error(["Can't add the same model to a set twice",m.id])}this._byId[l.id]=l;this._byCid[l.cid]=l;l.collection=this;var j=this.comparator?this.sortedIndex(l,this.comparator):this.length;this.models.splice(j,0,l);l.bind("all",this._boundOnModelEvent);this.length++;if(!k.silent){this.trigger("add",l)}return l},_remove:function(k,j){j||(j={});k=this.getByCid(k);if(!k){return null}delete this._byId[k.id];delete this._byCid[k.cid];delete k.collection;this.models.splice(this.indexOf(k),1);k.unbind("all",this._boundOnModelEvent);this.length--;if(!j.silent){this.trigger("remove",k)}return k},_onModelEvent:function(k,j){if(k==="change:id"){delete this._byId[j.previous("id")];this._byId[j.id]=j}this.trigger.apply(this,arguments)}});var b=["forEach","each","map","reduce","reduceRight","find","detect","filter","select","reject","every","all","some","any","include","invoke","max","min","sortBy","sortedIndex","toArray","size","first","rest","last","without","indexOf","lastIndexOf","isEmpty"];h.each(b,function(j){f.Collection.prototype[j]=function(){return h[j].apply(h,[this.models].concat(h.toArray(arguments)))}});f.View=function(j){this._configure(j||{});this._ensureElement();this.delegateEvents();if(this.initialize){this.initialize(j)}};var g=function(j){elements=$(this.el).getElements(j);return elements.length>1?elements:elements[0]};var i=/^(\w+)\s*(.*)$/;h.extend(f.View.prototype,{tagName:"div",$:g,MooTools:g,render:function(){return this},make:function(k,j,m){var l=document.createElement(k);if(j){$(l).setProperties(j)}if(m){$(l).set("html",m)}return l},delegateEvents:function(o){if(!(o||(o=this.events))){return this}$(this.el).removeEvents();for(var n in o){var l=o[n];var m=n.match(i);var k=m[1],j=m[2];var p=h.bind(this[l],this);if(j===""){$(this.el).addEvent(k,p)}else{$(this.el).addEvent(k+":relay("+j+")",p)}}return this},_configure:function(j){if(this.options){j=h.extend({},this.options,j)}if(j.model){this.model=j.model}if(j.collection){this.collection=j.collection}if(j.el){this.el=j.el}if(j.id){this.id=j.id}if(j.className){this.className=j.className}if(j.tagName){this.tagName=j.tagName}this.options=j},_ensureElement:function(){if(this.el){return}var j={};if(this.id){j.id=this.id}if(this.className){Object.append(j,{"class":this.className})}this.el=this.make(this.tagName,j)}});var c=f.Model.extend=f.Collection.extend=f.View.extend=function(j,k){var l=e(this,j,k);l.extend=c;return l};var a={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};f.sync=function(p,k,o,j){var n=p==="create"||p==="update";var m=n?{model:JSON.stringify(k)}:{};var l=a[p];if(f.emulateHttp&&(l==="PUT"||l==="DELETE")){m._method=l;l="POST"}$.ajax({url:d(k),type:l,data:m,dataType:"json",success:o,error:j})};var e=function(k,j,m){var n;if(j.hasOwnProperty("constructor")){n=j.constructor}else{n=function(){return k.apply(this,arguments)}}var l=function(){};l.prototype=k.prototype;n.prototype=new l();h.extend(n.prototype,j);if(m){h.extend(n,m)}n.prototype.constructor=n;return n};var d=function(j){if(!(j&&j.url)){throw new Error("A 'url' property or function must be specified")}return h.isFunction(j.url)?j.url():j.url}})(document.id);