rightnow_oms 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/CHANGELOG +8 -1
  2. data/README.md +10 -0
  3. data/app/assets/javascripts/rightnow_oms/app/app.js.coffee +2 -0
  4. data/app/assets/javascripts/rightnow_oms/app/controllers/cart.js.coffee +3 -3
  5. data/app/assets/javascripts/rightnow_oms/app/models/cart.js.coffee +14 -4
  6. data/app/assets/javascripts/rightnow_oms/app/models/cart_item.js.coffee +25 -15
  7. data/app/assets/javascripts/rightnow_oms/app/templates/cart_items/show.hjs +23 -9
  8. data/app/assets/javascripts/rightnow_oms/app/templates/cart_items/show_in_detail.hjs +45 -18
  9. data/app/assets/javascripts/rightnow_oms/app/templates/carts/show.hjs +0 -2
  10. data/app/assets/javascripts/rightnow_oms/app/templates/carts/show_in_detail.hjs +15 -23
  11. data/app/assets/javascripts/rightnow_oms/app/views/cart_items/show.js.coffee +5 -1
  12. data/app/assets/javascripts/rightnow_oms/app/views/cart_items/show_in_detail.js.coffee +9 -6
  13. data/app/assets/javascripts/rightnow_oms/app/views/carts/show_in_detail.js.coffee +1 -0
  14. data/app/assets/javascripts/rightnow_oms/vendor/ember-data.js +640 -236
  15. data/app/assets/javascripts/rightnow_oms/vendor/ember-data.min.js +1 -1
  16. data/app/assets/javascripts/rightnow_oms/vendor/ember.js +61 -37
  17. data/app/assets/javascripts/rightnow_oms/vendor/ember.min.js +2 -2
  18. data/app/assets/stylesheets/rightnow_oms/application.css.scss +17 -0
  19. data/app/assets/stylesheets/rightnow_oms/carts.css.scss +99 -72
  20. data/app/assets/stylesheets/rightnow_oms/orders.css.scss +50 -0
  21. data/app/controllers/rightnow_oms/cart_items_controller.rb +5 -5
  22. data/app/controllers/rightnow_oms/orders_controller.rb +30 -0
  23. data/app/models/rightnow_oms/cart.rb +22 -13
  24. data/app/models/rightnow_oms/cart_item.rb +20 -2
  25. data/app/models/rightnow_oms/order.rb +43 -0
  26. data/app/models/rightnow_oms/order_item.rb +16 -0
  27. data/app/views/rightnow_oms/carts/show.html.haml +2 -0
  28. data/app/views/rightnow_oms/orders/show.html.haml +45 -0
  29. data/config/routes.rb +1 -0
  30. data/db/migrate/20120214074943_create_rightnow_oms_orders.rb +20 -0
  31. data/db/migrate/20120214081113_create_rightnow_oms_order_items.rb +15 -0
  32. data/db/migrate/20120215064659_add_user_id_to_rightnow_oms_orders.rb +7 -0
  33. data/db/migrate/20120217081138_add_base_quantity_to_rightnow_oms_cart_items.rb +6 -0
  34. data/lib/rightnow_oms/order_no_generator.rb +13 -0
  35. data/lib/rightnow_oms/version.rb +1 -1
  36. data/lib/rightnow_oms.rb +19 -5
  37. metadata +41 -20
  38. data/app/assets/stylesheets/rightnow_oms/application.css +0 -7
@@ -5,4 +5,4 @@
5
5
  // ==========================================================================
6
6
 
7
7
 
