ember-data-source 1.0.0.beta.9 → 1.0.0.beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/dist/ember-data.js +711 -1273
- data/dist/ember-data.min.js +3 -3
- data/dist/ember-data.named-amd.js +703 -1249
- data/dist/ember-data.named-amd.min.js +3 -3
- data/dist/ember-data.named-amd.prod.js +695 -1240
- data/dist/ember-data.prod.js +695 -1256
- data/package.json +14 -5
- metadata +2 -2
data/dist/ember-data.min.js
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
(function(e){var r,t,i,a;(function(){var e;if(!Array.isArray){e=function(e){return Object.prototype.toString.call(e)==="[object Array]"}}else{e=Array.isArray}var n={},s={},o={};var d=false;r=function(r,t,i){if(!e(t)){i=t;t=[]}n[r]={deps:t,callback:i}};function u(e,r,t){var a=e.length;var n=new Array(a);var s;var o;for(var d=0,u=a;d<u;d++){s=e[d];if(s==="exports"){o=n[d]=t}else{n[d]=i(c(s,r))}}return{deps:n,exports:o}}a=i=t=function(e){if(o[e]!==d&&s.hasOwnProperty(e)){return s[e]}if(!n[e]){throw new Error("Could not find module "+e)}var r=n[e];var t;var i;var a=false;s[e]={};try{t=u(r.deps,e,s[e]);i=r.callback.apply(this,t.deps);a=true}finally{if(!a){o[e]=d}}return t.exports?s[e]:s[e]=i};function c(e,r){if(e.charAt(0)!=="."){return e}var t=e.split("/");var i=r.split("/");var a;if(i.length===1){a=i}else{a=i.slice(0,-1)}for(var n=0,s=t.length;n<s;n++){var o=t[n];if(o===".."){a.pop()}else if(o==="."){continue}else{a.push(o)}}return a.join("/")}a.entries=a._eak_seen=n;a.clear=function(){a.entries=a._eak_seen=n={};s=o={}}})();r("activemodel-adapter",["activemodel-adapter/system","exports"],function(e,r){"use strict";var t=e.ActiveModelAdapter;var i=e.ActiveModelSerializer;r.ActiveModelAdapter=t;r.ActiveModelSerializer=i});r("activemodel-adapter/setup-container",["ember-data/system/container_proxy","activemodel-adapter/system/active_model_serializer","activemodel-adapter/system/active_model_adapter","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t["default"];i["default"]=function o(e,r){var t=new a(e);t.registerDeprecations([{deprecated:"serializer:_ams",valid:"serializer:-active-model"},{deprecated:"adapter:_ams",valid:"adapter:-active-model"}]);e.register("serializer:-active-model",n);e.register("adapter:-active-model",s)}});r("activemodel-adapter/system",["activemodel-adapter/system/active_model_adapter","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.ActiveModelAdapter=i;t.ActiveModelSerializer=a});r("activemodel-adapter/system/active_model_adapter",["ember-data/adapters","ember-data/system/adapter","ember-inflector","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t,i,a){"use strict";var n=e.RESTAdapter;var s=r.InvalidError;var o=t.pluralize;var d=i["default"];var u=Ember.EnumerableUtils.forEach;var c=Ember.String.decamelize,l=Ember.String.underscore;var f=n.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=c(e);var t=l(r);return o(t)},ajaxError:function(e){var r=this._super(e);if(e&&e.status===422){var t=Ember.$.parseJSON(e.responseText),i={};if(t.errors!==undefined){var a=t.errors;u(Ember.keys(a),function(e){i[Ember.String.camelize(e)]=a[e]})}return new s(i)}else{return r}}});a["default"]=f});r("activemodel-adapter/system/active_model_serializer",["ember-inflector","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e.singularize;var a=r["default"];var n=Ember.get,s=Ember.EnumerableUtils.forEach,o=Ember.String.camelize,d=Ember.String.capitalize,u=Ember.String.decamelize,c=Ember.String.underscore;var l=a.extend({keyForAttribute:function(e){return u(e)},keyForRelationship:function(e,r){var t=u(e);if(r==="belongsTo"){return t+"_id"}else if(r==="hasMany"){return i(t)+"_ids"}else{return t}},serializeHasMany:Ember.K,serializeIntoHash:function(e,r,t,i){var a=c(u(r.typeKey));e[a]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var a=n(e,i);var s=c(i+"_type");if(Ember.isNone(a)){r[s]=null}else{r[s]=d(o(a.constructor.typeKey))}},normalize:function(e,r,t){this.normalizeLinks(r);return this._super(e,r,t)},normalizeLinks:function(e){if(e.links){var r=e.links;for(var t in r){var i=o(t);if(i!==t){r[i]=r[t];delete r[t]}}}},normalizeRelationships:function(e,r){if(this.keyForRelationship){e.eachRelationship(function(e,t){var i,a;if(t.options.polymorphic){i=this.keyForAttribute(e);a=r[i];if(a&&a.type){a.type=this.typeForRoot(a.type)}else if(a&&t.kind==="hasMany"){var n=this;s(a,function(e){e.type=n.typeForRoot(e.type)})}}else{i=this.keyForRelationship(e,t.kind);if(!r.hasOwnProperty(i)){return}a=r[i]}r[e]=a;if(e!==i){delete r[i]}},this)}}});t["default"]=l});r("ember-data",["ember-data/core","ember-data/ext/date","ember-data/system/store","ember-data/system/model","ember-data/system/changes","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","exports"],function(e,r,t,i,a,n,s,o,d,u,c,l,f,h,p,m,v,y,b,g,R){"use strict";Ember.RSVP.Promise.cast=Ember.RSVP.Promise.cast||Ember.RSVP.resolve;var E=e["default"];var _=t.Store;var F=t.PromiseArray;var A=t.PromiseObject;var T=i.Model;var z=i.Errors;var S=i.RootState;var x=i.attr;var C=a.AttributeChange;var M=a.RelationshipChange;var k=a.RelationshipChangeAdd;var O=a.RelationshipChangeRemove;var D=a.OneToManyChange;var P=a.ManyToNoneChange;var w=a.OneToOneChange;var I=a.ManyToManyChange;var N=n.InvalidError;var $=n.Adapter;var K=s["default"];var j=o.RecordArray;var L=o.FilteredRecordArray;var U=o.AdapterPopulatedRecordArray;var B=o.ManyArray;var V=d["default"];var H=u.RESTAdapter;var W=u.FixtureAdapter;var q=c["default"];var Q=l["default"];var X=h["default"];var J=p.ActiveModelAdapter;var G=p.ActiveModelSerializer;var Y=m.Transform;var Z=m.DateTransform;var er=m.NumberTransform;var rr=m.StringTransform;var tr=m.BooleanTransform;var ir=v.hasMany;var ar=v.belongsTo;var nr=b["default"];var sr=g["default"];E.Store=_;E.PromiseArray=F;E.PromiseObject=A;E.Model=T;E.RootState=S;E.attr=x;E.Errors=z;E.AttributeChange=C;E.RelationshipChange=M;E.RelationshipChangeAdd=k;E.OneToManyChange=D;E.ManyToNoneChange=D;E.OneToOneChange=w;E.ManyToManyChange=I;E.Adapter=$;E.InvalidError=N;E.DebugAdapter=K;E.RecordArray=j;E.FilteredRecordArray=L;E.AdapterPopulatedRecordArray=U;E.ManyArray=B;E.RecordArrayManager=V;E.RESTAdapter=H;E.FixtureAdapter=W;E.RESTSerializer=Q;E.JSONSerializer=q;E.Transform=Y;E.DateTransform=Z;E.StringTransform=rr;E.NumberTransform=er;E.BooleanTransform=tr;E.ActiveModelAdapter=J;E.ActiveModelSerializer=G;E.EmbeddedRecordsMixin=X;E.belongsTo=ar;E.hasMany=ir;E.ContainerProxy=sr;E._setupContainer=nr;Ember.lookup.DS=E;R["default"]=E});r("ember-data/adapters",["ember-data/adapters/fixture_adapter","ember-data/adapters/rest_adapter","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.RESTAdapter=a;t.FixtureAdapter=i});r("ember-data/adapters/fixture_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.String.fmt;var a=Ember.EnumerableUtils.indexOf;var n=0;var s=e["default"];r["default"]=s.extend({serializer:null,simulateRemoteResponse:true,latency:50,fixturesForType:function(e){if(e.FIXTURES){var r=Ember.A(e.FIXTURES);return r.map(function(e){var r=typeof e.id;if(r!=="number"&&r!=="string"){throw new Error(i("the id property must be defined as a number or string for fixture %@",[e]))}e.id=e.id+"";return e})}return null},queryFixtures:function(e,r,t){},updateFixtures:function(e,r){if(!e.FIXTURES){e.FIXTURES=[]}var t=e.FIXTURES;this.deleteLoadedFixture(e,r);t.push(r)},mockJSON:function(e,r,t){return e.serializerFor(r).serialize(t,{includeId:true})},generateIdForRecord:function(e){return"fixture-"+n++},find:function(e,r,t){var i=this.fixturesForType(r);var a;if(i){a=Ember.A(i).findBy("id",t)}if(a){return this.simulateRemoteCall(function(){return a},this)}},findMany:function(e,r,t){var i=this.fixturesForType(r);if(i){i=i.filter(function(e){return a(t,e.id)!==-1})}if(i){return this.simulateRemoteCall(function(){return i},this)}},findAll:function(e,r){var t=this.fixturesForType(r);return this.simulateRemoteCall(function(){return t},this)},findQuery:function(e,r,t,i){var a=this.fixturesForType(r);a=this.queryFixtures(a,t,r);if(a){return this.simulateRemoteCall(function(){return a},this)}},createRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},updateRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},deleteRecord:function(e,r,t){this.deleteLoadedFixture(r,t);return this.simulateRemoteCall(function(){return null})},deleteLoadedFixture:function(e,r){var t=this.findExistingFixture(e,r);if(t){var i=a(e.FIXTURES,t);e.FIXTURES.splice(i,1);return true}},findExistingFixture:function(e,r){var i=this.fixturesForType(e);var a=t(r,"id");return this.findFixtureById(i,a)},findFixtureById:function(e,r){return Ember.A(e).find(function(e){if(""+t(e,"id")===""+r){return true}else{return false}})},simulateRemoteCall:function(e,r){var i=this;return new Ember.RSVP.Promise(function(a){if(t(i,"simulateRemoteResponse")){Ember.run.later(function(){a(e.call(r))},t(i,"latency"))}else{Ember.run.schedule("actions",null,function(){a(e.call(r))})}},"DS: FixtureAdapter#simulateRemoteCall")}})});r("ember-data/adapters/rest_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;var a=Ember.ArrayPolyfills.forEach;r["default"]=t.extend({defaultSerializer:"-rest",coalesceFindRequests:false,find:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET")},findAll:function(e,r,t){var i;if(t){i={since:t}}return this.ajax(this.buildURL(r.typeKey),"GET",{data:i})},findQuery:function(e,r,t){return this.ajax(this.buildURL(r.typeKey),"GET",{data:t})},findMany:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET",{data:{ids:t}})},findHasMany:function(e,r,t){var a=i(this,"host");var n=i(r,"id");var s=r.constructor.typeKey;if(a&&t.charAt(0)==="/"&&t.charAt(1)!=="/"){t=a+t}return this.ajax(this.urlPrefix(t,this.buildURL(s,n)),"GET")},findBelongsTo:function(e,r,t){var a=i(r,"id");var n=r.constructor.typeKey;return this.ajax(this.urlPrefix(t,this.buildURL(n,a)),"GET")},createRecord:function(e,r,t){var i={};var a=e.serializerFor(r.typeKey);a.serializeIntoHash(i,r,t,{includeId:true});return this.ajax(this.buildURL(r.typeKey,null,t),"POST",{data:i})},updateRecord:function(e,r,t){var a={};var n=e.serializerFor(r.typeKey);n.serializeIntoHash(a,r,t);var s=i(t,"id");return this.ajax(this.buildURL(r.typeKey,s,t),"PUT",{data:a})},deleteRecord:function(e,r,t){var a=i(t,"id");return this.ajax(this.buildURL(r.typeKey,a,t),"DELETE")},buildURL:function(e,r,t){var a=[],n=i(this,"host"),s=this.urlPrefix();if(e){a.push(this.pathForType(e))}if(r&&!Ember.isArray(r)){a.push(r)}if(s){a.unshift(s)}a=a.join("/");if(!n&&a){a="/"+a}return a},urlPrefix:function(e,r){var t=i(this,"host");var a=i(this,"namespace");var n=[];if(e){if(e.charAt(0)==="/"){if(t){e=e.slice(1);n.push(t)}}else if(!/^http(s)?:\/\//.test(e)){n.push(r)}}else{if(t){n.push(t)}if(a){n.push(a)}}if(e){n.push(e)}return n.join("/")},_stripIDFromURL:function(e,r){var t=e.modelFor(r);var i=this.buildURL(t.typeKey,r.get("id"),r);var a=i.split("/");var s=a[a.length-1];var o=r.get("id");if(s===o){a[a.length-1]=""}else if(n(s,"?id="+o)){a[a.length-1]=s.substring(0,s.length-o.length-1)}return a.join("/")},groupRecordsForFindMany:function(e,r){var t=Ember.MapWithDefault.create({defaultValue:function(){return[]}});var i=this;a.call(r,function(r){var a=i._stripIDFromURL(e,r);t.get(a).push(r)});function n(r,t){var n=i._stripIDFromURL(e,r[0]);var s=0;var o=[[]];a.call(r,function(e){var r="&ids[]=".length+e.get("id.length");if(n.length+s+r>=t){s=0;o.push([])}s+=r;var i=o.length-1;o[i].push(e)});return o}var s=[];t.forEach(function(e,r){var t=2048;var i=n(r,t);a.call(i,function(e){s.push(e)})});return s},pathForType:function(e){var r=Ember.String.camelize(e);return Ember.String.pluralize(r)},ajaxError:function(e){if(e&&typeof e==="object"){e.then=null}return e},ajax:function(e,r,t){var i=this;return new Ember.RSVP.Promise(function(a,n){var s=i.ajaxOptions(e,r,t);s.success=function(e){Ember.run(null,a,e)};s.error=function(e,r,t){Ember.run(null,n,i.ajaxError(e))};Ember.$.ajax(s)},"DS: RESTAdapter#ajax "+r+" to "+e)},ajaxOptions:function(e,r,t){var n=t||{};n.url=e;n.type=r;n.dataType="json";n.context=this;if(n.data&&r!=="GET"){n.contentType="application/json; charset=utf-8";n.data=JSON.stringify(n.data)}var s=i(this,"headers");if(s!==undefined){n.beforeSend=function(e){a.call(Ember.keys(s),function(r){e.setRequestHeader(r,s[r])})}}return n}});function n(e,r){if(typeof String.prototype.endsWith!=="function"){return e.indexOf(r,e.length-r.length)!==-1}else{return e.endsWith(r)}}});r("ember-data/core",["exports"],function(e){"use strict";var r;if("undefined"===typeof r){r=Ember.Namespace.create({VERSION:"1.0.0-beta.9"});if(Ember.libraries){Ember.libraries.registerCoreLibrary("Ember Data",r.VERSION)}}e["default"]=r});r("ember-data/ember-initializer",["ember-data/setup-container"],function(e){"use strict";var r=e["default"];var t=Ember.K;Ember.onLoad("Ember.Application",function(e){e.initializer({name:"ember-data",initialize:r});e.initializer({name:"store",after:"ember-data",initialize:t});e.initializer({name:"activeModelAdapter",before:"store",initialize:t});e.initializer({name:"transforms",before:"store",initialize:t});e.initializer({name:"data-adapter",before:"store",initialize:t});e.initializer({name:"injectStore",before:"store",initialize:t})})});r("ember-data/ext/date",[],function(){"use strict";Ember.Date=Ember.Date||{};var e=Date.parse,r=[1,4,5,6,7,10,11];Ember.Date.parse=function(t){var i,a,n=0;if(a=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(t)){for(var s=0,o;o=r[s];++s){a[o]=+a[o]||0}a[2]=(+a[2]||1)-1;a[3]=+a[3]||1;if(a[8]!=="Z"&&a[9]!==undefined){n=a[10]*60+a[11];if(a[9]==="+"){n=0-n}}i=Date.UTC(a[1],a[2],a[3],a[4],a[5]+n,a[6],a[7])}else{i=e?e(t):NaN}return i};if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.Date){Date.parse=Ember.Date.parse}});r("ember-data/initializers/data_adapter",["ember-data/system/debug/debug_adapter","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=function i(e){e.register("data-adapter:main",t)}});r("ember-data/initializers/store",["ember-data/serializers","ember-data/adapters","ember-data/system/container_proxy","ember-data/system/store","exports"],function(e,r,t,i,a){"use strict";var n=e.JSONSerializer;var s=e.RESTSerializer;var o=r.RESTAdapter;var d=t["default"];var u=i["default"];a["default"]=function c(e,r){e.register("store:main",e.lookupFactory("store:application")||r&&r.Store||u);var t=new d(e);t.registerDeprecations([{deprecated:"serializer:_default",valid:"serializer:-default"},{deprecated:"serializer:_rest",valid:"serializer:-rest"},{deprecated:"adapter:_rest",valid:"adapter:-rest"}]);e.register("serializer:-default",n);e.register("serializer:-rest",s);e.register("adapter:-rest",o);e.lookup("store:main")}});r("ember-data/initializers/store_injections",["exports"],function(e){"use strict";e["default"]=function r(e){e.injection("controller","store","store:main");e.injection("route","store","store:main");e.injection("serializer","store","store:main");e.injection("data-adapter","store","store:main")}});r("ember-data/initializers/transforms",["ember-data/transforms","exports"],function(e,r){"use strict";var t=e.BooleanTransform;var i=e.DateTransform;var a=e.StringTransform;var n=e.NumberTransform;r["default"]=function s(e){e.register("transform:boolean",t);e.register("transform:date",i);e.register("transform:number",n);e.register("transform:string",a)}});r("ember-data/serializers",["ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.JSONSerializer=i;t.RESTSerializer=a});r("ember-data/serializers/embedded_records_mixin",["ember-inflector","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.EnumerableUtils.forEach;var a=Ember.String.camelize;var n=e.pluralize;var s=Ember.Mixin.create({normalize:function(e,r,t){var i=this._super(e,r,t);return o(this,this.store,e,i)},keyForRelationship:function(e,r){if(this.hasDeserializeRecordsOption(e)){return this.keyForAttribute(e)}else{return this._super(e,r)||e}},serializeBelongsTo:function(e,r,i){var a=i.key;var n=this.get("attrs");if(this.noSerializeOptionSpecified(a)){this._super(e,r,i);return}var s=this.hasSerializeIdsOption(a);var o=this.hasSerializeRecordsOption(a);var d=e.get(a);var u;if(s){u=this.keyForRelationship(a,i.kind);if(!d){r[u]=null}else{r[u]=t(d,"id")}}else if(o){u=this.keyForAttribute(a);if(!d){r[u]=null}else{r[u]=d.serialize({includeId:true});this.removeEmbeddedForeignKey(e,d,i,r[u])}}},serializeHasMany:function(e,r,i){var a=i.key;var n=this.get("attrs");if(this.noSerializeOptionSpecified(a)){this._super(e,r,i);return}var s=this.hasSerializeIdsOption(a);var o=this.hasSerializeRecordsOption(a);var d;if(s){d=this.keyForRelationship(a,i.kind);r[d]=t(e,a).mapBy("id")}else if(o){d=this.keyForAttribute(a);r[d]=t(e,a).map(function(r){var t=r.serialize({includeId:true});this.removeEmbeddedForeignKey(e,r,i,t);return t},this)}},removeEmbeddedForeignKey:function(e,r,t,i){if(t.kind==="hasMany"){return}else if(t.kind==="belongsTo"){var a=e.constructor.inverseFor(t.key);if(a){var n=a.name;var s=this.store.serializerFor(r.constructor);var o=s.keyForRelationship(n,a.kind);if(o){delete i[o]}}}},hasEmbeddedAlwaysOption:function(e){var r=this.attrsOption(e);return r&&r.embedded==="always"},hasSerializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.serialize==="records"},hasSerializeIdsOption:function(e){var r=this.attrsOption(e);return r&&(r.serialize==="ids"||r.serialize==="id")},noSerializeOptionSpecified:function(e){var r=this.attrsOption(e);var t=this.hasSerializeRecordsOption(e);var i=this.hasSerializeIdsOption(e);return!(r&&(r.serialize||r.embedded))},hasDeserializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.deserialize==="records"},attrsOption:function(e){var r=this.get("attrs");return r&&(r[a(e)]||r[e])}});function o(e,r,t,i){t.eachRelationship(function(t,a){if(e.hasDeserializeRecordsOption(t)){var n=r.modelFor(a.type.typeKey);if(a.kind==="hasMany"){d(r,t,n,i)}if(a.kind==="belongsTo"){u(r,t,n,i)}}});return i}function d(e,r,t,a){if(!a[r]){return a}var n=[];var s=e.serializerFor(t.typeKey);i(a[r],function(r){var i=s.normalize(t,r,null);e.push(t,i);n.push(i.id)});a[r]=n;return a}function u(e,r,t,i){if(!i[r]){return i}var a=e.serializerFor(t.typeKey);var n=a.normalize(t,i[r],null);e.push(t,n);i[r]=n.id;return i}r["default"]=s});r("ember-data/serializers/json_serializer",["ember-data/system/changes","exports"],function(e,r){"use strict";var t=e.RelationshipChange;var i=Ember.get;var a=Ember.set;var n=Ember.isNone;var s=Ember.ArrayPolyfills.map;var o=Ember.merge;r["default"]=Ember.Object.extend({primaryKey:"id",applyTransforms:function(e,r){e.eachTransformedAttribute(function(e,t){if(!r.hasOwnProperty(e)){return}var i=this.transformFor(t);r[e]=i.deserialize(r[e])},this);return r},normalize:function(e,r){if(!r){return r}this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);this.applyTransforms(e,r);return r},normalizePayload:function(e){return e},normalizeAttributes:function(e,r){var t,i;if(this.keyForAttribute){e.eachAttribute(function(e){t=this.keyForAttribute(e);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeRelationships:function(e,r){var t,i;if(this.keyForRelationship){e.eachRelationship(function(e,i){t=this.keyForRelationship(e,i.kind);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeUsingDeclaredMapping:function(e,r){var t=i(this,"attrs"),a,n;if(t){for(n in t){a=this._getMappedKey(n);if(!r.hasOwnProperty(a)){continue}if(a!==n){r[n]=r[a];delete r[a]}}}},normalizeId:function(e){var r=i(this,"primaryKey");if(r==="id"){return}e.id=e[r];delete e[r]},_getMappedKey:function(e){var r=i(this,"attrs");var t;if(r&&r[e]){t=r[e];if(t.key){t=t.key}if(typeof t==="string"){e=t}}return e},_canSerialize:function(e){var r=i(this,"attrs");return!r||!r[e]||r[e].serialize!==false},serialize:function(e,r){var t={};if(r&&r.includeId){var a=i(e,"id");if(a){t[i(this,"primaryKey")]=a}}e.eachAttribute(function(r,i){this.serializeAttribute(e,t,r,i)},this);e.eachRelationship(function(r,i){if(i.kind==="belongsTo"){this.serializeBelongsTo(e,t,i)}else if(i.kind==="hasMany"){this.serializeHasMany(e,t,i)}},this);return t},serializeIntoHash:function(e,r,t,i){o(e,this.serialize(t,i))},serializeAttribute:function(e,r,t,a){var n=a.type;if(this._canSerialize(t)){var s=i(e,t);if(n){var o=this.transformFor(n);s=o.serialize(s)}var d=this._getMappedKey(t);if(d===t&&this.keyForAttribute){d=this.keyForAttribute(t)}r[d]=s}},serializeBelongsTo:function(e,r,t){var a=t.key;if(this._canSerialize(a)){var s=i(e,a);var o=this._getMappedKey(a);if(o===a&&this.keyForRelationship){o=this.keyForRelationship(a,"belongsTo")}if(n(s)){r[o]=s}else{r[o]=i(s,"id")}if(t.options.polymorphic){this.serializePolymorphicType(e,r,t)}}},serializeHasMany:function(e,r,a){var n=a.key;if(this._canSerialize(n)){var s;s=this._getMappedKey(n);if(s===n&&this.keyForRelationship){s=this.keyForRelationship(n,"hasMany")}var o=t.determineRelationshipType(e.constructor,a);if(o==="manyToNone"||o==="manyToMany"){r[s]=i(e,n).mapBy("id")}}},serializePolymorphicType:Ember.K,extract:function(e,r,t,i,a){this.extractMeta(e,r,t);var n="extract"+a.charAt(0).toUpperCase()+a.substr(1);return this[n](e,r,t,i,a)},extractFindAll:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindQuery:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindHasMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractCreateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractUpdateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractDeleteRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractFind:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractFindBelongsTo:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSave:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSingle:function(e,r,t,i,a){t=this.normalizePayload(t);return this.normalize(r,t)},extractArray:function(e,r,t,i,a){var n=this.normalizePayload(t);var o=this;return s.call(n,function(e){return o.normalize(r,e)})},extractMeta:function(e,r,t){if(t&&t.meta){e.metaForType(r,t.meta);delete t.meta}},keyForAttribute:function(e){return e},keyForRelationship:function(e,r){return e},transformFor:function(e,r){var t=this.container.lookup("transform:"+e);return t}})});r("ember-data/serializers/rest_serializer",["ember-data/serializers/json_serializer","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e["default"];var a=Ember.get;var n=Ember.set;var s=Ember.ArrayPolyfills.forEach;var o=Ember.ArrayPolyfills.map;var d=Ember.String.camelize;var u=r.singularize;function c(e){return e==null?null:e+""}t["default"]=i.extend({normalize:function(e,r,t){this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);if(this.normalizeHash&&this.normalizeHash[t]){this.normalizeHash[t](r)}this.applyTransforms(e,r);return r},extractSingle:function(e,r,t,i){var a=this.normalizePayload(t);var n=r.typeKey;var o;for(var d in a){var u=this.typeForRoot(d);var l=e.modelFor(u);var f=l.typeKey===n;var h=a[d];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,d);continue}s.call(h,function(r){var t=this.typeForRoot(d);var a=e.modelFor(t);var n=e.serializerFor(a);r=n.normalize(a,r,d);var s=f&&!i&&!o;var u=f&&c(r.id)===i;if(s||u){o=r}else{e.push(t,r)}},this)}return o},extractArray:function(e,r,t){var i=this.normalizePayload(t);var a=r.typeKey;var n;for(var s in i){var d=s;var u=false;if(s.charAt(0)==="_"){u=true;d=s.substr(1)}var c=this.typeForRoot(d);var l=e.modelFor(c);var f=e.serializerFor(l);var h=!u&&l.typeKey===a;var p=o.call(i[s],function(e){return f.normalize(l,e,s)},this);if(h){n=p}else{e.pushMany(c,p)}}return n},pushPayload:function(e,r){var t=this.normalizePayload(r);for(var i in t){var a=this.typeForRoot(i);var n=e.modelFor(a);var s=e.serializerFor(n);var d=o.call(Ember.makeArray(t[i]),function(e){return s.normalize(n,e,i)},this);e.pushMany(a,d)}},typeForRoot:function(e){return d(u(e))},serialize:function(e,r){return this._super.apply(this,arguments)},serializeIntoHash:function(e,r,t,i){e[r.typeKey]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var n=a(e,i);i=this.keyForAttribute?this.keyForAttribute(i):i;if(Ember.isNone(n)){r[i+"Type"]=null}else{r[i+"Type"]=Ember.String.camelize(n.constructor.typeKey)}}})});r("ember-data/setup-container",["ember-data/initializers/store","ember-data/initializers/transforms","ember-data/initializers/store_injections","ember-data/initializers/data_adapter","activemodel-adapter/setup-container","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var d=t["default"];var u=i["default"];var c=a["default"];n["default"]=function l(e,r){u(e,r);o(e,r);d(e,r);s(e,r);c(e,r)}});r("ember-data/system/adapter",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;var i=Ember.ArrayPolyfills.map;var a=["description","fileName","lineNumber","message","name","number","stack"];function n(e){var r=Error.prototype.constructor.call(this,"The backend rejected the commit because it was invalid: "+Ember.inspect(e));this.errors=e;for(var t=0,i=a.length;t<i;t++){this[a[t]]=r[a[t]]}}n.prototype=Ember.create(Error.prototype);var s=Ember.Object.extend({find:Ember.required(Function),findAll:null,findQuery:null,generateIdForRecord:null,serialize:function(e,t){return r(e,"store").serializerFor(e.constructor.typeKey).serialize(e,t)},createRecord:Ember.required(Function),updateRecord:Ember.required(Function),deleteRecord:Ember.required(Function),coalesceFindRequests:true,groupRecordsForFindMany:function(e,r){return[r]}});e.InvalidError=n;e.Adapter=s;e["default"]=s});r("ember-data/system/changes",["ember-data/system/changes/relationship_change","exports"],function(e,r){"use strict";var t=e.RelationshipChange;var i=e.RelationshipChangeAdd;var a=e.RelationshipChangeRemove;var n=e.OneToManyChange;var s=e.ManyToNoneChange;var o=e.OneToOneChange;var d=e.ManyToManyChange;r.RelationshipChange=t;r.RelationshipChangeAdd=i;r.RelationshipChangeRemove=a;r.OneToManyChange=n;r.ManyToNoneChange=s;r.OneToOneChange=o;r.ManyToManyChange=d});r("ember-data/system/changes/relationship_change",["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r.isSyncRelationship;var n=Ember.get;var s=Ember.set;var o=Ember.EnumerableUtils.forEach;var d=function(e){this.parentRecord=e.parentRecord;this.childRecord=e.childRecord;this.firstRecord=e.firstRecord;this.firstRecordKind=e.firstRecordKind;this.firstRecordName=e.firstRecordName;this.secondRecord=e.secondRecord;this.secondRecordKind=e.secondRecordKind;this.secondRecordName=e.secondRecordName;this.changeType=e.changeType;this.store=e.store;this.committed={}};function u(e){d.call(this,e)}function c(e){d.call(this,e)}d.create=function(e){return new d(e)};u.create=function(e){return new u(e)};c.create=function(e){return new c(e)};var l={};var f={};var h={};var p={};var m={};d._createChange=function(e){if(e.changeType==="add"){return u.create(e)}if(e.changeType==="remove"){return c.create(e)}};d.determineRelationshipType=function(e,r){var t=r.key,i,a;var n=r.kind;var s=e.inverseFor(t);if(s){i=s.name;a=s.kind}if(!s){return n==="belongsTo"?"oneToNone":"manyToNone"}else{if(a==="belongsTo"){return n==="belongsTo"?"oneToOne":"manyToOne"}else{return n==="belongsTo"?"oneToMany":"manyToMany"}}};d.createChange=function(e,r,t,i){var a=e.constructor,n;n=d.determineRelationshipType(a,i);if(n==="oneToMany"){return l.createChange(e,r,t,i)}else if(n==="manyToOne"){return l.createChange(r,e,t,i)}else if(n==="oneToNone"){return f.createChange(e,r,t,i)}else if(n==="manyToNone"){return h.createChange(e,r,t,i)}else if(n==="oneToOne"){return p.createChange(e,r,t,i)}else if(n==="manyToMany"){return m.createChange(e,r,t,i)}};f.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,store:t,changeType:i.changeType,firstRecordName:a,firstRecordKind:"belongsTo"});t.addRelationshipChangeFor(e,a,r,null,n);return n};h.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:e,childRecord:r,secondRecord:e,store:t,changeType:i.changeType,secondRecordName:i.key,secondRecordKind:"hasMany"});t.addRelationshipChangeFor(e,a,r,null,n);return n};m.createChange=function(e,r,t,i){var a=i.key;var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"hasMany",secondRecordKind:"hasMany",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,null,n);return n};p.createChange=function(e,r,t,i){var a;if(i.parentType){a=i.parentType.inverseFor(i.key).name}else if(i.key){a=i.key}else{}var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"belongsTo",secondRecordKind:"belongsTo",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,null,n);return n};p.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&r.recordIsMaterialized(t)){var a=n(t,i);if(a){var s=p.createChange(t,a,r,{parentType:e.parentType,hasManyName:e.hasManyName,changeType:"remove",key:e.key});r.addRelationshipChangeFor(t,i,e.parentRecord,null,s);s.sync()}}};l.createChange=function(e,r,t,i){var a;if(i.parentType){a=i.parentType.inverseFor(i.key).name;l.maintainInvariant(i,t,e,a)}else if(i.key){a=i.key}else{}var n=d._createChange({parentRecord:r,childRecord:e,firstRecord:e,secondRecord:r,firstRecordKind:"belongsTo",secondRecordKind:"hasMany",store:t,changeType:i.changeType,firstRecordName:a});t.addRelationshipChangeFor(e,a,r,n.getSecondRecordName(),n);return n};l.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&t){var a=n(t,i);if(a){var s=l.createChange(t,a,r,{parentType:e.parentType,hasManyName:e.hasManyName,changeType:"remove",key:e.key});r.addRelationshipChangeFor(t,i,e.parentRecord,s.getSecondRecordName(),s);s.sync()}}};d.prototype={getSecondRecordName:function(){var e=this.secondRecordName,r;if(!e){r=this.secondRecord;if(!r){return}var t=this.firstRecord.constructor;var i=t.inverseFor(this.firstRecordName);this.secondRecordName=i.name}return this.secondRecordName},getFirstRecordName:function(){return this.firstRecordName},destroy:function(){var e=this.childRecord;var r=this.getFirstRecordName();var t=this.getSecondRecordName();var i=this.store;i.removeRelationshipChangeFor(e,r,this.parentRecord,t,this.changeType)},getSecondRecord:function(){return this.secondRecord},getFirstRecord:function(){return this.firstRecord},coalesce:function(){var e=this.store.relationshipChangePairsFor(this.firstRecord);o(e,function(e){var r=e["add"];var t=e["remove"];if(r&&t){r.destroy();t.destroy()}})}};u.prototype=Ember.create(d.create({}));c.prototype=Ember.create(d.create({}));u.prototype.changeType="add";u.prototype.sync=function(){var e=this.getSecondRecordName();var r=this.getFirstRecordName();var t=this.getFirstRecord();var o=this.getSecondRecord();if(o instanceof i&&t instanceof i){if(this.secondRecordKind==="belongsTo"){o.suspendRelationshipObservers(function(){s(o,e,t)
|
2
|
-
})}else if(this.secondRecordKind==="hasMany"&&a(o,e)){o.suspendRelationshipObservers(function(){var r=n(o,e);r.addObject(t)})}}if(t instanceof i&&o instanceof i&&n(t,r)!==o){if(this.firstRecordKind==="belongsTo"){t.suspendRelationshipObservers(function(){s(t,r,o)})}else if(this.firstRecordKind==="hasMany"&&a(o,e)){t.suspendRelationshipObservers(function(){var e=n(t,r);e.addObject(o)})}}this.coalesce()};c.prototype.changeType="remove";c.prototype.sync=function(){var e=this.getSecondRecordName();var r=this.getFirstRecordName();var t=this.getFirstRecord();var o=this.getSecondRecord();if(o instanceof i&&t instanceof i){if(this.secondRecordKind==="belongsTo"){o.suspendRelationshipObservers(function(){s(o,e,null)})}else if(this.secondRecordKind==="hasMany"&&a(o,e)){o.suspendRelationshipObservers(function(){var r=n(o,e);r.removeObject(t)})}}if(t instanceof i&&n(t,r)){if(this.firstRecordKind==="belongsTo"){t.suspendRelationshipObservers(function(){s(t,r,null)})}else if(this.firstRecordKind==="hasMany"&&a(t,r)){t.suspendRelationshipObservers(function(){var e=n(t,r);e.removeObject(o)})}}this.coalesce()};t.RelationshipChange=d;t.RelationshipChangeAdd=u;t.RelationshipChangeRemove=c;t.OneToManyChange=l;t.ManyToNoneChange=h;t.OneToOneChange=p;t.ManyToManyChange=m});r("ember-data/system/container_proxy",["exports"],function(e){"use strict";function r(e){this.container=e}r.prototype.aliasedFactory=function(e,r){var t=this;return{create:function(){if(r){r()}return t.container.lookup(e)}}};r.prototype.registerAlias=function(e,r,t){var i=this.aliasedFactory(r,t);return this.container.register(e,i)};r.prototype.registerDeprecation=function(e,r){var t=function(){};return this.registerAlias(e,r,t)};r.prototype.registerDeprecations=function(e){var r,t,i,a,n;for(r=e.length;r>0;r--){t=e[r-1];i=t["deprecated"];a=t["valid"];this.registerDeprecation(i,a)}};e["default"]=r});r("ember-data/system/debug",["ember-data/system/debug/debug_info","ember-data/system/debug/debug_adapter","exports"],function(e,r,t){"use strict";var i=r["default"];t["default"]=i});r("ember-data/system/debug/debug_adapter",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;var i=Ember.get;var a=Ember.String.capitalize;var n=Ember.String.underscore;r["default"]=Ember.DataAdapter.extend({getFilters:function(){return[{name:"isNew",desc:"New"},{name:"isModified",desc:"Modified"},{name:"isClean",desc:"Clean"}]},detect:function(e){return e!==t&&t.detect(e)},columnsForType:function(e){var r=[{name:"id",desc:"Id"}];var t=0;var s=this;i(e,"attributes").forEach(function(e,i){if(t++>s.attributeLimit){return false}var o=a(n(e).replace("_"," "));r.push({name:e,desc:o})});return r},getRecords:function(e){return this.get("store").all(e)},getRecordColumnValues:function(e){var r=this,t=0;var a={id:i(e,"id")};e.eachAttribute(function(n){if(t++>r.attributeLimit){return false}var s=i(e,n);a[n]=s});return a},getRecordKeywords:function(e){var r=[];var t=Ember.A(["id"]);e.eachAttribute(function(e){t.push(e)});t.forEach(function(t){r.push(i(e,t))});return r},getRecordFilterValues:function(e){return{isNew:e.get("isNew"),isModified:e.get("isDirty")&&!e.get("isNew"),isClean:!e.get("isDirty")}},getRecordColor:function(e){var r="black";if(e.get("isNew")){r="green"}else if(e.get("isDirty")){r="blue"}return r},observeRecord:function(e,r){var t=Ember.A(),i=this;var a=Ember.A(["id","isNew","isDirty"]);e.eachAttribute(function(e){a.push(e)});a.forEach(function(a){var n=function(){r(i.wrapRecord(e))};Ember.addObserver(e,a,n);t.push(function(){Ember.removeObserver(e,a,n)})});var n=function(){t.forEach(function(e){e()})};return n}})});r("ember-data/system/debug/debug_info",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;t.reopen({_debugInfo:function(){var e=["id"],r={belongsTo:[],hasMany:[]},t=[];this.eachAttribute(function(r,t){e.push(r)},this);this.eachRelationship(function(e,i){r[i.kind].push(e);t.push(e)});var i=[{name:"Attributes",properties:e,expand:true},{name:"Belongs To",properties:r.belongsTo,expand:true},{name:"Has Many",properties:r.hasMany,expand:true},{name:"Flags",properties:["isLoaded","isDirty","isSaving","isDeleted","isError","isNew","isValid"]}];return{propertyInfo:{includeOtherProperties:true,groups:i,expensiveProperties:t}}}});r["default"]=t});r("ember-data/system/model",["ember-data/system/model/model","ember-data/system/model/attributes","ember-data/system/model/states","ember-data/system/model/errors","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var d=i["default"];a.Model=n;a.RootState=o;a.attr=s;a.Errors=d});r("ember-data/system/model/attributes",["ember-data/system/model/model","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;t.reopenClass({attributes:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isAttribute){t.name=r;e.set(r,t)}});return e}).readOnly(),transformedAttributes:Ember.computed(function(){var e=Ember.Map.create();this.eachAttribute(function(r,t){if(t.type){e.set(r,t.type)}});return e}).readOnly(),eachAttribute:function(e,r){i(this,"attributes").forEach(function(t,i){e.call(r,t,i)},r)},eachTransformedAttribute:function(e,r){i(this,"transformedAttributes").forEach(function(t,i){e.call(r,t,i)})}});t.reopen({eachAttribute:function(e,r){this.constructor.eachAttribute(e,r)}});function a(e,r,t){if(typeof r.defaultValue==="function"){return r.defaultValue.apply(null,arguments)}else{return r.defaultValue}}function n(e,r){return e._attributes.hasOwnProperty(r)||e._inFlightAttributes.hasOwnProperty(r)||e._data.hasOwnProperty(r)}function s(e,r){if(e._attributes.hasOwnProperty(r)){return e._attributes[r]}else if(e._inFlightAttributes.hasOwnProperty(r)){return e._inFlightAttributes[r]}else{return e._data[r]}}r["default"]=function o(e,r){r=r||{};var t={type:e,isAttribute:true,options:r};return Ember.computed("data",function(e,t){if(arguments.length>1){var i=s(this,e);if(t!==i){this._attributes[e]=t;this.send("didSetProperty",{name:e,oldValue:i,originalValue:this._data[e],value:t})}return t}else if(n(this,e)){return s(this,e)}else{return a(this,r,e)}}).meta(t)}});r("ember-data/system/model/errors",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isEmpty;var i=Ember.EnumerableUtils.map;e["default"]=Ember.Object.extend(Ember.Enumerable,Ember.Evented,{registerHandlers:function(e,r,t){this.on("becameInvalid",e,r);this.on("becameValid",e,t)},errorsByAttributeName:Ember.reduceComputed("content",{initialValue:function(){return Ember.MapWithDefault.create({defaultValue:function(){return Ember.A()}})},addedItem:function(e,r){e.get(r.attribute).pushObject(r);return e},removedItem:function(e,r){e.get(r.attribute).removeObject(r);return e}}),errorsFor:function(e){return r(this,"errorsByAttributeName").get(e)},messages:Ember.computed.mapBy("content","message"),content:Ember.computed(function(){return Ember.A()}),unknownProperty:function(e){var r=this.errorsFor(e);if(t(r)){return null}return r},nextObject:function(e,t,i){return r(this,"content").objectAt(e)},length:Ember.computed.oneWay("content.length").readOnly(),isEmpty:Ember.computed.not("length").readOnly(),add:function(e,t){var i=r(this,"isEmpty");t=this._findOrCreateMessages(e,t);r(this,"content").addObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(i&&!r(this,"isEmpty")){this.trigger("becameInvalid")}},_findOrCreateMessages:function(e,r){var t=this.errorsFor(e);return i(Ember.makeArray(r),function(r){return t.findBy("message",r)||{attribute:e,message:r}})},remove:function(e){if(r(this,"isEmpty")){return}var t=r(this,"content").rejectBy("attribute",e);r(this,"content").setObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(r(this,"isEmpty")){this.trigger("becameValid")}},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});r("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],function(e,r,i,a){"use strict";var n=e["default"];var s=r["default"];var o=i.PromiseObject;var d=Ember.get;var u=Ember.set;var c=Ember.merge;var l=Ember.RSVP.Promise;var f=Ember.ArrayPolyfills.forEach;var h;var p=Ember.computed("currentState",function(e,r){return d(d(this,"currentState"),e)}).readOnly();var m=Object.create(null);var v=Object.create(null);function y(e){return v[e]||(v[e]=e.split("."))}function b(e){return m[e]||(m[e]=y(e)[0])}var g=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:p,isLoading:p,isLoaded:p,isDirty:p,isSaving:p,isDeleted:p,isNew:p,isValid:p,dirtyType:p,isError:false,isReloading:false,clientId:null,id:null,currentState:n.empty,errors:Ember.computed(function(){var e=s.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=d(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!h){h=t("ember-data/serializers/json_serializer")["default"]}var r=h.create({container:this.container});return r.serialize(this,e)},didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,didDelete:Ember.K,becameInvalid:Ember.K,becameError:Ember.K,data:Ember.computed(function(){this._data=this._data||{};return this._data}).readOnly(),_data:null,init:function(){this._super();this._setup()},_setup:function(){this._changesToSync={};this._deferredTriggers=[];this._data={};this._attributes={};this._inFlightAttributes={};this._relationships={}},send:function(e,r){var t=d(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=b(e);var t=d(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=y(e);var n=[],s=[],o,c;for(o=0,c=a.length;o<c;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,c=s.length;o<c;o++){s[o].enter(this)}u(this,"currentState",i);for(o=0,c=n.length;o<c;o++){n[o].setup(this)}this.updateRecordArraysLater()},_unhandledEvent:function(e,r,t){var i="Attempted to handle event `"+r+"` ";i+="on "+String(this)+" while in state ";i+=e.stateName+". ";if(t!==undefined){i+="Called with "+Ember.inspect(t)+"."}throw new Ember.Error(i)},withTransaction:function(e){var r=d(this,"transaction");if(r){e(r)}},loadingData:function(e){this.send("loadingData",e)},loadedData:function(){this.send("loadedData")},notFound:function(){this.send("notFound")},pushedData:function(){this.send("pushedData")},deleteRecord:function(){this.send("deleteRecord")},destroyRecord:function(){this.deleteRecord();return this.save()},unloadRecord:function(){if(this.isDestroyed){return}this.send("unloadRecord")},clearRelationships:function(){this.eachRelationship(function(e,r){if(r.kind==="belongsTo"){u(this,e,null)}else if(r.kind==="hasMany"){var t=this._relationships[e];if(t){t.destroy()}}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;d(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;f.call(Ember.keys(e),function(t){var i=d(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{d(r,"_data")[t]=i}})},_preloadRelationship:function(e,r){var t=this.constructor.metaForProperty(e);var i=t.type;if(t.kind==="hasMany"){this._preloadHasMany(e,r,i)}else{this._preloadBelongsTo(e,r,i)}},_preloadHasMany:function(e,r,t){var i=this;f.call(r,function(r){r=i._convertStringOrNumberIntoRecord(r,t);d(i,e).pushObject(r)})},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);u(this,e,i)},_convertStringOrNumberIntoRecord:function(e,r){if(Ember.typeOf(e)==="string"||Ember.typeOf(e)==="number"){return this.store.recordForId(r,e)}return e},changedAttributes:function(){var e=d(this,"_data");var r=d(this,"_attributes");var t={};var i;for(i in r){t[i]=[e[i],r[i]]}return t},adapterWillCommit:function(){this.send("willCommit")},adapterDidCommit:function(e){u(this,"isError",false);if(e){this._data=e}else{Ember.mixin(this._data,this._inFlightAttributes)}this._inFlightAttributes={};this.send("didCommit");this.updateRecordArraysLater();if(!e){return}this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},adapterDidDirty:function(){this.send("becomeDirty");this.updateRecordArraysLater()},dataDidChange:Ember.observer(function(){this.reloadHasManys()},"data"),reloadHasManys:function(){var e=d(this.constructor,"relationshipsByName");this.updateRecordArraysLater();e.forEach(function(e,r){if(this._data.links&&this._data.links[e]){return}if(r.kind==="hasMany"){this.hasManyDidChange(r.key)}},this)},hasManyDidChange:function(e){var r=this._relationships[e];if(r){var t=this._data[e]||[];u(r,"content",Ember.A(t));u(r,"isLoaded",true);r.trigger("didLoad")}},updateRecordArraysLater:function(){if(this._updatingRecordArraysLater){return}this._updatingRecordArraysLater=true;Ember.run.schedule("actions",this,this.updateRecordArrays)},setupData:function(e,r){if(r){Ember.merge(this._data,e)}else{this._data=e}var t=this._relationships;this.eachRelationship(function(r,i){if(e.links&&e.links[r]){return}if(i.options.async){t[r]=null}});if(e){this.pushedData()}this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},materializeId:function(e){u(this,"id",e)},materializeAttributes:function(e){c(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},updateHasMany:function(e,r){this._data[e]=r;this.hasManyDidChange(e)},updateBelongsTo:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(d(this,"isError")){this._inFlightAttributes={};u(this,"isError",false)}if(!d(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},toStringExtension:function(){return d(this,"id")},suspendRelationshipObservers:function(e,r){var t=d(this.constructor,"relationshipNames").belongsTo;var i=this;try{this._suspendedRelationships=true;Ember._suspendObservers(i,t,null,"belongsToDidChange",function(){Ember._suspendBeforeObservers(i,t,null,"belongsToWillChange",function(){e.call(r||i)})})}finally{this._suspendedRelationships=false}},save:function(){var e="DS: Model#save "+this;var r=Ember.RSVP.defer(e);this.get("store").scheduleSave(this,r);this._inFlightAttributes=this._attributes;this._attributes={};return o.create({promise:r.promise})},reload:function(){u(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new l(function(r){e.send("reloadRecord",r)},r).then(function(){e.set("isReloading",false);e.set("isError",false);return e},function(r){e.set("isError",true);throw r},"DS: Model#reload complete, update flags");return o.create({promise:t})},adapterDidUpdateAttribute:function(e,r){if(r!==undefined){this._data[e]=r;this.notifyPropertyChange(e)}else{this._data[e]=this._inFlightAttributes[e]}this.updateRecordArraysLater()},adapterDidInvalidate:function(e){var r=d(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");u(this,"isError",true)},trigger:function(e){Ember.tryInvoke(this,e,[].slice.call(arguments,1));this._super.apply(this,arguments)},triggerLater:function(){if(this._deferredTriggers.push(arguments)!==1){return}Ember.run.schedule("actions",this,"_triggerDeferredTriggers")},_triggerDeferredTriggers:function(){for(var e=0,r=this._deferredTriggers.length;e<r;e++){this.trigger.apply(this,this._deferredTriggers[e])}this._deferredTriggers.length=0},willDestroy:function(){this._super();this.clearRelationships()},willMergeMixin:function(e){}});g.reopenClass({_create:g.create,create:function(){throw new Ember.Error("You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.")}});a["default"]=g});r("ember-data/system/model/states",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;function i(e){var r=Ember.keys(e);var t,i,a;for(t=0,i=r.length;t<i;t++){a=r[t];if(e.hasOwnProperty(a)&&e[a]){return true}}return false}function a(e,r){if(r.value===r.originalValue){delete e._attributes[r.name];e.send("propertyWasReset",r.name)}else if(r.value!==r.oldValue){e.send("becomeDirty")}e.updateRecordArraysLater()}var n={initialState:"uncommitted",isDirty:true,uncommitted:{didSetProperty:a,loadingData:Ember.K,propertyWasReset:function(e,r){var t=false;for(var i in e._attributes){t=true;break}if(!t){e.send("rolledBack")}},pushedData:Ember.K,becomeDirty:Ember.K,willCommit:function(e){e.transitionTo("inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},rolledBack:function(e){e.transitionTo("loaded.saved")},becameInvalid:function(e){e.transitionTo("invalid")},rollback:function(e){e.rollback()}},inFlight:{isSaving:true,didSetProperty:a,becomeDirty:Ember.K,pushedData:Ember.K,unloadRecord:function(e){},willCommit:Ember.K,didCommit:function(e){var t=r(this,"dirtyType");e.transitionTo("saved");e.send("invokeLifecycleCallbacks",t)},becameInvalid:function(e){e.transitionTo("invalid");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},invalid:{isValid:false,deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},didSetProperty:function(e,t){r(e,"errors").remove(t.name);a(e,t)},becomeDirty:Ember.K,willCommit:function(e){r(e,"errors").clear();e.transitionTo("inFlight")},rolledBack:function(e){r(e,"errors").clear()},becameValid:function(e){e.transitionTo("uncommitted")},invokeLifecycleCallbacks:function(e){e.triggerLater("becameInvalid",e)},exit:function(e){e._inFlightAttributes={}}}};function s(e){var r={},t;for(var i in e){t=e[i];if(t&&typeof t==="object"){r[i]=s(t)}else{r[i]=t}}return r}function o(e,r){for(var t in r){e[t]=r[t]}return e}function d(e){var r=s(n);return o(r,e)}var u=d({dirtyType:"created",isNew:true});u.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var c=d({dirtyType:"updated"});u.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};u.uncommitted.rollback=function(e){n.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};u.uncommitted.propertyWasReset=Ember.K;function l(e){}c.inFlight.unloadRecord=l;c.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var f={isEmpty:false,isLoading:false,isLoaded:false,isDirty:false,isSaving:false,isDeleted:false,isNew:false,isValid:true,rolledBack:Ember.K,unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},propertyWasReset:Ember.K,empty:{isEmpty:true,loadingData:function(e,r){e._loadingPromise=r;e.transitionTo("loading")},loadedData:function(e){e.transitionTo("loaded.created.uncommitted");e.suspendRelationshipObservers(function(){e.notifyPropertyChange("data")})},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad")}},loading:{isLoading:true,exit:function(e){e._loadingPromise=null},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad");t(e,"isError",false)},becameError:function(e){e.triggerLater("becameError",e)},notFound:function(e){e.transitionTo("empty")}},loaded:{initialState:"saved",isLoaded:true,loadingData:Ember.K,saved:{setup:function(e){var r=e._attributes;var t=false;for(var i in r){if(r.hasOwnProperty(i)){t=true;break}}if(t){e.adapterDidDirty()}},didSetProperty:a,pushedData:Ember.K,becomeDirty:function(e){e.transitionTo("updated.uncommitted")},willCommit:function(e){e.transitionTo("updated.inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},didCommit:function(e){e.send("invokeLifecycleCallbacks",r(e,"lastDirtyType"))},notFound:Ember.K},created:u,updated:c},deleted:{initialState:"uncommitted",dirtyType:"deleted",isDeleted:true,isLoaded:true,isDirty:true,setup:function(e){e.updateRecordArrays()},uncommitted:{willCommit:function(e){e.transitionTo("inFlight")},rollback:function(e){e.rollback()},becomeDirty:Ember.K,deleteRecord:Ember.K,rolledBack:function(e){e.transitionTo("loaded.saved")}},inFlight:{isSaving:true,unloadRecord:l,willCommit:Ember.K,didCommit:function(e){e.transitionTo("saved");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},saved:{isDirty:false,setup:function(e){var t=r(e,"store");t.dematerializeRecord(e)},invokeLifecycleCallbacks:function(e){e.triggerLater("didDelete",e);e.triggerLater("didCommit",e)},willCommit:Ember.K,didCommit:Ember.K}},invokeLifecycleCallbacks:function(e,r){if(r==="created"){e.triggerLater("didCreate",e)}else{e.triggerLater("didUpdate",e)}e.triggerLater("didCommit",e)}};function h(e,r,t){e=o(r?Ember.create(r):{},e);e.parentState=r;e.stateName=t;for(var i in e){if(!e.hasOwnProperty(i)||i==="parentState"||i==="stateName"){continue}if(typeof e[i]==="object"){e[i]=h(e[i],e,t+"."+i)}}return e}f=h(f,null,"root");e["default"]=f});r("ember-data/system/record_array_manager",["ember-data/system/record_arrays","exports"],function(e,r){"use strict";var t=e.RecordArray;var i=e.FilteredRecordArray;var a=e.AdapterPopulatedRecordArray;var n=e.ManyArray;var s=Ember.get;var o=Ember.set;var d=Ember.EnumerableUtils.forEach;r["default"]=Ember.Object.extend({init:function(){this.filteredRecordArrays=Ember.MapWithDefault.create({defaultValue:function(){return[]}});this.changedRecords=[];this._adapterPopulatedRecordArrays=[]},recordDidChange:function(e){if(this.changedRecords.push(e)!==1){return}Ember.run.schedule("actions",this,this.updateRecordArrays)},recordArraysForRecord:function(e){e._recordArrays=e._recordArrays||Ember.OrderedSet.create();return e._recordArrays},updateRecordArrays:function(){d(this.changedRecords,function(e){if(s(e,"isDeleted")){this._recordWasDeleted(e)}else{this._recordWasChanged(e)}},this);this.changedRecords.length=0},_recordWasDeleted:function(e){var r=e._recordArrays;if(!r){return}d(r,function(r){r.removeRecord(e)})},_recordWasChanged:function(e){var r=e.constructor;var t=this.filteredRecordArrays.get(r);var i;d(t,function(t){i=s(t,"filterFunction");this.updateRecordArray(t,i,r,e)},this);var a=e._loadingRecordArrays;if(a){for(var n=0,o=a.length;n<o;n++){a[n].loadedRecord()}e._loadingRecordArrays=[]}},updateRecordArray:function(e,r,t,i){var a;if(!r){a=true}else{a=r(i)}var n=this.recordArraysForRecord(i);if(a){if(!n.has(e)){e.pushRecord(i);n.add(e)}}else if(!a){n.remove(e);e.removeRecord(i)}},updateFilter:function(e,r,t){var i=this.store.typeMapFor(r);var a=i.records,n;for(var o=0,d=a.length;o<d;o++){n=a[o];if(!s(n,"isDeleted")&&!s(n,"isEmpty")){this.updateRecordArray(e,t,r,n)}}},createManyArray:function(e,r){var t=n.create({type:e,content:r,store:this.store});d(r,function(e){var r=this.recordArraysForRecord(e);r.add(t)},this);return t},createRecordArray:function(e){var r=t.create({type:e,content:Ember.A(),store:this.store,isLoaded:true});this.registerFilteredRecordArray(r,e);return r},createFilteredRecordArray:function(e,r,t){var a=i.create({query:t,type:e,content:Ember.A(),store:this.store,manager:this,filterFunction:r});this.registerFilteredRecordArray(a,e,r);return a},createAdapterPopulatedRecordArray:function(e,r){var t=a.create({type:e,query:r,content:Ember.A(),store:this.store,manager:this});this._adapterPopulatedRecordArrays.push(t);return t},registerFilteredRecordArray:function(e,r,t){var i=this.filteredRecordArrays.get(r);i.push(e);this.updateFilter(e,r,t)},registerWaitingRecordArray:function(e,r){var t=e._loadingRecordArrays||[];t.push(r);e._loadingRecordArrays=t},willDestroy:function(){this._super();d(l(u(this.filteredRecordArrays.values)),c);d(this._adapterPopulatedRecordArrays,c)}});function u(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function c(e){e.destroy()}function l(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});r("ember-data/system/record_arrays",["ember-data/system/record_arrays/record_array","ember-data/system/record_arrays/filtered_record_array","ember-data/system/record_arrays/adapter_populated_record_array","ember-data/system/record_arrays/many_array","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var d=i["default"];a.RecordArray=n;a.FilteredRecordArray=s;a.AdapterPopulatedRecordArray=o;a.ManyArray=d});r("ember-data/system/record_arrays/adapter_populated_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;var a=Ember.set;function n(e){var r=Object.create(null);for(var t in e){r[t]=e[t]}return r}r["default"]=t.extend({query:null,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a server query (on "+e+") is immutable.")},load:function(e){var r=i(this,"store");var t=i(this,"type");var a=r.pushMany(t,e);var s=r.metadataFor(t);this.setProperties({content:Ember.A(a),isLoaded:true,meta:n(s)});a.forEach(function(e){this.manager.recordArraysForRecord(e).add(this)},this);Ember.run.once(this,"trigger","didLoad")}})});r("ember-data/system/record_arrays/filtered_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;r["default"]=t.extend({filterFunction:null,isLoaded:true,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a client-side filter (on "+e+") is immutable.")},_updateFilter:function(){var e=i(this,"manager");e.updateFilter(this,i(this,"type"),i(this,"filterFunction"))},updateFilter:Ember.observer(function(){Ember.run.once(this,this._updateFilter)},"filterFunction")})});r("ember-data/system/record_arrays/many_array",["ember-data/system/record_arrays/record_array","ember-data/system/changes","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r.RelationshipChange;var n=Ember.get,s=Ember.set;var o=Ember.EnumerableUtils.map;function d(e){e.sync()}t["default"]=i.extend({init:function(){this._super.apply(this,arguments);this._changesToSync=Ember.OrderedSet.create()},name:null,owner:null,isPolymorphic:false,isLoaded:false,promise:null,loadingRecordsCount:function(e){this.loadingRecordsCount=e},loadedRecord:function(){this.loadingRecordsCount--;if(this.loadingRecordsCount===0){s(this,"isLoaded",true);this.trigger("didLoad")}},fetch:function(){var e=n(this,"content");var r=n(this,"store");var t=n(this,"owner");var i=e.filterBy("isEmpty",true);r.scheduleFetchMany(i,t)},replaceContent:function(e,r,t){t=o(t,function(e){return e},this);this._super(e,r,t)},arrangedContentDidChange:function(){Ember.run.once(this,"fetch")},arrayContentWillChange:function(e,r,t){var i=n(this,"owner");var s=n(this,"name");if(!i._suspendedRelationships){for(var o=e;o<e+r;o++){var d=n(this,"content").objectAt(o);var u=a.createChange(i,d,n(this,"store"),{parentType:i.constructor,changeType:"remove",kind:"hasMany",key:s});this._changesToSync.add(u)}}return this._super.apply(this,arguments)},arrayContentDidChange:function(e,r,t){this._super.apply(this,arguments);var i=n(this,"owner");var s=n(this,"name");var o=n(this,"store");if(!i._suspendedRelationships){for(var u=e;u<e+t;u++){var c=n(this,"content").objectAt(u);var l=a.createChange(i,c,o,{parentType:i.constructor,changeType:"add",kind:"hasMany",key:s});l.hasManyName=s;this._changesToSync.add(l)}this._changesToSync.forEach(d);this._changesToSync.clear()}},createRecord:function(e){var r=n(this,"owner");var t=n(r,"store");var i=n(this,"type");var a;a=t.createRecord.call(t,i,e);this.pushObject(a);return a}})});r("ember-data/system/record_arrays/record_array",["ember-data/system/store","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=Ember.get;var a=Ember.set;r["default"]=Ember.ArrayProxy.extend(Ember.Evented,{type:null,content:null,isLoaded:false,isUpdating:false,store:null,objectAtContent:function(e){var r=i(this,"content");return r.objectAt(e)},update:function(){if(i(this,"isUpdating")){return}var e=i(this,"store");var r=i(this,"type");return e.fetchAll(r,this)},addRecord:function(e){i(this,"content").addObject(e)},pushRecord:function(e){i(this,"content").pushObject(e)},removeRecord:function(e){i(this,"content").removeObject(e)},save:function(){var e="DS: RecordArray#save "+i(this,"type");var r=Ember.RSVP.all(this.invoke("save"),e).then(function(e){return Ember.A(e)},null,"DS: RecordArray#save apply Ember.NativeArray");return t.create({promise:r})},_dissociateFromOwnRecords:function(){var e=this;this.forEach(function(r){var t=r._recordArrays;if(t){t.remove(e)}})},willDestroy:function(){this._dissociateFromOwnRecords();this._super()}})});r("ember-data/system/relationship-meta",["ember-inflector/system","exports"],function(e,r){"use strict";var t=e.singularize;function i(e,r){var i,a;i=r.type||r.key;if(typeof i==="string"){if(r.kind==="hasMany"){i=t(i)}a=e.modelFor(i)}else{a=r.type}return a}r.typeForRelationshipMeta=i;function a(e,r){return{key:r.key,kind:r.kind,type:i(e,r),options:r.options,parentType:r.parentType,isRelationship:true}}r.relationshipFromMeta=a;function n(e,r){var t=Ember.meta(e);var i=t.descs[r];return i&&!i._meta.options.async}r.isSyncRelationship=n});r("ember-data/system/relationships",["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];i.belongsTo=a;i.hasMany=n});r("ember-data/system/relationships/belongs_to",["ember-data/system/model","ember-data/system/store","ember-data/system/changes","ember-data/system/relationship-meta","exports"],function(e,r,t,i,a){"use strict";var n=Ember.get;var s=Ember.set;var o=Ember.isNone;var d=Ember.RSVP.Promise;var u=e.Model;var c=r.PromiseObject;var l=t.RelationshipChange;var f=i.relationshipFromMeta;var h=i.typeForRelationshipMeta;var p=i.isSyncRelationship;function m(e,r,t){return Ember.computed("data",function(e,r){var i=n(this,"data");var a=n(this,"store");var u="DS: Async belongsTo "+this+" : "+e;var l;t.key=e;if(arguments.length===2){return r===undefined?null:c.create({promise:d.cast(r,u)})}var h=i.links&&i.links[e];var p=i[e];if(!o(p)){var m=this.constructor.inverseFor(e);if(m&&m.kind==="belongsTo"){s(p,m.name,this)}l=a.findById(p.constructor,p.get("id"))||d.cast(p,u);return c.create({promise:l})}else if(h){l=a.findBelongsTo(this,h,f(a,t));return c.create({promise:l})}else{return null}}).meta(t)}function v(e,r){if(typeof e==="object"){r=e;e=undefined}else{}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"belongsTo",key:null};if(r.async){return m(e,r,t)}return Ember.computed("data",function(r,t){var i=n(this,"data");var a=n(this,"store");var s,d;if(typeof e==="string"){d=a.modelFor(e)}else{d=e}if(arguments.length===2){return t===undefined?null:t}s=i[r];if(o(s)){return null}a.findById(s.constructor,s.get("id"));return s}).meta(t)}u.reopen({belongsToWillChange:Ember.beforeObserver(function(e,r){if(n(e,"isLoaded")&&p(e,r)){var t=n(e,r);if(t){var i=n(e,"store");var a=l.createChange(e,t,i,{key:r,kind:"belongsTo",changeType:"remove"});a.sync();this._changesToSync[r]=a}}}),belongsToDidChange:Ember.immediateObserver(function(e,r){if(n(e,"isLoaded")){var t=n(e,r);if(t){var i=n(e,"store");var a=l.createChange(e,t,i,{key:r,kind:"belongsTo",changeType:"add"});a.sync()}}delete this._changesToSync[r]})});a["default"]=v});r("ember-data/system/relationships/ext",["ember-inflector/system","ember-data/system/relationship-meta","ember-data/system/model"],function(e,r,t){"use strict";var i=e.singularize;var a=r.typeForRelationshipMeta;var n=r.relationshipFromMeta;
|
3
|
-
var s=t.Model;var o=Ember.get;var d=Ember.set;s.reopen({didDefineProperty:function(e,r,t){if(t instanceof Ember.ComputedProperty){var i=t.meta();if(i.isRelationship&&i.kind==="belongsTo"){Ember.addObserver(e,r,null,"belongsToDidChange");Ember.addBeforeObserver(e,r,null,"belongsToWillChange")}i.parentType=e.constructor}}});s.reopenClass({typeForRelationship:function(e){var r=o(this,"relationshipsByName").get(e);return r&&r.type},inverseFor:function(e){var r=this.typeForRelationship(e);if(!r){return null}var t=this.metaForProperty(e).options;if(t.inverse===null){return null}var i,a,n;if(t.inverse){i=t.inverse;n=Ember.get(r,"relationshipsByName").get(i);a=n.kind}else{var s=d(this,r);if(s.length===0){return null}i=s[0].name;a=s[0].kind}function d(e,r,t){t=t||[];var i=o(r,"relationships");if(!i){return}var a=i.get(e);if(a){t.push.apply(t,i.get(e))}if(e.superclass){d(e.superclass,r,t)}return t}return{type:r,name:i,kind:a}},relationships:Ember.computed(function(){var e=new Ember.MapWithDefault({defaultValue:function(){return[]}});this.eachComputedProperty(function(r,t){if(t.isRelationship){t.key=r;var i=e.get(a(this.store,t));i.push({name:r,kind:t.kind})}});return e}).cacheable(false).readOnly(),relationshipNames:Ember.computed(function(){var e={hasMany:[],belongsTo:[]};this.eachComputedProperty(function(r,t){if(t.isRelationship){e[t.kind].push(r)}});return e}),relatedTypes:Ember.computed(function(){var e;var r=Ember.A();this.eachComputedProperty(function(t,i){if(i.isRelationship){i.key=t;e=a(this.store,i);if(!r.contains(e)){r.push(e)}}});return r}).cacheable(false).readOnly(),relationshipsByName:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){t.key=r;var i=n(this.store,t);i.type=a(this.store,t);e.set(r,i)}});return e}).cacheable(false).readOnly(),fields:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){e.set(r,t.kind)}else if(t.isAttribute){e.set(r,"attribute")}});return e}).readOnly(),eachRelationship:function(e,r){o(this,"relationshipsByName").forEach(function(t,i){e.call(r,t,i)})},eachRelatedType:function(e,r){o(this,"relatedTypes").forEach(function(t){e.call(r,t)})}});s.reopen({eachRelationship:function(e,r){this.constructor.eachRelationship(e,r)}})});r("ember-data/system/relationships/has_many",["ember-data/system/store","ember-data/system/relationship-meta","exports"],function(e,r,t){"use strict";var i=e.PromiseArray;var a=r.relationshipFromMeta;var n=r.typeForRelationshipMeta;var s=Ember.get;var o=Ember.set;var d=Ember.setProperties;var u=Ember.EnumerableUtils.map;function c(e,r,t){return Ember.computed("data",function(e){return f(this,e,r,function(r,i){t.key=e;var a=i[e];return r.findMany(this,i[e],n(r,t))})}).meta(t).readOnly()}function l(e,r,t){return Ember.computed("data",function(e){t.key=e;var s=f(this,e,r,function(r,i){var s=i.links&&i.links[e];var d;var c="DS: Async hasMany "+this+" : "+e;var l=Ember.RSVP.defer(c);if(s){d=r.findHasMany(this,s,a(r,t),l)}else{var f=i[e];var h=this.constructor.inverseFor(e);var p=this;if(h&&f){if(h.kind==="belongsTo"){u(f,function(e){o(e,h.name,p)})}}d=r.findMany(p,i[e],n(r,t),l)}o(d,"promise",l.promise);return d});var d=s.get("promise").then(function(){return s},null,"DS: Async hasMany records received");return i.create({promise:d})}).meta(t).readOnly()}function f(e,r,t,i){var a=e._relationships;if(a[r]){return a[r]}var n=s(e,"data");var o=s(e,"store");var u=a[r]=i.call(e,o,n);return d(u,{owner:e,name:r,isPolymorphic:t.polymorphic})}function h(e,r){if(typeof e==="object"){r=e;e=undefined}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"hasMany",key:null};if(r.async){return l(e,r,t)}else{return c(e,r,t)}}t["default"]=h});r("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","exports"],function(e,r,i){"use strict";var a=e.InvalidError;var n=e.Adapter;var s=r.singularize;var o=Ember.get;var d=Ember.set;var u=Ember.run.once;var c=Ember.isNone;var l=Ember.EnumerableUtils.forEach;var f=Ember.EnumerableUtils.indexOf;var h=Ember.EnumerableUtils.map;var p=Ember.RSVP.Promise;var m=Ember.copy;var v,y,b,g,R;var E=Ember.String.camelize;function _(e){return e==null?null:e+""}v=Ember.Object.extend({init:function(){if(!g){g=t("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=g.create({store:this});this._relationshipChanges={};this._pendingSave=[];this._pendingFetch=Ember.Map.create()},adapter:"-rest",serialize:function(e,r){return this.serializerFor(e.constructor.typeKey).serialize(e,r)},defaultAdapter:Ember.computed("adapter",function(){var e=o(this,"adapter");if(typeof e==="string"){e=this.container.lookup("adapter:"+e)||this.container.lookup("adapter:application")||this.container.lookup("adapter:-rest")}if(DS.Adapter.detect(e)){e=e.create({container:this.container})}return e}),createRecord:function(e,r){var t=this.modelFor(e);var i=m(r)||{};if(c(i.id)){i.id=this._generateId(t)}i.id=_(i.id);var a=this.buildRecord(t,i.id);a.loadedData();a.setProperties(i);return a},_generateId:function(e){var r=this.adapterFor(e);if(r&&r.generateIdForRecord){return r.generateIdForRecord(this)}return null},deleteRecord:function(e){e.deleteRecord()},unloadRecord:function(e){e.unloadRecord()},find:function(e,r,t){if(arguments.length===1){return this.findAll(e)}if(Ember.typeOf(r)==="object"){return this.findQuery(e,r)}return this.findById(e,_(r),t)},findById:function(e,r,t){var i;var a=this.modelFor(e);var n=this.recordForId(a,r);if(t){n._preloadData(t)}if(o(n,"isEmpty")){i=this.scheduleFetch(n)}else if(o(n,"isLoading")){i=n._loadingPromise}return C(i||n,"DS: Store#findById "+a+" with id: "+r)},findByIds:function(e,r){var t=this;var i="DS: Store#findByIds "+e;return M(Ember.RSVP.all(h(r,function(r){return t.findById(e,r)})).then(Ember.A,null,"DS: Store#findByIds of "+e+" complete"))},fetchRecord:function(e){var r=e.constructor;var t=o(e,"id");var i=this.adapterFor(r);var a=$(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(h(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(c(e)){return null}if(e._loadingPromise){return e._loadingPromise}var t=Ember.RSVP.defer("Fetching "+r+"with id: "+e.get("id"));var i={record:e,resolver:t};var a=t.promise;e.loadingData(a);if(!this._pendingFetch.get(r)){this._pendingFetch.set(r,[i])}else{this._pendingFetch.get(r).push(i)}Ember.run.scheduleOnce("afterRender",this,this.flushAllPendingFetches);return a},flushAllPendingFetches:function(){if(this.isDestroyed||this.isDestroying){return}this._pendingFetch.forEach(this._flushPendingFetchForType,this);this._pendingFetch=Ember.Map.create()},_flushPendingFetchForType:function(e,r){var t=this;var i=t.adapterFor(e);var a=!!i.findMany&&i.coalesceFindRequests;var n=Ember.A(r).mapBy("record");var s=Ember.A(r).mapBy("resolver");function o(e){e.resolver.resolve(t.fetchRecord(e.record))}function d(e){l(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function u(e){return function r(t){var i=e.without(t);f(i)}}function c(e){return function(r){f(e,r)}}function f(e,t){l(e,function(e){var i=Ember.A(r).findBy("record",e);if(i){var a=i.resolver;a.reject(t)}})}if(r.length===1){o(r[0])}else if(a){var h=i.groupRecordsForFindMany(this,n);l(h,function(a){var n=Ember.A(a);var s=n.mapBy("id");if(s.length>1){K(i,t,e,s,n).then(d).then(u(n)).then(null,c(n))}else if(s.length===1){var l=Ember.A(r).findBy("record",a[0]);o(l)}else{}})}else{l(r,o)}},getById:function(e,r){if(this.hasRecordForId(e,r)){return this.recordForId(e,r)}else{return null}},reloadRecord:function(e){var r=e.constructor;var t=this.adapterFor(r);var i=o(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=_(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=_(r);var a=this.typeMapFor(t).idToRecord;var n=a[i];if(!n||!a[i]){n=this.buildRecord(t,i)}return n},findMany:function(e,r,t,i){var a=this.modelFor(t);var n=Ember.A(r);var s=n.filterProperty("isEmpty",true);var o=this.recordArrayManager.createManyArray(a,n);o.loadingRecordsCount=s.length;if(s.length){l(s,function(e){this.recordArrayManager.registerWaitingRecordArray(e,o)},this);i.resolve(this.scheduleFetchMany(s,e))}else{if(i){i.resolve()}o.set("isLoaded",true);u(o,"trigger","didLoad")}return o},findHasMany:function(e,r,t,i){var a=this.adapterFor(e.constructor);var n=this.recordArrayManager.createManyArray(t.type,Ember.A([]));i.resolve(j(a,this,e,r,t));return n},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return L(i,this,e,r,t)},findQuery:function(e,r){var t=this.modelFor(e);var i=this.recordArrayManager.createAdapterPopulatedRecordArray(t,r);var a=this.adapterFor(t);return M(B(a,this,t,r,i))},findAll:function(e){var r=this.modelFor(e);return this.fetchAll(r,this.all(r))},fetchAll:function(e,r){var t=this.adapterFor(e);var i=this.typeMapFor(e).metadata.since;d(r,"isUpdating",true);return M(U(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;d(r,"isUpdating",false)},all:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.findAllCache;if(i){return i}var a=this.recordArrayManager.createRecordArray(r);t.findAllCache=a;return a},unloadAll:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.records.slice();var a;for(var n=0;n<i.length;n++){a=i[n];a.unloadRecord();a.destroy()}t.findAllCache=null},filter:function(e,r,t){var i;var a=arguments.length;var n;var s=a===3;if(s){i=this.findQuery(e,r)}else if(arguments.length===2){t=r}e=this.modelFor(e);if(s){n=this.recordArrayManager.createFilteredRecordArray(e,t,r)}else{n=this.recordArrayManager.createFilteredRecordArray(e,t)}i=i||p.cast(n);return M(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!o(this.recordForId(e,r),"isEmpty")},metadataFor:function(e){e=this.modelFor(e);return this.typeMapFor(e).metadata},dataWasUpdated:function(e,r){this.recordArrayManager.recordDidChange(r)},scheduleSave:function(e,r){e.adapterWillCommit();this._pendingSave.push([e,r]);u(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];l(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(o(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(o(r,"isNew")){a="createRecord"}else if(o(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(V(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=F(this,e.constructor,r,e);this.updateId(e,r)}e.adapterDidCommit(r)},recordWasInvalid:function(e,r){e.adapterDidInvalidate(r)},recordWasError:function(e){e.adapterDidError()},updateId:function(e,r){var t=o(e,"id");var i=_(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;d(e,"id",i)},typeMapFor:function(e){var r=o(this,"typeMaps");var t=Ember.guidFor(e);var i;i=r[t];if(i){return i}i={idToRecord:Object.create(null),records:[],metadata:Object.create(null),type:e};r[t]=i;return i},_load:function(e,r,t){var i=_(r.id);var a=this.recordForId(e,i);a.setupData(r,t);this.recordArrayManager.recordDidChange(a);return a},modelFor:function(e){var r;if(typeof e==="string"){var t=this.container.normalize("model:"+e);r=this.container.lookupFactory(t);if(!r){throw new Ember.Error("No model was found for '"+e+"'")}r.typeKey=this._normalizeTypeKey(t.split(":",2)[1])}else{r=e;if(r.typeKey){r.typeKey=this._normalizeTypeKey(r.typeKey)}}r.store=this;return r},push:function(e,r,t){var i=this.modelFor(e);r=F(this,i,r);this._load(i,r,t);return this.recordForId(i,r.id)},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=D(this.container)}else{i=r;t=this.serializerFor(e)}t.pushPayload(this,i)},normalize:function(e,r){var t=this.serializerFor(e);var i=this.modelFor(e);return t.normalize(i,r)},update:function(e,r){return this.push(e,r,true)},pushMany:function(e,r){return h(r,function(r){return this.push(e,r)},this)},metaForType:function(e,r){var t=this.modelFor(e);Ember.merge(this.typeMapFor(t).metadata,r)},buildRecord:function(e,r,t){var i=this.typeMapFor(e);var a=i.idToRecord;var n=e._create({id:r,store:this,container:this.container});if(t){n.setupData(t)}if(r){a[r]=n}i.records.push(n);return n},dematerializeRecord:function(e){var r=e.constructor;var t=this.typeMapFor(r);var i=o(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=f(t.records,e);t.records.splice(a,1)},addRelationshipChangeFor:function(e,r,t,i,a){var n=e.clientId;var s=t?t:t;var o=r+i;var d=this._relationshipChanges;if(!(n in d)){d[n]={}}if(!(s in d[n])){d[n][s]={}}if(!(o in d[n][s])){d[n][s][o]={}}d[n][s][o][a.changeType]=a},removeRelationshipChangeFor:function(e,r,t,i,a){var n=e.clientId;var s=t?t.clientId:t;var o=this._relationshipChanges;var d=r+i;if(!(n in o)||!(s in o[n])||!(d in o[n][s])){return}delete o[n][s][d][a]},relationshipChangePairsFor:function(e){var r=[];if(!e){return r}var t=this._relationshipChanges[e.clientId];for(var i in t){if(t.hasOwnProperty(i)){for(var a in t[i]){if(t[i].hasOwnProperty(a)){r.push(t[i][a])}}}}return r},adapterFor:function(e){var r=this.container,t;if(r){t=r.lookup("adapter:"+e.typeKey)||r.lookup("adapter:application")}return t||o(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return O(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=this;var i=h(r,a);this.recordArrayManager.destroy();l(i,this.unloadAll,this);function a(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return E(s(e))}});function F(e,r,t,i){r.eachRelationship(function(r,a){if(t.links&&t.links[r]){if(i&&a.options.async){i._relationships[r]=null}return}var n=a.kind;var s=t[r];if(s==null){if(n==="hasMany"&&i){s=t[r]=i.get(r).toArray()}return}if(n==="belongsTo"){A(e,t,r,a,s)}else if(n==="hasMany"){z(e,t,r,a,s);S(i,r,s)}});return t}function A(e,r,i,a,n){if(!R){R=t("ember-data/system/model")["Model"]}if(c(n)||n instanceof R){return}var s;if(typeof n==="number"||typeof n==="string"){s=T(a,i,r);r[i]=e.recordForId(s,n)}else if(typeof n==="object"){r[i]=e.recordForId(n.type,n.id)}}function T(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function z(e,r,t,i,a){for(var n=0,s=a.length;n<s;n++){A(e,a,n,i,a[n])}}function S(e,r,t){if(e){var i=x(Ember.A(t),e.get(r).filterBy("isNew"));Ember.A(t).pushObjects(i)}}function x(e,r){var t=e.mapBy("id");return r.reject(function(e){return Ember.A(t).contains(e.id)})}b=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);y=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);function C(e,r){return y.create({promise:p.cast(e,r)})}function M(e,r){return b.create({promise:p.cast(e,r)})}function k(e){return e&&typeof e.then==="function"}function O(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function D(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function P(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=O(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function w(e){return!(o(e,"isDestroyed")||o(e,"isDestroying"))}function I(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function N(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function $(e,r,t,i,a){var n=e.find(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var a=s.extract(r,t,e,i,"find");return r.push(t,a)},function(e){var a=r.getById(t,i);if(a){a.notFound()}throw e},"DS: Extract payload of '"+t+"'")}function K(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#findMany of "+t;if(n===undefined){throw new Error("adapter.findMany returned undefined, this was very likely a mistake")}var d;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findMany");return r.pushMany(t,i)},null,"DS: Extract payload of "+t)}function j(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=P(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=p.cast(n,o);n=I(n,N(w,r));n=I(n,N(w,t));return n.then(function(e){var i=s.extract(r,a.type,e,null,"findHasMany");var n=r.pushMany(a.type,i);t.updateHasMany(a.key,n)},null,"DS: Extract payload of "+t+" : hasMany "+a.type)}function L(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=P(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=p.cast(n,o);n=I(n,N(w,r));n=I(n,N(w,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findBelongsTo");var i=r.push(a.type,t);i.updateBelongsTo(a.key,i);return i},null,"DS: Extract payload of "+t+" : "+a.type)}function U(e,r,t,i){var a=e.findAll(r,t,i);var n=P(e,t);var s="DS: Handle Adapter#findAll of "+t;a=p.cast(a,s);a=I(a,N(w,r));return a.then(function(e){var i=n.extract(r,t,e,null,"findAll");r.pushMany(t,i);r.didUpdateAll(t);return r.all(t)},null,"DS: Extract payload of findAll "+t)}function B(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=P(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=p.cast(n,o);n=I(n,N(w,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findQuery");a.load(i);return a},null,"DS: Extract payload of findQuery "+t)}function V(e,r,t,i){var n=i.constructor;var s=e[t](r,n,i);var d=P(e,n);var u="DS: Extract and notify about "+t+" completion of "+i;s=p.cast(s,u);s=I(s,N(w,r));s=I(s,N(w,i));return s.then(function(e){var a;if(e){a=d.extract(r,n,e,o(i,"id"),t)}else{a=e}r.didSaveRecord(i,a);return i},function(e){if(e instanceof a){r.recordWasInvalid(i,e.errors)}else{r.recordWasError(i,e)}throw e},u)}i.Store=v;i.PromiseArray=b;i.PromiseObject=y;i["default"]=v});r("ember-data/transforms",["ember-data/transforms/base","ember-data/transforms/number","ember-data/transforms/date","ember-data/transforms/string","ember-data/transforms/boolean","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var d=t["default"];var u=i["default"];var c=a["default"];n.Transform=s;n.NumberTransform=o;n.DateTransform=d;n.StringTransform=u;n.BooleanTransform=c});r("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});r("ember-data/transforms/boolean",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="boolean"){return e}else if(r==="string"){return e.match(/^true$|^t$|^1$/i)!==null}else if(r==="number"){return e===1}else{return false}},serialize:function(e){return Boolean(e)}})});r("ember-data/transforms/date",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Date.prototype.toISOString||function(){function e(e){if(e<10){return"0"+e}return e}return this.getUTCFullYear()+"-"+e(this.getUTCMonth()+1)+"-"+e(this.getUTCDate())+"T"+e(this.getUTCHours())+":"+e(this.getUTCMinutes())+":"+e(this.getUTCSeconds())+"."+(this.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};if(Ember.SHIM_ES5){if(!Date.prototype.toISOString){Date.prototype.toISOString=i}}r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="string"){return new Date(Ember.Date.parse(e))}else if(r==="number"){return new Date(e)}else if(e===null||e===undefined){return e}else{return null}},serialize:function(e){if(e instanceof Date){return i.call(e)}else{return null}}})});r("ember-data/transforms/number",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isEmpty;r["default"]=t.extend({deserialize:function(e){return i(e)?null:Number(e)},serialize:function(e){return i(e)?null:Number(e)}})});r("ember-data/transforms/string",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isNone;r["default"]=t.extend({deserialize:function(e){return i(e)?null:String(e)},serialize:function(e){return i(e)?null:String(e)}})});r("ember-inflector",["./system","./helpers","./ext/string","exports"],function(e,r,t,i){"use strict";var a=e.Inflector;var n=e.defaultRules;var s=e.pluralize;var o=e.singularize;a.defaultRules=n;Ember.Inflector=a;Ember.String.pluralize=s;Ember.String.singularize=o;i["default"]=a;i.pluralize=s;i.singularize=o});r("ember-inflector/ext/string",["../system/string"],function(e){"use strict";var r=e.pluralize;var t=e.singularize;if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.String){String.prototype.pluralize=function(){return r(this)};String.prototype.singularize=function(){return t(this)}}});r("ember-inflector/helpers",["./system/string"],function(e){"use strict";var r=e.singularize;var t=e.pluralize;Ember.Handlebars.helper("singularize",r);Ember.Handlebars.helper("pluralize",t)});r("ember-inflector/system",["./system/inflector","./system/string","./system/inflections","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r.pluralize;var s=r.singularize;var o=t["default"];a.inflector=new a(o);i.Inflector=a;i.singularize=s;i.pluralize=n;i.defaultRules=o});r("ember-inflector/system/inflections",["exports"],function(e){"use strict";e["default"]={plurals:[[/$/,"s"],[/s$/i,"s"],[/^(ax|test)is$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(octop|vir)i$/i,"$1i"],[/(alias|status)$/i,"$1es"],[/(bu)s$/i,"$1ses"],[/(buffal|tomat)o$/i,"$1oes"],[/([ti])um$/i,"$1a"],[/([ti])a$/i,"$1a"],[/sis$/i,"ses"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/(hive)$/i,"$1s"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|ss|sh)$/i,"$1es"],[/(matr|vert|ind)(?:ix|ex)$/i,"$1ices"],[/^(m|l)ouse$/i,"$1ice"],[/^(m|l)ice$/i,"$1ice"],[/^(ox)$/i,"$1en"],[/^(oxen)$/i,"$1"],[/(quiz)$/i,"$1zes"]],singular:[[/s$/i,""],[/(ss)$/i,"$1"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,"$1sis"],[/(^analy)(sis|ses)$/i,"$1sis"],[/([^f])ves$/i,"$1fe"],[/(hive)s$/i,"$1"],[/(tive)s$/i,"$1"],[/([lr])ves$/i,"$1f"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(x|ch|ss|sh)es$/i,"$1"],[/^(m|l)ice$/i,"$1ouse"],[/(bus)(es)?$/i,"$1"],[/(o)es$/i,"$1"],[/(shoe)s$/i,"$1"],[/(cris|test)(is|es)$/i,"$1is"],[/^(a)x[ie]s$/i,"$1xis"],[/(octop|vir)(us|i)$/i,"$1us"],[/(alias|status)(es)?$/i,"$1"],[/^(ox)en/i,"$1"],[/(vert|ind)ices$/i,"$1ex"],[/(matr)ices$/i,"$1ix"],[/(quiz)zes$/i,"$1"],[/(database)s$/i,"$1"]],irregularPairs:[["person","people"],["man","men"],["child","children"],["sex","sexes"],["move","moves"],["cow","kine"],["zombie","zombies"]],uncountable:["equipment","information","rice","money","species","series","fish","sheep","jeans","police"]}});r("ember-inflector/system/inflector",["exports"],function(e){"use strict";var r=/^\s*$/;var t=/(\w+[_-])([a-z\d]+$)/;var i=/(\w+)([A-Z][a-z\d]*$)/;var a=/[A-Z][a-z\d]*$/;function n(e,r){for(var t=0,i=r.length;t<i;t++){e.uncountable[r[t].toLowerCase()]=true}}function s(e,r){var t;for(var i=0,a=r.length;i<a;i++){t=r[i];e.irregular[t[0].toLowerCase()]=t[1];e.irregular[t[1].toLowerCase()]=t[1];e.irregularInverse[t[1].toLowerCase()]=t[0];e.irregularInverse[t[0].toLowerCase()]=t[0]}}function o(e){e=e||{};e.uncountable=e.uncountable||d();e.irregularPairs=e.irregularPairs||d();var r=this.rules={plurals:e.plurals||[],singular:e.singular||[],irregular:d(),irregularInverse:d(),uncountable:d()};n(r,e.uncountable);s(r,e.irregularPairs);this.enableCache()}if(!Object.create&&!Object.create(null).hasOwnProperty){throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg")}function d(){var e=Object.create(null);e["_dict"]=null;delete e["_dict"];return e}o.prototype={enableCache:function(){this.purgeCache();this.singularize=function(e){this._cacheUsed=true;return this._sCache[e]||(this._sCache[e]=this._singularize(e))};this.pluralize=function(e){this._cacheUsed=true;return this._pCache[e]||(this._pCache[e]=this._pluralize(e))}},purgeCache:function(){this._cacheUsed=false;this._sCache=d();this._pCache=d()},disableCache:function(){this._sCache=null;this._pCache=null;this.singularize=function(e){return this._singularize(e)};this.pluralize=function(e){return this._pluralize(e)}},plural:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.plurals.push([e,r.toLowerCase()])},singular:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.singular.push([e,r.toLowerCase()])},uncountable:function(e){if(this._cacheUsed){this.purgeCache()}n(this.rules,[e.toLowerCase()])},irregular:function(e,r){if(this._cacheUsed){this.purgeCache()}s(this.rules,[[e,r]])},pluralize:function(e){return this._pluralize(e)},_pluralize:function(e){return this.inflect(e,this.rules.plurals,this.rules.irregular)},singularize:function(e){return this._singularize(e)},_singularize:function(e){return this.inflect(e,this.rules.singular,this.rules.irregularInverse)},inflect:function(e,n,s){var o,d,u,c,l,f,h,p,m,v,y,b,g;p=r.test(e);m=a.test(e);f="";if(p){return e}c=e.toLowerCase();l=t.exec(e)||i.exec(e);if(l){f=l[1];h=l[2].toLowerCase()}v=this.rules.uncountable[c]||this.rules.uncountable[h];if(v){return e}y=s&&(s[c]||s[h]);if(y){if(s[c]){return y}else{y=m?y.capitalize():y;return f+y}}for(var R=n.length,E=0;R>E;R--){o=n[R-1];g=o[0];if(g.test(e)){break}}o=o||[];g=o[0];d=o[1];u=e.replace(g,d);return u}};e["default"]=o});r("ember-inflector/system/string",["./inflector","exports"],function(e,r){"use strict";var t=e["default"];function i(e){return t.inflector.pluralize(e)}function a(e){return t.inflector.singularize(e)}r.pluralize=i;r.singularize=a});e.DS=t("ember-data")["default"]})(this);
|
1
|
+
(function(e){var r,t,i,a;(function(){var e={},n={},s={};var o=false;r=function(r,t,i){e[r]={deps:t,callback:i}};function u(e,r,t){var a=e.length;var n=new Array(a);var s;var o;for(var u=0,l=a;u<l;u++){s=e[u];if(s==="exports"){o=n[u]=t}else{n[u]=i(d(s,r))}}return{deps:n,exports:o}}a=i=t=function(r){if(s[r]!==o&&n.hasOwnProperty(r)){return n[r]}if(!e[r]){throw new Error("Could not find module "+r)}var t=e[r];var i;var a;var d=false;n[r]={};try{i=u(t.deps,r,n[r]);a=t.callback.apply(this,i.deps);d=true}finally{if(!d){s[r]=o}}return i.exports?n[r]:n[r]=a};function d(e,r){if(e.charAt(0)!=="."){return e}var t=e.split("/");var i=r.split("/");var a;if(i.length===1){a=i}else{a=i.slice(0,-1)}for(var n=0,s=t.length;n<s;n++){var o=t[n];if(o===".."){a.pop()}else if(o==="."){continue}else{a.push(o)}}return a.join("/")}a.entries=a._eak_seen=e;a.clear=function(){a.entries=a._eak_seen=e={};n=s={}}})();r("activemodel-adapter",["activemodel-adapter/system","exports"],function(e,r){"use strict";var t=e.ActiveModelAdapter;var i=e.ActiveModelSerializer;r.ActiveModelAdapter=t;r.ActiveModelSerializer=i});r("activemodel-adapter/setup-container",["ember-data/system/container_proxy","activemodel-adapter/system/active_model_serializer","activemodel-adapter/system/active_model_adapter","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t["default"];i["default"]=function o(e,r){var t=new a(e);t.registerDeprecations([{deprecated:"serializer:_ams",valid:"serializer:-active-model"},{deprecated:"adapter:_ams",valid:"adapter:-active-model"}]);e.register("serializer:-active-model",n);e.register("adapter:-active-model",s)}});r("activemodel-adapter/system",["activemodel-adapter/system/active_model_adapter","activemodel-adapter/system/active_model_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.ActiveModelAdapter=i;t.ActiveModelSerializer=a});r("activemodel-adapter/system/active_model_adapter",["ember-data/adapters","ember-data/system/adapter","ember-inflector","exports"],function(e,r,t,i){"use strict";var a=e.RESTAdapter;var n=r.InvalidError;var s=t.pluralize;var o=Ember.EnumerableUtils.forEach;var u=Ember.String.decamelize,d=Ember.String.underscore;var l=a.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=u(e);var t=d(r);return s(t)},ajaxError:function(e){var r=this._super(e);if(e&&e.status===422){var t=Ember.$.parseJSON(e.responseText),i={};if(t.errors!==undefined){var a=t.errors;o(Ember.keys(a),function(e){i[Ember.String.camelize(e)]=a[e]})}return new n(i)}else{return r}}});i["default"]=l});r("activemodel-adapter/system/active_model_serializer",["ember-inflector","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e.singularize;var a=r["default"];var n=Ember.get,s=Ember.EnumerableUtils.forEach,o=Ember.String.camelize,u=Ember.String.capitalize,d=Ember.String.decamelize,l=Ember.String.underscore;var c=a.extend({keyForAttribute:function(e){return d(e)},keyForRelationship:function(e,r){var t=d(e);if(r==="belongsTo"){return t+"_id"}else if(r==="hasMany"){return i(t)+"_ids"}else{return t}},serializeHasMany:Ember.K,serializeIntoHash:function(e,r,t,i){var a=l(d(r.typeKey));e[a]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var a=n(e,i);var s=l(i+"_type");if(Ember.isNone(a)){r[s]=null}else{r[s]=u(o(a.constructor.typeKey))}},normalize:function(e,r,t){this.normalizeLinks(r);return this._super(e,r,t)},normalizeLinks:function(e){if(e.links){var r=e.links;for(var t in r){var i=o(t);if(i!==t){r[i]=r[t];delete r[t]}}}},normalizeRelationships:function(e,r){if(this.keyForRelationship){e.eachRelationship(function(e,t){var i,a;if(t.options.polymorphic){i=this.keyForAttribute(e);a=r[i];if(a&&a.type){a.type=this.typeForRoot(a.type)}else if(a&&t.kind==="hasMany"){var n=this;s(a,function(e){e.type=n.typeForRoot(e.type)})}}else{i=this.keyForRelationship(e,t.kind);if(!r.hasOwnProperty(i)){return}a=r[i]}r[e]=a;if(e!==i){delete r[i]}},this)}}});t["default"]=c});r("ember-data",["ember-data/core","ember-data/ext/date","ember-data/system/promise_proxies","ember-data/system/store","ember-data/system/model","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","ember-data/system/relationships/relationship","exports"],function(e,r,t,i,a,n,s,o,u,d,l,c,f,h,p,m,y,v,b,g,E,R){"use strict";Ember.RSVP.Promise.cast=Ember.RSVP.Promise.cast||Ember.RSVP.resolve;var A=e["default"];var _=t.PromiseArray;var F=t.PromiseObject;var z=i.Store;var x=a.Model;var T=a.Errors;var S=a.RootState;var k=a.attr;var M=n.InvalidError;var D=n.Adapter;var P=s["default"];var O=o.RecordArray;var C=o.FilteredRecordArray;var w=o.AdapterPopulatedRecordArray;var $=o.ManyArray;var I=u["default"];var L=d.RESTAdapter;var j=d.FixtureAdapter;var K=l["default"];var B=c["default"];var N=h["default"];var U=p.ActiveModelAdapter;var V=p.ActiveModelSerializer;var H=m.Transform;var W=m.DateTransform;var q=m.NumberTransform;var Q=m.StringTransform;var X=m.BooleanTransform;var J=y.hasMany;var G=y.belongsTo;var Y=b["default"];var Z=g["default"];var er=E.Relationship;A.Store=z;A.PromiseArray=_;A.PromiseObject=F;A.Model=x;A.RootState=S;A.attr=k;A.Errors=T;A.Adapter=D;A.InvalidError=M;A.DebugAdapter=P;A.RecordArray=O;A.FilteredRecordArray=C;A.AdapterPopulatedRecordArray=w;A.ManyArray=$;A.RecordArrayManager=I;A.RESTAdapter=L;A.FixtureAdapter=j;A.RESTSerializer=B;A.JSONSerializer=K;A.Transform=H;A.DateTransform=W;A.StringTransform=Q;A.NumberTransform=q;A.BooleanTransform=X;A.ActiveModelAdapter=U;A.ActiveModelSerializer=V;A.EmbeddedRecordsMixin=N;A.belongsTo=G;A.hasMany=J;A.Relationship=er;A.ContainerProxy=Z;A._setupContainer=Y;Ember.lookup.DS=A;R["default"]=A});r("ember-data/adapters",["ember-data/adapters/fixture_adapter","ember-data/adapters/rest_adapter","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.RESTAdapter=a;t.FixtureAdapter=i});r("ember-data/adapters/fixture_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=Ember.get;var i=Ember.String.fmt;var a=Ember.EnumerableUtils.indexOf;var n=0;var s=e["default"];r["default"]=s.extend({serializer:null,simulateRemoteResponse:true,latency:50,fixturesForType:function(e){if(e.FIXTURES){var r=Ember.A(e.FIXTURES);return r.map(function(e){var r=typeof e.id;if(r!=="number"&&r!=="string"){throw new Error(i("the id property must be defined as a number or string for fixture %@",[e]))}e.id=e.id+"";return e})}return null},queryFixtures:function(e,r,t){},updateFixtures:function(e,r){if(!e.FIXTURES){e.FIXTURES=[]}var t=e.FIXTURES;this.deleteLoadedFixture(e,r);t.push(r)},mockJSON:function(e,r,t){return e.serializerFor(r).serialize(t,{includeId:true})},generateIdForRecord:function(e){return"fixture-"+n++},find:function(e,r,t){var i=this.fixturesForType(r);var a;if(i){a=Ember.A(i).findBy("id",t)}if(a){return this.simulateRemoteCall(function(){return a},this)}},findMany:function(e,r,t){var i=this.fixturesForType(r);if(i){i=i.filter(function(e){return a(t,e.id)!==-1})}if(i){return this.simulateRemoteCall(function(){return i},this)}},findAll:function(e,r){var t=this.fixturesForType(r);return this.simulateRemoteCall(function(){return t},this)},findQuery:function(e,r,t,i){var a=this.fixturesForType(r);a=this.queryFixtures(a,t,r);if(a){return this.simulateRemoteCall(function(){return a},this)}},createRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},updateRecord:function(e,r,t){var i=this.mockJSON(e,r,t);this.updateFixtures(r,i);return this.simulateRemoteCall(function(){return i},this)},deleteRecord:function(e,r,t){this.deleteLoadedFixture(r,t);return this.simulateRemoteCall(function(){return null})},deleteLoadedFixture:function(e,r){var t=this.findExistingFixture(e,r);if(t){var i=a(e.FIXTURES,t);e.FIXTURES.splice(i,1);return true}},findExistingFixture:function(e,r){var i=this.fixturesForType(e);var a=t(r,"id");return this.findFixtureById(i,a)},findFixtureById:function(e,r){return Ember.A(e).find(function(e){if(""+t(e,"id")===""+r){return true}else{return false}})},simulateRemoteCall:function(e,r){var i=this;return new Ember.RSVP.Promise(function(a){var n=Ember.copy(e.call(r),true);if(t(i,"simulateRemoteResponse")){Ember.run.later(function(){a(n)},t(i,"latency"))}else{Ember.run.schedule("actions",null,function(){a(n)})}},"DS: FixtureAdapter#simulateRemoteCall")}})});r("ember-data/adapters/rest_adapter",["ember-data/system/adapter","exports"],function(e,r){"use strict";var t=e.Adapter;var i=e.InvalidError;var a=Ember.get;var n=Ember.ArrayPolyfills.forEach;r["default"]=t.extend({defaultSerializer:"-rest",coalesceFindRequests:false,find:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET")},findAll:function(e,r,t){var i;if(t){i={since:t}}return this.ajax(this.buildURL(r.typeKey),"GET",{data:i})},findQuery:function(e,r,t){return this.ajax(this.buildURL(r.typeKey),"GET",{data:t})},findMany:function(e,r,t,i){return this.ajax(this.buildURL(r.typeKey,t,i),"GET",{data:{ids:t}})},findHasMany:function(e,r,t,i){var n=a(this,"host");var s=a(r,"id");var o=r.constructor.typeKey;if(n&&t.charAt(0)==="/"&&t.charAt(1)!=="/"){t=n+t}return this.ajax(this.urlPrefix(t,this.buildURL(o,s)),"GET")},findBelongsTo:function(e,r,t,i){var n=a(r,"id");var s=r.constructor.typeKey;return this.ajax(this.urlPrefix(t,this.buildURL(s,n)),"GET")},createRecord:function(e,r,t){var i={};var a=e.serializerFor(r.typeKey);a.serializeIntoHash(i,r,t,{includeId:true});return this.ajax(this.buildURL(r.typeKey,null,t),"POST",{data:i})},updateRecord:function(e,r,t){var i={};var n=e.serializerFor(r.typeKey);n.serializeIntoHash(i,r,t);var s=a(t,"id");return this.ajax(this.buildURL(r.typeKey,s,t),"PUT",{data:i})},deleteRecord:function(e,r,t){var i=a(t,"id");return this.ajax(this.buildURL(r.typeKey,i,t),"DELETE")},buildURL:function(e,r,t){var i=[],n=a(this,"host"),s=this.urlPrefix();if(e){i.push(this.pathForType(e))}if(r&&!Ember.isArray(r)){i.push(r)}if(s){i.unshift(s)}i=i.join("/");if(!n&&i){i="/"+i}return i},urlPrefix:function(e,r){var t=a(this,"host");var i=a(this,"namespace");var n=[];if(e){if(e.charAt(0)==="/"){if(t){e=e.slice(1);n.push(t)}}else if(!/^http(s)?:\/\//.test(e)){n.push(r)}}else{if(t){n.push(t)}if(i){n.push(i)}}if(e){n.push(e)}return n.join("/")},_stripIDFromURL:function(e,r){var t=e.modelFor(r);var i=this.buildURL(t.typeKey,r.get("id"),r);var a=i.split("/");var n=a[a.length-1];var o=r.get("id");if(n===o){a[a.length-1]=""}else if(s(n,"?id="+o)){a[a.length-1]=n.substring(0,n.length-o.length-1)}return a.join("/")},groupRecordsForFindMany:function(e,r){var t=Ember.MapWithDefault.create({defaultValue:function(){return[]}});var i=this;n.call(r,function(r){var a=i._stripIDFromURL(e,r);t.get(a).push(r)});function a(r,t){var a=i._stripIDFromURL(e,r[0]);var s=0;var o=[[]];n.call(r,function(e){var r="&ids[]=".length+e.get("id.length");if(a.length+s+r>=t){s=0;o.push([])}s+=r;var i=o.length-1;o[i].push(e)});return o}var s=[];t.forEach(function(e,r){var t=2048;var i=a(r,t);n.call(i,function(e){s.push(e)})});return s},pathForType:function(e){var r=Ember.String.camelize(e);return Ember.String.pluralize(r)},ajaxError:function(e,r){if(e&&typeof e==="object"){e.then=null}return e},ajaxSuccess:function(e,r){return r},ajax:function(e,r,t){var a=this;return new Ember.RSVP.Promise(function(n,s){var o=a.ajaxOptions(e,r,t);o.success=function(e,r,t){e=a.ajaxSuccess(t,e);if(e instanceof i){Ember.run(null,s,e)}else{Ember.run(null,n,e)}};o.error=function(e,r,t){Ember.run(null,s,a.ajaxError(e,e.responseText))};Ember.$.ajax(o)},"DS: RESTAdapter#ajax "+r+" to "+e)},ajaxOptions:function(e,r,t){var i=t||{};i.url=e;i.type=r;i.dataType="json";i.context=this;if(i.data&&r!=="GET"){i.contentType="application/json; charset=utf-8";i.data=JSON.stringify(i.data)}var s=a(this,"headers");if(s!==undefined){i.beforeSend=function(e){n.call(Ember.keys(s),function(r){e.setRequestHeader(r,s[r])})}}return i}});function s(e,r){if(typeof String.prototype.endsWith!=="function"){return e.indexOf(r,e.length-r.length)!==-1}else{return e.endsWith(r)}}});r("ember-data/core",["exports"],function(e){"use strict";var r;if("undefined"===typeof r){r=Ember.Namespace.create({VERSION:"1.0.0-beta.10"});if(Ember.libraries){Ember.libraries.registerCoreLibrary("Ember Data",r.VERSION)}}e["default"]=r});r("ember-data/ember-initializer",["ember-data/setup-container"],function(e){"use strict";var r=e["default"];var t=Ember.K;Ember.onLoad("Ember.Application",function(e){e.initializer({name:"ember-data",initialize:r});e.initializer({name:"store",after:"ember-data",initialize:t});e.initializer({name:"activeModelAdapter",before:"store",initialize:t});e.initializer({name:"transforms",before:"store",initialize:t});e.initializer({name:"data-adapter",before:"store",initialize:t});e.initializer({name:"injectStore",before:"store",initialize:t})})});r("ember-data/ext/date",[],function(){"use strict";Ember.Date=Ember.Date||{};var e=Date.parse,r=[1,4,5,6,7,10,11];Ember.Date.parse=function(t){var i,a,n=0;if(a=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(t)){for(var s=0,o;o=r[s];++s){a[o]=+a[o]||0}a[2]=(+a[2]||1)-1;a[3]=+a[3]||1;if(a[8]!=="Z"&&a[9]!==undefined){n=a[10]*60+a[11];if(a[9]==="+"){n=0-n}}i=Date.UTC(a[1],a[2],a[3],a[4],a[5]+n,a[6],a[7])}else{i=e?e(t):NaN}return i};if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.Date){Date.parse=Ember.Date.parse}});r("ember-data/initializers/data_adapter",["ember-data/system/debug/debug_adapter","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=function i(e){e.register("data-adapter:main",t)}});r("ember-data/initializers/store",["ember-data/serializers","ember-data/adapters","ember-data/system/container_proxy","ember-data/system/store","exports"],function(e,r,t,i,a){"use strict";var n=e.JSONSerializer;var s=e.RESTSerializer;var o=r.RESTAdapter;var u=t["default"];var d=i["default"];a["default"]=function l(e,r){e.register("store:main",e.lookupFactory("store:application")||r&&r.Store||d);var t=new u(e);t.registerDeprecations([{deprecated:"serializer:_default",valid:"serializer:-default"},{deprecated:"serializer:_rest",valid:"serializer:-rest"},{deprecated:"adapter:_rest",valid:"adapter:-rest"}]);e.register("serializer:-default",n);e.register("serializer:-rest",s);e.register("adapter:-rest",o);e.lookup("store:main")}});r("ember-data/initializers/store_injections",["exports"],function(e){"use strict";e["default"]=function r(e){e.injection("controller","store","store:main");e.injection("route","store","store:main");e.injection("serializer","store","store:main");e.injection("data-adapter","store","store:main")}});r("ember-data/initializers/transforms",["ember-data/transforms","exports"],function(e,r){"use strict";var t=e.BooleanTransform;var i=e.DateTransform;var a=e.StringTransform;var n=e.NumberTransform;r["default"]=function s(e){e.register("transform:boolean",t);e.register("transform:date",i);e.register("transform:number",n);e.register("transform:string",a)}});r("ember-data/serializers",["ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","exports"],function(e,r,t){"use strict";var i=e["default"];var a=r["default"];t.JSONSerializer=i;t.RESTSerializer=a});r("ember-data/serializers/embedded_records_mixin",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.EnumerableUtils.forEach;var i=Ember.String.camelize;var a=Ember.Mixin.create({normalize:function(e,r,t){var i=this._super(e,r,t);return n(this,this.store,e,i)},keyForRelationship:function(e,r){if(this.hasDeserializeRecordsOption(e)){return this.keyForAttribute(e)}else{return this._super(e,r)||e}},serializeBelongsTo:function(e,t,i){var a=i.key;if(this.noSerializeOptionSpecified(a)){this._super(e,t,i);return}var n=this.hasSerializeIdsOption(a);var s=this.hasSerializeRecordsOption(a);var o=e.get(a);var u;if(n){u=this.keyForRelationship(a,i.kind);if(!o){t[u]=null}else{t[u]=r(o,"id")}}else if(s){u=this.keyForAttribute(a);if(!o){t[u]=null}else{t[u]=o.serialize({includeId:true});this.removeEmbeddedForeignKey(e,o,i,t[u])}}},serializeHasMany:function(e,t,i){var a=i.key;if(this.noSerializeOptionSpecified(a)){this._super(e,t,i);return}var n=this.hasSerializeIdsOption(a);var s=this.hasSerializeRecordsOption(a);var o;if(n){o=this.keyForRelationship(a,i.kind);t[o]=r(e,a).mapBy("id")}else if(s){o=this.keyForAttribute(a);t[o]=r(e,a).map(function(r){var t=r.serialize({includeId:true});this.removeEmbeddedForeignKey(e,r,i,t);return t},this)}},removeEmbeddedForeignKey:function(e,r,t,i){if(t.kind==="hasMany"){return}else if(t.kind==="belongsTo"){var a=e.constructor.inverseFor(t.key);if(a){var n=a.name;var s=this.store.serializerFor(r.constructor);var o=s.keyForRelationship(n,a.kind);if(o){delete i[o]}}}},hasEmbeddedAlwaysOption:function(e){var r=this.attrsOption(e);return r&&r.embedded==="always"},hasSerializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.serialize==="records"},hasSerializeIdsOption:function(e){var r=this.attrsOption(e);return r&&(r.serialize==="ids"||r.serialize==="id")},noSerializeOptionSpecified:function(e){var r=this.attrsOption(e);return!(r&&(r.serialize||r.embedded))},hasDeserializeRecordsOption:function(e){var r=this.hasEmbeddedAlwaysOption(e);var t=this.attrsOption(e);return r||t&&t.deserialize==="records"},attrsOption:function(e){var r=this.get("attrs");return r&&(r[i(e)]||r[e])}});function n(e,r,t,i){t.eachRelationship(function(t,a){if(e.hasDeserializeRecordsOption(t)){var n=r.modelFor(a.type.typeKey);if(a.kind==="hasMany"){if(a.options.polymorphic){o(r,t,i)}else{s(r,t,n,i)}}if(a.kind==="belongsTo"){u(r,t,n,i)}}});return i}function s(e,r,i,a){if(!a[r]){return a}var n=[];var s=e.serializerFor(i.typeKey);t(a[r],function(r){var t=s.normalize(i,r,null);e.push(i,t);n.push(t.id)});a[r]=n;return a}function o(e,i,a){if(!a[i]){return a}var n=[];t(a[i],function(t){var i=t.type;var a=e.serializerFor(i);var s=e.modelFor(i);var o=r(a,"primaryKey");var u=a.normalize(s,t,null);e.push(s,u);n.push({id:u[o],type:i})});a[i]=n;return a}function u(e,r,t,i){if(!i[r]){return i}var a=e.serializerFor(t.typeKey);var n=a.normalize(t,i[r],null);e.push(t,n);i[r]=n.id;return i}e["default"]=a});r("ember-data/serializers/json_serializer",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isNone;var i=Ember.ArrayPolyfills.map;var a=Ember.merge;e["default"]=Ember.Object.extend({primaryKey:"id",applyTransforms:function(e,r){e.eachTransformedAttribute(function t(e,i){if(!r.hasOwnProperty(e)){return}var a=this.transformFor(i);r[e]=a.deserialize(r[e])},this);return r},normalize:function(e,r){if(!r){return r}this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);this.applyTransforms(e,r);return r},normalizePayload:function(e){return e},normalizeAttributes:function(e,r){var t;if(this.keyForAttribute){e.eachAttribute(function(e){t=this.keyForAttribute(e);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeRelationships:function(e,r){var t;if(this.keyForRelationship){e.eachRelationship(function(e,i){t=this.keyForRelationship(e,i.kind);if(e===t){return}if(!r.hasOwnProperty(t)){return}r[e]=r[t];delete r[t]},this)}},normalizeUsingDeclaredMapping:function(e,t){var i=r(this,"attrs"),a,n;if(i){for(n in i){a=this._getMappedKey(n);if(!t.hasOwnProperty(a)){continue}if(a!==n){t[n]=t[a];delete t[a]}}}},normalizeId:function(e){var t=r(this,"primaryKey");if(t==="id"){return}e.id=e[t];delete e[t]},_getMappedKey:function(e){var t=r(this,"attrs");var i;if(t&&t[e]){i=t[e];if(i.key){i=i.key}if(typeof i==="string"){e=i}}return e},_canSerialize:function(e){var t=r(this,"attrs");return!t||!t[e]||t[e].serialize!==false},serialize:function(e,t){var i={};if(t&&t.includeId){var a=r(e,"id");if(a){i[r(this,"primaryKey")]=a}}e.eachAttribute(function(r,t){this.serializeAttribute(e,i,r,t)},this);e.eachRelationship(function(r,t){if(t.kind==="belongsTo"){this.serializeBelongsTo(e,i,t)}else if(t.kind==="hasMany"){this.serializeHasMany(e,i,t)}},this);return i},serializeIntoHash:function(e,r,t,i){a(e,this.serialize(t,i))},serializeAttribute:function(e,t,i,a){var n=a.type;if(this._canSerialize(i)){var s=r(e,i);if(n){var o=this.transformFor(n);s=o.serialize(s)}var u=this._getMappedKey(i);if(u===i&&this.keyForAttribute){u=this.keyForAttribute(i)}t[u]=s}},serializeBelongsTo:function(e,i,a){var n=a.key;if(this._canSerialize(n)){var s=r(e,n);var o=this._getMappedKey(n);if(o===n&&this.keyForRelationship){o=this.keyForRelationship(n,"belongsTo")}if(t(s)){i[o]=s}else{i[o]=r(s,"id")}if(a.options.polymorphic){this.serializePolymorphicType(e,i,a)}}},serializeHasMany:function(e,t,i){var a=i.key;if(this._canSerialize(a)){var n;n=this._getMappedKey(a);if(n===a&&this.keyForRelationship){n=this.keyForRelationship(a,"hasMany")}var s=e.constructor.determineRelationshipType(i);if(s==="manyToNone"||s==="manyToMany"){t[n]=r(e,a).mapBy("id")}}},serializePolymorphicType:Ember.K,extract:function(e,r,t,i,a){this.extractMeta(e,r,t);var n="extract"+a.charAt(0).toUpperCase()+a.substr(1);return this[n](e,r,t,i,a)},extractFindAll:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindQuery:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractFindHasMany:function(e,r,t,i,a){return this.extractArray(e,r,t,i,a)},extractCreateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractUpdateRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractDeleteRecord:function(e,r,t,i,a){return this.extractSave(e,r,t,i,a)},extractFind:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractFindBelongsTo:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSave:function(e,r,t,i,a){return this.extractSingle(e,r,t,i,a)},extractSingle:function(e,r,t,i,a){t=this.normalizePayload(t);return this.normalize(r,t)},extractArray:function(e,r,t,a,n){var s=this.normalizePayload(t);var o=this;return i.call(s,function(e){return o.normalize(r,e)})},extractMeta:function(e,r,t){if(t&&t.meta){e.metaForType(r,t.meta);delete t.meta}},keyForAttribute:function(e){return e},keyForRelationship:function(e,r){return e},transformFor:function(e,r){var t=this.container.lookup("transform:"+e);return t}})});r("ember-data/serializers/rest_serializer",["ember-data/serializers/json_serializer","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e["default"];var a=Ember.get;var n=Ember.ArrayPolyfills.forEach;var s=Ember.ArrayPolyfills.map;var o=Ember.String.camelize;var u=r.singularize;function d(e){return e==null?null:e+""}t["default"]=i.extend({normalize:function(e,r,t){this.normalizeId(r);this.normalizeAttributes(e,r);this.normalizeRelationships(e,r);this.normalizeUsingDeclaredMapping(e,r);if(this.normalizeHash&&this.normalizeHash[t]){this.normalizeHash[t](r)}this.applyTransforms(e,r);return r},extractSingle:function(e,r,t,i){var a=this.normalizePayload(t);var s=r.typeKey;var o;for(var u in a){var l=this.typeForRoot(u);var c=e.modelFor(l);var f=c.typeKey===s;var h=a[u];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,u);continue}n.call(h,function(r){var t=this.typeForRoot(u);var a=e.modelFor(t);var n=e.serializerFor(a);r=n.normalize(a,r,u);var s=f&&!i&&!o;var l=f&&d(r.id)===i;if(s||l){o=r}else{e.push(t,r)}},this)}return o},extractArray:function(e,r,t){var i=this.normalizePayload(t);var a=r.typeKey;var n;for(var o in i){var u=o;var d=false;if(o.charAt(0)==="_"){d=true;u=o.substr(1)}var l=this.typeForRoot(u);var c=e.modelFor(l);var f=e.serializerFor(c);var h=!d&&c.typeKey===a;var p=s.call(i[o],function(e){return f.normalize(c,e,o)},this);if(h){n=p}else{e.pushMany(l,p)}}return n},pushPayload:function(e,r){var t=this.normalizePayload(r);for(var i in t){var a=this.typeForRoot(i);var n=e.modelFor(a);var o=e.serializerFor(n);var u=s.call(Ember.makeArray(t[i]),function(e){return o.normalize(n,e,i)},this);e.pushMany(a,u)}},typeForRoot:function(e){return o(u(e))},serialize:function(e,r){return this._super.apply(this,arguments)},serializeIntoHash:function(e,r,t,i){e[r.typeKey]=this.serialize(t,i)},serializePolymorphicType:function(e,r,t){var i=t.key;var n=a(e,i);i=this.keyForAttribute?this.keyForAttribute(i):i;if(Ember.isNone(n)){r[i+"Type"]=null}else{r[i+"Type"]=Ember.String.camelize(n.constructor.typeKey)}}})});r("ember-data/setup-container",["ember-data/initializers/store","ember-data/initializers/transforms","ember-data/initializers/store_injections","ember-data/initializers/data_adapter","activemodel-adapter/setup-container","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=t["default"];var d=i["default"];var l=a["default"];n["default"]=function c(e,r){d(e,r);o(e,r);u(e,r);s(e,r);l(e,r)}});r("ember-data/system/adapter",["exports"],function(e){"use strict";var r=Ember.get;var t=["description","fileName","lineNumber","message","name","number","stack"];function i(e){var r=Error.prototype.constructor.call(this,"The backend rejected the commit because it was invalid: "+Ember.inspect(e));this.errors=e;for(var i=0,a=t.length;i<a;i++){this[t[i]]=r[t[i]]}}i.prototype=Ember.create(Error.prototype);var a=Ember.Object.extend({find:Ember.required(Function),findAll:null,findQuery:null,generateIdForRecord:null,serialize:function(e,t){return r(e,"store").serializerFor(e.constructor.typeKey).serialize(e,t)},createRecord:Ember.required(Function),updateRecord:Ember.required(Function),deleteRecord:Ember.required(Function),coalesceFindRequests:true,groupRecordsForFindMany:function(e,r){return[r]}});e.InvalidError=i;e.Adapter=a;e["default"]=a});r("ember-data/system/container_proxy",["exports"],function(e){"use strict";function r(e){this.container=e}r.prototype.aliasedFactory=function(e,r){var t=this;return{create:function(){if(r){r()}return t.container.lookup(e)}}};r.prototype.registerAlias=function(e,r,t){var i=this.aliasedFactory(r,t);return this.container.register(e,i)};r.prototype.registerDeprecation=function(e,r){var t=function(){};return this.registerAlias(e,r,t)};r.prototype.registerDeprecations=function(e){var r,t,i,a;for(r=e.length;r>0;r--){t=e[r-1];i=t["deprecated"];a=t["valid"];this.registerDeprecation(i,a)}};e["default"]=r});r("ember-data/system/debug",["ember-data/system/debug/debug_info","ember-data/system/debug/debug_adapter","exports"],function(e,r,t){"use strict";var i=r["default"];t["default"]=i});r("ember-data/system/debug/debug_adapter",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;var i=Ember.get;var a=Ember.String.capitalize;var n=Ember.String.underscore;r["default"]=Ember.DataAdapter.extend({getFilters:function(){return[{name:"isNew",desc:"New"},{name:"isModified",desc:"Modified"},{name:"isClean",desc:"Clean"}]},detect:function(e){return e!==t&&t.detect(e)},columnsForType:function(e){var r=[{name:"id",desc:"Id"}];var t=0;var s=this;i(e,"attributes").forEach(function(e,i){if(t++>s.attributeLimit){return false}var o=a(n(e).replace("_"," "));r.push({name:e,desc:o})});return r},getRecords:function(e){return this.get("store").all(e)},getRecordColumnValues:function(e){var r=this,t=0;var a={id:i(e,"id")};e.eachAttribute(function(n){if(t++>r.attributeLimit){return false}var s=i(e,n);a[n]=s});return a},getRecordKeywords:function(e){var r=[];var t=Ember.A(["id"]);e.eachAttribute(function(e){t.push(e)});t.forEach(function(t){r.push(i(e,t))});return r},getRecordFilterValues:function(e){return{isNew:e.get("isNew"),isModified:e.get("isDirty")&&!e.get("isNew"),isClean:!e.get("isDirty")}},getRecordColor:function(e){var r="black";if(e.get("isNew")){r="green"}else if(e.get("isDirty")){r="blue"}return r},observeRecord:function(e,r){var t=Ember.A(),i=this;var a=Ember.A(["id","isNew","isDirty"]);e.eachAttribute(function(e){a.push(e)});a.forEach(function(a){var n=function(){r(i.wrapRecord(e))};Ember.addObserver(e,a,n);t.push(function(){Ember.removeObserver(e,a,n)})});var n=function(){t.forEach(function(e){e()})};return n}})});r("ember-data/system/debug/debug_info",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;t.reopen({_debugInfo:function(){var e=["id"],r={belongsTo:[],hasMany:[]},t=[];this.eachAttribute(function(r,t){e.push(r)},this);this.eachRelationship(function(e,i){r[i.kind].push(e);t.push(e)});var i=[{name:"Attributes",properties:e,expand:true},{name:"Belongs To",properties:r.belongsTo,expand:true},{name:"Has Many",properties:r.hasMany,expand:true},{name:"Flags",properties:["isLoaded","isDirty","isSaving","isDeleted","isError","isNew","isValid"]}];return{propertyInfo:{includeOtherProperties:true,groups:i,expensiveProperties:t}}}});r["default"]=t});r("ember-data/system/model",["ember-data/system/model/model","ember-data/system/model/attributes","ember-data/system/model/states","ember-data/system/model/errors","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var u=i["default"];a.Model=n;a.RootState=o;a.attr=s;a.Errors=u});r("ember-data/system/model/attributes",["ember-data/system/model/model","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;t.reopenClass({attributes:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isAttribute){t.name=r;e.set(r,t)}});return e}).readOnly(),transformedAttributes:Ember.computed(function(){var e=Ember.Map.create();this.eachAttribute(function(r,t){if(t.type){e.set(r,t.type)}});return e}).readOnly(),eachAttribute:function(e,r){i(this,"attributes").forEach(function(t,i){e.call(r,t,i)},r)},eachTransformedAttribute:function(e,r){i(this,"transformedAttributes").forEach(function(t,i){e.call(r,t,i)})}});t.reopen({eachAttribute:function(e,r){this.constructor.eachAttribute(e,r)}});function a(e,r,t){if(typeof r.defaultValue==="function"){return r.defaultValue.apply(null,arguments)}else{return r.defaultValue}}function n(e,r){return e._attributes.hasOwnProperty(r)||e._inFlightAttributes.hasOwnProperty(r)||e._data.hasOwnProperty(r)}function s(e,r){if(e._attributes.hasOwnProperty(r)){return e._attributes[r]}else if(e._inFlightAttributes.hasOwnProperty(r)){return e._inFlightAttributes[r]}else{return e._data[r]}}r["default"]=function o(e,r){r=r||{};var t={type:e,isAttribute:true,options:r};return Ember.computed("data",function(e,t){if(arguments.length>1){var i=s(this,e);if(t!==i){this._attributes[e]=t;this.send("didSetProperty",{name:e,oldValue:i,originalValue:this._data[e],value:t})}return t}else if(n(this,e)){return s(this,e)}else{return a(this,r,e)}}).meta(t)}});r("ember-data/system/model/errors",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.isEmpty;var i=Ember.EnumerableUtils.map;e["default"]=Ember.Object.extend(Ember.Enumerable,Ember.Evented,{registerHandlers:function(e,r,t){this.on("becameInvalid",e,r);this.on("becameValid",e,t)},errorsByAttributeName:Ember.reduceComputed("content",{initialValue:function(){return Ember.MapWithDefault.create({defaultValue:function(){return Ember.A()}})},addedItem:function(e,r){e.get(r.attribute).pushObject(r);return e},removedItem:function(e,r){e.get(r.attribute).removeObject(r);return e}}),errorsFor:function(e){return r(this,"errorsByAttributeName").get(e)},messages:Ember.computed.mapBy("content","message"),content:Ember.computed(function(){return Ember.A()}),unknownProperty:function(e){var r=this.errorsFor(e);if(t(r)){return null}return r},nextObject:function(e,t,i){return r(this,"content").objectAt(e)
|
2
|
+
},length:Ember.computed.oneWay("content.length").readOnly(),isEmpty:Ember.computed.not("length").readOnly(),add:function(e,t){var i=r(this,"isEmpty");t=this._findOrCreateMessages(e,t);r(this,"content").addObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(i&&!r(this,"isEmpty")){this.trigger("becameInvalid")}},_findOrCreateMessages:function(e,r){var t=this.errorsFor(e);return i(Ember.makeArray(r),function(r){return t.findBy("message",r)||{attribute:e,message:r}})},remove:function(e){if(r(this,"isEmpty")){return}var t=r(this,"content").rejectBy("attribute",e);r(this,"content").setObjects(t);this.notifyPropertyChange(e);this.enumerableContentDidChange();if(r(this,"isEmpty")){this.trigger("becameValid")}},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});r("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],function(e,r,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=i.PromiseObject;var d=a.createRelationshipFor;var l=Ember.get;var c=Ember.set;var f=Ember.merge;var h=Ember.RSVP.Promise;var p=Ember.ArrayPolyfills.forEach;var m=Ember.ArrayPolyfills.map;var y;var v=Ember.computed("currentState",function(e,r){return l(l(this,"currentState"),e)}).readOnly();var b=Object.create(null);var g=Object.create(null);function E(e){return g[e]||(g[e]=e.split("."))}function R(e){return b[e]||(b[e]=E(e)[0])}var A=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:v,isLoading:v,isLoaded:v,isDirty:v,isSaving:v,isDeleted:v,isNew:v,isValid:v,dirtyType:v,isError:false,isReloading:false,clientId:null,id:null,currentState:s.empty,errors:Ember.computed(function(){var e=o.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=l(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!y){y=t("ember-data/serializers/json_serializer")["default"]}var r=y.create({container:this.container});return r.serialize(this,e)},didLoad:Ember.K,didUpdate:Ember.K,didCreate:Ember.K,didDelete:Ember.K,becameInvalid:Ember.K,becameError:Ember.K,data:Ember.computed(function(){this._data=this._data||{};return this._data}).readOnly(),_data:null,init:function(){this._super();this._setup()},_setup:function(){this._changesToSync={};this._deferredTriggers=[];this._data={};this._attributes={};this._inFlightAttributes={};this._relationships={};var e=this;this.constructor.eachRelationship(function(r,t){e._relationships[r]=d(e,t,e.store)})},send:function(e,r){var t=l(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=R(e);var t=l(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=E(e);var n=[],s=[],o,u;for(o=0,u=a.length;o<u;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,u=s.length;o<u;o++){s[o].enter(this)}c(this,"currentState",i);for(o=0,u=n.length;o<u;o++){n[o].setup(this)}this.updateRecordArraysLater()},_unhandledEvent:function(e,r,t){var i="Attempted to handle event `"+r+"` ";i+="on "+String(this)+" while in state ";i+=e.stateName+". ";if(t!==undefined){i+="Called with "+Ember.inspect(t)+"."}throw new Ember.Error(i)},withTransaction:function(e){var r=l(this,"transaction");if(r){e(r)}},loadingData:function(e){this.send("loadingData",e)},loadedData:function(){this.send("loadedData")},notFound:function(){this.send("notFound")},pushedData:function(){this.send("pushedData")},deleteRecord:function(){this.send("deleteRecord")},destroyRecord:function(){this.deleteRecord();return this.save()},unloadRecord:function(){if(this.isDestroyed){return}this.send("unloadRecord")},clearRelationships:function(){this.eachRelationship(function(e,r){var t=this._relationships[e];if(t){t.clear();t.destroy()}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;l(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;p.call(Ember.keys(e),function(t){var i=l(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{l(r,"_data")[t]=i}})},_preloadRelationship:function(e,r){var t=this.constructor.metaForProperty(e);var i=t.type;if(t.kind==="hasMany"){this._preloadHasMany(e,r,i)}else{this._preloadBelongsTo(e,r,i)}},_preloadHasMany:function(e,r,t){var i=this;var a=m.call(r,function(e){return i._convertStringOrNumberIntoRecord(e,t)});this._relationships[e].updateRecordsFromAdapter(a)},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);this._relationships[e].setRecord(i)},_convertStringOrNumberIntoRecord:function(e,r){if(Ember.typeOf(e)==="string"||Ember.typeOf(e)==="number"){return this.store.recordForId(r,e)}return e},changedAttributes:function(){var e=l(this,"_data");var r=l(this,"_attributes");var t={};var i;for(i in r){t[i]=[e[i],r[i]]}return t},adapterWillCommit:function(){this.send("willCommit")},adapterDidCommit:function(e){c(this,"isError",false);if(e){this._data=e}else{Ember.mixin(this._data,this._inFlightAttributes)}this._inFlightAttributes={};this.send("didCommit");this.updateRecordArraysLater();if(!e){return}this.notifyPropertyChange("data")},adapterDidDirty:function(){this.send("becomeDirty");this.updateRecordArraysLater()},updateRecordArraysLater:function(){if(this._updatingRecordArraysLater){return}this._updatingRecordArraysLater=true;Ember.run.schedule("actions",this,this.updateRecordArrays)},setupData:function(e,r){if(r){Ember.merge(this._data,e)}else{this._data=e}if(e){this.pushedData()}this.notifyPropertyChange("data")},materializeId:function(e){c(this,"id",e)},materializeAttributes:function(e){f(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(l(this,"isError")){this._inFlightAttributes={};c(this,"isError",false)}if(!l(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.notifyPropertyChange("data")},toStringExtension:function(){return l(this,"id")},save:function(){var e="DS: Model#save "+this;var r=Ember.RSVP.defer(e);this.get("store").scheduleSave(this,r);this._inFlightAttributes=this._attributes;this._attributes={};return u.create({promise:r.promise})},reload:function(){c(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new h(function(r){e.send("reloadRecord",r)},r).then(function(){e.set("isReloading",false);e.set("isError",false);return e},function(r){e.set("isError",true);throw r},"DS: Model#reload complete, update flags");return u.create({promise:t})},adapterDidUpdateAttribute:function(e,r){if(r!==undefined){this._data[e]=r;this.notifyPropertyChange(e)}else{this._data[e]=this._inFlightAttributes[e]}this.updateRecordArraysLater()},adapterDidInvalidate:function(e){var r=l(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");c(this,"isError",true)},trigger:function(e){Ember.tryInvoke(this,e,[].slice.call(arguments,1));this._super.apply(this,arguments)},triggerLater:function(){if(this._deferredTriggers.push(arguments)!==1){return}Ember.run.schedule("actions",this,"_triggerDeferredTriggers")},_triggerDeferredTriggers:function(){for(var e=0,r=this._deferredTriggers.length;e<r;e++){this.trigger.apply(this,this._deferredTriggers[e])}this._deferredTriggers.length=0},willDestroy:function(){this._super();this.clearRelationships()},willMergeMixin:function(e){}});A.reopenClass({_create:A.create,create:function(){throw new Ember.Error("You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.")}});n["default"]=A});r("ember-data/system/model/states",["exports"],function(e){"use strict";var r=Ember.get;var t=Ember.set;function i(e,r){if(r.value===r.originalValue){delete e._attributes[r.name];e.send("propertyWasReset",r.name)}else if(r.value!==r.oldValue){e.send("becomeDirty")}e.updateRecordArraysLater()}var a={initialState:"uncommitted",isDirty:true,uncommitted:{didSetProperty:i,loadingData:Ember.K,propertyWasReset:function(e,r){var t=Ember.keys(e._attributes);var i=t>0;if(!i){e.send("rolledBack")}},pushedData:Ember.K,becomeDirty:Ember.K,willCommit:function(e){e.transitionTo("inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},rolledBack:function(e){e.transitionTo("loaded.saved")},becameInvalid:function(e){e.transitionTo("invalid")},rollback:function(e){e.rollback()}},inFlight:{isSaving:true,didSetProperty:i,becomeDirty:Ember.K,pushedData:Ember.K,unloadRecord:function(e){},willCommit:Ember.K,didCommit:function(e){var t=r(this,"dirtyType");e.transitionTo("saved");e.send("invokeLifecycleCallbacks",t)},becameInvalid:function(e){e.transitionTo("invalid");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},invalid:{isValid:false,deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},didSetProperty:function(e,t){r(e,"errors").remove(t.name);i(e,t)},becomeDirty:Ember.K,willCommit:function(e){r(e,"errors").clear();e.transitionTo("inFlight")},rolledBack:function(e){r(e,"errors").clear()},becameValid:function(e){e.transitionTo("uncommitted")},invokeLifecycleCallbacks:function(e){e.triggerLater("becameInvalid",e)},exit:function(e){e._inFlightAttributes={}}}};function n(e){var r={},t;for(var i in e){t=e[i];if(t&&typeof t==="object"){r[i]=n(t)}else{r[i]=t}}return r}function s(e,r){for(var t in r){e[t]=r[t]}return e}function o(e){var r=n(a);return s(r,e)}var u=o({dirtyType:"created",isNew:true});u.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var d=o({dirtyType:"updated"});u.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};u.uncommitted.rollback=function(e){a.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};u.uncommitted.propertyWasReset=Ember.K;function l(e){}d.inFlight.unloadRecord=l;d.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var c={isEmpty:false,isLoading:false,isLoaded:false,isDirty:false,isSaving:false,isDeleted:false,isNew:false,isValid:true,rolledBack:Ember.K,unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},propertyWasReset:Ember.K,empty:{isEmpty:true,loadingData:function(e,r){e._loadingPromise=r;e.transitionTo("loading")},loadedData:function(e){e.transitionTo("loaded.created.uncommitted");e.notifyPropertyChange("data")},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad")}},loading:{isLoading:true,exit:function(e){e._loadingPromise=null},pushedData:function(e){e.transitionTo("loaded.saved");e.triggerLater("didLoad");t(e,"isError",false)},becameError:function(e){e.triggerLater("becameError",e)},notFound:function(e){e.transitionTo("empty")}},loaded:{initialState:"saved",isLoaded:true,loadingData:Ember.K,saved:{setup:function(e){var r=e._attributes;var t=false;for(var i in r){if(r.hasOwnProperty(i)){t=true;break}}if(t){e.adapterDidDirty()}},didSetProperty:i,pushedData:Ember.K,becomeDirty:function(e){e.transitionTo("updated.uncommitted")},willCommit:function(e){e.transitionTo("updated.inFlight")},reloadRecord:function(e,t){t(r(e,"store").reloadRecord(e))},deleteRecord:function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()},unloadRecord:function(e){e.clearRelationships();e.transitionTo("deleted.saved")},didCommit:function(e){e.send("invokeLifecycleCallbacks",r(e,"lastDirtyType"))},notFound:Ember.K},created:u,updated:d},deleted:{initialState:"uncommitted",dirtyType:"deleted",isDeleted:true,isLoaded:true,isDirty:true,setup:function(e){e.updateRecordArrays()},uncommitted:{willCommit:function(e){e.transitionTo("inFlight")},rollback:function(e){e.rollback()},becomeDirty:Ember.K,deleteRecord:Ember.K,rolledBack:function(e){e.transitionTo("loaded.saved")}},inFlight:{isSaving:true,unloadRecord:l,willCommit:Ember.K,didCommit:function(e){e.transitionTo("saved");e.send("invokeLifecycleCallbacks")},becameError:function(e){e.transitionTo("uncommitted");e.triggerLater("becameError",e)}},saved:{isDirty:false,setup:function(e){var t=r(e,"store");t.dematerializeRecord(e)},invokeLifecycleCallbacks:function(e){e.triggerLater("didDelete",e);e.triggerLater("didCommit",e)},willCommit:Ember.K,didCommit:Ember.K}},invokeLifecycleCallbacks:function(e,r){if(r==="created"){e.triggerLater("didCreate",e)}else{e.triggerLater("didUpdate",e)}e.triggerLater("didCommit",e)}};function f(e,r,t){e=s(r?Ember.create(r):{},e);e.parentState=r;e.stateName=t;for(var i in e){if(!e.hasOwnProperty(i)||i==="parentState"||i==="stateName"){continue}if(typeof e[i]==="object"){e[i]=f(e[i],e,t+"."+i)}}return e}c=f(c,null,"root");e["default"]=c});r("ember-data/system/promise_proxies",["exports"],function(e){"use strict";var r=Ember.RSVP.Promise;var t=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);var i=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);var a=function(e,t){return i.create({promise:r.resolve(e,t)})};var n=function(e,i){return t.create({promise:r.resolve(e,i)})};e.PromiseArray=t;e.PromiseObject=i;e.promiseArray=n;e.promiseObject=a});r("ember-data/system/record_array_manager",["ember-data/system/record_arrays","exports"],function(e,r){"use strict";var t=e.RecordArray;var i=e.FilteredRecordArray;var a=e.AdapterPopulatedRecordArray;var n=e.ManyArray;var s=Ember.get;var o=Ember.EnumerableUtils.forEach;r["default"]=Ember.Object.extend({init:function(){this.filteredRecordArrays=Ember.MapWithDefault.create({defaultValue:function(){return[]}});this.changedRecords=[];this._adapterPopulatedRecordArrays=[]},recordDidChange:function(e){if(this.changedRecords.push(e)!==1){return}Ember.run.schedule("actions",this,this.updateRecordArrays)},recordArraysForRecord:function(e){e._recordArrays=e._recordArrays||Ember.OrderedSet.create();return e._recordArrays},updateRecordArrays:function(){o(this.changedRecords,function(e){if(s(e,"isDeleted")){this._recordWasDeleted(e)}else{this._recordWasChanged(e)}},this);this.changedRecords.length=0},_recordWasDeleted:function(e){var r=e._recordArrays;if(!r){return}o(r,function(r){r.removeRecord(e)})},_recordWasChanged:function(e){var r=e.constructor;var t=this.filteredRecordArrays.get(r);var i;o(t,function(t){i=s(t,"filterFunction");this.updateRecordArray(t,i,r,e)},this);var a=e._loadingRecordArrays;if(a){for(var n=0,u=a.length;n<u;n++){a[n].loadedRecord()}e._loadingRecordArrays=[]}},updateRecordArray:function(e,r,t,i){var a;if(!r){a=true}else{a=r(i)}var n=this.recordArraysForRecord(i);if(a){if(!n.has(e)){e.pushRecord(i);n.add(e)}}else if(!a){n.remove(e);e.removeRecord(i)}},updateFilter:function(e,r,t){var i=this.store.typeMapFor(r);var a=i.records,n;for(var o=0,u=a.length;o<u;o++){n=a[o];if(!s(n,"isDeleted")&&!s(n,"isEmpty")){this.updateRecordArray(e,t,r,n)}}},createManyArray:function(e,r){var t=n.create({type:e,content:r,store:this.store});o(r,function(e){var r=this.recordArraysForRecord(e);r.add(t)},this);return t},createRecordArray:function(e){var r=t.create({type:e,content:Ember.A(),store:this.store,isLoaded:true});this.registerFilteredRecordArray(r,e);return r},createFilteredRecordArray:function(e,r,t){var a=i.create({query:t,type:e,content:Ember.A(),store:this.store,manager:this,filterFunction:r});this.registerFilteredRecordArray(a,e,r);return a},createAdapterPopulatedRecordArray:function(e,r){var t=a.create({type:e,query:r,content:Ember.A(),store:this.store,manager:this});this._adapterPopulatedRecordArrays.push(t);return t},registerFilteredRecordArray:function(e,r,t){var i=this.filteredRecordArrays.get(r);i.push(e);this.updateFilter(e,r,t)},registerWaitingRecordArray:function(e,r){var t=e._loadingRecordArrays||[];t.push(r);e._loadingRecordArrays=t},willDestroy:function(){this._super();o(l(u(this.filteredRecordArrays.values)),d);o(this._adapterPopulatedRecordArrays,d)}});function u(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function d(e){e.destroy()}function l(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});r("ember-data/system/record_arrays",["ember-data/system/record_arrays/record_array","ember-data/system/record_arrays/filtered_record_array","ember-data/system/record_arrays/adapter_populated_record_array","ember-data/system/record_arrays/many_array","exports"],function(e,r,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t["default"];var u=i["default"];a.RecordArray=n;a.FilteredRecordArray=s;a.AdapterPopulatedRecordArray=o;a.ManyArray=u});r("ember-data/system/record_arrays/adapter_populated_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;function a(e){var r=Object.create(null);for(var t in e){r[t]=e[t]}return r}r["default"]=t.extend({query:null,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a server query (on "+e+") is immutable.")},load:function(e){var r=i(this,"store");var t=i(this,"type");var n=r.pushMany(t,e);var s=r.metadataFor(t);this.setProperties({content:Ember.A(n),isLoaded:true,meta:a(s)});n.forEach(function(e){this.manager.recordArraysForRecord(e).add(this)},this);Ember.run.once(this,"trigger","didLoad")}})});r("ember-data/system/record_arrays/filtered_record_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get;r["default"]=t.extend({filterFunction:null,isLoaded:true,replace:function(){var e=i(this,"type").toString();throw new Error("The result of a client-side filter (on "+e+") is immutable.")},_updateFilter:function(){var e=i(this,"manager");e.updateFilter(this,i(this,"type"),i(this,"filterFunction"))},updateFilter:Ember.observer(function(){Ember.run.once(this,this._updateFilter)},"filterFunction")})});r("ember-data/system/record_arrays/many_array",["ember-data/system/record_arrays/record_array","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.get,a=Ember.set;r["default"]=t.extend({init:function(){this._super.apply(this,arguments)},name:null,owner:null,isPolymorphic:false,isLoaded:false,relationship:null,promise:null,loadingRecordsCount:function(e){this.loadingRecordsCount=e},loadedRecord:function(){this.loadingRecordsCount--;if(this.loadingRecordsCount===0){a(this,"isLoaded",true);this.trigger("didLoad")}},replaceContent:function(e,r,t){var a;if(r>0){a=i(this,"content").slice(e,e+r);this.get("relationship").removeRecords(a)}if(t){this.get("relationship").addRecords(t,e)}},createRecord:function(e){var r=i(this,"store");var t=i(this,"type");var a;a=r.createRecord.call(r,t,e);this.pushObject(a);return a}})});r("ember-data/system/record_arrays/record_array",["ember-data/system/promise_proxies","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=Ember.get;r["default"]=Ember.ArrayProxy.extend(Ember.Evented,{type:null,content:null,isLoaded:false,isUpdating:false,store:null,objectAtContent:function(e){var r=i(this,"content");return r.objectAt(e)},update:function(){if(i(this,"isUpdating")){return}var e=i(this,"store");var r=i(this,"type");return e.fetchAll(r,this)},addRecord:function(e,r){var t=i(this,"content");if(r===undefined){t.addObject(e)}else{if(!t.contains(e)){t.insertAt(r,e)}}},pushRecord:function(e){i(this,"content").pushObject(e)},removeRecord:function(e){i(this,"content").removeObject(e)},save:function(){var e="DS: RecordArray#save "+i(this,"type");var r=Ember.RSVP.all(this.invoke("save"),e).then(function(e){return Ember.A(e)},null,"DS: RecordArray#save apply Ember.NativeArray");return t.create({promise:r})},_dissociateFromOwnRecords:function(){var e=this;this.forEach(function(r){var t=r._recordArrays;if(t){t.remove(e)}})},willDestroy:function(){this._dissociateFromOwnRecords();this._super()}})});r("ember-data/system/relationship-meta",["ember-inflector/system","exports"],function(e,r){"use strict";var t=e.singularize;function i(e,r){var i,a;i=r.type||r.key;if(typeof i==="string"){if(r.kind==="hasMany"){i=t(i)}a=e.modelFor(i)}else{a=r.type}return a}r.typeForRelationshipMeta=i;function a(e,r){return{key:r.key,kind:r.kind,type:i(e,r),options:r.options,parentType:r.parentType,isRelationship:true}}r.relationshipFromMeta=a});r("ember-data/system/relationships",["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];i.belongsTo=a;i.hasMany=n});r("ember-data/system/relationships/belongs_to",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;function i(e,r){if(typeof e==="object"){r=e;e=undefined}else{}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"belongsTo",key:null};return Ember.computed(function(e,r){if(arguments.length>1){if(r===undefined){r=null}this._relationships[e].setRecord(r)}return this._relationships[e].getRecord()}).meta(t)}t.reopen({notifyBelongsToAdded:function(e,r){this.notifyPropertyChange(e)},notifyBelongsToRemoved:function(e){this.notifyPropertyChange(e)}});r["default"]=i});r("ember-data/system/relationships/ext",["ember-data/system/relationship-meta","ember-data/system/model"],function(e,r){"use strict";var t=e.typeForRelationshipMeta;var i=e.relationshipFromMeta;var a=r.Model;var n=Ember.get;a.reopen({didDefineProperty:function(e,r,t){if(t instanceof Ember.ComputedProperty){var i=t.meta();i.parentType=e.constructor}}});a.reopenClass({typeForRelationship:function(e){var r=n(this,"relationshipsByName").get(e);return r&&r.type},inverseFor:function(e){var r=this.typeForRelationship(e);if(!r){return null}var t=this.metaForProperty(e).options;if(t.inverse===null){return null}var i,a,s;if(t.inverse){i=t.inverse;s=Ember.get(r,"relationshipsByName").get(i);a=s.kind}else{var o=u(this,r);if(o.length===0){return null}i=o[0].name;a=o[0].kind}function u(e,r,t){t=t||[];var i=n(r,"relationships");if(!i){return}var a=i.get(e);if(a){t.push.apply(t,i.get(e))}if(e.superclass){u(e.superclass,r,t)}return t}return{type:r,name:i,kind:a}},relationships:Ember.computed(function(){var e=new Ember.MapWithDefault({defaultValue:function(){return[]}});this.eachComputedProperty(function(r,i){if(i.isRelationship){i.key=r;var a=e.get(t(this.store,i));a.push({name:r,kind:i.kind})}});return e}).cacheable(false).readOnly(),relationshipNames:Ember.computed(function(){var e={hasMany:[],belongsTo:[]};this.eachComputedProperty(function(r,t){if(t.isRelationship){e[t.kind].push(r)}});return e}),relatedTypes:Ember.computed(function(){var e;var r=Ember.A();this.eachComputedProperty(function(i,a){if(a.isRelationship){a.key=i;e=t(this.store,a);if(!r.contains(e)){r.push(e)}}});return r}).cacheable(false).readOnly(),relationshipsByName:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,a){if(a.isRelationship){a.key=r;var n=i(this.store,a);n.type=t(this.store,a);e.set(r,n)}});return e}).cacheable(false).readOnly(),fields:Ember.computed(function(){var e=Ember.Map.create();this.eachComputedProperty(function(r,t){if(t.isRelationship){e.set(r,t.kind)}else if(t.isAttribute){e.set(r,"attribute")}});return e}).readOnly(),eachRelationship:function(e,r){n(this,"relationshipsByName").forEach(function(t,i){e.call(r,t,i)})},eachRelatedType:function(e,r){n(this,"relatedTypes").forEach(function(t){e.call(r,t)})},determineRelationshipType:function(e){var r=e.key;var t=e.kind;var i=this.inverseFor(r);var a,n;if(!i){return t==="belongsTo"?"oneToNone":"manyToNone"}a=i.name;n=i.kind;if(n==="belongsTo"){return t==="belongsTo"?"oneToOne":"manyToOne"}else{return t==="belongsTo"?"oneToMany":"manyToMany"}}});a.reopen({eachRelationship:function(e,r){this.constructor.eachRelationship(e,r)},relationshipFor:function(e){return n(this.constructor,"relationshipsByName").get(e)},inverseFor:function(e){return this.constructor.inverseFor(e)}})});r("ember-data/system/relationships/has_many",["ember-data/system/model","exports"],function(e,r){"use strict";var t=e.Model;function i(e,r){if(typeof e==="object"){r=e;e=undefined}r=r||{};var t={type:e,isRelationship:true,options:r,kind:"hasMany",key:null};return Ember.computed(function(e){var r=this._relationships[e];return r.getRecords()}).meta(t).readOnly()}t.reopen({notifyHasManyAdded:function(e,r,t){var i=this._relationships[e];var a=i.manyArray;a.addRecord(r,t);this.notifyPropertyChange(e)},notifyHasManyRemoved:function(e,r){var t=this._relationships[e];var i=t.manyArray;i.removeRecord(r)}});r["default"]=i});r("ember-data/system/relationships/relationship",["ember-data/system/promise_proxies","exports"],function(e,r){"use strict";var t=e.PromiseArray;var i=e.PromiseObject;var a=function(e,r,t,i){this.members=new Ember.OrderedSet;this.store=e;this.key=i.key;this.inverseKey=t;this.record=r;this.key=i.key;this.isAsync=i.options.async;this.relationshipMeta=i};a.prototype={constructor:a,hasFetchedLink:false,destroy:Ember.K,clear:function(){this.members.forEach(function(e){this.removeRecord(e)},this)},removeRecords:function(e){var r=this;e.forEach(function(e){r.removeRecord(e)})},addRecords:function(e,r){var t=this;e.forEach(function(e){t.addRecord(e,r);if(r!==undefined){r++}})},addRecord:function(e,r){if(!this.members.has(e)){this.members.add(e);this.notifyRecordRelationshipAdded(e,r);if(this.inverseKey){e._relationships[this.inverseKey].addRecord(this.record)}this.record.updateRecordArrays()}},removeRecord:function(e){if(this.members.has(e)){this.members.remove(e);this.notifyRecordRelationshipRemoved(e);if(this.inverseKey){var r=e._relationships[this.inverseKey];if(r){r.removeRecord(this.record)}}this.record.updateRecordArrays()}},updateLink:function(e){if(e!==this.link){this.link=e;this.hasFetchedLink=false;this.record.notifyPropertyChange(this.key)}},updateRecordsFromAdapter:function(e){this.computeChanges(e)}};var n=function(e,r,t,i){this._super$constructor(e,r,t,i);this.belongsToType=i.type;this.manyArray=e.recordArrayManager.createManyArray(this.belongsToType,Ember.A());this.manyArray.relationship=this;this.isPolymorphic=i.options.polymorphic;this.manyArray.isPolymorphic=this.isPolymorphic};n.prototype=Object.create(a.prototype);n.prototype.constructor=n;n.prototype._super$constructor=a;n.prototype.destroy=function(){this.manyArray.destroy()};n.prototype.notifyRecordRelationshipAdded=function(e,r){this.record.notifyHasManyAdded(this.key,e,r)};n.prototype.notifyRecordRelationshipRemoved=function(e){this.record.notifyHasManyRemoved(this.key,e)};n.prototype.computeChanges=function(e){var r=this.members;e=o(e);r.forEach(function(r){if(e.has(r))return;this.removeRecord(r)},this);var t=this.manyArray;e.forEach(function(e,r){if(t.objectAt(r)===e)return;this.removeRecord(e);this.addRecord(e,r)},this)};n.prototype.getRecords=function(){if(this.isAsync){var e=this;var r;if(this.link&&!this.hasFetchedLink){r=this.store.findHasMany(this.record,this.link,this.relationshipMeta).then(function(r){e.updateRecordsFromAdapter(r);e.hasFetchedLink=true;e.manyArray.set("isLoaded",true);return e.manyArray})}else{var i=this.manyArray;r=this.store.findMany(i.toArray()).then(function(){e.manyArray.set("isLoaded",true);return i})}return t.create({promise:r})}else{this.manyArray.set("isLoaded",true);return this.manyArray}};var s=function(e,r,t,i){this._super$constructor(e,r,t,i);this.members.add(r);this.record=r;this.key=i.key;this.inverseKey=t;this.inverseRecord=null};s.prototype=Object.create(a.prototype);s.prototype.constructor=s;s.prototype._super$constructor=a;s.prototype.setRecord=function(e){if(e){this.addRecord(e)}else if(this.inverseRecord){this.removeRecord(this.inverseRecord)}};s.prototype._super$addRecord=a.prototype.addRecord;s.prototype.addRecord=function(e){if(this.members.has(e)){return}var r=this.relationshipMeta.type;if(this.inverseRecord&&this.inverseKey){this.removeRecord(this.inverseRecord)}this.inverseRecord=e;this._super$addRecord(e)};s.prototype.notifyRecordRelationshipAdded=function(e){this.record.notifyBelongsToAdded(this.key,this)};s.prototype.notifyRecordRelationshipRemoved=function(e){this.record.notifyBelongsToRemoved(this.key,this)};s.prototype._super$removeRecord=a.prototype.removeRecord;s.prototype.removeRecord=function(e){if(!this.members.has(e)){return}this._super$removeRecord(e);this.inverseRecord=null};s.prototype.currentOtherSideFor=function(){return this.inverseRecord};s.prototype.getRecord=function(){if(this.isAsync){var e;if(this.link&&!this.hasFetchedLink){var r=this;e=this.store.findBelongsTo(this.record,this.link,this.relationshipMeta).then(function(e){r.addRecord(e);r.hasFetchedLink=true;return e})}else if(this.inverseRecord){e=this.store._findByRecord(this.inverseRecord)}else{e=Ember.RSVP.Promise.resolve(null)}return i.create({promise:e})}else{return this.inverseRecord}};function o(e){var r=new Ember.OrderedSet;if(e){for(var t=0,i=e.length;t<i;t++){r.add(e[t])}}return r}var u=function(e,r,t){var i;var a=e.constructor.inverseFor(r.key);if(a){i=a.name}if(r.kind==="hasMany"){return new n(t,e,i,r)}else{return new s(t,e,i,r)}};r.Relationship=a;r.ManyRelationship=n;r.BelongsToRelationship=s;r.createRelationshipFor=u});r("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],function(e,r,i,a){"use strict";var n=e.InvalidError;var s=e.Adapter;var o=r.singularize;var u=i.promiseArray;var d=i.promiseObject;var l=Ember.get;var c=Ember.set;var f=Ember.run.once;var h=Ember.isNone;var p=Ember.EnumerableUtils.forEach;var m=Ember.EnumerableUtils.indexOf;var y=Ember.EnumerableUtils.map;var v=Ember.RSVP.Promise;var b=Ember.copy;var g,E,R;var A=Ember.String.camelize;function _(e){return e==null?null:e+""}g=Ember.Object.extend({init:function(){if(!E){E=t("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=E.create({store:this});this._pendingSave=[];this._pendingFetch=Ember.Map.create()},adapter:"-rest",serialize:function(e,r){return this.serializerFor(e.constructor.typeKey).serialize(e,r)},defaultAdapter:Ember.computed("adapter",function(){var e=l(this,"adapter");if(typeof e==="string"){e=this.container.lookup("adapter:"+e)||this.container.lookup("adapter:application")||this.container.lookup("adapter:-rest")}if(DS.Adapter.detect(e)){e=e.create({container:this.container})}return e}),createRecord:function(e,r){var t=this.modelFor(e);var i=b(r)||{};if(h(i.id)){i.id=this._generateId(t)}i.id=_(i.id);var a=this.buildRecord(t,i.id);a.loadedData();a.setProperties(i);return a},_generateId:function(e){var r=this.adapterFor(e);if(r&&r.generateIdForRecord){return r.generateIdForRecord(this)}return null},deleteRecord:function(e){e.deleteRecord()},unloadRecord:function(e){e.unloadRecord()},find:function(e,r,t){if(arguments.length===1){return this.findAll(e)}if(Ember.typeOf(r)==="object"){return this.findQuery(e,r)}return this.findById(e,_(r),t)},findById:function(e,r,t){var i=this.modelFor(e);var a=this.recordForId(i,r);return this._findByRecord(a,t)},_findByRecord:function(e,r){var t;if(r){e._preloadData(r)}if(l(e,"isEmpty")){t=this.scheduleFetch(e)}else if(l(e,"isLoading")){t=e._loadingPromise}return d(t||e,"DS: Store#findByRecord "+e.typeKey+" with id: "+l(e,"id"))},findByIds:function(e,r){var t=this;return u(Ember.RSVP.all(y(r,function(r){return t.findById(e,r)})).then(Ember.A,null,"DS: Store#findByIds of "+e+" complete"))},fetchRecord:function(e){var r=e.constructor;var t=l(e,"id");var i=this.adapterFor(r);var a=C(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(y(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(h(e)){return null}if(e._loadingPromise){return e._loadingPromise
|
3
|
+
}var t=Ember.RSVP.defer("Fetching "+r+"with id: "+e.get("id"));var i={record:e,resolver:t};var a=t.promise;e.loadingData(a);if(!this._pendingFetch.get(r)){this._pendingFetch.set(r,[i])}else{this._pendingFetch.get(r).push(i)}Ember.run.scheduleOnce("afterRender",this,this.flushAllPendingFetches);return a},flushAllPendingFetches:function(){if(this.isDestroyed||this.isDestroying){return}this._pendingFetch.forEach(this._flushPendingFetchForType,this);this._pendingFetch=Ember.Map.create()},_flushPendingFetchForType:function(e,r){var t=this;var i=t.adapterFor(e);var a=!!i.findMany&&i.coalesceFindRequests;var n=Ember.A(r).mapBy("record");function s(e){e.resolver.resolve(t.fetchRecord(e.record))}function o(e){p(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function u(e){return function r(t){var i=e.without(t);l(i)}}function d(e){return function(r){l(e,r)}}function l(e,t){p(e,function(e){var i=Ember.A(r).findBy("record",e);if(i){var a=i.resolver;a.reject(t)}})}if(r.length===1){s(r[0])}else if(a){var c=i.groupRecordsForFindMany(this,n);p(c,function(a){var n=Ember.A(a);var l=n.mapBy("id");if(l.length>1){w(i,t,e,l,n).then(o).then(u(n)).then(null,d(n))}else if(l.length===1){var c=Ember.A(r).findBy("record",a[0]);s(c)}else{}})}else{p(r,s)}},getById:function(e,r){if(this.hasRecordForId(e,r)){return this.recordForId(e,r)}else{return null}},reloadRecord:function(e){var r=e.constructor;var t=this.adapterFor(r);var i=l(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=_(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=_(r);var a=this.typeMapFor(t).idToRecord;var n=a[i];if(!n||!a[i]){n=this.buildRecord(t,i)}return n},findMany:function(e){var r=this;return v.all(y(e,function(e){return r._findByRecord(e)}))},findHasMany:function(e,r,t){var i=this.adapterFor(e.constructor);return $(i,this,e,r,t)},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return I(i,this,e,r,t)},findQuery:function(e,r){var t=this.modelFor(e);var i=this.recordArrayManager.createAdapterPopulatedRecordArray(t,r);var a=this.adapterFor(t);return u(j(a,this,t,r,i))},findAll:function(e){var r=this.modelFor(e);return this.fetchAll(r,this.all(r))},fetchAll:function(e,r){var t=this.adapterFor(e);var i=this.typeMapFor(e).metadata.since;c(r,"isUpdating",true);return u(L(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;c(r,"isUpdating",false)},all:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.findAllCache;if(i){return i}var a=this.recordArrayManager.createRecordArray(r);t.findAllCache=a;return a},unloadAll:function(e){var r=this.modelFor(e);var t=this.typeMapFor(r);var i=t.records.slice();var a;for(var n=0;n<i.length;n++){a=i[n];a.unloadRecord();a.destroy()}t.findAllCache=null},filter:function(e,r,t){var i;var a=arguments.length;var n;var s=a===3;if(s){i=this.findQuery(e,r)}else if(arguments.length===2){t=r}e=this.modelFor(e);if(s){n=this.recordArrayManager.createFilteredRecordArray(e,t,r)}else{n=this.recordArrayManager.createFilteredRecordArray(e,t)}i=i||v.cast(n);return u(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!l(this.recordForId(e,r),"isEmpty")},metadataFor:function(e){e=this.modelFor(e);return this.typeMapFor(e).metadata},dataWasUpdated:function(e,r){this.recordArrayManager.recordDidChange(r)},scheduleSave:function(e,r){e.adapterWillCommit();this._pendingSave.push([e,r]);f(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];p(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(l(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(l(r,"isNew")){a="createRecord"}else if(l(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(K(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=F(this,e.constructor,r,e);B(this,e,r);this.updateId(e,r)}e.adapterDidCommit(r)},recordWasInvalid:function(e,r){e.adapterDidInvalidate(r)},recordWasError:function(e){e.adapterDidError()},updateId:function(e,r){var t=l(e,"id");var i=_(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;c(e,"id",i)},typeMapFor:function(e){var r=l(this,"typeMaps");var t=Ember.guidFor(e);var i;i=r[t];if(i){return i}i={idToRecord:Object.create(null),records:[],metadata:Object.create(null),type:e};r[t]=i;return i},_load:function(e,r,t){var i=_(r.id);var a=this.recordForId(e,i);a.setupData(r,t);this.recordArrayManager.recordDidChange(a);return a},modelFor:function(e){var r;if(typeof e==="string"){r=this.container.lookupFactory("model:"+e);if(!r){throw new Ember.Error("No model was found for '"+e+"'")}r.typeKey=r.typeKey||this._normalizeTypeKey(e)}else{r=e;if(r.typeKey){r.typeKey=this._normalizeTypeKey(r.typeKey)}}r.store=this;return r},push:function(e,r,t){var i=this.modelFor(e);r=F(this,i,r);this._load(i,r,t);var a=this.recordForId(i,r.id);B(this,a,r);return a},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=k(this.container)}else{i=r;t=this.serializerFor(e)}t.pushPayload(this,i)},normalize:function(e,r){var t=this.serializerFor(e);var i=this.modelFor(e);return t.normalize(i,r)},update:function(e,r){return this.push(e,r,true)},pushMany:function(e,r){var t=r.length;var i=new Array(t);for(var a=0;a<t;a++){i[a]=this.push(e,r[a])}return i},metaForType:function(e,r){var t=this.modelFor(e);Ember.merge(this.typeMapFor(t).metadata,r)},buildRecord:function(e,r,t){var i=this.typeMapFor(e);var a=i.idToRecord;var n=e._create({id:r,store:this,container:this.container});if(t){n.setupData(t)}if(r){a[r]=n}i.records.push(n);return n},dematerializeRecord:function(e){var r=e.constructor;var t=this.typeMapFor(r);var i=l(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=m(t.records,e);t.records.splice(a,1)},adapterFor:function(e){var r=this.container,t;if(r){t=r.lookup("adapter:"+e.typeKey)||r.lookup("adapter:application")}return t||l(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return S(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=y(r,i);this.recordArrayManager.destroy();p(t,this.unloadAll,this);function i(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return A(o(e))}});function F(e,r,t,i){r.eachRelationship(function(r,i){var a=i.kind;var n=t[r];if(a==="belongsTo"){z(e,t,r,i,n)}else if(a==="hasMany"){T(e,t,r,i,n)}});return t}function z(e,r,i,a,n){if(!R){R=t("ember-data/system/model")["Model"]}if(h(n)||n instanceof R){return}var s;if(typeof n==="number"||typeof n==="string"){s=x(a,i,r);r[i]=e.recordForId(s,n)}else if(typeof n==="object"){r[i]=e.recordForId(n.type,n.id)}}function x(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function T(e,r,t,i,a){if(!Ember.isArray(a)){return}for(var n=0,s=a.length;n<s;n++){z(e,a,n,i,a[n])}}function S(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function k(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function M(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=S(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function D(e){return!(l(e,"isDestroyed")||l(e,"isDestroying"))}function P(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function O(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function C(e,r,t,i,a){var n=e.find(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var a=s.extract(r,t,e,i,"find");return r.push(t,a)},function(e){var a=r.getById(t,i);if(a){a.notFound()}throw e},"DS: Extract payload of '"+t+"'")}function w(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#findMany of "+t;if(n===undefined){throw new Error("adapter.findMany returned undefined, this was very likely a mistake")}n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findMany");return r.pushMany(t,i)},null,"DS: Extract payload of "+t)}function $(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=M(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=v.cast(n,o);n=P(n,O(D,r));n=P(n,O(D,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findHasMany");var i=r.pushMany(a.type,t);return i},null,"DS: Extract payload of "+t+" : hasMany "+a.type)}function I(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=M(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=v.cast(n,o);n=P(n,O(D,r));n=P(n,O(D,t));return n.then(function(e){var t=s.extract(r,a.type,e,null,"findBelongsTo");var i=r.push(a.type,t);return i},null,"DS: Extract payload of "+t+" : "+a.type)}function L(e,r,t,i){var a=e.findAll(r,t,i);var n=M(e,t);var s="DS: Handle Adapter#findAll of "+t;a=v.cast(a,s);a=P(a,O(D,r));return a.then(function(e){var i=n.extract(r,t,e,null,"findAll");r.pushMany(t,i);r.didUpdateAll(t);return r.all(t)},null,"DS: Extract payload of findAll "+t)}function j(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=M(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=v.cast(n,o);n=P(n,O(D,r));return n.then(function(e){var i=s.extract(r,t,e,null,"findQuery");a.load(i);return a},null,"DS: Extract payload of findQuery "+t)}function K(e,r,t,i){var a=i.constructor;var s=e[t](r,a,i);var o=M(e,a);var u="DS: Extract and notify about "+t+" completion of "+i;s=v.cast(s,u);s=P(s,O(D,r));s=P(s,O(D,i));return s.then(function(e){var n;if(e){n=o.extract(r,a,e,l(i,"id"),t)}else{n=e}r.didSaveRecord(i,n);return i},function(e){if(e instanceof n){r.recordWasInvalid(i,e.errors)}else{r.recordWasError(i,e)}throw e},u)}function B(e,r,t){var i=r.constructor;i.eachRelationship(function(e,i){var a=i.kind;var n=t[e];var s=r._relationships[e];if(t.links&&t.links[e]){s.updateLink(t.links[e])}if(a==="belongsTo"){if(n===undefined){return}s.setRecord(n)}else if(a==="hasMany"&&n){s.updateRecordsFromAdapter(n)}})}a.Store=g;a["default"]=g});r("ember-data/transforms",["ember-data/transforms/base","ember-data/transforms/number","ember-data/transforms/date","ember-data/transforms/string","ember-data/transforms/boolean","exports"],function(e,r,t,i,a,n){"use strict";var s=e["default"];var o=r["default"];var u=t["default"];var d=i["default"];var l=a["default"];n.Transform=s;n.NumberTransform=o;n.DateTransform=u;n.StringTransform=d;n.BooleanTransform=l});r("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});r("ember-data/transforms/boolean",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="boolean"){return e}else if(r==="string"){return e.match(/^true$|^t$|^1$/i)!==null}else if(r==="number"){return e===1}else{return false}},serialize:function(e){return Boolean(e)}})});r("ember-data/transforms/date",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Date.prototype.toISOString||function(){function e(e){if(e<10){return"0"+e}return e}return this.getUTCFullYear()+"-"+e(this.getUTCMonth()+1)+"-"+e(this.getUTCDate())+"T"+e(this.getUTCHours())+":"+e(this.getUTCMinutes())+":"+e(this.getUTCSeconds())+"."+(this.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};if(Ember.SHIM_ES5){if(!Date.prototype.toISOString){Date.prototype.toISOString=i}}r["default"]=t.extend({deserialize:function(e){var r=typeof e;if(r==="string"){return new Date(Ember.Date.parse(e))}else if(r==="number"){return new Date(e)}else if(e===null||e===undefined){return e}else{return null}},serialize:function(e){if(e instanceof Date){return i.call(e)}else{return null}}})});r("ember-data/transforms/number",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isEmpty;r["default"]=t.extend({deserialize:function(e){return i(e)?null:Number(e)},serialize:function(e){return i(e)?null:Number(e)}})});r("ember-data/transforms/string",["ember-data/transforms/base","exports"],function(e,r){"use strict";var t=e["default"];var i=Ember.isNone;r["default"]=t.extend({deserialize:function(e){return i(e)?null:String(e)},serialize:function(e){return i(e)?null:String(e)}})});r("ember-inflector",["./system","./helpers","./ext/string","exports"],function(e,r,t,i){"use strict";var a=e.Inflector;var n=e.defaultRules;var s=e.pluralize;var o=e.singularize;a.defaultRules=n;Ember.Inflector=a;Ember.String.pluralize=s;Ember.String.singularize=o;i["default"]=a;i.pluralize=s;i.singularize=o});r("ember-inflector/ext/string",["../system/string"],function(e){"use strict";var r=e.pluralize;var t=e.singularize;if(Ember.EXTEND_PROTOTYPES===true||Ember.EXTEND_PROTOTYPES.String){String.prototype.pluralize=function(){return r(this)};String.prototype.singularize=function(){return t(this)}}});r("ember-inflector/helpers",["./system/string"],function(e){"use strict";var r=e.singularize;var t=e.pluralize;Ember.Handlebars.helper("singularize",r);Ember.Handlebars.helper("pluralize",t)});r("ember-inflector/system",["./system/inflector","./system/string","./system/inflections","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r.pluralize;var s=r.singularize;var o=t["default"];a.inflector=new a(o);i.Inflector=a;i.singularize=s;i.pluralize=n;i.defaultRules=o});r("ember-inflector/system/inflections",["exports"],function(e){"use strict";e["default"]={plurals:[[/$/,"s"],[/s$/i,"s"],[/^(ax|test)is$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(octop|vir)i$/i,"$1i"],[/(alias|status)$/i,"$1es"],[/(bu)s$/i,"$1ses"],[/(buffal|tomat)o$/i,"$1oes"],[/([ti])um$/i,"$1a"],[/([ti])a$/i,"$1a"],[/sis$/i,"ses"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/(hive)$/i,"$1s"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(x|ch|ss|sh)$/i,"$1es"],[/(matr|vert|ind)(?:ix|ex)$/i,"$1ices"],[/^(m|l)ouse$/i,"$1ice"],[/^(m|l)ice$/i,"$1ice"],[/^(ox)$/i,"$1en"],[/^(oxen)$/i,"$1"],[/(quiz)$/i,"$1zes"]],singular:[[/s$/i,""],[/(ss)$/i,"$1"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,"$1sis"],[/(^analy)(sis|ses)$/i,"$1sis"],[/([^f])ves$/i,"$1fe"],[/(hive)s$/i,"$1"],[/(tive)s$/i,"$1"],[/([lr])ves$/i,"$1f"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/(x|ch|ss|sh)es$/i,"$1"],[/^(m|l)ice$/i,"$1ouse"],[/(bus)(es)?$/i,"$1"],[/(o)es$/i,"$1"],[/(shoe)s$/i,"$1"],[/(cris|test)(is|es)$/i,"$1is"],[/^(a)x[ie]s$/i,"$1xis"],[/(octop|vir)(us|i)$/i,"$1us"],[/(alias|status)(es)?$/i,"$1"],[/^(ox)en/i,"$1"],[/(vert|ind)ices$/i,"$1ex"],[/(matr)ices$/i,"$1ix"],[/(quiz)zes$/i,"$1"],[/(database)s$/i,"$1"]],irregularPairs:[["person","people"],["man","men"],["child","children"],["sex","sexes"],["move","moves"],["cow","kine"],["zombie","zombies"]],uncountable:["equipment","information","rice","money","species","series","fish","sheep","jeans","police"]}});r("ember-inflector/system/inflector",["exports"],function(e){"use strict";var r=/^\s*$/;var t=/(\w+[_-])([a-z\d]+$)/;var i=/(\w+)([A-Z][a-z\d]*$)/;var a=/[A-Z][a-z\d]*$/;function n(e,r){for(var t=0,i=r.length;t<i;t++){e.uncountable[r[t].toLowerCase()]=true}}function s(e,r){var t;for(var i=0,a=r.length;i<a;i++){t=r[i];e.irregular[t[0].toLowerCase()]=t[1];e.irregular[t[1].toLowerCase()]=t[1];e.irregularInverse[t[1].toLowerCase()]=t[0];e.irregularInverse[t[0].toLowerCase()]=t[0]}}function o(e){e=e||{};e.uncountable=e.uncountable||u();e.irregularPairs=e.irregularPairs||u();var r=this.rules={plurals:e.plurals||[],singular:e.singular||[],irregular:u(),irregularInverse:u(),uncountable:u()};n(r,e.uncountable);s(r,e.irregularPairs);this.enableCache()}if(!Object.create&&!Object.create(null).hasOwnProperty){throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg")}function u(){var e=Object.create(null);e["_dict"]=null;delete e["_dict"];return e}o.prototype={enableCache:function(){this.purgeCache();this.singularize=function(e){this._cacheUsed=true;return this._sCache[e]||(this._sCache[e]=this._singularize(e))};this.pluralize=function(e){this._cacheUsed=true;return this._pCache[e]||(this._pCache[e]=this._pluralize(e))}},purgeCache:function(){this._cacheUsed=false;this._sCache=u();this._pCache=u()},disableCache:function(){this._sCache=null;this._pCache=null;this.singularize=function(e){return this._singularize(e)};this.pluralize=function(e){return this._pluralize(e)}},plural:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.plurals.push([e,r.toLowerCase()])},singular:function(e,r){if(this._cacheUsed){this.purgeCache()}this.rules.singular.push([e,r.toLowerCase()])},uncountable:function(e){if(this._cacheUsed){this.purgeCache()}n(this.rules,[e.toLowerCase()])},irregular:function(e,r){if(this._cacheUsed){this.purgeCache()}s(this.rules,[[e,r]])},pluralize:function(e){return this._pluralize(e)},_pluralize:function(e){return this.inflect(e,this.rules.plurals,this.rules.irregular)},singularize:function(e){return this._singularize(e)},_singularize:function(e){return this.inflect(e,this.rules.singular,this.rules.irregularInverse)},inflect:function(e,n,s){var o,u,d,l,c,f,h,p,m,y,v,b,g;p=r.test(e);m=a.test(e);f="";if(p){return e}l=e.toLowerCase();c=t.exec(e)||i.exec(e);if(c){f=c[1];h=c[2].toLowerCase()}y=this.rules.uncountable[l]||this.rules.uncountable[h];if(y){return e}v=s&&(s[l]||s[h]);if(v){if(s[l]){return v}else{v=m?v.capitalize():v;return f+v}}for(var E=n.length,R=0;E>R;E--){o=n[E-1];g=o[0];if(g.test(e)){break}}o=o||[];g=o[0];u=o[1];d=e.replace(g,u);return d}};e["default"]=o});r("ember-inflector/system/string",["./inflector","exports"],function(e,r){"use strict";var t=e["default"];function i(e){return t.inflector.pluralize(e)}function a(e){return t.inflector.singularize(e)}r.pluralize=i;r.singularize=a});e.DS=t("ember-data")["default"]})(this);
|
@@ -38,13 +38,12 @@ define("activemodel-adapter/system",
|
|
38
38
|
__exports__.ActiveModelSerializer = ActiveModelSerializer;
|
39
39
|
});
|
40
40
|
define("activemodel-adapter/system/active_model_adapter",
|
41
|
-
["ember-data/adapters","ember-data/system/adapter","ember-inflector","
|
42
|
-
function(__dependency1__, __dependency2__, __dependency3__,
|
41
|
+
["ember-data/adapters","ember-data/system/adapter","ember-inflector","exports"],
|
42
|
+
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
43
43
|
"use strict";
|
44
44
|
var RESTAdapter = __dependency1__.RESTAdapter;
|
45
45
|
var InvalidError = __dependency2__.InvalidError;
|
46
46
|
var pluralize = __dependency3__.pluralize;
|
47
|
-
var ActiveModelSerializer = __dependency4__["default"];
|
48
47
|
|
49
48
|
/**
|
50
49
|
@module ember-data
|
@@ -503,8 +502,8 @@ define("activemodel-adapter/system/active_model_serializer",
|
|
503
502
|
__exports__["default"] = ActiveModelSerializer;
|
504
503
|
});
|
505
504
|
define("ember-data",
|
506
|
-
["ember-data/core","ember-data/ext/date","ember-data/system/
|
507
|
-
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __exports__) {
|
505
|
+
["ember-data/core","ember-data/ext/date","ember-data/system/promise_proxies","ember-data/system/store","ember-data/system/model","ember-data/system/adapter","ember-data/system/debug","ember-data/system/record_arrays","ember-data/system/record_array_manager","ember-data/adapters","ember-data/serializers/json_serializer","ember-data/serializers/rest_serializer","ember-inflector","ember-data/serializers/embedded_records_mixin","activemodel-adapter","ember-data/transforms","ember-data/system/relationships","ember-data/ember-initializer","ember-data/setup-container","ember-data/system/container_proxy","ember-data/system/relationships/relationship","exports"],
|
506
|
+
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __exports__) {
|
508
507
|
"use strict";
|
509
508
|
/**
|
510
509
|
Ember Data
|
@@ -518,21 +517,13 @@ define("ember-data",
|
|
518
517
|
|
519
518
|
var DS = __dependency1__["default"];
|
520
519
|
|
521
|
-
var Store = __dependency3__.Store;
|
522
520
|
var PromiseArray = __dependency3__.PromiseArray;
|
523
521
|
var PromiseObject = __dependency3__.PromiseObject;
|
524
|
-
var
|
525
|
-
var
|
526
|
-
var
|
527
|
-
var
|
528
|
-
var
|
529
|
-
var RelationshipChange = __dependency5__.RelationshipChange;
|
530
|
-
var RelationshipChangeAdd = __dependency5__.RelationshipChangeAdd;
|
531
|
-
var RelationshipChangeRemove = __dependency5__.RelationshipChangeRemove;
|
532
|
-
var OneToManyChange = __dependency5__.OneToManyChange;
|
533
|
-
var ManyToNoneChange = __dependency5__.ManyToNoneChange;
|
534
|
-
var OneToOneChange = __dependency5__.OneToOneChange;
|
535
|
-
var ManyToManyChange = __dependency5__.ManyToManyChange;
|
522
|
+
var Store = __dependency4__.Store;
|
523
|
+
var Model = __dependency5__.Model;
|
524
|
+
var Errors = __dependency5__.Errors;
|
525
|
+
var RootState = __dependency5__.RootState;
|
526
|
+
var attr = __dependency5__.attr;
|
536
527
|
var InvalidError = __dependency6__.InvalidError;
|
537
528
|
var Adapter = __dependency6__.Adapter;
|
538
529
|
var DebugAdapter = __dependency7__["default"];
|
@@ -560,6 +551,7 @@ define("ember-data",
|
|
560
551
|
var setupContainer = __dependency19__["default"];
|
561
552
|
|
562
553
|
var ContainerProxy = __dependency20__["default"];
|
554
|
+
var Relationship = __dependency21__.Relationship;
|
563
555
|
|
564
556
|
DS.Store = Store;
|
565
557
|
DS.PromiseArray = PromiseArray;
|
@@ -570,14 +562,6 @@ define("ember-data",
|
|
570
562
|
DS.attr = attr;
|
571
563
|
DS.Errors = Errors;
|
572
564
|
|
573
|
-
DS.AttributeChange = AttributeChange;
|
574
|
-
DS.RelationshipChange = RelationshipChange;
|
575
|
-
DS.RelationshipChangeAdd = RelationshipChangeAdd;
|
576
|
-
DS.OneToManyChange = OneToManyChange;
|
577
|
-
DS.ManyToNoneChange = OneToManyChange;
|
578
|
-
DS.OneToOneChange = OneToOneChange;
|
579
|
-
DS.ManyToManyChange = ManyToManyChange;
|
580
|
-
|
581
565
|
DS.Adapter = Adapter;
|
582
566
|
DS.InvalidError = InvalidError;
|
583
567
|
|
@@ -609,6 +593,8 @@ define("ember-data",
|
|
609
593
|
DS.belongsTo = belongsTo;
|
610
594
|
DS.hasMany = hasMany;
|
611
595
|
|
596
|
+
DS.Relationship = Relationship;
|
597
|
+
|
612
598
|
DS.ContainerProxy = ContainerProxy;
|
613
599
|
|
614
600
|
DS._setupContainer = setupContainer;
|
@@ -960,15 +946,16 @@ define("ember-data/adapters/fixture_adapter",
|
|
960
946
|
var adapter = this;
|
961
947
|
|
962
948
|
return new Ember.RSVP.Promise(function(resolve) {
|
949
|
+
var value = Ember.copy(callback.call(context), true);
|
963
950
|
if (get(adapter, 'simulateRemoteResponse')) {
|
964
951
|
// Schedule with setTimeout
|
965
952
|
Ember.run.later(function() {
|
966
|
-
resolve(
|
953
|
+
resolve(value);
|
967
954
|
}, get(adapter, 'latency'));
|
968
955
|
} else {
|
969
956
|
// Asynchronous, but at the of the runloop with zero latency
|
970
957
|
Ember.run.schedule('actions', null, function() {
|
971
|
-
resolve(
|
958
|
+
resolve(value);
|
972
959
|
});
|
973
960
|
}
|
974
961
|
}, "DS: FixtureAdapter#simulateRemoteCall");
|
@@ -983,7 +970,8 @@ define("ember-data/adapters/rest_adapter",
|
|
983
970
|
@module ember-data
|
984
971
|
*/
|
985
972
|
|
986
|
-
var Adapter = __dependency1__
|
973
|
+
var Adapter = __dependency1__.Adapter;
|
974
|
+
var InvalidError = __dependency1__.InvalidError;
|
987
975
|
var get = Ember.get;
|
988
976
|
var forEach = Ember.ArrayPolyfills.forEach;
|
989
977
|
|
@@ -1370,7 +1358,7 @@ define("ember-data/adapters/rest_adapter",
|
|
1370
1358
|
@param {String} url
|
1371
1359
|
@return {Promise} promise
|
1372
1360
|
*/
|
1373
|
-
findHasMany: function(store, record, url) {
|
1361
|
+
findHasMany: function(store, record, url, relationship) {
|
1374
1362
|
var host = get(this, 'host');
|
1375
1363
|
var id = get(record, 'id');
|
1376
1364
|
var type = record.constructor.typeKey;
|
@@ -1409,7 +1397,7 @@ define("ember-data/adapters/rest_adapter",
|
|
1409
1397
|
@param {String} url
|
1410
1398
|
@return {Promise} promise
|
1411
1399
|
*/
|
1412
|
-
findBelongsTo: function(store, record, url) {
|
1400
|
+
findBelongsTo: function(store, record, url, relationship) {
|
1413
1401
|
var id = get(record, 'id');
|
1414
1402
|
var type = record.constructor.typeKey;
|
1415
1403
|
|
@@ -1700,9 +1688,10 @@ define("ember-data/adapters/rest_adapter",
|
|
1700
1688
|
|
1701
1689
|
@method ajaxError
|
1702
1690
|
@param {Object} jqXHR
|
1691
|
+
@param {Object} responseText
|
1703
1692
|
@return {Object} jqXHR
|
1704
1693
|
*/
|
1705
|
-
ajaxError: function(jqXHR) {
|
1694
|
+
ajaxError: function(jqXHR, responseText) {
|
1706
1695
|
if (jqXHR && typeof jqXHR === 'object') {
|
1707
1696
|
jqXHR.then = null;
|
1708
1697
|
}
|
@@ -1710,6 +1699,32 @@ define("ember-data/adapters/rest_adapter",
|
|
1710
1699
|
return jqXHR;
|
1711
1700
|
},
|
1712
1701
|
|
1702
|
+
/**
|
1703
|
+
Takes an ajax response, and returns the json payload.
|
1704
|
+
|
1705
|
+
By default this hook just returns the jsonPayload passed to it.
|
1706
|
+
You might want to override it in two cases:
|
1707
|
+
|
1708
|
+
1. Your API might return useful results in the request headers.
|
1709
|
+
If you need to access these, you can override this hook to copy them
|
1710
|
+
from jqXHR to the payload object so they can be processed in you serializer.
|
1711
|
+
|
1712
|
+
|
1713
|
+
2. Your API might return errors as successful responses with status code
|
1714
|
+
200 and an Errors text or object. You can return a DS.InvalidError from
|
1715
|
+
this hook and it will automatically reject the promise and put your record
|
1716
|
+
into the invald state.
|
1717
|
+
|
1718
|
+
@method ajaxError
|
1719
|
+
@param {Object} jqXHR
|
1720
|
+
@param {Object} jsonPayload
|
1721
|
+
@return {Object} jqXHR
|
1722
|
+
*/
|
1723
|
+
|
1724
|
+
ajaxSuccess: function(jqXHR, jsonPayload) {
|
1725
|
+
return jsonPayload;
|
1726
|
+
},
|
1727
|
+
|
1713
1728
|
/**
|
1714
1729
|
Takes a URL, an HTTP method and a hash of data, and makes an
|
1715
1730
|
HTTP request.
|
@@ -1740,12 +1755,17 @@ define("ember-data/adapters/rest_adapter",
|
|
1740
1755
|
return new Ember.RSVP.Promise(function(resolve, reject) {
|
1741
1756
|
var hash = adapter.ajaxOptions(url, type, options);
|
1742
1757
|
|
1743
|
-
hash.success = function(json) {
|
1744
|
-
|
1758
|
+
hash.success = function(json, textStatus, jqXHR) {
|
1759
|
+
json = adapter.ajaxSuccess(jqXHR, json);
|
1760
|
+
if (json instanceof InvalidError) {
|
1761
|
+
Ember.run(null, reject, json);
|
1762
|
+
} else {
|
1763
|
+
Ember.run(null, resolve, json);
|
1764
|
+
}
|
1745
1765
|
};
|
1746
1766
|
|
1747
1767
|
hash.error = function(jqXHR, textStatus, errorThrown) {
|
1748
|
-
Ember.run(null, reject, adapter.ajaxError(jqXHR));
|
1768
|
+
Ember.run(null, reject, adapter.ajaxError(jqXHR, jqXHR.responseText));
|
1749
1769
|
};
|
1750
1770
|
|
1751
1771
|
Ember.$.ajax(hash);
|
@@ -1813,11 +1833,11 @@ define("ember-data/core",
|
|
1813
1833
|
/**
|
1814
1834
|
@property VERSION
|
1815
1835
|
@type String
|
1816
|
-
@default '1.0.0-beta.
|
1836
|
+
@default '1.0.0-beta.10'
|
1817
1837
|
@static
|
1818
1838
|
*/
|
1819
1839
|
DS = Ember.Namespace.create({
|
1820
|
-
VERSION: '1.0.0-beta.
|
1840
|
+
VERSION: '1.0.0-beta.10'
|
1821
1841
|
});
|
1822
1842
|
|
1823
1843
|
if (Ember.libraries) {
|
@@ -2088,15 +2108,13 @@ define("ember-data/serializers",
|
|
2088
2108
|
__exports__.RESTSerializer = RESTSerializer;
|
2089
2109
|
});
|
2090
2110
|
define("ember-data/serializers/embedded_records_mixin",
|
2091
|
-
["
|
2092
|
-
function(
|
2111
|
+
["exports"],
|
2112
|
+
function(__exports__) {
|
2093
2113
|
"use strict";
|
2094
2114
|
var get = Ember.get;
|
2095
2115
|
var forEach = Ember.EnumerableUtils.forEach;
|
2096
2116
|
var camelize = Ember.String.camelize;
|
2097
2117
|
|
2098
|
-
var pluralize = __dependency1__.pluralize;
|
2099
|
-
|
2100
2118
|
/**
|
2101
2119
|
## Using Embedded Records
|
2102
2120
|
|
@@ -2115,6 +2133,11 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2115
2133
|
}
|
2116
2134
|
})
|
2117
2135
|
```
|
2136
|
+
Note that this use of `{embedded: 'always'}` is unrelated to
|
2137
|
+
the `{embedded: 'always'}` that is defined as an option on `DS.attr` as part of
|
2138
|
+
defining a model while working with the ActiveModelSerializer. Nevertheless,
|
2139
|
+
using `{embedded: 'always'}` as an option to DS.attr is not a valid way to setup
|
2140
|
+
embedded records.
|
2118
2141
|
|
2119
2142
|
The `attrs` option for a resource `{embedded: 'always'}` is shorthand for:
|
2120
2143
|
|
@@ -2148,7 +2171,11 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2148
2171
|
|
2149
2172
|
### Model Relationships
|
2150
2173
|
|
2151
|
-
Embedded records must have a model defined to be extracted and serialized.
|
2174
|
+
Embedded records must have a model defined to be extracted and serialized. Note that
|
2175
|
+
when defining any relationships on your model such as `belongsTo` and `hasMany`, you
|
2176
|
+
should not both specify `async:true` and also indicate through the serializer's
|
2177
|
+
`attrs` attribute that the related model should be embedded. If a model is
|
2178
|
+
declared embedded, then do not use `async:true`.
|
2152
2179
|
|
2153
2180
|
To successfully extract and serialize embedded records the model relationships
|
2154
2181
|
must be setup correcty See the
|
@@ -2160,9 +2187,9 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2160
2187
|
|
2161
2188
|
### Example JSON payloads, Models and Serializers
|
2162
2189
|
|
2163
|
-
**When customizing a serializer it is
|
2164
|
-
are
|
2165
|
-
to modify to fit your specific needs.**
|
2190
|
+
**When customizing a serializer it is important to grok what the customizations
|
2191
|
+
are. Please read the docs for the methods this mixin provides, in case you need
|
2192
|
+
to modify it to fit your specific needs.**
|
2166
2193
|
|
2167
2194
|
For example review the docs for each method of this mixin:
|
2168
2195
|
* [normalize](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_normalize)
|
@@ -2265,7 +2292,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2265
2292
|
*/
|
2266
2293
|
serializeBelongsTo: function(record, json, relationship) {
|
2267
2294
|
var attr = relationship.key;
|
2268
|
-
var attrs = this.get('attrs');
|
2269
2295
|
if (this.noSerializeOptionSpecified(attr)) {
|
2270
2296
|
this._super(record, json, relationship);
|
2271
2297
|
return;
|
@@ -2375,7 +2401,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2375
2401
|
*/
|
2376
2402
|
serializeHasMany: function(record, json, relationship) {
|
2377
2403
|
var attr = relationship.key;
|
2378
|
-
var attrs = this.get('attrs');
|
2379
2404
|
if (this.noSerializeOptionSpecified(attr)) {
|
2380
2405
|
this._super(record, json, relationship);
|
2381
2406
|
return;
|
@@ -2450,8 +2475,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2450
2475
|
// checks config for attrs option to serialize records
|
2451
2476
|
noSerializeOptionSpecified: function(attr) {
|
2452
2477
|
var option = this.attrsOption(attr);
|
2453
|
-
var serializeRecords = this.hasSerializeRecordsOption(attr);
|
2454
|
-
var serializeIds = this.hasSerializeIdsOption(attr);
|
2455
2478
|
return !(option && (option.serialize || option.embedded));
|
2456
2479
|
},
|
2457
2480
|
|
@@ -2478,7 +2501,12 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2478
2501
|
if (serializer.hasDeserializeRecordsOption(key)) {
|
2479
2502
|
var embeddedType = store.modelFor(relationship.type.typeKey);
|
2480
2503
|
if (relationship.kind === "hasMany") {
|
2481
|
-
|
2504
|
+
if (relationship.options.polymorphic) {
|
2505
|
+
extractEmbeddedHasManyPolymorphic(store, key, partial);
|
2506
|
+
}
|
2507
|
+
else {
|
2508
|
+
extractEmbeddedHasMany(store, key, embeddedType, partial);
|
2509
|
+
}
|
2482
2510
|
}
|
2483
2511
|
if (relationship.kind === "belongsTo") {
|
2484
2512
|
extractEmbeddedBelongsTo(store, key, embeddedType, partial);
|
@@ -2508,6 +2536,28 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2508
2536
|
return hash;
|
2509
2537
|
}
|
2510
2538
|
|
2539
|
+
function extractEmbeddedHasManyPolymorphic(store, key, hash) {
|
2540
|
+
if (!hash[key]) {
|
2541
|
+
return hash;
|
2542
|
+
}
|
2543
|
+
|
2544
|
+
var ids = [];
|
2545
|
+
|
2546
|
+
forEach(hash[key], function(data) {
|
2547
|
+
var typeKey = data.type;
|
2548
|
+
var embeddedSerializer = store.serializerFor(typeKey);
|
2549
|
+
var embeddedType = store.modelFor(typeKey);
|
2550
|
+
var primaryKey = get(embeddedSerializer, 'primaryKey');
|
2551
|
+
|
2552
|
+
var embeddedRecord = embeddedSerializer.normalize(embeddedType, data, null);
|
2553
|
+
store.push(embeddedType, embeddedRecord);
|
2554
|
+
ids.push({ id: embeddedRecord[primaryKey], type: typeKey });
|
2555
|
+
});
|
2556
|
+
|
2557
|
+
hash[key] = ids;
|
2558
|
+
return hash;
|
2559
|
+
}
|
2560
|
+
|
2511
2561
|
function extractEmbeddedBelongsTo(store, key, embeddedType, hash) {
|
2512
2562
|
if (!hash[key]) {
|
2513
2563
|
return hash;
|
@@ -2525,12 +2575,10 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2525
2575
|
__exports__["default"] = EmbeddedRecordsMixin;
|
2526
2576
|
});
|
2527
2577
|
define("ember-data/serializers/json_serializer",
|
2528
|
-
["
|
2529
|
-
function(
|
2578
|
+
["exports"],
|
2579
|
+
function(__exports__) {
|
2530
2580
|
"use strict";
|
2531
|
-
var RelationshipChange = __dependency1__.RelationshipChange;
|
2532
2581
|
var get = Ember.get;
|
2533
|
-
var set = Ember.set;
|
2534
2582
|
var isNone = Ember.isNone;
|
2535
2583
|
var map = Ember.ArrayPolyfills.map;
|
2536
2584
|
var merge = Ember.merge;
|
@@ -2640,7 +2688,7 @@ define("ember-data/serializers/json_serializer",
|
|
2640
2688
|
@return {Object} data The transformed data object
|
2641
2689
|
*/
|
2642
2690
|
applyTransforms: function(type, data) {
|
2643
|
-
type.eachTransformedAttribute(function(key, type) {
|
2691
|
+
type.eachTransformedAttribute(function applyTransform(key, type) {
|
2644
2692
|
if (!data.hasOwnProperty(key)) { return; }
|
2645
2693
|
|
2646
2694
|
var transform = this.transformFor(type);
|
@@ -2726,7 +2774,7 @@ define("ember-data/serializers/json_serializer",
|
|
2726
2774
|
@private
|
2727
2775
|
*/
|
2728
2776
|
normalizeAttributes: function(type, hash) {
|
2729
|
-
var payloadKey
|
2777
|
+
var payloadKey;
|
2730
2778
|
|
2731
2779
|
if (this.keyForAttribute) {
|
2732
2780
|
type.eachAttribute(function(key) {
|
@@ -2745,7 +2793,7 @@ define("ember-data/serializers/json_serializer",
|
|
2745
2793
|
@private
|
2746
2794
|
*/
|
2747
2795
|
normalizeRelationships: function(type, hash) {
|
2748
|
-
var payloadKey
|
2796
|
+
var payloadKey;
|
2749
2797
|
|
2750
2798
|
if (this.keyForRelationship) {
|
2751
2799
|
type.eachRelationship(function(key, relationship) {
|
@@ -3164,7 +3212,7 @@ define("ember-data/serializers/json_serializer",
|
|
3164
3212
|
payloadKey = this.keyForRelationship(key, "hasMany");
|
3165
3213
|
}
|
3166
3214
|
|
3167
|
-
var relationshipType =
|
3215
|
+
var relationshipType = record.constructor.determineRelationshipType(relationship);
|
3168
3216
|
|
3169
3217
|
if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
|
3170
3218
|
json[payloadKey] = get(record, key).mapBy('id');
|
@@ -3574,7 +3622,6 @@ define("ember-data/serializers/rest_serializer",
|
|
3574
3622
|
|
3575
3623
|
var JSONSerializer = __dependency1__["default"];
|
3576
3624
|
var get = Ember.get;
|
3577
|
-
var set = Ember.set;
|
3578
3625
|
var forEach = Ember.ArrayPolyfills.forEach;
|
3579
3626
|
var map = Ember.ArrayPolyfills.map;
|
3580
3627
|
var camelize = Ember.String.camelize;
|
@@ -4255,7 +4302,7 @@ define("ember-data/serializers/rest_serializer",
|
|
4255
4302
|
|
4256
4303
|
/**
|
4257
4304
|
You can use this method to customize the root keys serialized into the JSON.
|
4258
|
-
By default the REST Serializer sends the typeKey of a model,
|
4305
|
+
By default the REST Serializer sends the typeKey of a model, which is a camelized
|
4259
4306
|
version of the name.
|
4260
4307
|
|
4261
4308
|
For example, your server may expect underscored root objects.
|
@@ -4332,8 +4379,6 @@ define("ember-data/system/adapter",
|
|
4332
4379
|
*/
|
4333
4380
|
|
4334
4381
|
var get = Ember.get;
|
4335
|
-
var set = Ember.set;
|
4336
|
-
var map = Ember.ArrayPolyfills.map;
|
4337
4382
|
|
4338
4383
|
var errorProps = [
|
4339
4384
|
'description',
|
@@ -4790,465 +4835,6 @@ define("ember-data/system/adapter",
|
|
4790
4835
|
__exports__.Adapter = Adapter;
|
4791
4836
|
__exports__["default"] = Adapter;
|
4792
4837
|
});
|
4793
|
-
define("ember-data/system/changes",
|
4794
|
-
["ember-data/system/changes/relationship_change","exports"],
|
4795
|
-
function(__dependency1__, __exports__) {
|
4796
|
-
"use strict";
|
4797
|
-
/**
|
4798
|
-
@module ember-data
|
4799
|
-
*/
|
4800
|
-
|
4801
|
-
var RelationshipChange = __dependency1__.RelationshipChange;
|
4802
|
-
var RelationshipChangeAdd = __dependency1__.RelationshipChangeAdd;
|
4803
|
-
var RelationshipChangeRemove = __dependency1__.RelationshipChangeRemove;
|
4804
|
-
var OneToManyChange = __dependency1__.OneToManyChange;
|
4805
|
-
var ManyToNoneChange = __dependency1__.ManyToNoneChange;
|
4806
|
-
var OneToOneChange = __dependency1__.OneToOneChange;
|
4807
|
-
var ManyToManyChange = __dependency1__.ManyToManyChange;
|
4808
|
-
|
4809
|
-
__exports__.RelationshipChange = RelationshipChange;
|
4810
|
-
__exports__.RelationshipChangeAdd = RelationshipChangeAdd;
|
4811
|
-
__exports__.RelationshipChangeRemove = RelationshipChangeRemove;
|
4812
|
-
__exports__.OneToManyChange = OneToManyChange;
|
4813
|
-
__exports__.ManyToNoneChange = ManyToNoneChange;
|
4814
|
-
__exports__.OneToOneChange = OneToOneChange;
|
4815
|
-
__exports__.ManyToManyChange = ManyToManyChange;
|
4816
|
-
});
|
4817
|
-
define("ember-data/system/changes/relationship_change",
|
4818
|
-
["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],
|
4819
|
-
function(__dependency1__, __dependency2__, __exports__) {
|
4820
|
-
"use strict";
|
4821
|
-
/**
|
4822
|
-
@module ember-data
|
4823
|
-
*/
|
4824
|
-
|
4825
|
-
var Model = __dependency1__["default"];
|
4826
|
-
var isSyncRelationship = __dependency2__.isSyncRelationship;
|
4827
|
-
|
4828
|
-
var get = Ember.get;
|
4829
|
-
var set = Ember.set;
|
4830
|
-
var forEach = Ember.EnumerableUtils.forEach;
|
4831
|
-
|
4832
|
-
/**
|
4833
|
-
@class RelationshipChange
|
4834
|
-
@namespace DS
|
4835
|
-
@private
|
4836
|
-
@constructor
|
4837
|
-
*/
|
4838
|
-
var RelationshipChange = function(options) {
|
4839
|
-
this.parentRecord = options.parentRecord;
|
4840
|
-
this.childRecord = options.childRecord;
|
4841
|
-
this.firstRecord = options.firstRecord;
|
4842
|
-
this.firstRecordKind = options.firstRecordKind;
|
4843
|
-
this.firstRecordName = options.firstRecordName;
|
4844
|
-
this.secondRecord = options.secondRecord;
|
4845
|
-
this.secondRecordKind = options.secondRecordKind;
|
4846
|
-
this.secondRecordName = options.secondRecordName;
|
4847
|
-
this.changeType = options.changeType;
|
4848
|
-
this.store = options.store;
|
4849
|
-
|
4850
|
-
this.committed = {};
|
4851
|
-
};
|
4852
|
-
|
4853
|
-
/**
|
4854
|
-
@class RelationshipChangeAdd
|
4855
|
-
@namespace DS
|
4856
|
-
@private
|
4857
|
-
@constructor
|
4858
|
-
*/
|
4859
|
-
function RelationshipChangeAdd(options){
|
4860
|
-
RelationshipChange.call(this, options);
|
4861
|
-
}
|
4862
|
-
|
4863
|
-
/**
|
4864
|
-
@class RelationshipChangeRemove
|
4865
|
-
@namespace DS
|
4866
|
-
@private
|
4867
|
-
@constructor
|
4868
|
-
*/
|
4869
|
-
function RelationshipChangeRemove(options){
|
4870
|
-
RelationshipChange.call(this, options);
|
4871
|
-
}
|
4872
|
-
|
4873
|
-
RelationshipChange.create = function(options) {
|
4874
|
-
return new RelationshipChange(options);
|
4875
|
-
};
|
4876
|
-
|
4877
|
-
RelationshipChangeAdd.create = function(options) {
|
4878
|
-
return new RelationshipChangeAdd(options);
|
4879
|
-
};
|
4880
|
-
|
4881
|
-
RelationshipChangeRemove.create = function(options) {
|
4882
|
-
return new RelationshipChangeRemove(options);
|
4883
|
-
};
|
4884
|
-
|
4885
|
-
var OneToManyChange = {};
|
4886
|
-
var OneToNoneChange = {};
|
4887
|
-
var ManyToNoneChange = {};
|
4888
|
-
var OneToOneChange = {};
|
4889
|
-
var ManyToManyChange = {};
|
4890
|
-
|
4891
|
-
RelationshipChange._createChange = function(options){
|
4892
|
-
if (options.changeType === 'add') {
|
4893
|
-
return RelationshipChangeAdd.create(options);
|
4894
|
-
}
|
4895
|
-
if (options.changeType === 'remove') {
|
4896
|
-
return RelationshipChangeRemove.create(options);
|
4897
|
-
}
|
4898
|
-
};
|
4899
|
-
|
4900
|
-
RelationshipChange.determineRelationshipType = function(recordType, knownSide){
|
4901
|
-
var knownKey = knownSide.key, key, otherKind;
|
4902
|
-
var knownKind = knownSide.kind;
|
4903
|
-
|
4904
|
-
var inverse = recordType.inverseFor(knownKey);
|
4905
|
-
|
4906
|
-
if (inverse) {
|
4907
|
-
key = inverse.name;
|
4908
|
-
otherKind = inverse.kind;
|
4909
|
-
}
|
4910
|
-
|
4911
|
-
if (!inverse) {
|
4912
|
-
return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
|
4913
|
-
} else {
|
4914
|
-
if (otherKind === 'belongsTo') {
|
4915
|
-
return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
|
4916
|
-
} else {
|
4917
|
-
return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
|
4918
|
-
}
|
4919
|
-
}
|
4920
|
-
};
|
4921
|
-
|
4922
|
-
RelationshipChange.createChange = function(firstRecord, secondRecord, store, options){
|
4923
|
-
// Get the type of the child based on the child's client ID
|
4924
|
-
var firstRecordType = firstRecord.constructor, changeType;
|
4925
|
-
changeType = RelationshipChange.determineRelationshipType(firstRecordType, options);
|
4926
|
-
if (changeType === 'oneToMany') {
|
4927
|
-
return OneToManyChange.createChange(firstRecord, secondRecord, store, options);
|
4928
|
-
} else if (changeType === 'manyToOne') {
|
4929
|
-
return OneToManyChange.createChange(secondRecord, firstRecord, store, options);
|
4930
|
-
} else if (changeType === 'oneToNone') {
|
4931
|
-
return OneToNoneChange.createChange(firstRecord, secondRecord, store, options);
|
4932
|
-
} else if (changeType === 'manyToNone') {
|
4933
|
-
return ManyToNoneChange.createChange(firstRecord, secondRecord, store, options);
|
4934
|
-
} else if (changeType === 'oneToOne') {
|
4935
|
-
return OneToOneChange.createChange(firstRecord, secondRecord, store, options);
|
4936
|
-
} else if (changeType === 'manyToMany') {
|
4937
|
-
return ManyToManyChange.createChange(firstRecord, secondRecord, store, options);
|
4938
|
-
}
|
4939
|
-
};
|
4940
|
-
|
4941
|
-
OneToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
|
4942
|
-
var key = options.key;
|
4943
|
-
var change = RelationshipChange._createChange({
|
4944
|
-
parentRecord: parentRecord,
|
4945
|
-
childRecord: childRecord,
|
4946
|
-
firstRecord: childRecord,
|
4947
|
-
store: store,
|
4948
|
-
changeType: options.changeType,
|
4949
|
-
firstRecordName: key,
|
4950
|
-
firstRecordKind: 'belongsTo'
|
4951
|
-
});
|
4952
|
-
|
4953
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4954
|
-
|
4955
|
-
return change;
|
4956
|
-
};
|
4957
|
-
|
4958
|
-
ManyToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
|
4959
|
-
var key = options.key;
|
4960
|
-
var change = RelationshipChange._createChange({
|
4961
|
-
parentRecord: childRecord,
|
4962
|
-
childRecord: parentRecord,
|
4963
|
-
secondRecord: childRecord,
|
4964
|
-
store: store,
|
4965
|
-
changeType: options.changeType,
|
4966
|
-
secondRecordName: options.key,
|
4967
|
-
secondRecordKind: 'hasMany'
|
4968
|
-
});
|
4969
|
-
|
4970
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4971
|
-
return change;
|
4972
|
-
};
|
4973
|
-
|
4974
|
-
|
4975
|
-
ManyToManyChange.createChange = function(childRecord, parentRecord, store, options) {
|
4976
|
-
// If the name of the belongsTo side of the relationship is specified,
|
4977
|
-
// use that
|
4978
|
-
// If the type of the parent is specified, look it up on the child's type
|
4979
|
-
// definition.
|
4980
|
-
var key = options.key;
|
4981
|
-
|
4982
|
-
var change = RelationshipChange._createChange({
|
4983
|
-
parentRecord: parentRecord,
|
4984
|
-
childRecord: childRecord,
|
4985
|
-
firstRecord: childRecord,
|
4986
|
-
secondRecord: parentRecord,
|
4987
|
-
firstRecordKind: 'hasMany',
|
4988
|
-
secondRecordKind: 'hasMany',
|
4989
|
-
store: store,
|
4990
|
-
changeType: options.changeType,
|
4991
|
-
firstRecordName: key
|
4992
|
-
});
|
4993
|
-
|
4994
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4995
|
-
|
4996
|
-
return change;
|
4997
|
-
};
|
4998
|
-
|
4999
|
-
OneToOneChange.createChange = function(childRecord, parentRecord, store, options) {
|
5000
|
-
var key;
|
5001
|
-
|
5002
|
-
// If the name of the belongsTo side of the relationship is specified,
|
5003
|
-
// use that
|
5004
|
-
// If the type of the parent is specified, look it up on the child's type
|
5005
|
-
// definition.
|
5006
|
-
if (options.parentType) {
|
5007
|
-
key = options.parentType.inverseFor(options.key).name;
|
5008
|
-
} else if (options.key) {
|
5009
|
-
key = options.key;
|
5010
|
-
} else {
|
5011
|
-
Ember.assert('You must pass either a parentType or belongsToName option to OneToManyChange.forChildAndParent', false);
|
5012
|
-
}
|
5013
|
-
|
5014
|
-
var change = RelationshipChange._createChange({
|
5015
|
-
parentRecord: parentRecord,
|
5016
|
-
childRecord: childRecord,
|
5017
|
-
firstRecord: childRecord,
|
5018
|
-
secondRecord: parentRecord,
|
5019
|
-
firstRecordKind: 'belongsTo',
|
5020
|
-
secondRecordKind: 'belongsTo',
|
5021
|
-
store: store,
|
5022
|
-
changeType: options.changeType,
|
5023
|
-
firstRecordName: key
|
5024
|
-
});
|
5025
|
-
|
5026
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
5027
|
-
|
5028
|
-
return change;
|
5029
|
-
};
|
5030
|
-
|
5031
|
-
OneToOneChange.maintainInvariant = function(options, store, childRecord, key){
|
5032
|
-
if (options.changeType === 'add' && store.recordIsMaterialized(childRecord)) {
|
5033
|
-
var oldParent = get(childRecord, key);
|
5034
|
-
if (oldParent) {
|
5035
|
-
var correspondingChange = OneToOneChange.createChange(childRecord, oldParent, store, {
|
5036
|
-
parentType: options.parentType,
|
5037
|
-
hasManyName: options.hasManyName,
|
5038
|
-
changeType: 'remove',
|
5039
|
-
key: options.key
|
5040
|
-
});
|
5041
|
-
store.addRelationshipChangeFor(childRecord, key, options.parentRecord , null, correspondingChange);
|
5042
|
-
correspondingChange.sync();
|
5043
|
-
}
|
5044
|
-
}
|
5045
|
-
};
|
5046
|
-
|
5047
|
-
OneToManyChange.createChange = function(childRecord, parentRecord, store, options) {
|
5048
|
-
var key;
|
5049
|
-
|
5050
|
-
// If the name of the belongsTo side of the relationship is specified,
|
5051
|
-
// use that
|
5052
|
-
// If the type of the parent is specified, look it up on the child's type
|
5053
|
-
// definition.
|
5054
|
-
if (options.parentType) {
|
5055
|
-
key = options.parentType.inverseFor(options.key).name;
|
5056
|
-
OneToManyChange.maintainInvariant( options, store, childRecord, key );
|
5057
|
-
} else if (options.key) {
|
5058
|
-
key = options.key;
|
5059
|
-
} else {
|
5060
|
-
Ember.assert('You must pass either a parentType or belongsToName option to OneToManyChange.forChildAndParent', false);
|
5061
|
-
}
|
5062
|
-
|
5063
|
-
var change = RelationshipChange._createChange({
|
5064
|
-
parentRecord: parentRecord,
|
5065
|
-
childRecord: childRecord,
|
5066
|
-
firstRecord: childRecord,
|
5067
|
-
secondRecord: parentRecord,
|
5068
|
-
firstRecordKind: 'belongsTo',
|
5069
|
-
secondRecordKind: 'hasMany',
|
5070
|
-
store: store,
|
5071
|
-
changeType: options.changeType,
|
5072
|
-
firstRecordName: key
|
5073
|
-
});
|
5074
|
-
|
5075
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, change.getSecondRecordName(), change);
|
5076
|
-
|
5077
|
-
return change;
|
5078
|
-
};
|
5079
|
-
|
5080
|
-
OneToManyChange.maintainInvariant = function(options, store, childRecord, key){
|
5081
|
-
if (options.changeType === 'add' && childRecord) {
|
5082
|
-
var oldParent = get(childRecord, key);
|
5083
|
-
if (oldParent) {
|
5084
|
-
var correspondingChange = OneToManyChange.createChange(childRecord, oldParent, store, {
|
5085
|
-
parentType: options.parentType,
|
5086
|
-
hasManyName: options.hasManyName,
|
5087
|
-
changeType: 'remove',
|
5088
|
-
key: options.key
|
5089
|
-
});
|
5090
|
-
store.addRelationshipChangeFor(childRecord, key, options.parentRecord, correspondingChange.getSecondRecordName(), correspondingChange);
|
5091
|
-
correspondingChange.sync();
|
5092
|
-
}
|
5093
|
-
}
|
5094
|
-
};
|
5095
|
-
|
5096
|
-
/**
|
5097
|
-
@class RelationshipChange
|
5098
|
-
@namespace DS
|
5099
|
-
*/
|
5100
|
-
RelationshipChange.prototype = {
|
5101
|
-
getSecondRecordName: function() {
|
5102
|
-
var name = this.secondRecordName, parent;
|
5103
|
-
|
5104
|
-
if (!name) {
|
5105
|
-
parent = this.secondRecord;
|
5106
|
-
if (!parent) { return; }
|
5107
|
-
|
5108
|
-
var childType = this.firstRecord.constructor;
|
5109
|
-
var inverse = childType.inverseFor(this.firstRecordName);
|
5110
|
-
this.secondRecordName = inverse.name;
|
5111
|
-
}
|
5112
|
-
|
5113
|
-
return this.secondRecordName;
|
5114
|
-
},
|
5115
|
-
|
5116
|
-
/**
|
5117
|
-
Get the name of the relationship on the belongsTo side.
|
5118
|
-
|
5119
|
-
@method getFirstRecordName
|
5120
|
-
@return {String}
|
5121
|
-
*/
|
5122
|
-
getFirstRecordName: function() {
|
5123
|
-
return this.firstRecordName;
|
5124
|
-
},
|
5125
|
-
|
5126
|
-
/**
|
5127
|
-
@method destroy
|
5128
|
-
@private
|
5129
|
-
*/
|
5130
|
-
destroy: function() {
|
5131
|
-
var childRecord = this.childRecord;
|
5132
|
-
var belongsToName = this.getFirstRecordName();
|
5133
|
-
var hasManyName = this.getSecondRecordName();
|
5134
|
-
var store = this.store;
|
5135
|
-
|
5136
|
-
store.removeRelationshipChangeFor(childRecord, belongsToName, this.parentRecord, hasManyName, this.changeType);
|
5137
|
-
},
|
5138
|
-
|
5139
|
-
getSecondRecord: function(){
|
5140
|
-
return this.secondRecord;
|
5141
|
-
},
|
5142
|
-
|
5143
|
-
/**
|
5144
|
-
@method getFirstRecord
|
5145
|
-
@private
|
5146
|
-
*/
|
5147
|
-
getFirstRecord: function() {
|
5148
|
-
return this.firstRecord;
|
5149
|
-
},
|
5150
|
-
|
5151
|
-
coalesce: function(){
|
5152
|
-
var relationshipPairs = this.store.relationshipChangePairsFor(this.firstRecord);
|
5153
|
-
forEach(relationshipPairs, function(pair) {
|
5154
|
-
var addedChange = pair['add'];
|
5155
|
-
var removedChange = pair['remove'];
|
5156
|
-
if (addedChange && removedChange) {
|
5157
|
-
addedChange.destroy();
|
5158
|
-
removedChange.destroy();
|
5159
|
-
}
|
5160
|
-
});
|
5161
|
-
}
|
5162
|
-
};
|
5163
|
-
|
5164
|
-
RelationshipChangeAdd.prototype = Ember.create(RelationshipChange.create({}));
|
5165
|
-
RelationshipChangeRemove.prototype = Ember.create(RelationshipChange.create({}));
|
5166
|
-
|
5167
|
-
RelationshipChangeAdd.prototype.changeType = 'add';
|
5168
|
-
RelationshipChangeAdd.prototype.sync = function() {
|
5169
|
-
var secondRecordName = this.getSecondRecordName();
|
5170
|
-
var firstRecordName = this.getFirstRecordName();
|
5171
|
-
var firstRecord = this.getFirstRecord();
|
5172
|
-
var secondRecord = this.getSecondRecord();
|
5173
|
-
|
5174
|
-
//Ember.assert("You specified a hasMany (" + hasManyName + ") on " + (!belongsToName && (newParent || oldParent || this.lastParent).constructor) + " but did not specify an inverse belongsTo on " + child.constructor, belongsToName);
|
5175
|
-
//Ember.assert("You specified a belongsTo (" + belongsToName + ") on " + child.constructor + " but did not specify an inverse hasMany on " + (!hasManyName && (newParent || oldParent || this.lastParentRecord).constructor), hasManyName);
|
5176
|
-
|
5177
|
-
if (secondRecord instanceof Model && firstRecord instanceof Model) {
|
5178
|
-
if (this.secondRecordKind === 'belongsTo') {
|
5179
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5180
|
-
set(secondRecord, secondRecordName, firstRecord);
|
5181
|
-
});
|
5182
|
-
} else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5183
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5184
|
-
var relationship = get(secondRecord, secondRecordName);
|
5185
|
-
relationship.addObject(firstRecord);
|
5186
|
-
});
|
5187
|
-
}
|
5188
|
-
}
|
5189
|
-
|
5190
|
-
if (firstRecord instanceof Model && secondRecord instanceof Model && get(firstRecord, firstRecordName) !== secondRecord) {
|
5191
|
-
if (this.firstRecordKind === 'belongsTo') {
|
5192
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5193
|
-
set(firstRecord, firstRecordName, secondRecord);
|
5194
|
-
});
|
5195
|
-
} else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5196
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5197
|
-
var relationship = get(firstRecord, firstRecordName);
|
5198
|
-
relationship.addObject(secondRecord);
|
5199
|
-
});
|
5200
|
-
}
|
5201
|
-
}
|
5202
|
-
this.coalesce();
|
5203
|
-
};
|
5204
|
-
|
5205
|
-
RelationshipChangeRemove.prototype.changeType = 'remove';
|
5206
|
-
RelationshipChangeRemove.prototype.sync = function() {
|
5207
|
-
var secondRecordName = this.getSecondRecordName();
|
5208
|
-
var firstRecordName = this.getFirstRecordName();
|
5209
|
-
var firstRecord = this.getFirstRecord();
|
5210
|
-
var secondRecord = this.getSecondRecord();
|
5211
|
-
|
5212
|
-
//Ember.assert("You specified a hasMany (" + hasManyName + ") on " + (!belongsToName && (newParent || oldParent || this.lastParent).constructor) + " but did not specify an inverse belongsTo on " + child.constructor, belongsToName);
|
5213
|
-
//Ember.assert("You specified a belongsTo (" + belongsToName + ") on " + child.constructor + " but did not specify an inverse hasMany on " + (!hasManyName && (newParent || oldParent || this.lastParentRecord).constructor), hasManyName);
|
5214
|
-
|
5215
|
-
if (secondRecord instanceof Model && firstRecord instanceof Model) {
|
5216
|
-
if (this.secondRecordKind === 'belongsTo') {
|
5217
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5218
|
-
set(secondRecord, secondRecordName, null);
|
5219
|
-
});
|
5220
|
-
} else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5221
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5222
|
-
var relationship = get(secondRecord, secondRecordName);
|
5223
|
-
relationship.removeObject(firstRecord);
|
5224
|
-
});
|
5225
|
-
}
|
5226
|
-
}
|
5227
|
-
|
5228
|
-
if (firstRecord instanceof Model && get(firstRecord, firstRecordName)) {
|
5229
|
-
if (this.firstRecordKind === 'belongsTo') {
|
5230
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5231
|
-
set(firstRecord, firstRecordName, null);
|
5232
|
-
});
|
5233
|
-
} else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(firstRecord, firstRecordName)) {
|
5234
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5235
|
-
var relationship = get(firstRecord, firstRecordName);
|
5236
|
-
relationship.removeObject(secondRecord);
|
5237
|
-
});
|
5238
|
-
}
|
5239
|
-
}
|
5240
|
-
|
5241
|
-
this.coalesce();
|
5242
|
-
};
|
5243
|
-
|
5244
|
-
__exports__.RelationshipChange = RelationshipChange;
|
5245
|
-
__exports__.RelationshipChangeAdd = RelationshipChangeAdd;
|
5246
|
-
__exports__.RelationshipChangeRemove = RelationshipChangeRemove;
|
5247
|
-
__exports__.OneToManyChange = OneToManyChange;
|
5248
|
-
__exports__.ManyToNoneChange = ManyToNoneChange;
|
5249
|
-
__exports__.OneToOneChange = OneToOneChange;
|
5250
|
-
__exports__.ManyToManyChange = ManyToManyChange;
|
5251
|
-
});
|
5252
4838
|
define("ember-data/system/container_proxy",
|
5253
4839
|
["exports"],
|
5254
4840
|
function(__exports__) {
|
@@ -5291,7 +4877,7 @@ define("ember-data/system/container_proxy",
|
|
5291
4877
|
};
|
5292
4878
|
|
5293
4879
|
ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
|
5294
|
-
var i, proxyPair, deprecated, valid
|
4880
|
+
var i, proxyPair, deprecated, valid;
|
5295
4881
|
|
5296
4882
|
for (i = proxyPairs.length; i > 0; i--) {
|
5297
4883
|
proxyPair = proxyPairs[i - 1];
|
@@ -6187,12 +5773,14 @@ define("ember-data/system/model/errors",
|
|
6187
5773
|
});
|
6188
5774
|
});
|
6189
5775
|
define("ember-data/system/model/model",
|
6190
|
-
["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/
|
6191
|
-
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
5776
|
+
["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],
|
5777
|
+
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
|
6192
5778
|
"use strict";
|
6193
5779
|
var RootState = __dependency1__["default"];
|
6194
5780
|
var Errors = __dependency2__["default"];
|
6195
5781
|
var PromiseObject = __dependency3__.PromiseObject;
|
5782
|
+
var createRelationshipFor = __dependency4__.createRelationshipFor;
|
5783
|
+
|
6196
5784
|
/**
|
6197
5785
|
@module ember-data
|
6198
5786
|
*/
|
@@ -6202,6 +5790,7 @@ define("ember-data/system/model/model",
|
|
6202
5790
|
var merge = Ember.merge;
|
6203
5791
|
var Promise = Ember.RSVP.Promise;
|
6204
5792
|
var forEach = Ember.ArrayPolyfills.forEach;
|
5793
|
+
var map = Ember.ArrayPolyfills.map;
|
6205
5794
|
|
6206
5795
|
var JSONSerializer;
|
6207
5796
|
var retrieveFromCurrentState = Ember.computed('currentState', function(key, value) {
|
@@ -6634,6 +6223,12 @@ define("ember-data/system/model/model",
|
|
6634
6223
|
this._attributes = {};
|
6635
6224
|
this._inFlightAttributes = {};
|
6636
6225
|
this._relationships = {};
|
6226
|
+
var model = this;
|
6227
|
+
//TODO Move into a getter for better perf
|
6228
|
+
this.constructor.eachRelationship(function(key, descriptor) {
|
6229
|
+
model._relationships[key] = createRelationshipFor(model, descriptor, model.store);
|
6230
|
+
});
|
6231
|
+
|
6637
6232
|
},
|
6638
6233
|
|
6639
6234
|
/**
|
@@ -6816,13 +6411,11 @@ define("ember-data/system/model/model",
|
|
6816
6411
|
*/
|
6817
6412
|
clearRelationships: function() {
|
6818
6413
|
this.eachRelationship(function(name, relationship) {
|
6819
|
-
|
6820
|
-
|
6821
|
-
|
6822
|
-
|
6823
|
-
|
6824
|
-
hasMany.destroy();
|
6825
|
-
}
|
6414
|
+
var rel = this._relationships[name];
|
6415
|
+
if (rel){
|
6416
|
+
//TODO(Igor) figure out whether we want to clear or disconnect
|
6417
|
+
rel.clear();
|
6418
|
+
rel.destroy();
|
6826
6419
|
}
|
6827
6420
|
}, this);
|
6828
6421
|
},
|
@@ -6837,9 +6430,9 @@ define("ember-data/system/model/model",
|
|
6837
6430
|
},
|
6838
6431
|
|
6839
6432
|
/**
|
6840
|
-
When a find request is triggered on the store, the user can optionally
|
6433
|
+
When a find request is triggered on the store, the user can optionally pass in
|
6841
6434
|
attributes and relationships to be preloaded. These are meant to behave as if they
|
6842
|
-
came back from the server,
|
6435
|
+
came back from the server, except the user obtained them out of band and is informing
|
6843
6436
|
the store of their existence. The most common use case is for supporting client side
|
6844
6437
|
nested URLs, such as `/posts/1/comments/2` so the user can do
|
6845
6438
|
`store.find('comment', 2, {post:1})` without having to fetch the post.
|
@@ -6879,15 +6472,20 @@ define("ember-data/system/model/model",
|
|
6879
6472
|
Ember.assert("You need to pass in an array to set a hasMany property on a record", Ember.isArray(preloadValue));
|
6880
6473
|
var record = this;
|
6881
6474
|
|
6882
|
-
|
6883
|
-
|
6884
|
-
get(record, key).pushObject(recordToPush);
|
6475
|
+
var recordsToSet = map.call(preloadValue, function(recordToPush) {
|
6476
|
+
return record._convertStringOrNumberIntoRecord(recordToPush, type);
|
6885
6477
|
});
|
6478
|
+
//We use the pathway of setting the hasMany as if it came from the adapter
|
6479
|
+
//because the user told us that they know this relationships exists already
|
6480
|
+
this._relationships[key].updateRecordsFromAdapter(recordsToSet);
|
6886
6481
|
},
|
6887
6482
|
|
6888
6483
|
_preloadBelongsTo: function(key, preloadValue, type){
|
6889
|
-
var
|
6890
|
-
|
6484
|
+
var recordToSet = this._convertStringOrNumberIntoRecord(preloadValue, type);
|
6485
|
+
|
6486
|
+
//We use the pathway of setting the hasMany as if it came from the adapter
|
6487
|
+
//because the user told us that they know this relationships exists already
|
6488
|
+
this._relationships[key].setRecord(recordToSet);
|
6891
6489
|
},
|
6892
6490
|
|
6893
6491
|
_convertStringOrNumberIntoRecord: function(value, type) {
|
@@ -6962,9 +6560,7 @@ define("ember-data/system/model/model",
|
|
6962
6560
|
|
6963
6561
|
if (!data) { return; }
|
6964
6562
|
|
6965
|
-
this.
|
6966
|
-
this.notifyPropertyChange('data');
|
6967
|
-
});
|
6563
|
+
this.notifyPropertyChange('data');
|
6968
6564
|
},
|
6969
6565
|
|
6970
6566
|
/**
|
@@ -6976,32 +6572,6 @@ define("ember-data/system/model/model",
|
|
6976
6572
|
this.updateRecordArraysLater();
|
6977
6573
|
},
|
6978
6574
|
|
6979
|
-
dataDidChange: Ember.observer(function() {
|
6980
|
-
this.reloadHasManys();
|
6981
|
-
}, 'data'),
|
6982
|
-
|
6983
|
-
reloadHasManys: function() {
|
6984
|
-
var relationships = get(this.constructor, 'relationshipsByName');
|
6985
|
-
this.updateRecordArraysLater();
|
6986
|
-
relationships.forEach(function(name, relationship) {
|
6987
|
-
if (this._data.links && this._data.links[name]) { return; }
|
6988
|
-
if (relationship.kind === 'hasMany') {
|
6989
|
-
this.hasManyDidChange(relationship.key);
|
6990
|
-
}
|
6991
|
-
}, this);
|
6992
|
-
},
|
6993
|
-
|
6994
|
-
hasManyDidChange: function(key) {
|
6995
|
-
var hasMany = this._relationships[key];
|
6996
|
-
|
6997
|
-
if (hasMany) {
|
6998
|
-
var records = this._data[key] || [];
|
6999
|
-
|
7000
|
-
set(hasMany, 'content', Ember.A(records));
|
7001
|
-
set(hasMany, 'isLoaded', true);
|
7002
|
-
hasMany.trigger('didLoad');
|
7003
|
-
}
|
7004
|
-
},
|
7005
6575
|
|
7006
6576
|
/**
|
7007
6577
|
@method updateRecordArraysLater
|
@@ -7029,18 +6599,9 @@ define("ember-data/system/model/model",
|
|
7029
6599
|
this._data = data;
|
7030
6600
|
}
|
7031
6601
|
|
7032
|
-
var relationships = this._relationships;
|
7033
|
-
|
7034
|
-
this.eachRelationship(function(name, rel) {
|
7035
|
-
if (data.links && data.links[name]) { return; }
|
7036
|
-
if (rel.options.async) { relationships[name] = null; }
|
7037
|
-
});
|
7038
|
-
|
7039
6602
|
if (data) { this.pushedData(); }
|
7040
6603
|
|
7041
|
-
this.
|
7042
|
-
this.notifyPropertyChange('data');
|
7043
|
-
});
|
6604
|
+
this.notifyPropertyChange('data');
|
7044
6605
|
},
|
7045
6606
|
|
7046
6607
|
materializeId: function(id) {
|
@@ -7056,27 +6617,6 @@ define("ember-data/system/model/model",
|
|
7056
6617
|
this._data[name] = value;
|
7057
6618
|
},
|
7058
6619
|
|
7059
|
-
/**
|
7060
|
-
@method updateHasMany
|
7061
|
-
@private
|
7062
|
-
@param {String} name
|
7063
|
-
@param {Array} records
|
7064
|
-
*/
|
7065
|
-
updateHasMany: function(name, records) {
|
7066
|
-
this._data[name] = records;
|
7067
|
-
this.hasManyDidChange(name);
|
7068
|
-
},
|
7069
|
-
|
7070
|
-
/**
|
7071
|
-
@method updateBelongsTo
|
7072
|
-
@private
|
7073
|
-
@param {String} name
|
7074
|
-
@param {DS.Model} record
|
7075
|
-
*/
|
7076
|
-
updateBelongsTo: function(name, record) {
|
7077
|
-
this._data[name] = record;
|
7078
|
-
},
|
7079
|
-
|
7080
6620
|
/**
|
7081
6621
|
If the model `isDirty` this function will discard any unsaved
|
7082
6622
|
changes
|
@@ -7107,48 +6647,13 @@ define("ember-data/system/model/model",
|
|
7107
6647
|
|
7108
6648
|
this.send('rolledBack');
|
7109
6649
|
|
7110
|
-
this.
|
7111
|
-
this.notifyPropertyChange('data');
|
7112
|
-
});
|
6650
|
+
this.notifyPropertyChange('data');
|
7113
6651
|
},
|
7114
6652
|
|
7115
6653
|
toStringExtension: function() {
|
7116
6654
|
return get(this, 'id');
|
7117
6655
|
},
|
7118
6656
|
|
7119
|
-
/**
|
7120
|
-
The goal of this method is to temporarily disable specific observers
|
7121
|
-
that take action in response to application changes.
|
7122
|
-
|
7123
|
-
This allows the system to make changes (such as materialization and
|
7124
|
-
rollback) that should not trigger secondary behavior (such as setting an
|
7125
|
-
inverse relationship or marking records as dirty).
|
7126
|
-
|
7127
|
-
The specific implementation will likely change as Ember proper provides
|
7128
|
-
better infrastructure for suspending groups of observers, and if Array
|
7129
|
-
observation becomes more unified with regular observers.
|
7130
|
-
|
7131
|
-
@method suspendRelationshipObservers
|
7132
|
-
@private
|
7133
|
-
@param callback
|
7134
|
-
@param binding
|
7135
|
-
*/
|
7136
|
-
suspendRelationshipObservers: function(callback, binding) {
|
7137
|
-
var observers = get(this.constructor, 'relationshipNames').belongsTo;
|
7138
|
-
var self = this;
|
7139
|
-
|
7140
|
-
try {
|
7141
|
-
this._suspendedRelationships = true;
|
7142
|
-
Ember._suspendObservers(self, observers, null, 'belongsToDidChange', function() {
|
7143
|
-
Ember._suspendBeforeObservers(self, observers, null, 'belongsToWillChange', function() {
|
7144
|
-
callback.call(binding || self);
|
7145
|
-
});
|
7146
|
-
});
|
7147
|
-
} finally {
|
7148
|
-
this._suspendedRelationships = false;
|
7149
|
-
}
|
7150
|
-
},
|
7151
|
-
|
7152
6657
|
/**
|
7153
6658
|
Save the record and persist any changes to the record to an
|
7154
6659
|
extenal source via the adapter.
|
@@ -7515,18 +7020,6 @@ define("ember-data/system/model/states",
|
|
7515
7020
|
@class RootState
|
7516
7021
|
*/
|
7517
7022
|
|
7518
|
-
function hasDefinedProperties(object) {
|
7519
|
-
// Ignore internal property defined by simulated `Ember.create`.
|
7520
|
-
var names = Ember.keys(object);
|
7521
|
-
var i, l, name;
|
7522
|
-
for (i = 0, l = names.length; i < l; i++ ) {
|
7523
|
-
name = names[i];
|
7524
|
-
if (object.hasOwnProperty(name) && object[name]) { return true; }
|
7525
|
-
}
|
7526
|
-
|
7527
|
-
return false;
|
7528
|
-
}
|
7529
|
-
|
7530
7023
|
function didSetProperty(record, context) {
|
7531
7024
|
if (context.value === context.originalValue) {
|
7532
7025
|
delete record._attributes[context.name];
|
@@ -7601,12 +7094,8 @@ define("ember-data/system/model/states",
|
|
7601
7094
|
loadingData: Ember.K,
|
7602
7095
|
|
7603
7096
|
propertyWasReset: function(record, name) {
|
7604
|
-
var
|
7605
|
-
|
7606
|
-
for (var prop in record._attributes) {
|
7607
|
-
stillDirty = true;
|
7608
|
-
break;
|
7609
|
-
}
|
7097
|
+
var length = Ember.keys(record._attributes);
|
7098
|
+
var stillDirty = length > 0;
|
7610
7099
|
|
7611
7100
|
if (!stillDirty) { record.send('rolledBack'); }
|
7612
7101
|
},
|
@@ -7831,10 +7320,7 @@ define("ember-data/system/model/states",
|
|
7831
7320
|
|
7832
7321
|
loadedData: function(record) {
|
7833
7322
|
record.transitionTo('loaded.created.uncommitted');
|
7834
|
-
|
7835
|
-
record.suspendRelationshipObservers(function() {
|
7836
|
-
record.notifyPropertyChange('data');
|
7837
|
-
});
|
7323
|
+
record.notifyPropertyChange('data');
|
7838
7324
|
},
|
7839
7325
|
|
7840
7326
|
pushedData: function(record) {
|
@@ -8078,6 +7564,91 @@ define("ember-data/system/model/states",
|
|
8078
7564
|
|
8079
7565
|
__exports__["default"] = RootState;
|
8080
7566
|
});
|
7567
|
+
define("ember-data/system/promise_proxies",
|
7568
|
+
["exports"],
|
7569
|
+
function(__exports__) {
|
7570
|
+
"use strict";
|
7571
|
+
var Promise = Ember.RSVP.Promise;
|
7572
|
+
|
7573
|
+
/**
|
7574
|
+
A `PromiseArray` is an object that acts like both an `Ember.Array`
|
7575
|
+
and a promise. When the promise is resolved the resulting value
|
7576
|
+
will be set to the `PromiseArray`'s `content` property. This makes
|
7577
|
+
it easy to create data bindings with the `PromiseArray` that will be
|
7578
|
+
updated when the promise resolves.
|
7579
|
+
|
7580
|
+
For more information see the [Ember.PromiseProxyMixin
|
7581
|
+
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
7582
|
+
|
7583
|
+
Example
|
7584
|
+
|
7585
|
+
```javascript
|
7586
|
+
var promiseArray = DS.PromiseArray.create({
|
7587
|
+
promise: $.getJSON('/some/remote/data.json')
|
7588
|
+
});
|
7589
|
+
|
7590
|
+
promiseArray.get('length'); // 0
|
7591
|
+
|
7592
|
+
promiseArray.then(function() {
|
7593
|
+
promiseArray.get('length'); // 100
|
7594
|
+
});
|
7595
|
+
```
|
7596
|
+
|
7597
|
+
@class PromiseArray
|
7598
|
+
@namespace DS
|
7599
|
+
@extends Ember.ArrayProxy
|
7600
|
+
@uses Ember.PromiseProxyMixin
|
7601
|
+
*/
|
7602
|
+
var PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
|
7603
|
+
|
7604
|
+
/**
|
7605
|
+
A `PromiseObject` is an object that acts like both an `Ember.Object`
|
7606
|
+
and a promise. When the promise is resolved, then the resulting value
|
7607
|
+
will be set to the `PromiseObject`'s `content` property. This makes
|
7608
|
+
it easy to create data bindings with the `PromiseObject` that will
|
7609
|
+
be updated when the promise resolves.
|
7610
|
+
|
7611
|
+
For more information see the [Ember.PromiseProxyMixin
|
7612
|
+
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
7613
|
+
|
7614
|
+
Example
|
7615
|
+
|
7616
|
+
```javascript
|
7617
|
+
var promiseObject = DS.PromiseObject.create({
|
7618
|
+
promise: $.getJSON('/some/remote/data.json')
|
7619
|
+
});
|
7620
|
+
|
7621
|
+
promiseObject.get('name'); // null
|
7622
|
+
|
7623
|
+
promiseObject.then(function() {
|
7624
|
+
promiseObject.get('name'); // 'Tomster'
|
7625
|
+
});
|
7626
|
+
```
|
7627
|
+
|
7628
|
+
@class PromiseObject
|
7629
|
+
@namespace DS
|
7630
|
+
@extends Ember.ObjectProxy
|
7631
|
+
@uses Ember.PromiseProxyMixin
|
7632
|
+
*/
|
7633
|
+
var PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
7634
|
+
|
7635
|
+
var promiseObject = function(promise, label) {
|
7636
|
+
return PromiseObject.create({
|
7637
|
+
promise: Promise.resolve(promise, label)
|
7638
|
+
});
|
7639
|
+
};
|
7640
|
+
|
7641
|
+
var promiseArray = function(promise, label) {
|
7642
|
+
return PromiseArray.create({
|
7643
|
+
promise: Promise.resolve(promise, label)
|
7644
|
+
});
|
7645
|
+
};
|
7646
|
+
|
7647
|
+
__exports__.PromiseArray = PromiseArray;
|
7648
|
+
__exports__.PromiseObject = PromiseObject;
|
7649
|
+
__exports__.promiseArray = promiseArray;
|
7650
|
+
__exports__.promiseObject = promiseObject;
|
7651
|
+
});
|
8081
7652
|
define("ember-data/system/record_array_manager",
|
8082
7653
|
["ember-data/system/record_arrays","exports"],
|
8083
7654
|
function(__dependency1__, __exports__) {
|
@@ -8091,7 +7662,6 @@ define("ember-data/system/record_array_manager",
|
|
8091
7662
|
var AdapterPopulatedRecordArray = __dependency1__.AdapterPopulatedRecordArray;
|
8092
7663
|
var ManyArray = __dependency1__.ManyArray;
|
8093
7664
|
var get = Ember.get;
|
8094
|
-
var set = Ember.set;
|
8095
7665
|
var forEach = Ember.EnumerableUtils.forEach;
|
8096
7666
|
|
8097
7667
|
/**
|
@@ -8416,7 +7986,6 @@ define("ember-data/system/record_arrays/adapter_populated_record_array",
|
|
8416
7986
|
*/
|
8417
7987
|
|
8418
7988
|
var get = Ember.get;
|
8419
|
-
var set = Ember.set;
|
8420
7989
|
|
8421
7990
|
function cloneNull(source) {
|
8422
7991
|
var clone = Object.create(null);
|
@@ -8542,22 +8111,16 @@ define("ember-data/system/record_arrays/filtered_record_array",
|
|
8542
8111
|
});
|
8543
8112
|
});
|
8544
8113
|
define("ember-data/system/record_arrays/many_array",
|
8545
|
-
["ember-data/system/record_arrays/record_array","
|
8546
|
-
function(__dependency1__,
|
8114
|
+
["ember-data/system/record_arrays/record_array","exports"],
|
8115
|
+
function(__dependency1__, __exports__) {
|
8547
8116
|
"use strict";
|
8548
8117
|
var RecordArray = __dependency1__["default"];
|
8549
|
-
var RelationshipChange = __dependency2__.RelationshipChange;
|
8550
8118
|
|
8551
8119
|
/**
|
8552
8120
|
@module ember-data
|
8553
8121
|
*/
|
8554
8122
|
|
8555
8123
|
var get = Ember.get, set = Ember.set;
|
8556
|
-
var map = Ember.EnumerableUtils.map;
|
8557
|
-
|
8558
|
-
function sync(change) {
|
8559
|
-
change.sync();
|
8560
|
-
}
|
8561
8124
|
|
8562
8125
|
/**
|
8563
8126
|
A `ManyArray` is a `RecordArray` that represents the contents of a has-many
|
@@ -8598,7 +8161,6 @@ define("ember-data/system/record_arrays/many_array",
|
|
8598
8161
|
__exports__["default"] = RecordArray.extend({
|
8599
8162
|
init: function() {
|
8600
8163
|
this._super.apply(this, arguments);
|
8601
|
-
this._changesToSync = Ember.OrderedSet.create();
|
8602
8164
|
},
|
8603
8165
|
|
8604
8166
|
/**
|
@@ -8629,6 +8191,16 @@ define("ember-data/system/record_arrays/many_array",
|
|
8629
8191
|
|
8630
8192
|
isLoaded: false,
|
8631
8193
|
|
8194
|
+
/**
|
8195
|
+
The relationship which manages this array.
|
8196
|
+
|
8197
|
+
@property {DS.Model} owner
|
8198
|
+
@private
|
8199
|
+
*/
|
8200
|
+
|
8201
|
+
relationship: null,
|
8202
|
+
|
8203
|
+
|
8632
8204
|
/**
|
8633
8205
|
Used for async `hasMany` arrays
|
8634
8206
|
to keep track of when they will resolve.
|
@@ -8659,99 +8231,14 @@ define("ember-data/system/record_arrays/many_array",
|
|
8659
8231
|
}
|
8660
8232
|
},
|
8661
8233
|
|
8662
|
-
|
8663
|
-
|
8664
|
-
|
8665
|
-
|
8666
|
-
|
8667
|
-
var records = get(this, 'content');
|
8668
|
-
var store = get(this, 'store');
|
8669
|
-
var owner = get(this, 'owner');
|
8670
|
-
|
8671
|
-
var unloadedRecords = records.filterBy('isEmpty', true);
|
8672
|
-
store.scheduleFetchMany(unloadedRecords, owner);
|
8673
|
-
},
|
8674
|
-
|
8675
|
-
// Overrides Ember.Array's replace method to implement
|
8676
|
-
replaceContent: function(index, removed, added) {
|
8677
|
-
// Map the array of record objects into an array of client ids.
|
8678
|
-
added = map(added, function(record) {
|
8679
|
-
Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.type.typeKey + "' allowed)", !this.type || record instanceof this.type);
|
8680
|
-
return record;
|
8681
|
-
}, this);
|
8682
|
-
|
8683
|
-
this._super(index, removed, added);
|
8684
|
-
},
|
8685
|
-
|
8686
|
-
arrangedContentDidChange: function() {
|
8687
|
-
Ember.run.once(this, 'fetch');
|
8688
|
-
},
|
8689
|
-
|
8690
|
-
arrayContentWillChange: function(index, removed, added) {
|
8691
|
-
var owner = get(this, 'owner');
|
8692
|
-
var name = get(this, 'name');
|
8693
|
-
|
8694
|
-
if (!owner._suspendedRelationships) {
|
8695
|
-
// This code is the first half of code that continues inside
|
8696
|
-
// of arrayContentDidChange. It gets or creates a change from
|
8697
|
-
// the child object, adds the current owner as the old
|
8698
|
-
// parent if this is the first time the object was removed
|
8699
|
-
// from a ManyArray, and sets `newParent` to null.
|
8700
|
-
//
|
8701
|
-
// Later, if the object is added to another ManyArray,
|
8702
|
-
// the `arrayContentDidChange` will set `newParent` on
|
8703
|
-
// the change.
|
8704
|
-
for (var i=index; i<index+removed; i++) {
|
8705
|
-
var record = get(this, 'content').objectAt(i);
|
8706
|
-
|
8707
|
-
var change = RelationshipChange.createChange(owner, record, get(this, 'store'), {
|
8708
|
-
parentType: owner.constructor,
|
8709
|
-
changeType: "remove",
|
8710
|
-
kind: "hasMany",
|
8711
|
-
key: name
|
8712
|
-
});
|
8713
|
-
|
8714
|
-
this._changesToSync.add(change);
|
8715
|
-
}
|
8234
|
+
replaceContent: function(idx, amt, objects){
|
8235
|
+
var records;
|
8236
|
+
if (amt > 0){
|
8237
|
+
records = get(this, 'content').slice(idx, idx+amt);
|
8238
|
+
this.get('relationship').removeRecords(records);
|
8716
8239
|
}
|
8717
|
-
|
8718
|
-
|
8719
|
-
},
|
8720
|
-
|
8721
|
-
arrayContentDidChange: function(index, removed, added) {
|
8722
|
-
this._super.apply(this, arguments);
|
8723
|
-
|
8724
|
-
var owner = get(this, 'owner');
|
8725
|
-
var name = get(this, 'name');
|
8726
|
-
var store = get(this, 'store');
|
8727
|
-
|
8728
|
-
if (!owner._suspendedRelationships) {
|
8729
|
-
// This code is the second half of code that started in
|
8730
|
-
// `arrayContentWillChange`. It gets or creates a change
|
8731
|
-
// from the child object, and adds the current owner as
|
8732
|
-
// the new parent.
|
8733
|
-
for (var i=index; i<index+added; i++) {
|
8734
|
-
var record = get(this, 'content').objectAt(i);
|
8735
|
-
|
8736
|
-
var change = RelationshipChange.createChange(owner, record, store, {
|
8737
|
-
parentType: owner.constructor,
|
8738
|
-
changeType: "add",
|
8739
|
-
kind:"hasMany",
|
8740
|
-
key: name
|
8741
|
-
});
|
8742
|
-
change.hasManyName = name;
|
8743
|
-
|
8744
|
-
this._changesToSync.add(change);
|
8745
|
-
}
|
8746
|
-
|
8747
|
-
// We wait until the array has finished being
|
8748
|
-
// mutated before syncing the OneToManyChanges created
|
8749
|
-
// in arrayContentWillChange, so that the array
|
8750
|
-
// membership test in the sync() logic operates
|
8751
|
-
// on the final results.
|
8752
|
-
this._changesToSync.forEach(sync);
|
8753
|
-
|
8754
|
-
this._changesToSync.clear();
|
8240
|
+
if (objects){
|
8241
|
+
this.get('relationship').addRecords(objects, idx);
|
8755
8242
|
}
|
8756
8243
|
},
|
8757
8244
|
|
@@ -8764,8 +8251,7 @@ define("ember-data/system/record_arrays/many_array",
|
|
8764
8251
|
@return {DS.Model} record
|
8765
8252
|
*/
|
8766
8253
|
createRecord: function(hash) {
|
8767
|
-
var
|
8768
|
-
var store = get(owner, 'store');
|
8254
|
+
var store = get(this, 'store');
|
8769
8255
|
var type = get(this, 'type');
|
8770
8256
|
var record;
|
8771
8257
|
|
@@ -8779,7 +8265,7 @@ define("ember-data/system/record_arrays/many_array",
|
|
8779
8265
|
});
|
8780
8266
|
});
|
8781
8267
|
define("ember-data/system/record_arrays/record_array",
|
8782
|
-
["ember-data/system/
|
8268
|
+
["ember-data/system/promise_proxies","exports"],
|
8783
8269
|
function(__dependency1__, __exports__) {
|
8784
8270
|
"use strict";
|
8785
8271
|
/**
|
@@ -8788,7 +8274,6 @@ define("ember-data/system/record_arrays/record_array",
|
|
8788
8274
|
|
8789
8275
|
var PromiseArray = __dependency1__.PromiseArray;
|
8790
8276
|
var get = Ember.get;
|
8791
|
-
var set = Ember.set;
|
8792
8277
|
|
8793
8278
|
/**
|
8794
8279
|
A record array is an array that contains records of a certain type. The record
|
@@ -8908,9 +8393,17 @@ define("ember-data/system/record_arrays/record_array",
|
|
8908
8393
|
@method addRecord
|
8909
8394
|
@private
|
8910
8395
|
@param {DS.Model} record
|
8396
|
+
@param {DS.Model} an optional index to insert at
|
8911
8397
|
*/
|
8912
|
-
addRecord: function(record) {
|
8913
|
-
get(this, 'content')
|
8398
|
+
addRecord: function(record, idx) {
|
8399
|
+
var content = get(this, 'content');
|
8400
|
+
if (idx === undefined) {
|
8401
|
+
content.addObject(record);
|
8402
|
+
} else {
|
8403
|
+
if (!content.contains(record)) {
|
8404
|
+
content.insertAt(idx, record);
|
8405
|
+
}
|
8406
|
+
}
|
8914
8407
|
},
|
8915
8408
|
|
8916
8409
|
/**
|
@@ -9012,14 +8505,7 @@ define("ember-data/system/relationship-meta",
|
|
9012
8505
|
};
|
9013
8506
|
}
|
9014
8507
|
|
9015
|
-
__exports__.relationshipFromMeta = relationshipFromMeta;
|
9016
|
-
var meta = Ember.meta(record);
|
9017
|
-
var desc = meta.descs[relationshipName];
|
9018
|
-
|
9019
|
-
return desc && !desc._meta.options.async;
|
9020
|
-
}
|
9021
|
-
|
9022
|
-
__exports__.isSyncRelationship = isSyncRelationship;
|
8508
|
+
__exports__.relationshipFromMeta = relationshipFromMeta;
|
9023
8509
|
});
|
9024
8510
|
define("ember-data/system/relationships",
|
9025
8511
|
["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],
|
@@ -9037,65 +8523,11 @@ define("ember-data/system/relationships",
|
|
9037
8523
|
__exports__.hasMany = hasMany;
|
9038
8524
|
});
|
9039
8525
|
define("ember-data/system/relationships/belongs_to",
|
9040
|
-
["ember-data/system/model","
|
9041
|
-
function(__dependency1__,
|
8526
|
+
["ember-data/system/model","exports"],
|
8527
|
+
function(__dependency1__, __exports__) {
|
9042
8528
|
"use strict";
|
9043
|
-
var get = Ember.get;
|
9044
|
-
var set = Ember.set;
|
9045
|
-
var isNone = Ember.isNone;
|
9046
|
-
var Promise = Ember.RSVP.Promise;
|
9047
|
-
|
9048
8529
|
var Model = __dependency1__.Model;
|
9049
|
-
var PromiseObject = __dependency2__.PromiseObject;
|
9050
|
-
var RelationshipChange = __dependency3__.RelationshipChange;
|
9051
|
-
var relationshipFromMeta = __dependency4__.relationshipFromMeta;
|
9052
|
-
var typeForRelationshipMeta = __dependency4__.typeForRelationshipMeta;
|
9053
|
-
var isSyncRelationship = __dependency4__.isSyncRelationship;
|
9054
|
-
|
9055
|
-
/**
|
9056
|
-
@module ember-data
|
9057
|
-
*/
|
9058
8530
|
|
9059
|
-
function asyncBelongsTo(type, options, meta) {
|
9060
|
-
return Ember.computed('data', function(key, value) {
|
9061
|
-
var data = get(this, 'data');
|
9062
|
-
var store = get(this, 'store');
|
9063
|
-
var promiseLabel = "DS: Async belongsTo " + this + " : " + key;
|
9064
|
-
var promise;
|
9065
|
-
|
9066
|
-
meta.key = key;
|
9067
|
-
|
9068
|
-
if (arguments.length === 2) {
|
9069
|
-
Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeForRelationshipMeta(store, meta));
|
9070
|
-
return value === undefined ? null : PromiseObject.create({
|
9071
|
-
promise: Promise.cast(value, promiseLabel)
|
9072
|
-
});
|
9073
|
-
}
|
9074
|
-
|
9075
|
-
var link = data.links && data.links[key];
|
9076
|
-
var belongsTo = data[key];
|
9077
|
-
|
9078
|
-
if (!isNone(belongsTo)) {
|
9079
|
-
var inverse = this.constructor.inverseFor(key);
|
9080
|
-
//but for now only in the oneToOne case
|
9081
|
-
if (inverse && inverse.kind === 'belongsTo'){
|
9082
|
-
set(belongsTo, inverse.name, this);
|
9083
|
-
}
|
9084
|
-
//TODO(Igor) after OR doesn't seem that will be called
|
9085
|
-
promise = store.findById(belongsTo.constructor, belongsTo.get('id')) || Promise.cast(belongsTo, promiseLabel);
|
9086
|
-
return PromiseObject.create({
|
9087
|
-
promise: promise
|
9088
|
-
});
|
9089
|
-
} else if (link) {
|
9090
|
-
promise = store.findBelongsTo(this, link, relationshipFromMeta(store, meta));
|
9091
|
-
return PromiseObject.create({
|
9092
|
-
promise: promise
|
9093
|
-
});
|
9094
|
-
} else {
|
9095
|
-
return null;
|
9096
|
-
}
|
9097
|
-
}).meta(meta);
|
9098
|
-
}
|
9099
8531
|
|
9100
8532
|
/**
|
9101
8533
|
`DS.belongsTo` is used to define One-To-One and One-To-Many
|
@@ -9162,33 +8594,15 @@ define("ember-data/system/relationships/belongs_to",
|
|
9162
8594
|
key: null
|
9163
8595
|
};
|
9164
8596
|
|
9165
|
-
|
9166
|
-
|
9167
|
-
|
9168
|
-
|
9169
|
-
|
9170
|
-
|
9171
|
-
var store = get(this, 'store');
|
9172
|
-
var belongsTo, typeClass;
|
9173
|
-
|
9174
|
-
if (typeof type === 'string') {
|
9175
|
-
typeClass = store.modelFor(type);
|
9176
|
-
} else {
|
9177
|
-
typeClass = type;
|
9178
|
-
}
|
9179
|
-
|
9180
|
-
if (arguments.length === 2) {
|
9181
|
-
Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeClass);
|
9182
|
-
return value === undefined ? null : value;
|
8597
|
+
return Ember.computed(function(key, value) {
|
8598
|
+
if (arguments.length>1) {
|
8599
|
+
if ( value === undefined ) {
|
8600
|
+
value = null;
|
8601
|
+
}
|
8602
|
+
this._relationships[key].setRecord(value);
|
9183
8603
|
}
|
9184
8604
|
|
9185
|
-
|
9186
|
-
|
9187
|
-
if (isNone(belongsTo)) { return null; }
|
9188
|
-
|
9189
|
-
store.findById(belongsTo.constructor, belongsTo.get('id'));
|
9190
|
-
|
9191
|
-
return belongsTo;
|
8605
|
+
return this._relationships[key].getRecord();
|
9192
8606
|
}).meta(meta);
|
9193
8607
|
}
|
9194
8608
|
|
@@ -9200,72 +8614,26 @@ define("ember-data/system/relationships/belongs_to",
|
|
9200
8614
|
@namespace DS
|
9201
8615
|
*/
|
9202
8616
|
Model.reopen({
|
8617
|
+
notifyBelongsToAdded: function(key, relationship) {
|
8618
|
+
this.notifyPropertyChange(key);
|
8619
|
+
},
|
9203
8620
|
|
9204
|
-
|
9205
|
-
|
9206
|
-
|
9207
|
-
@static
|
9208
|
-
@param record
|
9209
|
-
@param key
|
9210
|
-
*/
|
9211
|
-
belongsToWillChange: Ember.beforeObserver(function(record, key) {
|
9212
|
-
if (get(record, 'isLoaded') && isSyncRelationship(record, key)) {
|
9213
|
-
var oldParent = get(record, key);
|
9214
|
-
|
9215
|
-
if (oldParent) {
|
9216
|
-
var store = get(record, 'store');
|
9217
|
-
var change = RelationshipChange.createChange(record, oldParent, store, {
|
9218
|
-
key: key,
|
9219
|
-
kind: 'belongsTo',
|
9220
|
-
changeType: 'remove'
|
9221
|
-
});
|
9222
|
-
|
9223
|
-
change.sync();
|
9224
|
-
this._changesToSync[key] = change;
|
9225
|
-
}
|
9226
|
-
}
|
9227
|
-
}),
|
9228
|
-
|
9229
|
-
/**
|
9230
|
-
@method belongsToDidChange
|
9231
|
-
@private
|
9232
|
-
@static
|
9233
|
-
@param record
|
9234
|
-
@param key
|
9235
|
-
*/
|
9236
|
-
belongsToDidChange: Ember.immediateObserver(function(record, key) {
|
9237
|
-
if (get(record, 'isLoaded')) {
|
9238
|
-
var newParent = get(record, key);
|
9239
|
-
|
9240
|
-
if (newParent) {
|
9241
|
-
var store = get(record, 'store');
|
9242
|
-
var change = RelationshipChange.createChange(record, newParent, store, {
|
9243
|
-
key: key,
|
9244
|
-
kind: 'belongsTo',
|
9245
|
-
changeType: 'add'
|
9246
|
-
});
|
9247
|
-
|
9248
|
-
change.sync();
|
9249
|
-
}
|
9250
|
-
}
|
9251
|
-
|
9252
|
-
delete this._changesToSync[key];
|
9253
|
-
})
|
8621
|
+
notifyBelongsToRemoved: function(key) {
|
8622
|
+
this.notifyPropertyChange(key);
|
8623
|
+
}
|
9254
8624
|
});
|
9255
8625
|
|
9256
8626
|
__exports__["default"] = belongsTo;
|
9257
8627
|
});
|
9258
8628
|
define("ember-data/system/relationships/ext",
|
9259
|
-
["ember-
|
9260
|
-
function(__dependency1__, __dependency2__
|
8629
|
+
["ember-data/system/relationship-meta","ember-data/system/model"],
|
8630
|
+
function(__dependency1__, __dependency2__) {
|
9261
8631
|
"use strict";
|
9262
|
-
var
|
9263
|
-
var
|
9264
|
-
var
|
9265
|
-
var Model = __dependency3__.Model;
|
8632
|
+
var typeForRelationshipMeta = __dependency1__.typeForRelationshipMeta;
|
8633
|
+
var relationshipFromMeta = __dependency1__.relationshipFromMeta;
|
8634
|
+
var Model = __dependency2__.Model;
|
9266
8635
|
|
9267
8636
|
var get = Ember.get;
|
9268
|
-
var set = Ember.set;
|
9269
8637
|
|
9270
8638
|
/**
|
9271
8639
|
@module ember-data
|
@@ -9317,11 +8685,6 @@ define("ember-data/system/relationships/ext",
|
|
9317
8685
|
// the computed property.
|
9318
8686
|
var meta = value.meta();
|
9319
8687
|
|
9320
|
-
if (meta.isRelationship && meta.kind === 'belongsTo') {
|
9321
|
-
Ember.addObserver(proto, key, null, 'belongsToDidChange');
|
9322
|
-
Ember.addBeforeObserver(proto, key, null, 'belongsToWillChange');
|
9323
|
-
}
|
9324
|
-
|
9325
8688
|
meta.parentType = proto.constructor;
|
9326
8689
|
}
|
9327
8690
|
}
|
@@ -9703,7 +9066,28 @@ define("ember-data/system/relationships/ext",
|
|
9703
9066
|
get(this, 'relatedTypes').forEach(function(type) {
|
9704
9067
|
callback.call(binding, type);
|
9705
9068
|
});
|
9069
|
+
},
|
9070
|
+
|
9071
|
+
determineRelationshipType: function(knownSide) {
|
9072
|
+
var knownKey = knownSide.key;
|
9073
|
+
var knownKind = knownSide.kind;
|
9074
|
+
var inverse = this.inverseFor(knownKey);
|
9075
|
+
var key, otherKind;
|
9076
|
+
|
9077
|
+
if (!inverse) {
|
9078
|
+
return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
|
9079
|
+
}
|
9080
|
+
|
9081
|
+
key = inverse.name;
|
9082
|
+
otherKind = inverse.kind;
|
9083
|
+
|
9084
|
+
if (otherKind === 'belongsTo') {
|
9085
|
+
return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
|
9086
|
+
} else {
|
9087
|
+
return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
|
9088
|
+
}
|
9706
9089
|
}
|
9090
|
+
|
9707
9091
|
});
|
9708
9092
|
|
9709
9093
|
Model.reopen({
|
@@ -9718,125 +9102,27 @@ define("ember-data/system/relationships/ext",
|
|
9718
9102
|
*/
|
9719
9103
|
eachRelationship: function(callback, binding) {
|
9720
9104
|
this.constructor.eachRelationship(callback, binding);
|
9721
|
-
}
|
9722
|
-
});
|
9723
|
-
});
|
9724
|
-
define("ember-data/system/relationships/has_many",
|
9725
|
-
["ember-data/system/store","ember-data/system/relationship-meta","exports"],
|
9726
|
-
function(__dependency1__, __dependency2__, __exports__) {
|
9727
|
-
"use strict";
|
9728
|
-
/**
|
9729
|
-
@module ember-data
|
9730
|
-
*/
|
9731
|
-
|
9732
|
-
var PromiseArray = __dependency1__.PromiseArray;
|
9733
|
-
|
9734
|
-
var relationshipFromMeta = __dependency2__.relationshipFromMeta;
|
9735
|
-
var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
|
9736
|
-
|
9737
|
-
var get = Ember.get;
|
9738
|
-
var set = Ember.set;
|
9739
|
-
var setProperties = Ember.setProperties;
|
9740
|
-
var map = Ember.EnumerableUtils.map;
|
9741
|
-
|
9742
|
-
/**
|
9743
|
-
Returns a computed property that synchronously returns a ManyArray for
|
9744
|
-
this relationship. If not all of the records in this relationship are
|
9745
|
-
loaded, it will raise an exception.
|
9746
|
-
*/
|
9747
|
-
|
9748
|
-
function syncHasMany(type, options, meta) {
|
9749
|
-
return Ember.computed('data', function(key) {
|
9750
|
-
return buildRelationship(this, key, options, function(store, data) {
|
9751
|
-
// Configure the metadata for the computed property to contain
|
9752
|
-
// the key.
|
9753
|
-
meta.key = key;
|
9754
|
-
|
9755
|
-
var records = data[key];
|
9105
|
+
},
|
9756
9106
|
|
9757
|
-
|
9107
|
+
relationshipFor: function(name) {
|
9108
|
+
return get(this.constructor, 'relationshipsByName').get(name);
|
9109
|
+
},
|
9758
9110
|
|
9759
|
-
|
9760
|
-
|
9761
|
-
}
|
9762
|
-
}
|
9111
|
+
inverseFor: function(key) {
|
9112
|
+
return this.constructor.inverseFor(key);
|
9113
|
+
}
|
9763
9114
|
|
9115
|
+
});
|
9116
|
+
});
|
9117
|
+
define("ember-data/system/relationships/has_many",
|
9118
|
+
["ember-data/system/model","exports"],
|
9119
|
+
function(__dependency1__, __exports__) {
|
9120
|
+
"use strict";
|
9764
9121
|
/**
|
9765
|
-
|
9766
|
-
ManyArray.
|
9767
|
-
*/
|
9768
|
-
|
9769
|
-
function asyncHasMany(type, options, meta) {
|
9770
|
-
return Ember.computed('data', function(key) {
|
9771
|
-
// Configure the metadata for the computed property to contain
|
9772
|
-
// the key.
|
9773
|
-
meta.key = key;
|
9774
|
-
|
9775
|
-
var relationship = buildRelationship(this, key, options, function(store, data) {
|
9776
|
-
var link = data.links && data.links[key];
|
9777
|
-
var rel;
|
9778
|
-
var promiseLabel = "DS: Async hasMany " + this + " : " + key;
|
9779
|
-
var resolver = Ember.RSVP.defer(promiseLabel);
|
9780
|
-
|
9781
|
-
if (link) {
|
9782
|
-
rel = store.findHasMany(this, link, relationshipFromMeta(store, meta), resolver);
|
9783
|
-
} else {
|
9784
|
-
|
9785
|
-
//This is a temporary workaround for setting owner on the relationship
|
9786
|
-
//until single source of truth lands. It only works for OneToMany atm
|
9787
|
-
var records = data[key];
|
9788
|
-
var inverse = this.constructor.inverseFor(key);
|
9789
|
-
var owner = this;
|
9790
|
-
if (inverse && records) {
|
9791
|
-
if (inverse.kind === 'belongsTo'){
|
9792
|
-
map(records, function(record){
|
9793
|
-
set(record, inverse.name, owner);
|
9794
|
-
});
|
9795
|
-
}
|
9796
|
-
}
|
9797
|
-
|
9798
|
-
rel = store.findMany(owner, data[key], typeForRelationshipMeta(store, meta), resolver);
|
9799
|
-
}
|
9800
|
-
|
9801
|
-
// Cache the promise so we can use it when we come back and don't
|
9802
|
-
// need to rebuild the relationship.
|
9803
|
-
set(rel, 'promise', resolver.promise);
|
9804
|
-
|
9805
|
-
return rel;
|
9806
|
-
});
|
9807
|
-
|
9808
|
-
var promise = relationship.get('promise').then(function() {
|
9809
|
-
return relationship;
|
9810
|
-
}, null, "DS: Async hasMany records received");
|
9811
|
-
|
9812
|
-
return PromiseArray.create({
|
9813
|
-
promise: promise
|
9814
|
-
});
|
9815
|
-
}).meta(meta).readOnly();
|
9816
|
-
}
|
9817
|
-
|
9818
|
-
/*
|
9819
|
-
Builds the ManyArray for a relationship using the provided callback,
|
9820
|
-
but only if it had not been created previously. After building, it
|
9821
|
-
sets some metadata on the created ManyArray, such as the record which
|
9822
|
-
owns it and the name of the relationship.
|
9122
|
+
@module ember-data
|
9823
9123
|
*/
|
9824
|
-
function buildRelationship(record, key, options, callback) {
|
9825
|
-
var rels = record._relationships;
|
9826
9124
|
|
9827
|
-
|
9828
|
-
|
9829
|
-
var data = get(record, 'data');
|
9830
|
-
var store = get(record, 'store');
|
9831
|
-
|
9832
|
-
var relationship = rels[key] = callback.call(record, store, data);
|
9833
|
-
|
9834
|
-
return setProperties(relationship, {
|
9835
|
-
owner: record,
|
9836
|
-
name: key,
|
9837
|
-
isPolymorphic: options.polymorphic
|
9838
|
-
});
|
9839
|
-
}
|
9125
|
+
var Model = __dependency1__.Model;
|
9840
9126
|
|
9841
9127
|
/**
|
9842
9128
|
`DS.hasMany` is used to define One-To-Many and Many-To-Many
|
@@ -9936,18 +9222,317 @@ define("ember-data/system/relationships/has_many",
|
|
9936
9222
|
key: null
|
9937
9223
|
};
|
9938
9224
|
|
9939
|
-
|
9940
|
-
|
9225
|
+
return Ember.computed(function(key) {
|
9226
|
+
var relationship = this._relationships[key];
|
9227
|
+
return relationship.getRecords();
|
9228
|
+
}).meta(meta).readOnly();
|
9229
|
+
}
|
9230
|
+
|
9231
|
+
Model.reopen({
|
9232
|
+
notifyHasManyAdded: function(key, record, idx) {
|
9233
|
+
var relationship = this._relationships[key];
|
9234
|
+
var manyArray = relationship.manyArray;
|
9235
|
+
manyArray.addRecord(record, idx);
|
9236
|
+
//We need to notifyPropertyChange in the adding case because we need to make sure
|
9237
|
+
//we fetch the newly added record in case it is unloaded
|
9238
|
+
//TODO(Igor): Consider whether we could do this only if the record state is unloaded
|
9239
|
+
this.notifyPropertyChange(key);
|
9240
|
+
},
|
9241
|
+
|
9242
|
+
notifyHasManyRemoved: function(key, record) {
|
9243
|
+
var relationship = this._relationships[key];
|
9244
|
+
var manyArray = relationship.manyArray;
|
9245
|
+
manyArray.removeRecord(record);
|
9246
|
+
}
|
9247
|
+
});
|
9248
|
+
|
9249
|
+
|
9250
|
+
__exports__["default"] = hasMany;
|
9251
|
+
});
|
9252
|
+
define("ember-data/system/relationships/relationship",
|
9253
|
+
["ember-data/system/promise_proxies","exports"],
|
9254
|
+
function(__dependency1__, __exports__) {
|
9255
|
+
"use strict";
|
9256
|
+
var PromiseArray = __dependency1__.PromiseArray;
|
9257
|
+
var PromiseObject = __dependency1__.PromiseObject;
|
9258
|
+
|
9259
|
+
var Relationship = function(store, record, inverseKey, relationshipMeta) {
|
9260
|
+
this.members = new Ember.OrderedSet();
|
9261
|
+
this.store = store;
|
9262
|
+
this.key = relationshipMeta.key;
|
9263
|
+
this.inverseKey = inverseKey;
|
9264
|
+
this.record = record;
|
9265
|
+
this.key = relationshipMeta.key;
|
9266
|
+
this.isAsync = relationshipMeta.options.async;
|
9267
|
+
this.relationshipMeta = relationshipMeta;
|
9268
|
+
};
|
9269
|
+
|
9270
|
+
Relationship.prototype = {
|
9271
|
+
constructor: Relationship,
|
9272
|
+
hasFetchedLink: false,
|
9273
|
+
|
9274
|
+
destroy: Ember.K,
|
9275
|
+
|
9276
|
+
clear: function() {
|
9277
|
+
this.members.forEach(function(member) {
|
9278
|
+
this.removeRecord(member);
|
9279
|
+
}, this);
|
9280
|
+
},
|
9281
|
+
|
9282
|
+
removeRecords: function(records){
|
9283
|
+
var that = this;
|
9284
|
+
records.forEach(function(record){
|
9285
|
+
that.removeRecord(record);
|
9286
|
+
});
|
9287
|
+
},
|
9288
|
+
|
9289
|
+
addRecords: function(records, idx){
|
9290
|
+
var that = this;
|
9291
|
+
records.forEach(function(record){
|
9292
|
+
that.addRecord(record, idx);
|
9293
|
+
if (idx !== undefined) {
|
9294
|
+
idx++;
|
9295
|
+
}
|
9296
|
+
});
|
9297
|
+
},
|
9298
|
+
|
9299
|
+
|
9300
|
+
addRecord: function(record, idx) {
|
9301
|
+
if (!this.members.has(record)) {
|
9302
|
+
this.members.add(record);
|
9303
|
+
this.notifyRecordRelationshipAdded(record, idx);
|
9304
|
+
if (this.inverseKey) {
|
9305
|
+
record._relationships[this.inverseKey].addRecord(this.record);
|
9306
|
+
}
|
9307
|
+
this.record.updateRecordArrays();
|
9308
|
+
}
|
9309
|
+
},
|
9310
|
+
|
9311
|
+
removeRecord: function(record) {
|
9312
|
+
if (this.members.has(record)) {
|
9313
|
+
this.members.remove(record);
|
9314
|
+
this.notifyRecordRelationshipRemoved(record);
|
9315
|
+
if (this.inverseKey) {
|
9316
|
+
var inverseRelationship = record._relationships[this.inverseKey];
|
9317
|
+
//Need to check for existence, as the record might unloading at the moment
|
9318
|
+
if (inverseRelationship) {
|
9319
|
+
inverseRelationship.removeRecord(this.record);
|
9320
|
+
}
|
9321
|
+
}
|
9322
|
+
this.record.updateRecordArrays();
|
9323
|
+
}
|
9324
|
+
},
|
9325
|
+
|
9326
|
+
updateLink: function(link) {
|
9327
|
+
if (link !== this.link) {
|
9328
|
+
this.link = link;
|
9329
|
+
this.hasFetchedLink = false;
|
9330
|
+
this.record.notifyPropertyChange(this.key);
|
9331
|
+
}
|
9332
|
+
},
|
9333
|
+
|
9334
|
+
updateRecordsFromAdapter: function(records) {
|
9335
|
+
//TODO Once we have adapter support, we need to handle updated and canonical changes
|
9336
|
+
this.computeChanges(records);
|
9337
|
+
}
|
9338
|
+
};
|
9339
|
+
|
9340
|
+
var ManyRelationship = function(store, record, inverseKey, relationshipMeta) {
|
9341
|
+
this._super$constructor(store, record, inverseKey, relationshipMeta);
|
9342
|
+
this.belongsToType = relationshipMeta.type;
|
9343
|
+
this.manyArray = store.recordArrayManager.createManyArray(this.belongsToType, Ember.A());
|
9344
|
+
this.manyArray.relationship = this;
|
9345
|
+
this.isPolymorphic = relationshipMeta.options.polymorphic;
|
9346
|
+
this.manyArray.isPolymorphic = this.isPolymorphic;
|
9347
|
+
};
|
9348
|
+
|
9349
|
+
ManyRelationship.prototype = Object.create(Relationship.prototype);
|
9350
|
+
ManyRelationship.prototype.constructor = ManyRelationship;
|
9351
|
+
ManyRelationship.prototype._super$constructor = Relationship;
|
9352
|
+
|
9353
|
+
ManyRelationship.prototype.destroy = function() {
|
9354
|
+
this.manyArray.destroy();
|
9355
|
+
};
|
9356
|
+
|
9357
|
+
ManyRelationship.prototype.notifyRecordRelationshipAdded = function(record, idx) {
|
9358
|
+
Ember.assert("You cannot add '" + record.constructor.typeKey + "' records to this relationship (only '" + this.belongsToType.typeKey + "' allowed)", !this.belongsToType || record instanceof this.belongsToType);
|
9359
|
+
this.record.notifyHasManyAdded(this.key, record, idx);
|
9360
|
+
};
|
9361
|
+
|
9362
|
+
ManyRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
|
9363
|
+
this.record.notifyHasManyRemoved(this.key, record);
|
9364
|
+
};
|
9365
|
+
|
9366
|
+
ManyRelationship.prototype.computeChanges = function(records) {
|
9367
|
+
var members = this.members;
|
9368
|
+
|
9369
|
+
records = setForArray(records);
|
9370
|
+
|
9371
|
+
members.forEach(function(member) {
|
9372
|
+
if (records.has(member)) return;
|
9373
|
+
|
9374
|
+
this.removeRecord(member);
|
9375
|
+
}, this);
|
9376
|
+
|
9377
|
+
var hasManyArray = this.manyArray;
|
9378
|
+
|
9379
|
+
records.forEach(function(record, index) {
|
9380
|
+
//Need to preserve the order of incoming records
|
9381
|
+
if (hasManyArray.objectAt(index) === record ) return;
|
9382
|
+
|
9383
|
+
this.removeRecord(record);
|
9384
|
+
this.addRecord(record, index);
|
9385
|
+
}, this);
|
9386
|
+
};
|
9387
|
+
|
9388
|
+
|
9389
|
+
ManyRelationship.prototype.getRecords = function() {
|
9390
|
+
if (this.isAsync) {
|
9391
|
+
var self = this;
|
9392
|
+
var promise;
|
9393
|
+
if (this.link && !this.hasFetchedLink) {
|
9394
|
+
promise = this.store.findHasMany(this.record, this.link, this.relationshipMeta).then(function(records){
|
9395
|
+
self.updateRecordsFromAdapter(records);
|
9396
|
+
self.hasFetchedLink = true;
|
9397
|
+
//TODO(Igor) try to abstract the isLoaded part
|
9398
|
+
self.manyArray.set('isLoaded', true);
|
9399
|
+
return self.manyArray;
|
9400
|
+
});
|
9401
|
+
} else {
|
9402
|
+
var manyArray = this.manyArray;
|
9403
|
+
promise = this.store.findMany(manyArray.toArray()).then(function(){
|
9404
|
+
self.manyArray.set('isLoaded', true);
|
9405
|
+
return manyArray;
|
9406
|
+
});
|
9407
|
+
}
|
9408
|
+
return PromiseArray.create({
|
9409
|
+
promise: promise
|
9410
|
+
});
|
9411
|
+
} else {
|
9412
|
+
Ember.assert("You looked up the '" + this.key + "' relationship on a '" + this.record.constructor.typeKey + "' with id " + this.record.get('id') + " but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)", this.manyArray.isEvery('isEmpty', false));
|
9413
|
+
|
9414
|
+
this.manyArray.set('isLoaded', true);
|
9415
|
+
return this.manyArray;
|
9416
|
+
}
|
9417
|
+
};
|
9418
|
+
|
9419
|
+
var BelongsToRelationship = function(store, record, inverseKey, relationshipMeta) {
|
9420
|
+
this._super$constructor(store, record, inverseKey, relationshipMeta);
|
9421
|
+
this.members.add(record);
|
9422
|
+
this.record = record;
|
9423
|
+
this.key = relationshipMeta.key;
|
9424
|
+
this.inverseKey = inverseKey;
|
9425
|
+
this.inverseRecord = null;
|
9426
|
+
};
|
9427
|
+
|
9428
|
+
BelongsToRelationship.prototype = Object.create(Relationship.prototype);
|
9429
|
+
BelongsToRelationship.prototype.constructor = BelongsToRelationship;
|
9430
|
+
BelongsToRelationship.prototype._super$constructor = Relationship;
|
9431
|
+
|
9432
|
+
BelongsToRelationship.prototype.setRecord = function(newRecord) {
|
9433
|
+
if (newRecord) {
|
9434
|
+
this.addRecord(newRecord);
|
9435
|
+
} else if (this.inverseRecord) {
|
9436
|
+
this.removeRecord(this.inverseRecord);
|
9437
|
+
}
|
9438
|
+
};
|
9439
|
+
|
9440
|
+
BelongsToRelationship.prototype._super$addRecord = Relationship.prototype.addRecord;
|
9441
|
+
BelongsToRelationship.prototype.addRecord = function(newRecord) {
|
9442
|
+
if (this.members.has(newRecord)){ return;}
|
9443
|
+
var type = this.relationshipMeta.type;
|
9444
|
+
Ember.assert("You can only add a '" + type.typeKey + "' record to this relationship", newRecord instanceof type);
|
9445
|
+
|
9446
|
+
if (this.inverseRecord && this.inverseKey) {
|
9447
|
+
this.removeRecord(this.inverseRecord);
|
9448
|
+
}
|
9449
|
+
|
9450
|
+
this.inverseRecord = newRecord;
|
9451
|
+
this._super$addRecord(newRecord);
|
9452
|
+
};
|
9453
|
+
|
9454
|
+
BelongsToRelationship.prototype.notifyRecordRelationshipAdded = function(newRecord) {
|
9455
|
+
this.record.notifyBelongsToAdded(this.key, this);
|
9456
|
+
};
|
9457
|
+
|
9458
|
+
BelongsToRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
|
9459
|
+
this.record.notifyBelongsToRemoved(this.key, this);
|
9460
|
+
};
|
9461
|
+
|
9462
|
+
BelongsToRelationship.prototype._super$removeRecord = Relationship.prototype.removeRecord;
|
9463
|
+
BelongsToRelationship.prototype.removeRecord = function(record) {
|
9464
|
+
if (!this.members.has(record)){ return;}
|
9465
|
+
this._super$removeRecord(record);
|
9466
|
+
this.inverseRecord = null;
|
9467
|
+
};
|
9468
|
+
|
9469
|
+
BelongsToRelationship.prototype.currentOtherSideFor = function() {
|
9470
|
+
return this.inverseRecord;
|
9471
|
+
};
|
9472
|
+
|
9473
|
+
BelongsToRelationship.prototype.getRecord = function() {
|
9474
|
+
if (this.isAsync) {
|
9475
|
+
var promise;
|
9476
|
+
|
9477
|
+
if (this.link && !this.hasFetchedLink){
|
9478
|
+
var self = this;
|
9479
|
+
promise = this.store.findBelongsTo(this.record, this.link, this.relationshipMeta).then(function(record){
|
9480
|
+
self.addRecord(record);
|
9481
|
+
self.hasFetchedLink = true;
|
9482
|
+
return record;
|
9483
|
+
});
|
9484
|
+
} else if (this.inverseRecord) {
|
9485
|
+
promise = this.store._findByRecord(this.inverseRecord);
|
9486
|
+
} else {
|
9487
|
+
promise = Ember.RSVP.Promise.resolve(null);
|
9488
|
+
}
|
9489
|
+
|
9490
|
+
return PromiseObject.create({
|
9491
|
+
promise: promise
|
9492
|
+
});
|
9941
9493
|
} else {
|
9942
|
-
|
9494
|
+
Ember.assert("You looked up the '" + this.key + "' relationship on a '" + this.record.constructor.typeKey + "' with id " + this.record.get('id') + " but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.belongsTo({ async: true })`)", this.inverseRecord === null || !this.inverseRecord.get('isEmpty'));
|
9495
|
+
return this.inverseRecord;
|
9496
|
+
}
|
9497
|
+
};
|
9498
|
+
|
9499
|
+
function setForArray(array) {
|
9500
|
+
var set = new Ember.OrderedSet();
|
9501
|
+
|
9502
|
+
if (array) {
|
9503
|
+
for (var i=0, l=array.length; i<l; i++) {
|
9504
|
+
set.add(array[i]);
|
9505
|
+
}
|
9943
9506
|
}
|
9507
|
+
|
9508
|
+
return set;
|
9944
9509
|
}
|
9945
9510
|
|
9946
|
-
|
9511
|
+
var createRelationshipFor = function(record, relationshipMeta, store){
|
9512
|
+
var inverseKey;
|
9513
|
+
var inverse = record.constructor.inverseFor(relationshipMeta.key);
|
9514
|
+
|
9515
|
+
if (inverse) {
|
9516
|
+
inverseKey = inverse.name;
|
9517
|
+
}
|
9518
|
+
|
9519
|
+
if (relationshipMeta.kind === 'hasMany'){
|
9520
|
+
return new ManyRelationship(store, record, inverseKey, relationshipMeta);
|
9521
|
+
}
|
9522
|
+
else {
|
9523
|
+
return new BelongsToRelationship(store, record, inverseKey, relationshipMeta);
|
9524
|
+
}
|
9525
|
+
};
|
9526
|
+
|
9527
|
+
|
9528
|
+
__exports__.Relationship = Relationship;
|
9529
|
+
__exports__.ManyRelationship = ManyRelationship;
|
9530
|
+
__exports__.BelongsToRelationship = BelongsToRelationship;
|
9531
|
+
__exports__.createRelationshipFor = createRelationshipFor;
|
9947
9532
|
});
|
9948
9533
|
define("ember-data/system/store",
|
9949
|
-
["ember-data/system/adapter","ember-inflector/system/string","exports"],
|
9950
|
-
function(__dependency1__, __dependency2__, __exports__) {
|
9534
|
+
["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],
|
9535
|
+
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
9951
9536
|
"use strict";
|
9952
9537
|
/*globals Ember*/
|
9953
9538
|
/*jshint eqnull:true*/
|
@@ -9960,6 +9545,10 @@ define("ember-data/system/store",
|
|
9960
9545
|
var Adapter = __dependency1__.Adapter;
|
9961
9546
|
var singularize = __dependency2__.singularize;
|
9962
9547
|
|
9548
|
+
var promiseArray = __dependency3__.promiseArray;
|
9549
|
+
var promiseObject = __dependency3__.promiseObject;
|
9550
|
+
|
9551
|
+
|
9963
9552
|
var get = Ember.get;
|
9964
9553
|
var set = Ember.set;
|
9965
9554
|
var once = Ember.run.once;
|
@@ -9969,7 +9558,7 @@ define("ember-data/system/store",
|
|
9969
9558
|
var map = Ember.EnumerableUtils.map;
|
9970
9559
|
var Promise = Ember.RSVP.Promise;
|
9971
9560
|
var copy = Ember.copy;
|
9972
|
-
var Store,
|
9561
|
+
var Store, RecordArrayManager, Model;
|
9973
9562
|
|
9974
9563
|
var camelize = Ember.String.camelize;
|
9975
9564
|
|
@@ -10090,7 +9679,6 @@ define("ember-data/system/store",
|
|
10090
9679
|
this.recordArrayManager = RecordArrayManager.create({
|
10091
9680
|
store: this
|
10092
9681
|
});
|
10093
|
-
this._relationshipChanges = {};
|
10094
9682
|
this._pendingSave = [];
|
10095
9683
|
//Used to keep track of all the find requests that need to be coalesced
|
10096
9684
|
this._pendingFetch = Ember.Map.create();
|
@@ -10302,10 +9890,10 @@ define("ember-data/system/store",
|
|
10302
9890
|
|
10303
9891
|
---
|
10304
9892
|
|
10305
|
-
You can optionally preload specific attributes and relationships that you know of
|
9893
|
+
You can optionally `preload` specific attributes and relationships that you know of
|
10306
9894
|
by passing them as the third argument to find.
|
10307
9895
|
|
10308
|
-
For example, if your Ember route looks like `/posts/1/comments/2` and
|
9896
|
+
For example, if your Ember route looks like `/posts/1/comments/2` and your API route
|
10309
9897
|
for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment
|
10310
9898
|
without fetching the post you can pass in the post to the `find` call:
|
10311
9899
|
|
@@ -10353,6 +9941,7 @@ define("ember-data/system/store",
|
|
10353
9941
|
@method find
|
10354
9942
|
@param {String or subclass of DS.Model} type
|
10355
9943
|
@param {Object|String|Integer|null} id
|
9944
|
+
@param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
|
10356
9945
|
@return {Promise} promise
|
10357
9946
|
*/
|
10358
9947
|
find: function(type, id, preload) {
|
@@ -10378,14 +9967,20 @@ define("ember-data/system/store",
|
|
10378
9967
|
@private
|
10379
9968
|
@param {String or subclass of DS.Model} type
|
10380
9969
|
@param {String|Integer} id
|
9970
|
+
@param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
|
10381
9971
|
@return {Promise} promise
|
10382
9972
|
*/
|
10383
9973
|
findById: function(typeName, id, preload) {
|
10384
|
-
var fetchedRecord;
|
10385
9974
|
|
10386
9975
|
var type = this.modelFor(typeName);
|
10387
9976
|
var record = this.recordForId(type, id);
|
10388
9977
|
|
9978
|
+
return this._findByRecord(record, preload);
|
9979
|
+
},
|
9980
|
+
|
9981
|
+
_findByRecord: function(record, preload) {
|
9982
|
+
var fetchedRecord;
|
9983
|
+
|
10389
9984
|
if (preload) {
|
10390
9985
|
record._preloadData(preload);
|
10391
9986
|
}
|
@@ -10397,7 +9992,7 @@ define("ember-data/system/store",
|
|
10397
9992
|
fetchedRecord = record._loadingPromise;
|
10398
9993
|
}
|
10399
9994
|
|
10400
|
-
return promiseObject(fetchedRecord || record, "DS: Store#
|
9995
|
+
return promiseObject(fetchedRecord || record, "DS: Store#findByRecord " + record.typeKey + " with id: " + get(record, 'id'));
|
10401
9996
|
},
|
10402
9997
|
|
10403
9998
|
/**
|
@@ -10412,7 +10007,6 @@ define("ember-data/system/store",
|
|
10412
10007
|
*/
|
10413
10008
|
findByIds: function(type, ids) {
|
10414
10009
|
var store = this;
|
10415
|
-
var promiseLabel = "DS: Store#findByIds " + type;
|
10416
10010
|
|
10417
10011
|
return promiseArray(Ember.RSVP.all(map(ids, function(id) {
|
10418
10012
|
return store.findById(type, id);
|
@@ -10483,7 +10077,6 @@ define("ember-data/system/store",
|
|
10483
10077
|
var adapter = store.adapterFor(type);
|
10484
10078
|
var shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;
|
10485
10079
|
var records = Ember.A(recordResolverPairs).mapBy('record');
|
10486
|
-
var resolvers = Ember.A(recordResolverPairs).mapBy('resolver');
|
10487
10080
|
|
10488
10081
|
function _fetchRecord(recordResolverPair) {
|
10489
10082
|
recordResolverPair.resolver.resolve(store.fetchRecord(recordResolverPair.record));
|
@@ -10644,29 +10237,14 @@ define("ember-data/system/store",
|
|
10644
10237
|
@param {Resolver} resolver
|
10645
10238
|
@return {DS.ManyArray} records
|
10646
10239
|
*/
|
10647
|
-
findMany: function(
|
10648
|
-
var
|
10649
|
-
|
10650
|
-
|
10651
|
-
|
10652
|
-
|
10653
|
-
manyArray.loadingRecordsCount = unloadedRecords.length;
|
10654
|
-
|
10655
|
-
if (unloadedRecords.length) {
|
10656
|
-
forEach(unloadedRecords, function(record) {
|
10657
|
-
this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
|
10658
|
-
}, this);
|
10659
|
-
|
10660
|
-
resolver.resolve(this.scheduleFetchMany(unloadedRecords, owner));
|
10661
|
-
} else {
|
10662
|
-
if (resolver) { resolver.resolve(); }
|
10663
|
-
manyArray.set('isLoaded', true);
|
10664
|
-
once(manyArray, 'trigger', 'didLoad');
|
10665
|
-
}
|
10666
|
-
|
10667
|
-
return manyArray;
|
10240
|
+
findMany: function(records) {
|
10241
|
+
var store = this;
|
10242
|
+
return Promise.all( map(records, function(record) {
|
10243
|
+
return store._findByRecord(record);
|
10244
|
+
}));
|
10668
10245
|
},
|
10669
10246
|
|
10247
|
+
|
10670
10248
|
/**
|
10671
10249
|
If a relationship was originally populated by the adapter as a link
|
10672
10250
|
(as opposed to a list of IDs), this method is called when the
|
@@ -10685,15 +10263,13 @@ define("ember-data/system/store",
|
|
10685
10263
|
@param {String or subclass of DS.Model} type
|
10686
10264
|
@return {Promise} promise
|
10687
10265
|
*/
|
10688
|
-
findHasMany: function(owner, link,
|
10266
|
+
findHasMany: function(owner, link, type) {
|
10689
10267
|
var adapter = this.adapterFor(owner.constructor);
|
10690
10268
|
|
10691
10269
|
Ember.assert("You tried to load a hasMany relationship but you have no adapter (for " + owner.constructor + ")", adapter);
|
10692
10270
|
Ember.assert("You tried to load a hasMany relationship from a specified `link` in the original payload but your adapter does not implement `findHasMany`", adapter.findHasMany);
|
10693
10271
|
|
10694
|
-
|
10695
|
-
resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
|
10696
|
-
return records;
|
10272
|
+
return _findHasMany(adapter, this, owner, link, type);
|
10697
10273
|
},
|
10698
10274
|
|
10699
10275
|
/**
|
@@ -11039,6 +10615,7 @@ define("ember-data/system/store",
|
|
11039
10615
|
if (data) {
|
11040
10616
|
// normalize relationship IDs into records
|
11041
10617
|
data = normalizeRelationships(this, record.constructor, data, record);
|
10618
|
+
setupRelationships(this, record, data);
|
11042
10619
|
|
11043
10620
|
this.updateId(record, data);
|
11044
10621
|
}
|
@@ -11160,11 +10737,11 @@ define("ember-data/system/store",
|
|
11160
10737
|
var factory;
|
11161
10738
|
|
11162
10739
|
if (typeof key === 'string') {
|
11163
|
-
|
11164
|
-
|
11165
|
-
|
11166
|
-
|
11167
|
-
factory.typeKey = this._normalizeTypeKey(
|
10740
|
+
factory = this.container.lookupFactory('model:' + key);
|
10741
|
+
if (!factory) {
|
10742
|
+
throw new Ember.Error("No model was found for '" + key + "'");
|
10743
|
+
}
|
10744
|
+
factory.typeKey = factory.typeKey || this._normalizeTypeKey(key);
|
11168
10745
|
} else {
|
11169
10746
|
// A factory already supplied. Ensure it has a normalized key.
|
11170
10747
|
factory = key;
|
@@ -11242,17 +10819,30 @@ define("ember-data/system/store",
|
|
11242
10819
|
// _partial is an internal param used by `update`.
|
11243
10820
|
// If passed, it means that the data should be
|
11244
10821
|
// merged into the existing data, not replace it.
|
11245
|
-
|
11246
|
-
Ember.assert("You must include an `id` for " + typeName+ " in
|
10822
|
+
Ember.assert("Expected an object as `data` in a call to push for " + typeName + " , but was " + data, Ember.typeOf(data) === 'object');
|
10823
|
+
Ember.assert("You must include an `id` for " + typeName + " in an object passed to `push`", data.id != null);
|
11247
10824
|
|
11248
10825
|
var type = this.modelFor(typeName);
|
11249
10826
|
|
11250
|
-
//
|
10827
|
+
// If the payload contains relationships that are specified as
|
10828
|
+
// IDs, normalizeRelationships will convert them into DS.Model instances
|
10829
|
+
// (possibly unloaded) before we push the payload into the
|
10830
|
+
// store.
|
10831
|
+
|
11251
10832
|
data = normalizeRelationships(this, type, data);
|
11252
10833
|
|
10834
|
+
// Actually load the record into the store.
|
10835
|
+
|
11253
10836
|
this._load(type, data, _partial);
|
11254
10837
|
|
11255
|
-
|
10838
|
+
var record = this.recordForId(type, data.id);
|
10839
|
+
|
10840
|
+
// Now that the pushed record as well as any related records
|
10841
|
+
// are in the store, create the data structures used to track
|
10842
|
+
// relationships.
|
10843
|
+
setupRelationships(this, record, data);
|
10844
|
+
|
10845
|
+
return record;
|
11256
10846
|
},
|
11257
10847
|
|
11258
10848
|
/**
|
@@ -11387,9 +10977,14 @@ define("ember-data/system/store",
|
|
11387
10977
|
@return {Array}
|
11388
10978
|
*/
|
11389
10979
|
pushMany: function(type, datas) {
|
11390
|
-
|
11391
|
-
|
11392
|
-
|
10980
|
+
var length = datas.length;
|
10981
|
+
var result = new Array(length);
|
10982
|
+
|
10983
|
+
for (var i = 0; i < length; i++) {
|
10984
|
+
result[i] = this.push(type, datas[i]);
|
10985
|
+
}
|
10986
|
+
|
10987
|
+
return result;
|
11393
10988
|
},
|
11394
10989
|
|
11395
10990
|
/**
|
@@ -11474,59 +11069,6 @@ define("ember-data/system/store",
|
|
11474
11069
|
typeMap.records.splice(loc, 1);
|
11475
11070
|
},
|
11476
11071
|
|
11477
|
-
// ........................
|
11478
|
-
// . RELATIONSHIP CHANGES .
|
11479
|
-
// ........................
|
11480
|
-
|
11481
|
-
addRelationshipChangeFor: function(childRecord, childKey, parentRecord, parentKey, change) {
|
11482
|
-
var clientId = childRecord.clientId;
|
11483
|
-
var parentClientId = parentRecord ? parentRecord : parentRecord;
|
11484
|
-
var key = childKey + parentKey;
|
11485
|
-
var changes = this._relationshipChanges;
|
11486
|
-
|
11487
|
-
if (!(clientId in changes)) {
|
11488
|
-
changes[clientId] = {};
|
11489
|
-
}
|
11490
|
-
if (!(parentClientId in changes[clientId])) {
|
11491
|
-
changes[clientId][parentClientId] = {};
|
11492
|
-
}
|
11493
|
-
if (!(key in changes[clientId][parentClientId])) {
|
11494
|
-
changes[clientId][parentClientId][key] = {};
|
11495
|
-
}
|
11496
|
-
changes[clientId][parentClientId][key][change.changeType] = change;
|
11497
|
-
},
|
11498
|
-
|
11499
|
-
removeRelationshipChangeFor: function(clientRecord, childKey, parentRecord, parentKey, type) {
|
11500
|
-
var clientId = clientRecord.clientId;
|
11501
|
-
var parentClientId = parentRecord ? parentRecord.clientId : parentRecord;
|
11502
|
-
var changes = this._relationshipChanges;
|
11503
|
-
var key = childKey + parentKey;
|
11504
|
-
|
11505
|
-
if (!(clientId in changes) || !(parentClientId in changes[clientId]) || !(key in changes[clientId][parentClientId])){
|
11506
|
-
return;
|
11507
|
-
}
|
11508
|
-
delete changes[clientId][parentClientId][key][type];
|
11509
|
-
},
|
11510
|
-
|
11511
|
-
relationshipChangePairsFor: function(record){
|
11512
|
-
var toReturn = [];
|
11513
|
-
|
11514
|
-
if( !record ) { return toReturn; }
|
11515
|
-
|
11516
|
-
//TODO(Igor) What about the other side
|
11517
|
-
var changesObject = this._relationshipChanges[record.clientId];
|
11518
|
-
for (var objKey in changesObject){
|
11519
|
-
if (changesObject.hasOwnProperty(objKey)){
|
11520
|
-
for (var changeKey in changesObject[objKey]){
|
11521
|
-
if (changesObject[objKey].hasOwnProperty(changeKey)){
|
11522
|
-
toReturn.push(changesObject[objKey][changeKey]);
|
11523
|
-
}
|
11524
|
-
}
|
11525
|
-
}
|
11526
|
-
}
|
11527
|
-
return toReturn;
|
11528
|
-
},
|
11529
|
-
|
11530
11072
|
// ......................
|
11531
11073
|
// . PER-TYPE ADAPTERS
|
11532
11074
|
// ......................
|
@@ -11580,7 +11122,6 @@ define("ember-data/system/store",
|
|
11580
11122
|
willDestroy: function() {
|
11581
11123
|
var typeMaps = this.typeMaps;
|
11582
11124
|
var keys = Ember.keys(typeMaps);
|
11583
|
-
var store = this;
|
11584
11125
|
|
11585
11126
|
var types = map(keys, byType);
|
11586
11127
|
|
@@ -11608,30 +11149,15 @@ define("ember-data/system/store",
|
|
11608
11149
|
}
|
11609
11150
|
});
|
11610
11151
|
|
11152
|
+
|
11611
11153
|
function normalizeRelationships(store, type, data, record) {
|
11612
11154
|
type.eachRelationship(function(key, relationship) {
|
11613
|
-
// A link (usually a URL) was already provided in
|
11614
|
-
// normalized form
|
11615
|
-
if (data.links && data.links[key]) {
|
11616
|
-
if (record && relationship.options.async) { record._relationships[key] = null; }
|
11617
|
-
return;
|
11618
|
-
}
|
11619
|
-
|
11620
11155
|
var kind = relationship.kind;
|
11621
11156
|
var value = data[key];
|
11622
|
-
|
11623
|
-
if (value == null) {
|
11624
|
-
if (kind === 'hasMany' && record) {
|
11625
|
-
value = data[key] = record.get(key).toArray();
|
11626
|
-
}
|
11627
|
-
return;
|
11628
|
-
}
|
11629
|
-
|
11630
11157
|
if (kind === 'belongsTo') {
|
11631
11158
|
deserializeRecordId(store, data, key, relationship, value);
|
11632
11159
|
} else if (kind === 'hasMany') {
|
11633
11160
|
deserializeRecordIds(store, data, key, relationship, value);
|
11634
|
-
addUnsavedRecords(record, key, value);
|
11635
11161
|
}
|
11636
11162
|
});
|
11637
11163
|
|
@@ -11664,104 +11190,16 @@ define("ember-data/system/store",
|
|
11664
11190
|
}
|
11665
11191
|
|
11666
11192
|
function deserializeRecordIds(store, data, key, relationship, ids) {
|
11193
|
+
if (!Ember.isArray(ids)) {
|
11194
|
+
return;
|
11195
|
+
}
|
11667
11196
|
for (var i=0, l=ids.length; i<l; i++) {
|
11668
11197
|
deserializeRecordId(store, ids, i, relationship, ids[i]);
|
11669
11198
|
}
|
11670
11199
|
}
|
11671
11200
|
|
11672
|
-
// If there are any unsaved records that are in a hasMany they won't be
|
11673
|
-
// in the payload, so add them back in manually.
|
11674
|
-
function addUnsavedRecords(record, key, data) {
|
11675
|
-
if(record) {
|
11676
|
-
var unsavedRecords = uniqById(Ember.A(data), record.get(key).filterBy('isNew'));
|
11677
|
-
Ember.A(data).pushObjects(unsavedRecords);
|
11678
|
-
}
|
11679
|
-
}
|
11680
|
-
|
11681
|
-
function uniqById(data, records) {
|
11682
|
-
var currentIds = data.mapBy("id");
|
11683
|
-
return records.reject(function(record) {
|
11684
|
-
return Ember.A(currentIds).contains(record.id);
|
11685
|
-
});
|
11686
|
-
}
|
11687
|
-
|
11688
11201
|
// Delegation to the adapter and promise management
|
11689
|
-
/**
|
11690
|
-
A `PromiseArray` is an object that acts like both an `Ember.Array`
|
11691
|
-
and a promise. When the promise is resolved the resulting value
|
11692
|
-
will be set to the `PromiseArray`'s `content` property. This makes
|
11693
|
-
it easy to create data bindings with the `PromiseArray` that will be
|
11694
|
-
updated when the promise resolves.
|
11695
|
-
|
11696
|
-
For more information see the [Ember.PromiseProxyMixin
|
11697
|
-
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
11698
|
-
|
11699
|
-
Example
|
11700
|
-
|
11701
|
-
```javascript
|
11702
|
-
var promiseArray = DS.PromiseArray.create({
|
11703
|
-
promise: $.getJSON('/some/remote/data.json')
|
11704
|
-
});
|
11705
|
-
|
11706
|
-
promiseArray.get('length'); // 0
|
11707
|
-
|
11708
|
-
promiseArray.then(function() {
|
11709
|
-
promiseArray.get('length'); // 100
|
11710
|
-
});
|
11711
|
-
```
|
11712
|
-
|
11713
|
-
@class PromiseArray
|
11714
|
-
@namespace DS
|
11715
|
-
@extends Ember.ArrayProxy
|
11716
|
-
@uses Ember.PromiseProxyMixin
|
11717
|
-
*/
|
11718
|
-
PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
|
11719
|
-
/**
|
11720
|
-
A `PromiseObject` is an object that acts like both an `Ember.Object`
|
11721
|
-
and a promise. When the promise is resolved, then the resulting value
|
11722
|
-
will be set to the `PromiseObject`'s `content` property. This makes
|
11723
|
-
it easy to create data bindings with the `PromiseObject` that will
|
11724
|
-
be updated when the promise resolves.
|
11725
|
-
|
11726
|
-
For more information see the [Ember.PromiseProxyMixin
|
11727
|
-
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
11728
|
-
|
11729
|
-
Example
|
11730
|
-
|
11731
|
-
```javascript
|
11732
|
-
var promiseObject = DS.PromiseObject.create({
|
11733
|
-
promise: $.getJSON('/some/remote/data.json')
|
11734
|
-
});
|
11735
|
-
|
11736
|
-
promiseObject.get('name'); // null
|
11737
|
-
|
11738
|
-
promiseObject.then(function() {
|
11739
|
-
promiseObject.get('name'); // 'Tomster'
|
11740
|
-
});
|
11741
|
-
```
|
11742
|
-
|
11743
|
-
@class PromiseObject
|
11744
|
-
@namespace DS
|
11745
|
-
@extends Ember.ObjectProxy
|
11746
|
-
@uses Ember.PromiseProxyMixin
|
11747
|
-
*/
|
11748
|
-
PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
11749
|
-
|
11750
|
-
function promiseObject(promise, label) {
|
11751
|
-
return PromiseObject.create({
|
11752
|
-
promise: Promise.cast(promise, label)
|
11753
|
-
});
|
11754
|
-
}
|
11755
|
-
|
11756
|
-
function promiseArray(promise, label) {
|
11757
|
-
return PromiseArray.create({
|
11758
|
-
promise: Promise.cast(promise, label)
|
11759
|
-
});
|
11760
|
-
}
|
11761
11202
|
|
11762
|
-
function isThenable(object) {
|
11763
|
-
return object && typeof object.then === 'function';
|
11764
|
-
}
|
11765
11203
|
|
11766
11204
|
function serializerFor(container, type, defaultSerializer) {
|
11767
11205
|
return container.lookup('serializer:'+type) ||
|
@@ -11847,8 +11285,6 @@ define("ember-data/system/store",
|
|
11847
11285
|
throw new Error('adapter.findMany returned undefined, this was very likely a mistake');
|
11848
11286
|
}
|
11849
11287
|
|
11850
|
-
var guardedPromise;
|
11851
|
-
|
11852
11288
|
promise = Promise.cast(promise, label);
|
11853
11289
|
promise = _guard(promise, _bind(_objectIsAlive, store));
|
11854
11290
|
|
@@ -11876,7 +11312,7 @@ define("ember-data/system/store",
|
|
11876
11312
|
Ember.assert("The response from a findHasMany must be an Array, not " + Ember.inspect(payload), Ember.typeOf(payload) === 'array');
|
11877
11313
|
|
11878
11314
|
var records = store.pushMany(relationship.type, payload);
|
11879
|
-
|
11315
|
+
return records;
|
11880
11316
|
}, null, "DS: Extract payload of " + record + " : hasMany " + relationship.type);
|
11881
11317
|
}
|
11882
11318
|
|
@@ -11892,8 +11328,6 @@ define("ember-data/system/store",
|
|
11892
11328
|
return promise.then(function(adapterPayload) {
|
11893
11329
|
var payload = serializer.extract(store, relationship.type, adapterPayload, null, 'findBelongsTo');
|
11894
11330
|
var record = store.push(relationship.type, payload);
|
11895
|
-
|
11896
|
-
record.updateBelongsTo(relationship.key, record);
|
11897
11331
|
return record;
|
11898
11332
|
}, null, "DS: Extract payload of " + record + " : " + relationship.type);
|
11899
11333
|
}
|
@@ -11969,10 +11403,30 @@ define("ember-data/system/store",
|
|
11969
11403
|
}, label);
|
11970
11404
|
}
|
11971
11405
|
|
11972
|
-
|
11973
|
-
|
11974
|
-
|
11406
|
+
function setupRelationships(store, record, data) {
|
11407
|
+
var type = record.constructor;
|
11408
|
+
|
11409
|
+
type.eachRelationship(function(key, descriptor) {
|
11410
|
+
var kind = descriptor.kind;
|
11411
|
+
var value = data[key];
|
11412
|
+
var relationship = record._relationships[key];
|
11975
11413
|
|
11414
|
+
if (data.links && data.links[key]) {
|
11415
|
+
relationship.updateLink(data.links[key]);
|
11416
|
+
}
|
11417
|
+
|
11418
|
+
if (kind === 'belongsTo') {
|
11419
|
+
if (value === undefined) {
|
11420
|
+
return;
|
11421
|
+
}
|
11422
|
+
relationship.setRecord(value);
|
11423
|
+
} else if (kind === 'hasMany' && value) {
|
11424
|
+
relationship.updateRecordsFromAdapter(value);
|
11425
|
+
}
|
11426
|
+
});
|
11427
|
+
}
|
11428
|
+
|
11429
|
+
__exports__.Store = Store;
|
11976
11430
|
__exports__["default"] = Store;
|
11977
11431
|
});
|
11978
11432
|
define("ember-data/transforms",
|