ember-data-source 1.0.0.beta.9 → 1.0.0.beta.10
Sign up to get free protection for your applications and to get access to all the features.
- 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",
|