8
- (function(a){window.DS=Ember.Namespace.create()})({}),function(a){DS.Adapter=Ember.Object.extend({commit:function(a,b){b.updated.eachType(function(b,c){this.updateRecords(a,b,c.slice())},this),b.created.eachType(function(b,c){this.createRecords(a,b,c.slice())},this),b.deleted.eachType(function(b,c){this.deleteRecords(a,b,c.slice())},this)},createRecords:function(a,b,c){c.forEach(function(c){this.createRecord(a,b,c)},this)},updateRecords:function(a,b,c){c.forEach(function(c){this.updateRecord(a,b,c)},this)},deleteRecords:function(a,b,c){c.forEach(function(c){this.deleteRecord(a,b,c)},this)},findMany:function(a,b,c){c.forEach(function(c){this.find(a,b,c)},this)}})}({}),function(a){DS.fixtureAdapter=DS.Adapter.create({find:function(a,b,c){var d=b.FIXTURES;if(d.hasLoaded)return;setTimeout(function(){a.loadMany(b,d),d.hasLoaded=!0},300)},findMany:function(){this.find.apply(this,arguments)},findAll:function(a,b){var c=b.FIXTURES,d=c.map(function(a,b,c){return a.id});a.loadMany(b,d,c)}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath;DS.RESTAdapter=DS.Adapter.extend({createRecord:function(a,c,d){var e=this.rootForType(c),f={};f[e]=b(d,"data"),this.ajax("/"+this.pluralize(e),"POST",{data:f,success:function(b){a.didCreateRecord(d,b[e])}})},createRecords:function(a,c,d){if(b(this,"bulkCommit")===!1)return this._super(a,c,d);var e=this.rootForType(c),f=this.pluralize(e),g={};g[f]=d.map(function(a){return b(a,"data")}),this.ajax("/"+this.pluralize(e),"POST",{data:g,success:function(b){a.didCreateRecords(c,d,b[f])}})},updateRecord:function(a,c,e){var f=d(c,"proto.primaryKey"),g=b(e,f),h=this.rootForType(c),i={};i[h]=b(e,"data");var j=["",this.pluralize(h),g].join("/");this.ajax(j,"PUT",{data:i,success:function(b){a.didUpdateRecord(e,b[h])}})},updateRecords:function(a,c,d){if(b(this,"bulkCommit")===!1)return this._super(a,c,d);var e=this.rootForType(c),f=this.pluralize(e),g={};g[f]=d.map(function(a){return b(a,"data")}),this.ajax("/"+this.pluralize(e),"POST",{data:g,success:function(b){a.didUpdateRecords(d,b[f])}})},deleteRecord:function(a,c,e){var f=d(c,"proto.primaryKey"),g=b(e,f),h=this.rootForType(c),i=["",this.pluralize(h),g].join("/");this.ajax(i,"DELETE",{success:function(b){a.didDeleteRecord(e)}})},deleteRecords:function(a,c,e){if(b(this,"bulkCommit")===!1)return this._super(a,c,e);var f=this.rootForType(c),g=this.pluralize(f),h=d(c,"proto.primaryKey"),i={};i[g]=e.map(function(a){return b(a,h)}),this.ajax("/"+this.pluralize(f)+"/delete","POST",{data:i,success:function(b){a.didDeleteRecords(e)}})},find:function(a,b,c){var d=this.rootForType(b),e=["",this.pluralize(d),c].join("/");this.ajax(e,"GET",{success:function(c){a.load(b,c[d])}})},findMany:function(a,b,c){var d=this.rootForType(b),e=this.pluralize(d);this.ajax("/"+e,"GET",{data:{ids:c},success:function(d){a.loadMany(b,c,d[e])}});var f="/"+e},findAll:function(a,b){var c=this.rootForType(b),d=this.pluralize(c);this.ajax("/"+d,"GET",{success:function(c){a.loadMany(b,c[d])}})},findQuery:function(a,b,c,d){var e=this.rootForType(b),f=this.pluralize(e);this.ajax("/"+f,"GET",{data:c,success:function(a){d.load(a[f])}})},plurals:{},pluralize:function(a){return this.plurals[a]||a+"s"},rootForType:function(a){if(a.url)return a.url;var b=a.toString().split("."),c=b[b.length-1];return c.replace(/([A-Z])/g,"_$1").toLowerCase().slice(1)},ajax:function(a,b,c){c.url=a,c.type=b,c.dataType="json",jQuery.ajax(c)}})}({}),function(a){var b=Ember.get,c=Ember.set;DS.ModelArray=Ember.ArrayProxy.extend({type:null,content:null,store:null,init:function(){c(this,"modelCache",Ember.A([])),this._super()},arrayDidChange:function(a,c,d,e){var f=b(this,"modelCache");f.replace(c,0,Array(e)),this._super(a,c,d,e)},arrayWillChange:function(a,c,d,e){this._super(a,c,d,e);var f=b(this,"modelCache");f.replace(c,d)},objectAtContent:function(a){var c=b(this,"modelCache"),d=c.objectAt(a);if(!d){var e=b(this,"store"),f=b(this,"content"),g=f.objectAt(a);g!==undefined&&(d=e.findByClientId(b(this,"type"),g),c.replace(a,1,[d]))}return d}}),DS.FilteredModelArray=DS.ModelArray.extend({filterFunction:null,updateFilter:Ember.observer(function(){var a=b(this,"store");a.updateModelArrayFilter(this,b(this,"type"),b(this,"filterFunction"))},"filterFunction")}),DS.AdapterPopulatedModelArray=DS.ModelArray.extend({query:null,isLoaded:!1,load:function(a){var d=b(this,"store"),e=b(this,"type"),f=d.loadMany(e,a).clientIds;this.beginPropertyChanges(),c(this,"content",Ember.A(f)),c(this,"isLoaded",!0),this.endPropertyChanges()}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.String.fmt,f=Ember.Object.extend({init:function(){this.clear()},clear:function(){this.set("presenceSet",{}),this.set("list",Ember.NativeArray.apply([]))},add:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");if(c in d)return;d[c]=!0,e.pushObject(a)},remove:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");delete d[c],e.removeObject(a)},isEmpty:function(){return d(this,"list.length")===0},forEach:function(a,c){b(this,"list").forEach(function(b){a.call(c,b)})},toArray:function(){return b(this,"list").slice()}}),g=Ember.Object.extend({init:function(){c(this,"keys",f.create()),c(this,"values",{})},add:function(a,c){var d=b(this,"keys"),e=b(this,"values"),f=Ember.guidFor(a);return d.add(a),e[f]=c,c},remove:function(a){var c=b(this,"keys"),d=b(this,"values"),e=Ember.guidFor(a),f;return c.remove(a),f=d[e],delete d[e],f},fetch:function(a){var c=b(this,"values"),d=Ember.guidFor(a);return c[d]},forEach:function(a,c){var d=b(this,"keys"),e=b(this,"values");d.forEach(function(b){var d=Ember.guidFor(b);a.call(c,b,e[d])})}});DS.Transaction=Ember.Object.extend({init:function(){c(this,"dirty",{created:g.create(),updated:g.create(),deleted:g.create()})},createRecord:function(a,c){var d=b(this,"store");return d.createRecord(a,c,this)},add:function(a){var d=b(a,"transaction");c(a,"transaction",this)},modelBecameDirty:function(a,c){var d=b(b(this,"dirty"),a),e=c.constructor,g=d.fetch(e);g=g||d.add(e,f.create()),g.add(c)},modelBecameClean:function(a,d){var e=b(b(this,"dirty"),a),f=d.constructor,g=e.fetch(f);g.remove(d),c(d,"transaction",null)},commit:function(){var a=b(this,"dirty"),c=function(c,d,e){var f=b(a,c);f.forEach(function(a,b){if(b.isEmpty())return;b.forEach(function(a){a.willCommit()}),d.call(e,a,b.toArray())})},d={updated:{eachType:function(a,b){c("updated",a,b)}},created:{eachType:function(a,b){c("created",a,b)}},deleted:{eachType:function(a,b){c("deleted",a,b)}}},f=b(this,"store"),g=b(f,"_adapter");if(g&&g.commit)g.commit(f,d);else throw e("Adapter is either null or do not implement `commit` method",this)}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.String.fmt,f=Ember.Object.extend({init:function(){this.clear()},clear:function(){this.set("presenceSet",{}),this.set("list",Ember.NativeArray.apply([]))},add:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");if(c in d)return;d[c]=!0,e.pushObject(a)},remove:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");delete d[c],e.removeObject(a)},isEmpty:function(){return d(this,"list.length")===0},forEach:function(a,c){b(this,"list").forEach(function(b){a.call(c,b)})}});DS.Store=Ember.Object.extend({init:function(){return(!b(DS,"defaultStore")||b(this,"isDefaultStore"))&&c(DS,"defaultStore",this),c(this,"data",[]),c(this,"_typeMap",{}),c(this,"models",[]),c(this,"modelArrays",[]),c(this,"modelArraysByClientId",{}),c(this,"defaultTransaction",DS.Transaction.create({store:this})),this._super()},transaction:function(){return DS.Transaction.create({store:this})},modelArraysForClientId:function(a){var c=b(this,"modelArraysByClientId"),d=c[a];return d||(d=c[a]=f.create()),d},adapter:null,_adapter:Ember.computed(function(){var a=b(this,"adapter");return typeof a=="string"?d(this,a,!1)||d(window,a):a}).property("adapter").cacheable(),clientIdCounter:-1,createRecord:function(a,e,f){e=e||{};var g=e[d(a,"proto.primaryKey")]||null,h=a.create({data:e||{},store:this,transaction:f});h.adapterDidCreate();var i=this.clientIdToHashMap(a),j=b(this,"models"),k=this.pushHash(e,g,a);return c(h,"clientId",k),j[k]=h,this.updateModelArrays(a,k,e),h},deleteRecord:function(a){a.deleteRecord()},find:function(a,b,c){if(b===undefined)return this.findMany(a,null,null);if(c!==undefined)return this.findMany(a,b,c);if(Ember.typeOf(b)==="object")return this.findQuery(a,b);if(Ember.isArray(b))return this.findMany(a,b);var d=this.clientIdForId(a,b);return this.findByClientId(a,d,b)},findByClientId:function(a,c,d){var f,g=b(this,"models"),h=this.clientIdToHashMap(a);if(c!==undefined)f=g[c],f||(f=this.createModel(a,c),f.setData(h[c]||null));else{c=this.pushHash(null,d,a),f=this.createModel(a,c);var i=b(this,"_adapter");if(i&&i.find)i.find(this,a,d);else throw e("Adapter is either null or does not implement `find` method",this)}return f},findMany:function(a,c,d){var f=this.idToClientIdMap(a),g=this.clientIdToHashMap(a),h,i=Ember.A([]);c?(h=[],c.forEach(function(b){var c=f[b];if(c===undefined||g[c]===undefined)c=this.pushHash(null,b,a),h.push(b);i.push(c)},this)):h=null;if(h&&b(h,"length")>0||d){var j=b(this,"_adapter");if(j&&j.findMany)j.findMany(this,a,h,d);else throw e("Adapter is either null or does not implement `findMany` method",this)}return this.createModelArray(a,i)},findQuery:function(a,c){var d=DS.AdapterPopulatedModelArray.create({type:a,content:Ember.A([]),store:this}),f=b(this,"_adapter");if(f&&f.findQuery)f.findQuery(this,a,c,d);else throw e("Adapter is either null or does not implement `findQuery` method",this);return d},findAll:function(a){var c=this.typeMapFor(a),d=c.findAllCache;if(d)return d;var e=DS.ModelArray.create({type:a,content:Ember.A([]),store:this});this.registerModelArray(e,a);var f=b(this,"_adapter");return f&&f.findAll&&f.findAll(this,a),c.findAllCache=e,e},filter:function(a,b){var c=DS.FilteredModelArray.create({type:a,content:Ember.A([]),store:this,filterFunction:b});return this.registerModelArray(c,a,b),c},hashWasUpdated:function(a,b){var c=this.clientIdToHashMap(a),d=c[b];this.updateModelArrays(a,b,d)},commit:function(){b(this,"defaultTransaction").commit()},didUpdateRecords:function(a,b){arguments.length===2?a.forEach(function(a,c){this.didUpdateRecord(a,b[c])},this):a.forEach(function(a){this.didUpdateRecord(a)},this)},didUpdateRecord:function(a,c){if(arguments.length===2){var d=b(a,"clientId"),e=this.clientIdToHashMap(a.constructor);e[d]=c,a.set("data",c)}a.adapterDidUpdate()},didDeleteRecords:function(a){a.forEach(function(a){a.adapterDidDelete()})},didDeleteRecord:function(a){a.adapterDidDelete()},didCreateRecords:function(a,e,f){var g,h,i=d(a,"proto.primaryKey"),j=this.idToClientIdMap(a),k=this.clientIdToHashMap(a),l=this.idList(a);for(var m=0,n=b(e,"length");m<n;m++){var o=e[m],p=f[m];g=p[i],h=b(o,"clientId"),k[h]=p,c(o,"data",p),j[g]=h,l.push(g),o.adapterDidUpdate()}},didCreateRecord:function(a,e){var f=a.constructor,g,h,i=d(f,"proto.primaryKey"),j=this.idToClientIdMap(f),k=this.clientIdToHashMap(f),l=this.idList(f);g=e[i],h=b(a,"clientId"),k[h]=e,c(a,"data",e),j[g]=h,l.push(g),a.adapterDidUpdate()},recordWasInvalid:function(a,b){a.wasInvalid(b)},registerModelArray:function(a,c,d){var e=b(this,"modelArrays"),f=this.idToClientIdMap(c);e.push(a),this.updateModelArrayFilter(a,c,d)},createModelArray:function(a,b){var c=DS.ModelArray.create({type:a,content:b,store:this});return b.forEach(function(a){var b=this.modelArraysForClientId(a);b.add(c)},this),c},updateModelArrayFilter:function(a,b,c){var d=this.clientIdToHashMap(b),e=this.clientIdList(b);for(var f=0,g=e.length;f<g;f++)clientId=e[f],hash=d[clientId],hash&&this.updateModelArray(a,c,b,clientId,hash)},updateModelArrays:function(a,c,d){var e=b(this,"modelArrays");e.forEach(function(e){modelArrayType=b(e,"type"),filter=b(e,"filterFunction");if(a!==modelArrayType)return;this.updateModelArray(e,filter,a,c,d)},this)},updateModelArray:function(a,c,d,e,f){var g;c?g=c(f):g=!0;var h=b(a,"content"),i=h.indexOf(e)!==-1,j=this.modelArraysForClientId(e);g&&!i?(j.add(a),h.pushObject(e)):!g&&i&&(j.remove(a),h.removeObject(e))},removeFromModelArrays:function(a){var c=b(a,"clientId"),d=this.modelArraysForClientId(c);d.forEach(function(a){var d=b(a,"content");d.removeObject(c)})},typeMapFor:function(a){var c=b(this,"_typeMap"),d=Ember.guidFor(a),e=c[d];return e?e:c[d]={idToCid:{},idList:[],cidList:[],cidToHash:{}}},idToClientIdMap:function(a){return this.typeMapFor(a).idToCid},idList:function(a){return this.typeMapFor(a).idList},clientIdList:function(a){return this.typeMapFor(a).cidList},clientIdToHashMap:function(a){return this.typeMapFor(a).cidToHash},clientIdForId:function(a,b){return this.typeMapFor(a).idToCid[b]},idForHash:function(a,b){var c=d(a,"proto.primaryKey");return b[c]},load:function(a,c,e){if(e===undefined){e=c;var f=d(a,"proto.primaryKey");c=e[f]}var g=this.clientIdToHashMap(a),h=b(this,"models"),i=this.clientIdForId(a,c);if(i!==undefined){g[i]=e;var j=h[i];j&&(j.willLoadData(),j.setData(e))}else i=this.pushHash(e,c,a);return this.updateModelArrays(a,i,e),{id:c,clientId:i}},loadMany:function(a,c,e){var f=Ember.A([]);if(e===undefined){e=c,c=[];var g=d(a,"proto.primaryKey");c=e.map(function(a){return a[g]})}for(var h=0,i=b(c,"length");h<i;h++){var j=this.load(a,c[h],e[h]);f.pushObject(j.clientId)}return{clientIds:f,ids:c}},pushHash:function(a,b,c){var d=this.idToClientIdMap(c),e=this.clientIdList(c),f=this.idList(c),g=this.clientIdToHashMap(c),h=this.incrementProperty("clientIdCounter");return g[h]=a,b&&(d[b]=h,f.push(b)),e.push(h),h},createModel:function(a,d){var e;return b(this,"models")[d]=e=a.create({store:this,clientId:d}),c(e,"clientId",d),e.loadingData(),e}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.computed(function(a){var c=b(this,"parentState");if(c)return b(c,a)}).property();DS.State=Ember.State.extend({isLoaded:e,isDirty:e,isSaving:e,isDeleted:e,isError:e,isNew:e,isValid:e});var f=function(){throw"You cannot load data into the store when its associated model is in its current state"},g=function(a){for(var b in a){if(!a.hasOwnProperty(b))continue;return!1}return!0},h=function(a,c){var d=c.key,e=c.value,f=b(a,"model"),g=f.constructor,h=b(f,"store"),i=b(f,"data");i[d]=e,h&&h.hashWasUpdated(g,b(f,"clientId"))},i=DS.State.extend({stateName:null,isDirty:!0,willLoadData:f,enter:function(a){var c=b(this,"stateName"),d=b(a,"model");d.withTransaction(function(a){a.modelBecameDirty(c,d)})},exit:function(a){var c=b(this,"stateName"),d=b(a,"model");this.notifyModel(d),d.withTransaction(function(a){a.modelBecameClean(c,d)})},setProperty:h,willCommit:function(a){a.goToState("saving")},saving:DS.State.extend({isSaving:!0,didUpdate:function(a){a.goToState("loaded")},wasInvalid:function(a,d){var e=b(a,"model");c(e,"errors",d),a.goToState("invalid")}}),invalid:DS.State.extend({isValid:!1,setProperty:function(a,c){h(a,c);var e=d(this,"parentState.stateName"),f=b(a,"model"),i=b(f,"errors"),j=c.key;delete i[j],g(i)&&a.goToState(e)}})}),j={rootState:Ember.State.create({isLoaded:!1,isDirty:!1,isSaving:!1,isDeleted:!1,isError:!1,isNew:!1,isValid:!0,willLoadData:f,didCreate:function(a){a.goToState("loaded.created")},empty:DS.State.create({loadingData:function(a){a.goToState("loading")}}),loading:DS.State.create({willLoadData:Ember.K,exit:function(a){var c=b(a,"model");c.didLoad()},setData:function(a,c){var d=b(a,"model");d.beginPropertyChanges(),d.set("data",c),c!==null&&a.goToState("loaded"),d.endPropertyChanges()}}),loaded:DS.State.create({isLoaded:!0,willLoadData:Ember.K,setProperty:function(a,b){h(a,b),a.goToState("updated")},"delete":function(a){a.goToState("deleted")},created:i.create({stateName:"created",isNew:!0,notifyModel:function(a){a.didCreate()}}),updated:i.create({stateName:"updated",notifyModel:function(a){a.didUpdate()}})}),deleted:DS.State.create({isDeleted:!0,isLoaded:!0,isDirty:!0,willLoadData:f,enter:function(a){var c=b(a,"model"),d=b(c,"store");d&&d.removeFromModelArrays(c),c.withTransaction(function(a){a.modelBecameDirty("deleted",c)})},willCommit:function(a){a.goToState("saving")},saving:DS.State.create({isSaving:!0,didDelete:function(a){a.goToState("saved")},exit:function(a){var c=b(a,"model");c.withTransaction(function(a){a.modelBecameClean("deleted",c)})}}),saved:DS.State.create({isDirty:!1})}),error:DS.State.create({isError:!0})})};DS.StateManager=Ember.StateManager.extend({model:null,initialState:"rootState",states:j});var k=Ember.computed(function(a){return b(d(this,"stateManager.currentState"),a)}).property("stateManager.currentState").cacheable();DS.Model=Ember.Object.extend({isLoaded:k,isDirty:k,isSaving:k,isDeleted:k,isError:k,isNew:k,isValid:k,clientId:null,primaryKey:"id",data:null,transaction:null,didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,init:function(){var a=DS.StateManager.create({model:this});c(this,"stateManager",a),a.goToState("empty")},withTransaction:function(a){var c=b(this,"transaction")||d(this,"store.defaultTransaction");c&&a(c)},setData:function(a){var c=b(this,"stateManager");c.send("setData",a)},setProperty:function(a,c){var d=b(this,"stateManager");d.send("setProperty",{key:a,value:c})},deleteRecord:function(){var a=b(this,"stateManager");a.send("delete")},destroy:function(){this.deleteRecord(),this._super()},loadingData:function(){var a=b(this,"stateManager");a.send("loadingData")},willLoadData:function(){var a=b(this,"stateManager");a.send("willLoadData")},willCommit:function(){var a=b(this,"stateManager");a.send("willCommit")},adapterDidUpdate:function(){var a=b(this,"stateManager");a.send("didUpdate")},adapterDidCreate:function(){var a=b(this,"stateManager");a.send("didCreate")},adapterDidDelete:function(){var a=b(this,"stateManager");a.send("didDelete")},wasInvalid:function(a){var c=b(this,"stateManager");c.send("wasInvalid",a)},unknownProperty:function(a){var c=b(this,"data");if(c)return b(c,a)},setUnknownProperty:function(a,c){var d=b(this,"data");return this.setProperty(a,c),c}}),DS.Model.reopenClass({typeForAssociation:function(a){var b=this.metaForProperty(a).type;return typeof b=="string"&&(b=d(this,b,!1)||d(window,b)),b}}),DS.attr=function(a,c){var d=DS.attr.transforms[a],e=d.from,f=d.to;return Ember.computed(function(a,d){var g=b(this,"data");a=c&&c.key?c.key:a;if(d===undefined){if(!g)return;return e(g[a])}return d=f(d),this.setProperty(a,d),d}).property("data")};var l=function(a,c,d,e,f){var g=d?b(d,e):f?null:[];return f?g?a.load(c,g).id:null:g?a.loadMany(c,g).ids:[]},m=function(a,c,d,e,f){return d?b(d,e):f?null:[]},n=function(a,c,e){var f=c&&c.embedded,g=f?l:m;return Ember.computed(function(f){var h=b(this,"data"),i,j,k,l=b(this,"store");return typeof a=="string"&&(a=d(this,a,!1)||d(window,a)),f=c&&c.key?c.key:f,e?(j=g(l,a,h,f,!0),k=j?l.find(a,j):null):(i=g(l,a,h,f),k=l.findMany(a,i)),k}).property("data").cacheable().meta({type:a})};DS.hasMany=function(a,b){return n(a,b)},DS.hasOne=function(a,b){return n(a,b,!0)},DS.attr.transforms={string:{from:function(a){return Em.none(a)?null:String(a)},to:function(a){return Em.none(a)?null:String(a)}},integer:{from:function(a){return Em.none(a)?null:Number(a)},to:function(a){return Em.none(a)?null:Number(a)}},"boolean":{from:function(a){return Boolean(a)},to:function(a){return Boolean(a)}},date:{from:function(a){var b=typeof a;return b==="string"||b==="number"?new Date(a):a===null||a===undefined?a:null},to:function(a){if(a instanceof Date){var b=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],c=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],d=function(a){return a<10?"0"+a:""+a},e=a.getUTCFullYear(),f=a.getUTCMonth(),g=a.getUTCDate(),h=a.getUTCDay(),i=a.getUTCHours(),j=a.getUTCMinutes(),k=a.getUTCSeconds(),l=b[h],m=d(g),n=c[f];return l+", "+m+" "+n+" "+e+" "+d(i)+":"+d(j)+":"+d(k)+" GMT"}return a===undefined?undefined:null}}}}({}),function(a){}({})
8
+ (function(a){window.DS=Ember.Namespace.create()})({}),function(a){DS.Adapter=Ember.Object.extend({commit:function(a,b){b.updated.eachType(function(b,c){this.updateRecords(a,b,c.slice())},this),b.created.eachType(function(b,c){this.createRecords(a,b,c.slice())},this),b.deleted.eachType(function(b,c){this.deleteRecords(a,b,c.slice())},this)},createRecords:function(a,b,c){c.forEach(function(c){this.createRecord(a,b,c)},this)},updateRecords:function(a,b,c){c.forEach(function(c){this.updateRecord(a,b,c)},this)},deleteRecords:function(a,b,c){c.forEach(function(c){this.deleteRecord(a,b,c)},this)},findMany:function(a,b,c){c.forEach(function(c){this.find(a,b,c)},this)}})}({}),function(a){DS.fixtureAdapter=DS.Adapter.create({find:function(a,b,c){var d=b.FIXTURES;if(d.hasLoaded)return;setTimeout(function(){a.loadMany(b,d),d.hasLoaded=!0},300)},findMany:function(){this.find.apply(this,arguments)},findAll:function(a,b){var c=b.FIXTURES,d=c.map(function(a,b,c){return a.id});a.loadMany(b,d,c)}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath;DS.RESTAdapter=DS.Adapter.extend({createRecord:function(a,c,d){var e=this.rootForType(c),f={};f[e]=b(d,"data"),this.ajax("/"+this.pluralize(e),"POST",{data:f,success:function(b){a.didCreateRecord(d,b[e])}})},createRecords:function(a,c,d){if(b(this,"bulkCommit")===!1)return this._super(a,c,d);var e=this.rootForType(c),f=this.pluralize(e),g={};g[f]=d.map(function(a){return b(a,"data")}),this.ajax("/"+this.pluralize(e),"POST",{data:g,success:function(b){a.didCreateRecords(c,d,b[f])}})},updateRecord:function(a,c,d){var e=b(d,"id"),f=this.rootForType(c),g={};g[f]=b(d,"data");var h=["",this.pluralize(f),e].join("/");this.ajax(h,"PUT",{data:g,success:function(b){a.didUpdateRecord(d,b[f])}})},updateRecords:function(a,c,d){if(b(this,"bulkCommit")===!1)return this._super(a,c,d);var e=this.rootForType(c),f=this.pluralize(e),g={};g[f]=d.map(function(a){return b(a,"data")}),this.ajax("/"+this.pluralize(e),"POST",{data:g,success:function(b){a.didUpdateRecords(d,b[f])}})},deleteRecord:function(a,c,d){var e=b(d,"id"),f=this.rootForType(c),g=["",this.pluralize(f),e].join("/");this.ajax(g,"DELETE",{success:function(b){a.didDeleteRecord(d)}})},deleteRecords:function(a,c,d){if(b(this,"bulkCommit")===!1)return this._super(a,c,d);var e=this.rootForType(c),f=this.pluralize(e),g={};g[f]=d.map(function(a){return b(a,"id")}),this.ajax("/"+this.pluralize(e)+"/delete","POST",{data:g,success:function(b){a.didDeleteRecords(d)}})},find:function(a,b,c){var d=this.rootForType(b),e=["",this.pluralize(d),c].join("/");this.ajax(e,"GET",{success:function(c){a.load(b,c[d])}})},findMany:function(a,b,c){var d=this.rootForType(b),e=this.pluralize(d);this.ajax("/"+e,"GET",{data:{ids:c},success:function(d){a.loadMany(b,c,d[e])}})},findAll:function(a,b){var c=this.rootForType(b),d=this.pluralize(c);this.ajax("/"+d,"GET",{success:function(c){a.loadMany(b,c[d])}})},findQuery:function(a,b,c,d){var e=this.rootForType(b),f=this.pluralize(e);this.ajax("/"+f,"GET",{data:c,success:function(a){d.load(a[f])}})},plurals:{},pluralize:function(a){return this.plurals[a]||a+"s"},rootForType:function(a){if(a.url)return a.url;var b=a.toString().split("."),c=b[b.length-1];return c.replace(/([A-Z])/g,"_$1").toLowerCase().slice(1)},ajax:function(a,b,c){c.url=a,c.type=b,c.dataType="json",jQuery.ajax(c)}})}({}),function(a){var b=Ember.get,c=Ember.set;DS.ModelArray=Ember.ArrayProxy.extend({type:null,content:null,store:null,parentModel:null,init:function(){c(this,"modelCache",Ember.A([])),this._super()},replace:function(a,c,d){var e=b(this,"parentRecord"),f=e&&!b(e,"id");d=d.map(function(a){return f&&a.send("waitingOn",e),a.get("clientId")}),this._super(a,c,d)},arrayDidChange:function(a,c,d,e){var f=b(this,"modelCache");f.replace(c,0,new Array(e)),this._super(a,c,d,e)},arrayWillChange:function(a,c,d,e){this._super(a,c,d,e);var f=b(this,"modelCache");f.replace(c,d)},objectAtContent:function(a){var c=b(this,"modelCache"),d=c.objectAt(a);if(!d){var e=b(this,"store"),f=b(this,"content"),g=f.objectAt(a);g!==undefined&&(d=e.findByClientId(b(this,"type"),g),c.replace(a,1,[d]))}return d}})}({}),function(a){var b=Ember.get;DS.FilteredModelArray=DS.ModelArray.extend({filterFunction:null,updateFilter:Ember.observer(function(){var a=b(this,"store");a.updateModelArrayFilter(this,b(this,"type"),b(this,"filterFunction"))},"filterFunction")})}({}),function(a){var b=Ember.get,c=Ember.set;DS.AdapterPopulatedModelArray=DS.ModelArray.extend({query:null,isLoaded:!1,load:function(a){var d=b(this,"store"),e=b(this,"type"),f=d.loadMany(e,a).clientIds;this.beginPropertyChanges(),c(this,"content",Ember.A(f)),c(this,"isLoaded",!0),this.endPropertyChanges()}})}({}),function(a){}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.String.fmt,f=Ember.Object.extend({init:function(){this.clear()},clear:function(){this.set("presenceSet",{}),this.set("list",Ember.NativeArray.apply([]))},add:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");if(c in d)return;d[c]=!0,e.pushObject(a)},remove:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");delete d[c],e.removeObject(a)},isEmpty:function(){return d(this,"list.length")===0},forEach:function(a,c){b(this,"list").slice().forEach(function(b){a.call(c,b)})},toArray:function(){return b(this,"list").slice()}}),g=Ember.Object.extend({init:function(){c(this,"keys",f.create()),c(this,"values",{})},add:function(a,c){var d=b(this,"keys"),e=b(this,"values"),f=Ember.guidFor(a);return d.add(a),e[f]=c,c},remove:function(a){var c=b(this,"keys"),d=b(this,"values"),e=Ember.guidFor(a),f;return c.remove(a),f=d[e],delete d[e],f},fetch:function(a){var c=b(this,"values"),d=Ember.guidFor(a);return c[d]},forEach:function(a,c){var d=b(this,"keys"),e=b(this,"values");d.forEach(function(b){var d=Ember.guidFor(b);a.call(c,b,e[d])})}});DS.Transaction=Ember.Object.extend({init:function(){c(this,"dirty",{created:g.create(),updated:g.create(),deleted:g.create()})},createRecord:function(a,c){var d=b(this,"store");return d.createRecord(a,c,this)},add:function(a){var d=b(a,"transaction");c(a,"transaction",this)},modelBecameDirty:function(a,c){var d=b(b(this,"dirty"),a),e=c.constructor,g=d.fetch(e);g=g||d.add(e,f.create()),g.add(c)},modelBecameClean:function(a,d){var e=b(b(this,"dirty"),a),f=d.constructor,g=e.fetch(f);g.remove(d),c(d,"transaction",null)},commit:function(){var a=b(this,"dirty"),c=function(c,d,e){var f=b(a,c);f.forEach(function(a,c){if(c.isEmpty())return;var f=[];c.forEach(function(a){a.send("willCommit"),b(a,"isPending")===!1&&f.push(a)}),d.call(e,a,f)})},d={updated:{eachType:function(a,b){c("updated",a,b)}},created:{eachType:function(a,b){c("created",a,b)}},deleted:{eachType:function(a,b){c("deleted",a,b)}}},f=b(this,"store"),g=b(f,"_adapter");if(g&&g.commit)g.commit(f,d);else throw e("Adapter is either null or do not implement `commit` method",this)}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.String.fmt,f=Ember.Object.extend({init:function(){this.clear()},clear:function(){this.set("presenceSet",{}),this.set("list",Ember.NativeArray.apply([]))},add:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");if(c in d)return;d[c]=!0,e.pushObject(a)},remove:function(a){var c=Ember.guidFor(a),d=b(this,"presenceSet"),e=b(this,"list");delete d[c],e.removeObject(a)},isEmpty:function(){return d(this,"list.length")===0},forEach:function(a,c){b(this,"list").forEach(function(b){a.call(c,b)})}});DS.Store=Ember.Object.extend({init:function(){return(!b(DS,"defaultStore")||b(this,"isDefaultStore"))&&c(DS,"defaultStore",this),c(this,"data",[]),c(this,"_typeMap",{}),c(this,"models",[]),c(this,"modelArrays",[]),c(this,"modelArraysByClientId",{}),c(this,"defaultTransaction",DS.Transaction.create({store:this})),this._super()},transaction:function(){return DS.Transaction.create({store:this})},modelArraysForClientId:function(a){var c=b(this,"modelArraysByClientId"),d=c[a];return d||(d=c[a]=f.create()),d},adapter:null,_adapter:Ember.computed(function(){var a=b(this,"adapter");return typeof a=="string"?d(this,a,!1)||d(window,a):a}).property("adapter").cacheable(),clientIdCounter:-1,createRecord:function(a,e,f){e=e||{};var g=e[d(a,"proto.primaryKey")]||null,h=a._create({store:this,transaction:f}),i={},j;j=this.pushHash(i,g,a),h.send("setData",i);var k=b(this,"models");return c(h,"clientId",j),k[j]=h,h.setProperties(e),this.updateModelArrays(a,j,i),h},deleteRecord:function(a){a.send("deleteRecord")},find:function(a,b,c){if(b===undefined)return this.findAll(a);if(c!==undefined)return this.findMany(a,b,c);if(Ember.typeOf(b)==="object")return this.findQuery(a,b);if(Ember.isArray(b))return this.findMany(a,b);var d=this.clientIdForId(a,b);return this.findByClientId(a,d,b)},findByClientId:function(a,c,d){var f,g=b(this,"models"),h=this.clientIdToHashMap(a);if(c!==undefined)f=g[c],f||(f=this.materializeRecord(a,c),f.send("setData",h[c]||null));else{c=this.pushHash(null,d,a),f=this.materializeRecord(a,c);var i=b(this,"_adapter");if(i&&i.find)i.find(this,a,d);else throw e("Adapter is either null or does not implement `find` method",this)}return f},findMany:function(a,c,d){var f=this.idToClientIdMap(a),g=this.clientIdToHashMap(a),h,i=Ember.A([]);c?(h=[],c.forEach(function(b){var c=f[b];if(c===undefined||g[c]===undefined)c=this.pushHash(null,b,a),h.push(b);i.push(c)},this)):h=null;if(h&&b(h,"length")>0||d){var j=b(this,"_adapter");if(j&&j.findMany)j.findMany(this,a,h,d);else throw e("Adapter is either null or does not implement `findMany` method",this)}return this.createModelArray(a,i)},findQuery:function(a,c){var d=DS.AdapterPopulatedModelArray.create({type:a,content:Ember.A([]),store:this}),f=b(this,"_adapter");if(f&&f.findQuery)f.findQuery(this,a,c,d);else throw e("Adapter is either null or does not implement `findQuery` method",this);return d},findAll:function(a){var c=this.typeMapFor(a),d=c.findAllCache;if(d)return d;var e=DS.ModelArray.create({type:a,content:Ember.A([]),store:this});this.registerModelArray(e,a);var f=b(this,"_adapter");return f&&f.findAll&&f.findAll(this,a),c.findAllCache=e,e},filter:function(a,b){var c=DS.FilteredModelArray.create({type:a,content:Ember.A([]),store:this,filterFunction:b});return this.registerModelArray(c,a,b),c},hashWasUpdated:function(a,b){var c=this.clientIdToHashMap(a),d=c[b];this.updateModelArrays(a,b,d)},commit:function(){b(this,"defaultTransaction").commit()},didUpdateRecords:function(a,b){arguments.length===2?a.forEach(function(a,c){this.didUpdateRecord(a,b[c])},this):a.forEach(function(a){this.didUpdateRecord(a)},this)},didUpdateRecord:function(a,c){if(arguments.length===2){var d=b(a,"clientId"),e=this.clientIdToHashMap(a.constructor);e[d]=c,a.send("setData",c)}a.send("didCommit")},didDeleteRecords:function(a){a.forEach(function(a){a.send("didCommit")})},didDeleteRecord:function(a){a.send("didCommit")},didCreateRecords:function(a,c,e){var f,g,h=d(a,"proto.primaryKey"),i=this.idToClientIdMap(a),j=this.clientIdToHashMap(a),k=this.idList(a);for(var l=0,m=b(c,"length");l<m;l++){var n=c[l],o=e[l];f=o[h],g=b(n,"clientId"),j[g]=o,n.send("setData",o),i[f]=g,k.push(f),n.send("didCommit")}},didCreateRecord:function(a,e){var f=a.constructor,g,h,i,j=this.idToClientIdMap(f),k=this.clientIdToHashMap(f),l=this.idList(f);i=d(f,"proto.primaryKey"),!e,arguments.length===2&&(g=e[i],k[h]=e,c(a,"data",e)),h=b(a,"clientId"),j[g]=h,l.push(g),a.send("didCommit")},recordWasInvalid:function(a,b){a.send("becameInvalid",b)},registerModelArray:function(a,c,d){var e=b(this,"modelArrays");e.push(a),this.updateModelArrayFilter(a,c,d)},createModelArray:function(a,b){var c=DS.ModelArray.create({type:a,content:b,store:this});return b.forEach(function(a){var b=this.modelArraysForClientId(a);b.add(c)},this),c},updateModelArrayFilter:function(a,b,c){var d=this.clientIdToHashMap(b),e=this.clientIdList(b),f,g;for(var h=0,i=e.length;h<i;h++)f=e[h],g=d[f],g&&this.updateModelArray(a,c,b,f,g)},updateModelArrays:function(a,c,d){var e=b(this,"modelArrays"),f,g;e.forEach(function(e){f=b(e,"type"),g=b(e,"filterFunction");if(a!==f)return;this.updateModelArray(e,g,a,c,d)},this)},updateModelArray:function(a,c,d,e,f){var g;c?g=c(f):g=!0;var h=b(a,"content"),i=h.indexOf(e)!==-1,j=this.modelArraysForClientId(e);g&&!i?(j.add(a),h.pushObject(e)):!g&&i&&(j.remove(a),h.removeObject(e))},removeFromModelArrays:function(a){var c=b(a,"clientId"),d=this.modelArraysForClientId(c);d.forEach(function(a){var d=b(a,"content");d.removeObject(c)})},typeMapFor:function(a){var c=b(this,"_typeMap"),d=Ember.guidFor(a),e=c[d];return e?e:c[d]={idToCid:{},idList:[],cidList:[],cidToHash:{}}},idToClientIdMap:function(a){return this.typeMapFor(a).idToCid},idList:function(a){return this.typeMapFor(a).idList},clientIdList:function(a){return this.typeMapFor(a).cidList},clientIdToHashMap:function(a){return this.typeMapFor(a).cidToHash},clientIdForId:function(a,b){return this.typeMapFor(a).idToCid[b]},idForHash:function(a,b){var c=d(a,"proto.primaryKey");return b[c]},load:function(a,c,e){if(e===undefined){e=c;var f=d(a,"proto.primaryKey");c=e[f]}var g=this.clientIdToHashMap(a),h=b(this,"models"),i=this.clientIdForId(a,c);if(i!==undefined){g[i]=e;var j=h[i];j&&j.send("setData",e)}else i=this.pushHash(e,c,a);return this.updateModelArrays(a,i,e),{id:c,clientId:i}},loadMany:function(a,c,e){var f=Ember.A([]);if(e===undefined){e=c,c=[];var g=d(a,"proto.primaryKey");c=e.map(function(a){return a[g]})}for(var h=0,i=b(c,"length");h<i;h++){var j=this.load(a,c[h],e[h]);f.pushObject(j.clientId)}return{clientIds:f,ids:c}},pushHash:function(a,b,c){var d=this.idToClientIdMap(c),e=this.clientIdList(c),f=this.idList(c),g=this.clientIdToHashMap(c),h=this.incrementProperty("clientIdCounter");return g[h]=a,b&&(d[b]=h,f.push(b)),e.push(h),h},materializeRecord:function(a,d){var e;return b(this,"models")[d]=e=a._create({store:this,clientId:d}),c(e,"clientId",d),e.send("loadingData"),e},destroy:function(){return b(DS,"defaultStore")===this&&c(DS,"defaultStore",null),this._super()}})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.guidFor,f=Ember.computed(function(a){var c=b(this,"parentState");if(c)return b(c,a)}).property(),g=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};DS.State=Ember.State.extend({isLoaded:f,isDirty:f,isSaving:f,isDeleted:f,isError:f,isNew:f,isValid:f,isPending:f,dirtyType:f});var g=function(a){for(var b in a){if(!a.hasOwnProperty(b))continue;return!1}return!0},h=function(a,c){var d=c.key,e=c.value,f=b(a,"model"),g=b(f,"data");g[d]=e,Ember.run.once(f,f.notifyHashWasUpdated)},i=function(a,c){var d=b(a,"model"),f=b(d,"pendingQueue"),g=e(c),h=function(){b(c,"id")&&(a.send("doneWaitingOn",c),Ember.removeObserver(c,"id",h))};f[g]=[c,h],Ember.addObserver(c,"id",h)},j=DS.State.extend({initialState:"uncommitted",isDirty:!0,uncommitted:DS.State.extend({enter:function(a){var c=b(this,"dirtyType"),d=b(a,"model");d.withTransaction(function(a){a.modelBecameDirty(c,d)})},exit:function(a){var c=b(a,"model");a.send("invokeLifecycleCallbacks",c)},setProperty:h,deleteRecord:function(a){a.goToState("deleted")},waitingOn:function(a,b){i(a,b),a.goToState("pending")},willCommit:function(a){a.goToState("inFlight")}}),inFlight:DS.State.extend({isSaving:!0,enter:function(a){var c=b(this,"dirtyType"),d=b(a,"model");d.withTransaction(function(a){a.modelBecameClean(c,d)})},didCommit:function(a){a.goToState("loaded")},becameInvalid:function(a,d){var e=b(a,"model");c(e,"errors",d),a.goToState("invalid")},setData:function(a,d){var e=b(a,"model");c(e,"data",d)}}),pending:DS.State.extend({initialState:"uncommitted",isPending:!0,uncommitted:DS.State.extend({setProperty:h,deleteRecord:function(a){var c=b(a,"model"),d=b(c,"pendingQueue"),e;for(var f in d){if(!d.hasOwnProperty(f))continue;e=d[f],Ember.removeObserver(e[0],"id",e[1])}a.goToState("deleted")},willCommit:function(a){a.goToState("committing")},doneWaitingOn:function(a,c){var d=b(a,"model"),f=b(d,"pendingQueue"),h=e(c);delete f[h],g(f)&&a.send("doneWaiting")},doneWaiting:function(a){var c=b(this,"dirtyType");a.goToState(c+".uncommitted")}}),committing:DS.State.extend({isSaving:!0,doneWaitingOn:function(a,c){var d=b(a,"model"),f=b(d,"pendingQueue"),h=e(c);delete f[h],g(f)&&a.send("doneWaiting")},doneWaiting:function(a){var c=b(this,"dirtyType");a.goToState(c+".inFlight")}})}),invalid:DS.State.extend({isValid:!1,deleteRecord:function(a){a.goToState("deleted")},setProperty:function(a,c){h(a,c);var d=b(a,"model"),e=b(d,"errors"),f=c.key;delete e[f],g(e)&&a.send("becameValid")},becameValid:function(a){a.goToState("uncommitted")}})}),k={rootState:Ember.State.create({isLoaded:!1,isDirty:!1,isSaving:!1,isDeleted:!1,isError:!1,isNew:!1,isValid:!0,isPending:!1,empty:DS.State.create({loadingData:function(a){a.goToState("loading")},setData:function(a,d){var e=b(a,"model");c(e,"data",d),a.goToState("loaded.created")}}),loading:DS.State.create({exit:function(a){var c=b(a,"model");c.didLoad()},setData:function(a,d){var e=b(a,"model");e.beginPropertyChanges(),c(e,"data",d),d!==null&&a.send("loadedData"),e.endPropertyChanges()},loadedData:function(a){a.goToState("loaded")}}),loaded:DS.State.create({initialState:"saved",isLoaded:!0,saved:DS.State.create({setProperty:function(a,b){h(a,b),a.goToState("updated")},deleteRecord:function(a){a.goToState("deleted")},waitingOn:function(a,b){i(a,b),a.goToState("updated.pending")}}),created:j.create({dirtyType:"created",isNew:!0,invokeLifecycleCallbacks:function(a,b){b.didCreate()}}),updated:j.create({dirtyType:"updated",invokeLifecycleCallbacks:function(a,b){b.didUpdate()}})}),deleted:DS.State.create({isDeleted:!0,isLoaded:!0,isDirty:!0,enter:function(a){var c=b(a,"model"),d=b(c,"store");d&&d.removeFromModelArrays(c),c.withTransaction(function(a){a.modelBecameDirty("deleted",c)})},start:DS.State.create({willCommit:function(a){a.goToState("inFlight")}}),inFlight:DS.State.create({isSaving:!0,exit:function(a){var c=b(a,"model");c.withTransaction(function(a){a.modelBecameClean("deleted",c)})},didCommit:function(a){a.goToState("saved")}}),saved:DS.State.create({isDirty:!1})}),error:DS.State.create({isError:!0})})};DS.StateManager=Ember.StateManager.extend({model:null,initialState:"rootState",states:k})}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath,e=Ember.computed(function(a){return b(d(this,"stateManager.currentState"),a)}).property("stateManager.currentState").cacheable();DS.Model=Ember.Object.extend({isLoaded:e,isDirty:e,isSaving:e,isDeleted:e,isError:e,isNew:e,isPending:e,isValid:e,clientId:null,primaryKey:"id",id:Ember.computed(function(a,d){var e=b(this,"primaryKey"),f=b(this,"data");return arguments.length===2?(c(f,e,d),d):f&&b(f,e)}).property("primaryKey","data"),data:null,pendingQueue:null,transaction:null,errors:null,didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,init:function(){var a=DS.StateManager.create({model:this});c(this,"pendingQueue",{}),c(this,"stateManager",a),a.goToState("empty")},destroy:function(){b(this,"isDeleted")||this.deleteRecord(),this._super()},send:function(a,c){return b(this,"stateManager").send(a,c)},withTransaction:function(a){var c=b(this,"transaction")||d(this,"store.defaultTransaction");c&&a(c)},setProperty:function(a,b){this.send("setProperty",{key:a,value:b})},deleteRecord:function(){this.send("deleteRecord")},waitingOn:function(a){this.send("waitingOn",a)},notifyHashWasUpdated:function(){var a=b(this,"store");a&&a.hashWasUpdated(this.constructor,b(this,"clientId"))},unknownProperty:function(a){var c=b(this,"data");!(c&&a in c)},setUnknownProperty:function(a,c){var d=b(this,"data");if(!(d&&a in d))return this._super(a,c)}});var f=function(a){return function(){var c=b(DS,"defaultStore"),d=[].slice.call(arguments);return d.unshift(this),c[a].apply(c,d)}};DS.Model.reopenClass({find:f("find"),filter:f("filter"),_create:DS.Model.create,create:function(){throw new Ember.Error("You should not call `create` on a model. Instead, call `createRecord` with the attributes you would like to set.")},createRecord:f("createRecord")})}({}),function(a){var b=Ember.get,c=Ember.getPath;DS.attr=function(a,c){var d=DS.attr.transforms[a],e=d.from,f=d.to;return Ember.computed(function(a,d){var g=b(this,"data");a=c&&c.key?c.key:a;if(d===undefined){if(!g)return;return e(g[a])}return d=f(d),this.setProperty(a,d),d}).property("data")},DS.attr.transforms={string:{from:function(a){return Ember.none(a)?null:String(a)},to:function(a){return Ember.none(a)?null:String(a)}},integer:{from:function(a){return Ember.none(a)?null:Number(a)},to:function(a){return Ember.none(a)?null:Number(a)}},"boolean":{from:function(a){return Boolean(a)},to:function(a){return Boolean(a)}},date:{from:function(a){var b=typeof a;return b==="string"||b==="number"?new Date(a):a===null||a===undefined?a:null},to:function(a){if(a instanceof Date){var b=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],c=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],d=function(a){return a<10?"0"+a:""+a},e=a.getUTCFullYear(),f=a.getUTCMonth(),g=a.getUTCDate(),h=a.getUTCDay(),i=a.getUTCHours(),j=a.getUTCMinutes(),k=a.getUTCSeconds(),l=b[h],m=d(g),n=c[f];return l+", "+m+" "+n+" "+e+" "+d(i)+":"+d(j)+":"+d(k)+" GMT"}return a===undefined?undefined:null}}}}({}),function(a){var b=Ember.get,c=Ember.set,d=Ember.getPath;DS.Model.reopenClass({typeForAssociation:function(a){var b=this.metaForProperty(a).type;return typeof b=="string"&&(b=d(this,b,!1)||d(window,b)),b}});var e=function(a,c,d,e,f){var g=d?b(d,e):f?null:[];return f?g?a.load(c,g).id:null:g?a.loadMany(c,g).ids:[]},f=function(a,c,d,e,f){return d?b(d,e):f?null:[]},g=function(a,g,h){var i=g&&g.embedded,j=i?e:f;return Ember.computed(function(e){var f=b(this,"data"),i,k,l,m=b(this,"store");return typeof a=="string"&&(a=d(this,a,!1)||d(window,a)),e=g&&g.key?g.key:e,h?(k=j(m,a,f,e,!0),l=k?m.find(a,k):null):(i=j(m,a,f,e),l=m.findMany(a,i),c(l,"parentRecord",this)),l}).property("data").cacheable().meta({type:a})};DS.hasMany=function(a,b){return g(a,b)},DS.hasOne=function(a,b){return g(a,b,!0)}}({}),function(a){}({}),function(a){}({})
@@ -9770,9 +9770,9 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray,
9770
9770
 
9771
9771
  Then, create a view that binds to your new controller:
9772
9772
 
9773
- {{#collection contentBinding="MyApp.listController"}}
9774
- {{content.firstName}} {{content.lastName}}
9775
- {{/collection}}
9773
+ {{#each MyApp.listController}}
9774
+ {{firstName}} {{lastName}}
9775
+ {{/each}}
9776
9776
 
9777
9777
  The advantage of using an array controller is that you only have to set up
9778
9778
  your view bindings once; to change what's displayed, simply swap out the
@@ -12607,7 +12607,7 @@ Ember.View.views = {};
12607
12607
  Ember.View.childViewsProperty = childViewsProperty;
12608
12608
 
12609
12609
  Ember.View.applyAttributeBindings = function(elem, name, value) {
12610
- var type = typeof value;
12610
+ var type = Ember.typeOf(value);
12611
12611
  var currentValue = elem.attr(name);
12612
12612
 
12613
12613
  // if this changes, also change the logic in ember-handlebars/lib/helpers/binding.js
@@ -13340,15 +13340,27 @@ Ember.$ = window.jQuery;
13340
13340
  })({});
13341
13341
 
13342
13342
  (function(exports) {
13343
- var get = Ember.get, set = Ember.set;
13343
+ var get = Ember.get, set = Ember.set, getPath = Ember.getPath;
13344
13344
 
13345
13345
  Ember.State = Ember.Object.extend({
13346
13346
  isState: true,
13347
13347
  parentState: null,
13348
13348
  start: null,
13349
+ name: null,
13350
+ path: Ember.computed(function() {
13351
+ var parentPath = getPath(this, 'parentState.path'),
13352
+ path = get(this, 'name');
13353
+
13354
+ if (parentPath) {
13355
+ path = parentPath + '.' + path;
13356
+ }
13357
+
13358
+ return path;
13359
+ }).property().cacheable(),
13349
13360
 
13350
13361
  init: function() {
13351
13362
  var states = get(this, 'states'), foundStates;
13363
+ var name;
13352
13364
 
13353
13365
  // As a convenience, loop over the properties
13354
13366
  // of this state and look for any that are other
@@ -13358,40 +13370,37 @@ Ember.State = Ember.Object.extend({
13358
13370
 
13359
13371
  if (!states) {
13360
13372
  states = {};
13361
- for (var name in this) {
13362
- if (name === "constructor") { continue; }
13363
- value = this.setupChild(name, this[name]);
13364
13373
 
13365
- if (value) {
13366
- foundStates = true;
13367
- states[name] = value;
13368
- }
13374
+ for (name in this) {
13375
+ if (name === "constructor") { continue; }
13376
+ this.setupChild(states, name, this[name]);
13369
13377
  }
13370
13378
 
13371
- if (foundStates) { set(this, 'states', states); }
13379
+ set(this, 'states', states);
13372
13380
  } else {
13373
- for (var name in states) {
13374
- this.setupChild(name, states[name]);
13381
+ for (name in states) {
13382
+ this.setupChild(states, name, states[name]);
13375
13383
  }
13376
13384
  }
13377
13385
 
13378
13386
  set(this, 'routes', {});
13379
13387
  },
13380
13388
 
13381
- setupChild: function(name, value) {
13389
+ setupChild: function(states, name, value) {
13382
13390
  if (!value) { return false; }
13383
13391
 
13384
13392
  if (Ember.State.detect(value)) {
13385
- value = value.create();
13393
+ value = value.create({
13394
+ name: name
13395
+ });
13396
+ } else if (value.isState) {
13397
+ set(value, 'name', name);
13386
13398
  }
13387
13399
 
13388
13400
  if (value.isState) {
13389
13401
  set(value, 'parentState', this);
13390
- set(value, 'name', (get(this, 'name') || '') + '.' + name);
13391
- return value;
13402
+ states[name] = value;
13392
13403
  }
13393
-
13394
- return false;
13395
13404
  },
13396
13405
 
13397
13406
  enter: Ember.K,
@@ -13421,7 +13430,7 @@ Ember.StateManager = Ember.State.extend(
13421
13430
 
13422
13431
  var initialState = get(this, 'initialState');
13423
13432
 
13424
- if (!initialState && get(this, 'start')) {
13433
+ if (!initialState && getPath(this, 'states.start')) {
13425
13434
  initialState = 'start';
13426
13435
  }
13427
13436
 
@@ -13432,6 +13441,15 @@ Ember.StateManager = Ember.State.extend(
13432
13441
 
13433
13442
  currentState: null,
13434
13443
 
13444
+ /**
13445
+ @property
13446
+
13447
+ If set to true, `errorOnUnhandledEvents` will cause an exception to be
13448
+ raised if you attempt to send an event to a state manager that is not
13449
+ handled by the current state or any of its parent states.
13450
+ */
13451
+ errorOnUnhandledEvent: true,
13452
+
13435
13453
  /**
13436
13454
  @property
13437
13455
 
@@ -13469,7 +13487,11 @@ Ember.StateManager = Ember.State.extend(
13469
13487
  action.call(currentState, this, context);
13470
13488
  } else {
13471
13489
  var parentState = get(currentState, 'parentState');
13472
- if (parentState) { this.sendRecursively(event, parentState, context); }
13490
+ if (parentState) {
13491
+ this.sendRecursively(event, parentState, context);
13492
+ } else if (get(this, 'errorOnUnhandledEvent')) {
13493
+ throw new Ember.Error(this.toString() + " could not respond to event " + event + " in state " + getPath(this, 'currentState.name') + ".");
13494
+ }
13473
13495
  }
13474
13496
  },
13475
13497
 
@@ -13597,7 +13619,7 @@ Ember.StateManager = Ember.State.extend(
13597
13619
  }
13598
13620
 
13599
13621
  // right now, start states cannot be entered asynchronously
13600
- while (startState = get(startState, initialState)) {
13622
+ while (startState = get(get(startState, 'states'), initialState)) {
13601
13623
  enteredState = startState;
13602
13624
 
13603
13625
  if (log) { console.log("STATEMANAGER: Entering " + startState.name); }
@@ -13744,17 +13766,6 @@ Ember.ViewState = Ember.State.extend({
13744
13766
  // If we have the W3C range API, this process is relatively straight forward.
13745
13767
  if (supportsRange) {
13746
13768
 
13747
- // IE 9 supports ranges but doesn't define createContextualFragment
13748
- if (!Range.prototype.createContextualFragment) {
13749
- Range.prototype.createContextualFragment = function(html) {
13750
- var frag = document.createDocumentFragment(),
13751
- div = document.createElement("div");
13752
- frag.appendChild(div);
13753
- div.outerHTML = html;
13754
- return frag;
13755
- };
13756
- }
13757
-
13758
13769
  // Get a range for the current morph. Optionally include the starting and
13759
13770
  // ending placeholders.
13760
13771
  rangeFor = function(morph, outerToo) {
@@ -14015,6 +14026,7 @@ Ember.ViewState = Ember.State.extend({
14015
14026
  afterFunc = function(html) {
14016
14027
  // get the real starting node. see realNode for details.
14017
14028
  var end = document.getElementById(this.end);
14029
+ var insertBefore = end.nextSibling;
14018
14030
  var parentNode = end.parentNode;
14019
14031
  var nextSibling;
14020
14032
  var node;
@@ -14028,7 +14040,7 @@ Ember.ViewState = Ember.State.extend({
14028
14040
  // placeholder.
14029
14041
  while (node) {
14030
14042
  nextSibling = node.nextSibling;
14031
- parentNode.insertBefore(node, end.nextSibling);
14043
+ parentNode.insertBefore(node, insertBefore);
14032
14044
  node = nextSibling;
14033
14045
  }
14034
14046
  };
@@ -15510,7 +15522,14 @@ Ember.Handlebars.registerHelper('collection', function(path, options) {
15510
15522
  }
15511
15523
 
15512
15524
  if (inverse && inverse !== Handlebars.VM.noop) {
15513
- hash.emptyView = Ember.View.extend({
15525
+ var emptyViewClass = Ember.View;
15526
+
15527
+ if (hash.emptyViewClass) {
15528
+ emptyViewClass = Ember.View.detect(emptyViewClass) ?
15529
+ hash.emptyViewClass : getPath(this, hash.emptyViewClass);
15530
+ }
15531
+
15532
+ hash.emptyView = emptyViewClass.extend({
15514
15533
  template: inverse,
15515
15534
  tagName: itemHash.tagName
15516
15535
  });
@@ -15608,6 +15627,11 @@ Ember.Handlebars.EachView = Ember.CollectionView.extend(Ember.Metamorph, {
15608
15627
  Ember.Handlebars.registerHelper('each', function(path, options) {
15609
15628
  options.hash.contentBinding = path;
15610
15629
  options.hash.preserveContext = true;
15630
+
15631
+ // Set up emptyView as a metamorph with no tag
15632
+ options.hash.itemTagName = '';
15633
+ options.hash.emptyViewClass = Ember.View.extend(Ember.Metamorph);
15634
+
15611
15635
  return Ember.Handlebars.helpers.collection.call(this, 'Ember.Handlebars.EachView', options);
15612
15636
  });
15613
15637