ember-data-source 1.0.0.beta.9 → 1.0.0.beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/dist/ember-data.js +711 -1273
- data/dist/ember-data.min.js +3 -3
- data/dist/ember-data.named-amd.js +703 -1249
- data/dist/ember-data.named-amd.min.js +3 -3
- data/dist/ember-data.named-amd.prod.js +695 -1240
- data/dist/ember-data.prod.js +695 -1256
- data/package.json +14 -5
- metadata +2 -2
@@ -1,3 +1,3 @@
|
|
1
|
-
define("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});define("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)}});define("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});define("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});define("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});define("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,m,p,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 T=t.PromiseObject;var A=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 L=o.RecordArray;var j=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=m.ActiveModelAdapter;var G=m.ActiveModelSerializer;var Y=p.Transform;var Z=p.DateTransform;var er=p.NumberTransform;var rr=p.StringTransform;var tr=p.BooleanTransform;var ir=v.hasMany;var ar=v.belongsTo;var nr=b["default"];var sr=g["default"];E.Store=_;E.PromiseArray=F;E.PromiseObject=T;E.Model=A;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=L;E.FilteredRecordArray=j;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});define("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});define("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")}})});define("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)}}});define("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});define("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})})});define("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}});define("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)}});define("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")}});define("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")}});define("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)}});define("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});define("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});define("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}})});define("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 m=o.call(i[s],function(e){return f.normalize(l,e,s)},this);if(h){n=m}else{e.pushMany(c,m)}}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)}}})});define("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)}});define("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});define("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});define("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 m={};var p={};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 m.createChange(e,r,t,i)}else if(n==="manyToMany"){return p.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};p.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};m.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};m.maintainInvariant=function(e,r,t,i){if(e.changeType==="add"&&r.recordIsMaterialized(t)){var a=n(t,i);if(a){var s=m.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)})}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)
|
2
|
-
})}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=m;t.ManyToManyChange=p});define("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});define("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});define("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}})});define("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});define("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});define("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)}});define("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))}})});define("ember-data/system/model/model",["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/store","exports"],function(e,r,t,i){"use strict";var a=e["default"];var n=r["default"];var s=t.PromiseObject;var o=Ember.get;var d=Ember.set;var u=Ember.merge;var c=Ember.RSVP.Promise;var l=Ember.ArrayPolyfills.forEach;var f;var h=Ember.computed("currentState",function(e,r){return o(o(this,"currentState"),e)}).readOnly();var m=Object.create(null);var p=Object.create(null);function v(e){return p[e]||(p[e]=e.split("."))}function y(e){return m[e]||(m[e]=v(e)[0])}var b=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:h,isLoading:h,isLoaded:h,isDirty:h,isSaving:h,isDeleted:h,isNew:h,isValid:h,dirtyType:h,isError:false,isReloading:false,clientId:null,id:null,currentState:a.empty,errors:Ember.computed(function(){var e=n.create();e.registerHandlers(this,function(){this.send("becameInvalid")},function(){this.send("becameValid")});return e}).readOnly(),serialize:function(e){var r=o(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!f){f=requireModule("ember-data/serializers/json_serializer")["default"]}var r=f.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=o(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=y(e);var t=o(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=v(e);var n=[],s=[],u,c;for(u=0,c=a.length;u<c;u++){i=i[a[u]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(u=0,c=s.length;u<c;u++){s[u].enter(this)}d(this,"currentState",i);for(u=0,c=n.length;u<c;u++){n[u].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=o(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"){d(this,e,null)}else if(r.kind==="hasMany"){var t=this._relationships[e];if(t){t.destroy()}}},this)},updateRecordArrays:function(){this._updatingRecordArraysLater=false;o(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;l.call(Ember.keys(e),function(t){var i=o(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{o(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;l.call(r,function(r){r=i._convertStringOrNumberIntoRecord(r,t);o(i,e).pushObject(r)})},_preloadBelongsTo:function(e,r,t){var i=this._convertStringOrNumberIntoRecord(r,t);d(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=o(this,"_data");var r=o(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){d(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=o(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]||[];d(r,"content",Ember.A(t));d(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){d(this,"id",e)},materializeAttributes:function(e){u(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(o(this,"isError")){this._inFlightAttributes={};d(this,"isError",false)}if(!o(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.suspendRelationshipObservers(function(){this.notifyPropertyChange("data")})},toStringExtension:function(){return o(this,"id")},suspendRelationshipObservers:function(e,r){var t=o(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 s.create({promise:r.promise})},reload:function(){d(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new c(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 s.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=o(this,"errors");function t(t){if(e[t]){r.add(t,e[t])}}this.eachAttribute(t);this.eachRelationship(t)},adapterDidError:function(){this.send("becameError");d(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){}});b.reopenClass({_create:b.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.")}});i["default"]=b});define("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});define("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}});define("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});define("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")}})});define("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")})});define("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}})});define("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()}})});define("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});define("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});define("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 m=i.isSyncRelationship;function p(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 m=i[e];if(!o(m)){var p=this.constructor.inverseFor(e);if(p&&p.kind==="belongsTo"){s(m,p.name,this)}l=a.findById(m.constructor,m.get("id"))||d.cast(m,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 p(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")&&m(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});define("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;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))
|
3
|
-
}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)}})});define("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 m=this;if(h&&f){if(h.kind==="belongsTo"){u(f,function(e){o(e,h.name,m)})}}d=r.findMany(m,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});define("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","exports"],function(e,r,t){"use strict";var i=e.InvalidError;var a=e.Adapter;var n=r.singularize;var s=Ember.get;var o=Ember.set;var d=Ember.run.once;var u=Ember.isNone;var c=Ember.EnumerableUtils.forEach;var l=Ember.EnumerableUtils.indexOf;var f=Ember.EnumerableUtils.map;var h=Ember.RSVP.Promise;var m=Ember.copy;var p,v,y,b,g;var R=Ember.String.camelize;function E(e){return e==null?null:e+""}p=Ember.Object.extend({init:function(){if(!b){b=requireModule("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=b.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=s(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(u(i.id)){i.id=this._generateId(t)}i.id=E(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,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(s(n,"isEmpty")){i=this.scheduleFetch(n)}else if(s(n,"isLoading")){i=n._loadingPromise}return x(i||n,"DS: Store#findById "+a+" with id: "+r)},findByIds:function(e,r){var t=this;var i="DS: Store#findByIds "+e;return C(Ember.RSVP.all(f(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=s(e,"id");var i=this.adapterFor(r);var a=N(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(f(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(u(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){c(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 l(e){return function(r){f(e,r)}}function f(e,t){c(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);c(h,function(a){var n=Ember.A(a);var s=n.mapBy("id");if(s.length>1){$(i,t,e,s,n).then(d).then(u(n)).then(null,l(n))}else if(s.length===1){var c=Ember.A(r).findBy("record",a[0]);o(c)}else{}})}else{c(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=s(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=E(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=E(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){c(s,function(e){this.recordArrayManager.registerWaitingRecordArray(e,o)},this);i.resolve(this.scheduleFetchMany(s,e))}else{if(i){i.resolve()}o.set("isLoaded",true);d(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(K(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 C(U(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;o(r,"isUpdating",true);return C(j(t,this,e,i))},didUpdateAll:function(e){var r=this.typeMapFor(e).findAllCache;o(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||h.cast(n);return C(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!s(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]);d(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];c(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(s(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(s(r,"isNew")){a="createRecord"}else if(s(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(B(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=_(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=s(e,"id");var i=E(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;o(e,"id",i)},typeMapFor:function(e){var r=s(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=E(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=_(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=O(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 f(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=s(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=l(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||s(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return k(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=this;var i=f(r,a);this.recordArrayManager.destroy();c(i,this.unloadAll,this);function a(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return R(n(e))}});function _(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"){F(e,t,r,a,s)}else if(n==="hasMany"){A(e,t,r,a,s);z(i,r,s)}});return t}function F(e,r,t,i,a){if(!g){g=requireModule("ember-data/system/model")["Model"]}if(u(a)||a instanceof g){return}var n;if(typeof a==="number"||typeof a==="string"){n=T(i,t,r);r[t]=e.recordForId(n,a)}else if(typeof a==="object"){r[t]=e.recordForId(a.type,a.id)}}function T(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function A(e,r,t,i,a){for(var n=0,s=a.length;n<s;n++){F(e,a,n,i,a[n])}}function z(e,r,t){if(e){var i=S(Ember.A(t),e.get(r).filterBy("isNew"));Ember.A(t).pushObjects(i)}}function S(e,r){var t=e.mapBy("id");return r.reject(function(e){return Ember.A(t).contains(e.id)})}y=Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);v=Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);function x(e,r){return v.create({promise:h.cast(e,r)})}function C(e,r){return y.create({promise:h.cast(e,r)})}function M(e){return e&&typeof e.then==="function"}function k(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function O(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function D(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=k(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function P(e){return!(s(e,"isDestroyed")||s(e,"isDestroying"))}function w(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function I(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function N(e,r,t,i,a){var n=e.find(r,t,i,a);var s=D(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=h.cast(n,o);n=w(n,I(P,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 $(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=D(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=h.cast(n,o);n=w(n,I(P,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 K(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=D(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=h.cast(n,o);n=w(n,I(P,r));n=w(n,I(P,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=D(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=h.cast(n,o);n=w(n,I(P,r));n=w(n,I(P,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 j(e,r,t,i){var a=e.findAll(r,t,i);var n=D(e,t);var s="DS: Handle Adapter#findAll of "+t;a=h.cast(a,s);a=w(a,I(P,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 U(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=D(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=h.cast(n,o);n=w(n,I(P,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 B(e,r,t,a){var n=a.constructor;var o=e[t](r,n,a);var d=D(e,n);var u="DS: Extract and notify about "+t+" completion of "+a;o=h.cast(o,u);o=w(o,I(P,r));o=w(o,I(P,a));return o.then(function(e){var i;if(e){i=d.extract(r,n,e,s(a,"id"),t)}else{i=e}r.didSaveRecord(a,i);return a},function(e){if(e instanceof i){r.recordWasInvalid(a,e.errors)}else{r.recordWasError(a,e)}throw e},u)}t.Store=p;t.PromiseArray=y;t.PromiseObject=v;t["default"]=p});define("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});define("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});define("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)}})});define("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}}})});define("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)}})});define("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)}})});define("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});define("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)}}});define("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)});define("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});define("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"]}});define("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,m,p,v,y,b,g;m=r.test(e);p=a.test(e);f="";if(m){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=p?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});define("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});
|
1
|
+
define("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});define("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)}});define("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});define("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 d=Ember.String.decamelize,u=Ember.String.underscore;var c=a.extend({defaultSerializer:"-active-model",pathForType:function(e){var r=d(e);var t=u(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"]=c});define("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});define("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,d,u,c,l,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=d["default"];var L=u.RESTAdapter;var j=u.FixtureAdapter;var K=c["default"];var B=l["default"];var N=h["default"];var U=p.ActiveModelAdapter;var V=p.ActiveModelSerializer;var H=m.Transform;var q=m.DateTransform;var W=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=q;A.StringTransform=Q;A.NumberTransform=W;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});define("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});define("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")}})});define("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)}}});define("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});define("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})})});define("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}});define("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)}});define("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")}});define("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")}});define("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)}});define("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});define("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 d;if(n){d=this.keyForRelationship(a,i.kind);if(!o){t[d]=null}else{t[d]=r(o,"id")}}else if(s){d=this.keyForAttribute(a);if(!o){t[d]=null}else{t[d]=o.serialize({includeId:true});this.removeEmbeddedForeignKey(e,o,i,t[d])}}},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"){d(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 d=a.normalize(s,t,null);e.push(s,d);n.push({id:d[o],type:i})});a[i]=n;return a}function d(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});define("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 d=this._getMappedKey(i);if(d===i&&this.keyForAttribute){d=this.keyForAttribute(i)}t[d]=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}})});define("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 d=r.singularize;function u(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 d in a){var c=this.typeForRoot(d);var l=e.modelFor(c);var f=l.typeKey===s;var h=a[d];if(f&&Ember.typeOf(h)!=="array"){o=this.normalize(r,h,d);continue}n.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 c=f&&u(r.id)===i;if(s||c){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 d=o;var u=false;if(o.charAt(0)==="_"){u=true;d=o.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=s.call(i[o],function(e){return f.normalize(l,e,o)},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 o=e.serializerFor(n);var d=s.call(Ember.makeArray(t[i]),function(e){return o.normalize(n,e,i)},this);e.pushMany(a,d)}},typeForRoot:function(e){return o(d(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)}}})});define("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)}});define("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});define("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});define("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});define("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}})});define("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});define("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});define("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)}});define("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")
|
2
|
+
}},clear:function(){if(r(this,"isEmpty")){return}r(this,"content").clear();this.enumerableContentDidChange();this.trigger("becameValid")},has:function(e){return!t(this.errorsFor(e))}})});define("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,t,i,a){"use strict";var n=e["default"];var s=r["default"];var o=t.PromiseObject;var d=i.createRelationshipFor;var u=Ember.get;var c=Ember.set;var l=Ember.merge;var f=Ember.RSVP.Promise;var h=Ember.ArrayPolyfills.forEach;var p=Ember.ArrayPolyfills.map;var m;var y=Ember.computed("currentState",function(e,r){return u(u(this,"currentState"),e)}).readOnly();var v=Object.create(null);var b=Object.create(null);function g(e){return b[e]||(b[e]=e.split("."))}function E(e){return v[e]||(v[e]=g(e)[0])}var R=Ember.Object.extend(Ember.Evented,{_recordArrays:undefined,_relationships:undefined,_loadingRecordArrays:undefined,isEmpty:y,isLoading:y,isLoaded:y,isDirty:y,isSaving:y,isDeleted:y,isNew:y,isValid:y,dirtyType:y,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=u(this,"store");return r.serialize(this,e)},toJSON:function(e){if(!m){m=requireModule("ember-data/serializers/json_serializer")["default"]}var r=m.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=u(this,"currentState");if(!t[e]){this._unhandledEvent(t,e,r)}return t[e](this,r)},transitionTo:function(e){var r=E(e);var t=u(this,"currentState");var i=t;do{if(i.exit){i.exit(this)}i=i.parentState}while(!i.hasOwnProperty(r));var a=g(e);var n=[],s=[],o,d;for(o=0,d=a.length;o<d;o++){i=i[a[o]];if(i.enter){s.push(i)}if(i.setup){n.push(i)}}for(o=0,d=s.length;o<d;o++){s[o].enter(this)}c(this,"currentState",i);for(o=0,d=n.length;o<d;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=u(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;u(this,"store").dataWasUpdated(this.constructor,this)},_preloadData:function(e){var r=this;h.call(Ember.keys(e),function(t){var i=u(e,t);var a=r.constructor.metaForProperty(t);if(a.isRelationship){r._preloadRelationship(t,i)}else{u(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=p.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=u(this,"_data");var r=u(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){l(this._data,e)},materializeAttribute:function(e,r){this._data[e]=r},rollback:function(){this._attributes={};if(u(this,"isError")){this._inFlightAttributes={};c(this,"isError",false)}if(!u(this,"isValid")){this._inFlightAttributes={}}this.send("rolledBack");this.notifyPropertyChange("data")},toStringExtension:function(){return u(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 o.create({promise:r.promise})},reload:function(){c(this,"isReloading",true);var e=this;var r="DS: Model#reload of "+this;var t=new f(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=u(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){}});R.reopenClass({_create:R.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"]=R});define("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 d=o({dirtyType:"created",isNew:true});d.uncommitted.rolledBack=function(e){e.transitionTo("deleted.saved")};var u=o({dirtyType:"updated"});d.uncommitted.deleteRecord=function(e){e.clearRelationships();e.transitionTo("deleted.saved")};d.uncommitted.rollback=function(e){a.uncommitted.rollback.apply(this,arguments);e.transitionTo("deleted.saved")};d.uncommitted.propertyWasReset=Ember.K;function c(e){}u.inFlight.unloadRecord=c;u.uncommitted.deleteRecord=function(e){e.transitionTo("deleted.uncommitted");e.clearRelationships()};var l={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:d,updated:u},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:c,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}l=f(l,null,"root");e["default"]=l});define("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});define("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,d=a.length;n<d;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});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(c(d(this.filteredRecordArrays.values)),u);o(this._adapterPopulatedRecordArrays,u)}});function d(e){var r=[];var t=Ember.keys(e);for(var i=0;i<t.length;i++){r.push(e[t[i]])}return r}function u(e){e.destroy()}function c(e){var r=e.length;var t=Ember.A();for(var i=0;i<r;i++){t=t.concat(e[i])}return t}});define("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});define("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")}})});define("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")})});define("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}})});define("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()}})});define("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});define("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});define("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});define("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=d(this,r);if(o.length===0){return null}i=o[0].name;a=o[0].kind}function d(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){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,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)}})});define("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});define("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 d=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=d});define("ember-data/system/store",["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],function(e,r,t,i){"use strict";var a=e.InvalidError;var n=e.Adapter;var s=r.singularize;var o=t.promiseArray;var d=t.promiseObject;var u=Ember.get;var c=Ember.set;var l=Ember.run.once;var f=Ember.isNone;var h=Ember.EnumerableUtils.forEach;var p=Ember.EnumerableUtils.indexOf;var m=Ember.EnumerableUtils.map;var y=Ember.RSVP.Promise;var v=Ember.copy;var b,g,E;var R=Ember.String.camelize;function A(e){return e==null?null:e+""}b=Ember.Object.extend({init:function(){if(!g){g=requireModule("ember-data/system/record_array_manager")["default"]}this.typeMaps={};this.recordArrayManager=g.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=u(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=v(r)||{};if(f(i.id)){i.id=this._generateId(t)}i.id=A(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,A(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(u(e,"isEmpty")){t=this.scheduleFetch(e)}else if(u(e,"isLoading")){t=e._loadingPromise}return d(t||e,"DS: Store#findByRecord "+e.typeKey+" with id: "+u(e,"id"))},findByIds:function(e,r){var t=this;return o(Ember.RSVP.all(m(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=u(e,"id");var i=this.adapterFor(r);var a=O(i,this,r,t,e);return a},scheduleFetchMany:function(e){return Ember.RSVP.all(m(e,this.scheduleFetch,this))},scheduleFetch:function(e){var r=e.constructor;if(f(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");
|
3
|
+
function s(e){e.resolver.resolve(t.fetchRecord(e.record))}function o(e){h(e,function(e){var t=Ember.A(r).findBy("record",e);if(t){var i=t.resolver;i.resolve(e)}})}function d(e){return function r(t){var i=e.without(t);c(i)}}function u(e){return function(r){c(e,r)}}function c(e,t){h(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 l=i.groupRecordsForFindMany(this,n);h(l,function(a){var n=Ember.A(a);var c=n.mapBy("id");if(c.length>1){C(i,t,e,c,n).then(o).then(d(n)).then(null,u(n))}else if(c.length===1){var l=Ember.A(r).findBy("record",a[0]);s(l)}else{}})}else{h(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=u(e,"id");return this.scheduleFetch(e)},hasRecordForId:function(e,r){var t=this.modelFor(e);var i=A(r);return!!this.typeMapFor(t).idToRecord[i]},recordForId:function(e,r){var t=this.modelFor(e);var i=A(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 y.all(m(e,function(e){return r._findByRecord(e)}))},findHasMany:function(e,r,t){var i=this.adapterFor(e.constructor);return w(i,this,e,r,t)},findBelongsTo:function(e,r,t){var i=this.adapterFor(e.constructor);return $(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 o(L(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 o(I(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||y.cast(n);return o(i.then(function(){return n},null,"DS: Store#filter of "+e))},recordIsLoaded:function(e,r){if(!this.hasRecordForId(e,r)){return false}return!u(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]);l(this,"flushPendingSave")},flushPendingSave:function(){var e=this._pendingSave.slice();this._pendingSave=[];h(e,function(e){var r=e[0],t=e[1];var i=this.adapterFor(r.constructor);var a;if(u(r,"currentState.stateName")==="root.deleted.saved"){return t.resolve(r)}else if(u(r,"isNew")){a="createRecord"}else if(u(r,"isDeleted")){a="deleteRecord"}else{a="updateRecord"}t.resolve(j(i,this,a,r))},this)},didSaveRecord:function(e,r){if(r){r=_(this,e.constructor,r,e);K(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=u(e,"id");var i=A(r.id);this.typeMapFor(e.constructor).idToRecord[i]=e;c(e,"id",i)},typeMapFor:function(e){var r=u(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=A(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=_(this,i,r);this._load(i,r,t);var a=this.recordForId(i,r.id);K(this,a,r);return a},pushPayload:function(e,r){var t;var i;if(!r){i=e;t=S(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=u(e,"id");e.updateRecordArrays();if(i){delete t.idToRecord[i]}var a=p(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||u(this,"defaultAdapter")},serializerFor:function(e){e=this.modelFor(e);var r=this.adapterFor(e);return T(this.container,e.typeKey,r&&r.defaultSerializer)},willDestroy:function(){var e=this.typeMaps;var r=Ember.keys(e);var t=m(r,i);this.recordArrayManager.destroy();h(t,this.unloadAll,this);function i(r){return e[r]["type"]}},_normalizeTypeKey:function(e){return R(s(e))}});function _(e,r,t,i){r.eachRelationship(function(r,i){var a=i.kind;var n=t[r];if(a==="belongsTo"){F(e,t,r,i,n)}else if(a==="hasMany"){x(e,t,r,i,n)}});return t}function F(e,r,t,i,a){if(!E){E=requireModule("ember-data/system/model")["Model"]}if(f(a)||a instanceof E){return}var n;if(typeof a==="number"||typeof a==="string"){n=z(i,t,r);r[t]=e.recordForId(n,a)}else if(typeof a==="object"){r[t]=e.recordForId(a.type,a.id)}}function z(e,r,t){if(e.options.polymorphic){return t[r+"Type"]}else{return e.type}}function x(e,r,t,i,a){if(!Ember.isArray(a)){return}for(var n=0,s=a.length;n<s;n++){F(e,a,n,i,a[n])}}function T(e,r,t){return e.lookup("serializer:"+r)||e.lookup("serializer:application")||e.lookup("serializer:"+t)||e.lookup("serializer:-default")}function S(e){return e.lookup("serializer:application")||e.lookup("serializer:-default")}function k(e,r){var t=e.serializer;var i=e.defaultSerializer;var a=e.container;if(a&&t===undefined){t=T(a,r.typeKey,i)}if(t===null||t===undefined){t={extract:function(e,r,t){return t}}}return t}function M(e){return!(u(e,"isDestroyed")||u(e,"isDestroying"))}function D(e,r){var t=e["finally"](function(){if(!r()){t._subscribers.length=0}});return t}function P(e){var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(undefined,r)}}function O(e,r,t,i,a){var n=e.find(r,t,i,a);var s=k(e,t);var o="DS: Handle Adapter#find of "+t+" with id: "+i;n=y.cast(n,o);n=D(n,P(M,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 C(e,r,t,i,a){var n=e.findMany(r,t,i,a);var s=k(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=y.cast(n,o);n=D(n,P(M,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 w(e,r,t,i,a){var n=e.findHasMany(r,t,i,a);var s=k(e,a.type);var o="DS: Handle Adapter#findHasMany of "+t+" : "+a.type;n=y.cast(n,o);n=D(n,P(M,r));n=D(n,P(M,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 $(e,r,t,i,a){var n=e.findBelongsTo(r,t,i,a);var s=k(e,a.type);var o="DS: Handle Adapter#findBelongsTo of "+t+" : "+a.type;n=y.cast(n,o);n=D(n,P(M,r));n=D(n,P(M,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 I(e,r,t,i){var a=e.findAll(r,t,i);var n=k(e,t);var s="DS: Handle Adapter#findAll of "+t;a=y.cast(a,s);a=D(a,P(M,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 L(e,r,t,i,a){var n=e.findQuery(r,t,i,a);var s=k(e,t);var o="DS: Handle Adapter#findQuery of "+t;n=y.cast(n,o);n=D(n,P(M,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 j(e,r,t,i){var n=i.constructor;var s=e[t](r,n,i);var o=k(e,n);var d="DS: Extract and notify about "+t+" completion of "+i;s=y.cast(s,d);s=D(s,P(M,r));s=D(s,P(M,i));return s.then(function(e){var a;if(e){a=o.extract(r,n,e,u(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},d)}function K(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)}})}i.Store=b;i["default"]=b});define("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});define("ember-data/transforms/base",["exports"],function(e){"use strict";e["default"]=Ember.Object.extend({serialize:Ember.required(),deserialize:Ember.required()})});define("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)}})});define("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}}})});define("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)}})});define("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)}})});define("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});define("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)}}});define("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)});define("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});define("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"]}});define("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,y,v,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()}y=this.rules.uncountable[c]||this.rules.uncountable[h];if(y){return e}v=s&&(s[c]||s[h]);if(v){if(s[c]){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];d=o[1];u=e.replace(g,d);return u}};e["default"]=o});define("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});
|
@@ -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;
|
@@ -955,15 +941,16 @@ define("ember-data/adapters/fixture_adapter",
|
|
955
941
|
var adapter = this;
|
956
942
|
|
957
943
|
return new Ember.RSVP.Promise(function(resolve) {
|
944
|
+
var value = Ember.copy(callback.call(context), true);
|
958
945
|
if (get(adapter, 'simulateRemoteResponse')) {
|
959
946
|
// Schedule with setTimeout
|
960
947
|
Ember.run.later(function() {
|
961
|
-
resolve(
|
948
|
+
resolve(value);
|
962
949
|
}, get(adapter, 'latency'));
|
963
950
|
} else {
|
964
951
|
// Asynchronous, but at the of the runloop with zero latency
|
965
952
|
Ember.run.schedule('actions', null, function() {
|
966
|
-
resolve(
|
953
|
+
resolve(value);
|
967
954
|
});
|
968
955
|
}
|
969
956
|
}, "DS: FixtureAdapter#simulateRemoteCall");
|
@@ -978,7 +965,8 @@ define("ember-data/adapters/rest_adapter",
|
|
978
965
|
@module ember-data
|
979
966
|
*/
|
980
967
|
|
981
|
-
var Adapter = __dependency1__
|
968
|
+
var Adapter = __dependency1__.Adapter;
|
969
|
+
var InvalidError = __dependency1__.InvalidError;
|
982
970
|
var get = Ember.get;
|
983
971
|
var forEach = Ember.ArrayPolyfills.forEach;
|
984
972
|
|
@@ -1365,7 +1353,7 @@ define("ember-data/adapters/rest_adapter",
|
|
1365
1353
|
@param {String} url
|
1366
1354
|
@return {Promise} promise
|
1367
1355
|
*/
|
1368
|
-
findHasMany: function(store, record, url) {
|
1356
|
+
findHasMany: function(store, record, url, relationship) {
|
1369
1357
|
var host = get(this, 'host');
|
1370
1358
|
var id = get(record, 'id');
|
1371
1359
|
var type = record.constructor.typeKey;
|
@@ -1404,7 +1392,7 @@ define("ember-data/adapters/rest_adapter",
|
|
1404
1392
|
@param {String} url
|
1405
1393
|
@return {Promise} promise
|
1406
1394
|
*/
|
1407
|
-
findBelongsTo: function(store, record, url) {
|
1395
|
+
findBelongsTo: function(store, record, url, relationship) {
|
1408
1396
|
var id = get(record, 'id');
|
1409
1397
|
var type = record.constructor.typeKey;
|
1410
1398
|
|
@@ -1695,9 +1683,10 @@ define("ember-data/adapters/rest_adapter",
|
|
1695
1683
|
|
1696
1684
|
@method ajaxError
|
1697
1685
|
@param {Object} jqXHR
|
1686
|
+
@param {Object} responseText
|
1698
1687
|
@return {Object} jqXHR
|
1699
1688
|
*/
|
1700
|
-
ajaxError: function(jqXHR) {
|
1689
|
+
ajaxError: function(jqXHR, responseText) {
|
1701
1690
|
if (jqXHR && typeof jqXHR === 'object') {
|
1702
1691
|
jqXHR.then = null;
|
1703
1692
|
}
|
@@ -1705,6 +1694,32 @@ define("ember-data/adapters/rest_adapter",
|
|
1705
1694
|
return jqXHR;
|
1706
1695
|
},
|
1707
1696
|
|
1697
|
+
/**
|
1698
|
+
Takes an ajax response, and returns the json payload.
|
1699
|
+
|
1700
|
+
By default this hook just returns the jsonPayload passed to it.
|
1701
|
+
You might want to override it in two cases:
|
1702
|
+
|
1703
|
+
1. Your API might return useful results in the request headers.
|
1704
|
+
If you need to access these, you can override this hook to copy them
|
1705
|
+
from jqXHR to the payload object so they can be processed in you serializer.
|
1706
|
+
|
1707
|
+
|
1708
|
+
2. Your API might return errors as successful responses with status code
|
1709
|
+
200 and an Errors text or object. You can return a DS.InvalidError from
|
1710
|
+
this hook and it will automatically reject the promise and put your record
|
1711
|
+
into the invald state.
|
1712
|
+
|
1713
|
+
@method ajaxError
|
1714
|
+
@param {Object} jqXHR
|
1715
|
+
@param {Object} jsonPayload
|
1716
|
+
@return {Object} jqXHR
|
1717
|
+
*/
|
1718
|
+
|
1719
|
+
ajaxSuccess: function(jqXHR, jsonPayload) {
|
1720
|
+
return jsonPayload;
|
1721
|
+
},
|
1722
|
+
|
1708
1723
|
/**
|
1709
1724
|
Takes a URL, an HTTP method and a hash of data, and makes an
|
1710
1725
|
HTTP request.
|
@@ -1735,12 +1750,17 @@ define("ember-data/adapters/rest_adapter",
|
|
1735
1750
|
return new Ember.RSVP.Promise(function(resolve, reject) {
|
1736
1751
|
var hash = adapter.ajaxOptions(url, type, options);
|
1737
1752
|
|
1738
|
-
hash.success = function(json) {
|
1739
|
-
|
1753
|
+
hash.success = function(json, textStatus, jqXHR) {
|
1754
|
+
json = adapter.ajaxSuccess(jqXHR, json);
|
1755
|
+
if (json instanceof InvalidError) {
|
1756
|
+
Ember.run(null, reject, json);
|
1757
|
+
} else {
|
1758
|
+
Ember.run(null, resolve, json);
|
1759
|
+
}
|
1740
1760
|
};
|
1741
1761
|
|
1742
1762
|
hash.error = function(jqXHR, textStatus, errorThrown) {
|
1743
|
-
Ember.run(null, reject, adapter.ajaxError(jqXHR));
|
1763
|
+
Ember.run(null, reject, adapter.ajaxError(jqXHR, jqXHR.responseText));
|
1744
1764
|
};
|
1745
1765
|
|
1746
1766
|
Ember.$.ajax(hash);
|
@@ -1808,11 +1828,11 @@ define("ember-data/core",
|
|
1808
1828
|
/**
|
1809
1829
|
@property VERSION
|
1810
1830
|
@type String
|
1811
|
-
@default '1.0.0-beta.
|
1831
|
+
@default '1.0.0-beta.10'
|
1812
1832
|
@static
|
1813
1833
|
*/
|
1814
1834
|
DS = Ember.Namespace.create({
|
1815
|
-
VERSION: '1.0.0-beta.
|
1835
|
+
VERSION: '1.0.0-beta.10'
|
1816
1836
|
});
|
1817
1837
|
|
1818
1838
|
if (Ember.libraries) {
|
@@ -2081,15 +2101,13 @@ define("ember-data/serializers",
|
|
2081
2101
|
__exports__.RESTSerializer = RESTSerializer;
|
2082
2102
|
});
|
2083
2103
|
define("ember-data/serializers/embedded_records_mixin",
|
2084
|
-
["
|
2085
|
-
function(
|
2104
|
+
["exports"],
|
2105
|
+
function(__exports__) {
|
2086
2106
|
"use strict";
|
2087
2107
|
var get = Ember.get;
|
2088
2108
|
var forEach = Ember.EnumerableUtils.forEach;
|
2089
2109
|
var camelize = Ember.String.camelize;
|
2090
2110
|
|
2091
|
-
var pluralize = __dependency1__.pluralize;
|
2092
|
-
|
2093
2111
|
/**
|
2094
2112
|
## Using Embedded Records
|
2095
2113
|
|
@@ -2108,6 +2126,11 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2108
2126
|
}
|
2109
2127
|
})
|
2110
2128
|
```
|
2129
|
+
Note that this use of `{embedded: 'always'}` is unrelated to
|
2130
|
+
the `{embedded: 'always'}` that is defined as an option on `DS.attr` as part of
|
2131
|
+
defining a model while working with the ActiveModelSerializer. Nevertheless,
|
2132
|
+
using `{embedded: 'always'}` as an option to DS.attr is not a valid way to setup
|
2133
|
+
embedded records.
|
2111
2134
|
|
2112
2135
|
The `attrs` option for a resource `{embedded: 'always'}` is shorthand for:
|
2113
2136
|
|
@@ -2141,7 +2164,11 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2141
2164
|
|
2142
2165
|
### Model Relationships
|
2143
2166
|
|
2144
|
-
Embedded records must have a model defined to be extracted and serialized.
|
2167
|
+
Embedded records must have a model defined to be extracted and serialized. Note that
|
2168
|
+
when defining any relationships on your model such as `belongsTo` and `hasMany`, you
|
2169
|
+
should not both specify `async:true` and also indicate through the serializer's
|
2170
|
+
`attrs` attribute that the related model should be embedded. If a model is
|
2171
|
+
declared embedded, then do not use `async:true`.
|
2145
2172
|
|
2146
2173
|
To successfully extract and serialize embedded records the model relationships
|
2147
2174
|
must be setup correcty See the
|
@@ -2153,9 +2180,9 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2153
2180
|
|
2154
2181
|
### Example JSON payloads, Models and Serializers
|
2155
2182
|
|
2156
|
-
**When customizing a serializer it is
|
2157
|
-
are
|
2158
|
-
to modify to fit your specific needs.**
|
2183
|
+
**When customizing a serializer it is important to grok what the customizations
|
2184
|
+
are. Please read the docs for the methods this mixin provides, in case you need
|
2185
|
+
to modify it to fit your specific needs.**
|
2159
2186
|
|
2160
2187
|
For example review the docs for each method of this mixin:
|
2161
2188
|
* [normalize](/api/data/classes/DS.EmbeddedRecordsMixin.html#method_normalize)
|
@@ -2258,7 +2285,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2258
2285
|
*/
|
2259
2286
|
serializeBelongsTo: function(record, json, relationship) {
|
2260
2287
|
var attr = relationship.key;
|
2261
|
-
var attrs = this.get('attrs');
|
2262
2288
|
if (this.noSerializeOptionSpecified(attr)) {
|
2263
2289
|
this._super(record, json, relationship);
|
2264
2290
|
return;
|
@@ -2368,7 +2394,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2368
2394
|
*/
|
2369
2395
|
serializeHasMany: function(record, json, relationship) {
|
2370
2396
|
var attr = relationship.key;
|
2371
|
-
var attrs = this.get('attrs');
|
2372
2397
|
if (this.noSerializeOptionSpecified(attr)) {
|
2373
2398
|
this._super(record, json, relationship);
|
2374
2399
|
return;
|
@@ -2443,8 +2468,6 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2443
2468
|
// checks config for attrs option to serialize records
|
2444
2469
|
noSerializeOptionSpecified: function(attr) {
|
2445
2470
|
var option = this.attrsOption(attr);
|
2446
|
-
var serializeRecords = this.hasSerializeRecordsOption(attr);
|
2447
|
-
var serializeIds = this.hasSerializeIdsOption(attr);
|
2448
2471
|
return !(option && (option.serialize || option.embedded));
|
2449
2472
|
},
|
2450
2473
|
|
@@ -2471,7 +2494,12 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2471
2494
|
if (serializer.hasDeserializeRecordsOption(key)) {
|
2472
2495
|
var embeddedType = store.modelFor(relationship.type.typeKey);
|
2473
2496
|
if (relationship.kind === "hasMany") {
|
2474
|
-
|
2497
|
+
if (relationship.options.polymorphic) {
|
2498
|
+
extractEmbeddedHasManyPolymorphic(store, key, partial);
|
2499
|
+
}
|
2500
|
+
else {
|
2501
|
+
extractEmbeddedHasMany(store, key, embeddedType, partial);
|
2502
|
+
}
|
2475
2503
|
}
|
2476
2504
|
if (relationship.kind === "belongsTo") {
|
2477
2505
|
extractEmbeddedBelongsTo(store, key, embeddedType, partial);
|
@@ -2501,6 +2529,28 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2501
2529
|
return hash;
|
2502
2530
|
}
|
2503
2531
|
|
2532
|
+
function extractEmbeddedHasManyPolymorphic(store, key, hash) {
|
2533
|
+
if (!hash[key]) {
|
2534
|
+
return hash;
|
2535
|
+
}
|
2536
|
+
|
2537
|
+
var ids = [];
|
2538
|
+
|
2539
|
+
forEach(hash[key], function(data) {
|
2540
|
+
var typeKey = data.type;
|
2541
|
+
var embeddedSerializer = store.serializerFor(typeKey);
|
2542
|
+
var embeddedType = store.modelFor(typeKey);
|
2543
|
+
var primaryKey = get(embeddedSerializer, 'primaryKey');
|
2544
|
+
|
2545
|
+
var embeddedRecord = embeddedSerializer.normalize(embeddedType, data, null);
|
2546
|
+
store.push(embeddedType, embeddedRecord);
|
2547
|
+
ids.push({ id: embeddedRecord[primaryKey], type: typeKey });
|
2548
|
+
});
|
2549
|
+
|
2550
|
+
hash[key] = ids;
|
2551
|
+
return hash;
|
2552
|
+
}
|
2553
|
+
|
2504
2554
|
function extractEmbeddedBelongsTo(store, key, embeddedType, hash) {
|
2505
2555
|
if (!hash[key]) {
|
2506
2556
|
return hash;
|
@@ -2518,12 +2568,10 @@ define("ember-data/serializers/embedded_records_mixin",
|
|
2518
2568
|
__exports__["default"] = EmbeddedRecordsMixin;
|
2519
2569
|
});
|
2520
2570
|
define("ember-data/serializers/json_serializer",
|
2521
|
-
["
|
2522
|
-
function(
|
2571
|
+
["exports"],
|
2572
|
+
function(__exports__) {
|
2523
2573
|
"use strict";
|
2524
|
-
var RelationshipChange = __dependency1__.RelationshipChange;
|
2525
2574
|
var get = Ember.get;
|
2526
|
-
var set = Ember.set;
|
2527
2575
|
var isNone = Ember.isNone;
|
2528
2576
|
var map = Ember.ArrayPolyfills.map;
|
2529
2577
|
var merge = Ember.merge;
|
@@ -2633,7 +2681,7 @@ define("ember-data/serializers/json_serializer",
|
|
2633
2681
|
@return {Object} data The transformed data object
|
2634
2682
|
*/
|
2635
2683
|
applyTransforms: function(type, data) {
|
2636
|
-
type.eachTransformedAttribute(function(key, type) {
|
2684
|
+
type.eachTransformedAttribute(function applyTransform(key, type) {
|
2637
2685
|
if (!data.hasOwnProperty(key)) { return; }
|
2638
2686
|
|
2639
2687
|
var transform = this.transformFor(type);
|
@@ -2719,7 +2767,7 @@ define("ember-data/serializers/json_serializer",
|
|
2719
2767
|
@private
|
2720
2768
|
*/
|
2721
2769
|
normalizeAttributes: function(type, hash) {
|
2722
|
-
var payloadKey
|
2770
|
+
var payloadKey;
|
2723
2771
|
|
2724
2772
|
if (this.keyForAttribute) {
|
2725
2773
|
type.eachAttribute(function(key) {
|
@@ -2738,7 +2786,7 @@ define("ember-data/serializers/json_serializer",
|
|
2738
2786
|
@private
|
2739
2787
|
*/
|
2740
2788
|
normalizeRelationships: function(type, hash) {
|
2741
|
-
var payloadKey
|
2789
|
+
var payloadKey;
|
2742
2790
|
|
2743
2791
|
if (this.keyForRelationship) {
|
2744
2792
|
type.eachRelationship(function(key, relationship) {
|
@@ -3157,7 +3205,7 @@ define("ember-data/serializers/json_serializer",
|
|
3157
3205
|
payloadKey = this.keyForRelationship(key, "hasMany");
|
3158
3206
|
}
|
3159
3207
|
|
3160
|
-
var relationshipType =
|
3208
|
+
var relationshipType = record.constructor.determineRelationshipType(relationship);
|
3161
3209
|
|
3162
3210
|
if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany') {
|
3163
3211
|
json[payloadKey] = get(record, key).mapBy('id');
|
@@ -3566,7 +3614,6 @@ define("ember-data/serializers/rest_serializer",
|
|
3566
3614
|
|
3567
3615
|
var JSONSerializer = __dependency1__["default"];
|
3568
3616
|
var get = Ember.get;
|
3569
|
-
var set = Ember.set;
|
3570
3617
|
var forEach = Ember.ArrayPolyfills.forEach;
|
3571
3618
|
var map = Ember.ArrayPolyfills.map;
|
3572
3619
|
var camelize = Ember.String.camelize;
|
@@ -4247,7 +4294,7 @@ define("ember-data/serializers/rest_serializer",
|
|
4247
4294
|
|
4248
4295
|
/**
|
4249
4296
|
You can use this method to customize the root keys serialized into the JSON.
|
4250
|
-
By default the REST Serializer sends the typeKey of a model,
|
4297
|
+
By default the REST Serializer sends the typeKey of a model, which is a camelized
|
4251
4298
|
version of the name.
|
4252
4299
|
|
4253
4300
|
For example, your server may expect underscored root objects.
|
@@ -4324,8 +4371,6 @@ define("ember-data/system/adapter",
|
|
4324
4371
|
*/
|
4325
4372
|
|
4326
4373
|
var get = Ember.get;
|
4327
|
-
var set = Ember.set;
|
4328
|
-
var map = Ember.ArrayPolyfills.map;
|
4329
4374
|
|
4330
4375
|
var errorProps = [
|
4331
4376
|
'description',
|
@@ -4782,463 +4827,6 @@ define("ember-data/system/adapter",
|
|
4782
4827
|
__exports__.Adapter = Adapter;
|
4783
4828
|
__exports__["default"] = Adapter;
|
4784
4829
|
});
|
4785
|
-
define("ember-data/system/changes",
|
4786
|
-
["ember-data/system/changes/relationship_change","exports"],
|
4787
|
-
function(__dependency1__, __exports__) {
|
4788
|
-
"use strict";
|
4789
|
-
/**
|
4790
|
-
@module ember-data
|
4791
|
-
*/
|
4792
|
-
|
4793
|
-
var RelationshipChange = __dependency1__.RelationshipChange;
|
4794
|
-
var RelationshipChangeAdd = __dependency1__.RelationshipChangeAdd;
|
4795
|
-
var RelationshipChangeRemove = __dependency1__.RelationshipChangeRemove;
|
4796
|
-
var OneToManyChange = __dependency1__.OneToManyChange;
|
4797
|
-
var ManyToNoneChange = __dependency1__.ManyToNoneChange;
|
4798
|
-
var OneToOneChange = __dependency1__.OneToOneChange;
|
4799
|
-
var ManyToManyChange = __dependency1__.ManyToManyChange;
|
4800
|
-
|
4801
|
-
__exports__.RelationshipChange = RelationshipChange;
|
4802
|
-
__exports__.RelationshipChangeAdd = RelationshipChangeAdd;
|
4803
|
-
__exports__.RelationshipChangeRemove = RelationshipChangeRemove;
|
4804
|
-
__exports__.OneToManyChange = OneToManyChange;
|
4805
|
-
__exports__.ManyToNoneChange = ManyToNoneChange;
|
4806
|
-
__exports__.OneToOneChange = OneToOneChange;
|
4807
|
-
__exports__.ManyToManyChange = ManyToManyChange;
|
4808
|
-
});
|
4809
|
-
define("ember-data/system/changes/relationship_change",
|
4810
|
-
["ember-data/system/model/model","ember-data/system/relationship-meta","exports"],
|
4811
|
-
function(__dependency1__, __dependency2__, __exports__) {
|
4812
|
-
"use strict";
|
4813
|
-
/**
|
4814
|
-
@module ember-data
|
4815
|
-
*/
|
4816
|
-
|
4817
|
-
var Model = __dependency1__["default"];
|
4818
|
-
var isSyncRelationship = __dependency2__.isSyncRelationship;
|
4819
|
-
|
4820
|
-
var get = Ember.get;
|
4821
|
-
var set = Ember.set;
|
4822
|
-
var forEach = Ember.EnumerableUtils.forEach;
|
4823
|
-
|
4824
|
-
/**
|
4825
|
-
@class RelationshipChange
|
4826
|
-
@namespace DS
|
4827
|
-
@private
|
4828
|
-
@constructor
|
4829
|
-
*/
|
4830
|
-
var RelationshipChange = function(options) {
|
4831
|
-
this.parentRecord = options.parentRecord;
|
4832
|
-
this.childRecord = options.childRecord;
|
4833
|
-
this.firstRecord = options.firstRecord;
|
4834
|
-
this.firstRecordKind = options.firstRecordKind;
|
4835
|
-
this.firstRecordName = options.firstRecordName;
|
4836
|
-
this.secondRecord = options.secondRecord;
|
4837
|
-
this.secondRecordKind = options.secondRecordKind;
|
4838
|
-
this.secondRecordName = options.secondRecordName;
|
4839
|
-
this.changeType = options.changeType;
|
4840
|
-
this.store = options.store;
|
4841
|
-
|
4842
|
-
this.committed = {};
|
4843
|
-
};
|
4844
|
-
|
4845
|
-
/**
|
4846
|
-
@class RelationshipChangeAdd
|
4847
|
-
@namespace DS
|
4848
|
-
@private
|
4849
|
-
@constructor
|
4850
|
-
*/
|
4851
|
-
function RelationshipChangeAdd(options){
|
4852
|
-
RelationshipChange.call(this, options);
|
4853
|
-
}
|
4854
|
-
|
4855
|
-
/**
|
4856
|
-
@class RelationshipChangeRemove
|
4857
|
-
@namespace DS
|
4858
|
-
@private
|
4859
|
-
@constructor
|
4860
|
-
*/
|
4861
|
-
function RelationshipChangeRemove(options){
|
4862
|
-
RelationshipChange.call(this, options);
|
4863
|
-
}
|
4864
|
-
|
4865
|
-
RelationshipChange.create = function(options) {
|
4866
|
-
return new RelationshipChange(options);
|
4867
|
-
};
|
4868
|
-
|
4869
|
-
RelationshipChangeAdd.create = function(options) {
|
4870
|
-
return new RelationshipChangeAdd(options);
|
4871
|
-
};
|
4872
|
-
|
4873
|
-
RelationshipChangeRemove.create = function(options) {
|
4874
|
-
return new RelationshipChangeRemove(options);
|
4875
|
-
};
|
4876
|
-
|
4877
|
-
var OneToManyChange = {};
|
4878
|
-
var OneToNoneChange = {};
|
4879
|
-
var ManyToNoneChange = {};
|
4880
|
-
var OneToOneChange = {};
|
4881
|
-
var ManyToManyChange = {};
|
4882
|
-
|
4883
|
-
RelationshipChange._createChange = function(options){
|
4884
|
-
if (options.changeType === 'add') {
|
4885
|
-
return RelationshipChangeAdd.create(options);
|
4886
|
-
}
|
4887
|
-
if (options.changeType === 'remove') {
|
4888
|
-
return RelationshipChangeRemove.create(options);
|
4889
|
-
}
|
4890
|
-
};
|
4891
|
-
|
4892
|
-
RelationshipChange.determineRelationshipType = function(recordType, knownSide){
|
4893
|
-
var knownKey = knownSide.key, key, otherKind;
|
4894
|
-
var knownKind = knownSide.kind;
|
4895
|
-
|
4896
|
-
var inverse = recordType.inverseFor(knownKey);
|
4897
|
-
|
4898
|
-
if (inverse) {
|
4899
|
-
key = inverse.name;
|
4900
|
-
otherKind = inverse.kind;
|
4901
|
-
}
|
4902
|
-
|
4903
|
-
if (!inverse) {
|
4904
|
-
return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
|
4905
|
-
} else {
|
4906
|
-
if (otherKind === 'belongsTo') {
|
4907
|
-
return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
|
4908
|
-
} else {
|
4909
|
-
return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
|
4910
|
-
}
|
4911
|
-
}
|
4912
|
-
};
|
4913
|
-
|
4914
|
-
RelationshipChange.createChange = function(firstRecord, secondRecord, store, options){
|
4915
|
-
// Get the type of the child based on the child's client ID
|
4916
|
-
var firstRecordType = firstRecord.constructor, changeType;
|
4917
|
-
changeType = RelationshipChange.determineRelationshipType(firstRecordType, options);
|
4918
|
-
if (changeType === 'oneToMany') {
|
4919
|
-
return OneToManyChange.createChange(firstRecord, secondRecord, store, options);
|
4920
|
-
} else if (changeType === 'manyToOne') {
|
4921
|
-
return OneToManyChange.createChange(secondRecord, firstRecord, store, options);
|
4922
|
-
} else if (changeType === 'oneToNone') {
|
4923
|
-
return OneToNoneChange.createChange(firstRecord, secondRecord, store, options);
|
4924
|
-
} else if (changeType === 'manyToNone') {
|
4925
|
-
return ManyToNoneChange.createChange(firstRecord, secondRecord, store, options);
|
4926
|
-
} else if (changeType === 'oneToOne') {
|
4927
|
-
return OneToOneChange.createChange(firstRecord, secondRecord, store, options);
|
4928
|
-
} else if (changeType === 'manyToMany') {
|
4929
|
-
return ManyToManyChange.createChange(firstRecord, secondRecord, store, options);
|
4930
|
-
}
|
4931
|
-
};
|
4932
|
-
|
4933
|
-
OneToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
|
4934
|
-
var key = options.key;
|
4935
|
-
var change = RelationshipChange._createChange({
|
4936
|
-
parentRecord: parentRecord,
|
4937
|
-
childRecord: childRecord,
|
4938
|
-
firstRecord: childRecord,
|
4939
|
-
store: store,
|
4940
|
-
changeType: options.changeType,
|
4941
|
-
firstRecordName: key,
|
4942
|
-
firstRecordKind: 'belongsTo'
|
4943
|
-
});
|
4944
|
-
|
4945
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4946
|
-
|
4947
|
-
return change;
|
4948
|
-
};
|
4949
|
-
|
4950
|
-
ManyToNoneChange.createChange = function(childRecord, parentRecord, store, options) {
|
4951
|
-
var key = options.key;
|
4952
|
-
var change = RelationshipChange._createChange({
|
4953
|
-
parentRecord: childRecord,
|
4954
|
-
childRecord: parentRecord,
|
4955
|
-
secondRecord: childRecord,
|
4956
|
-
store: store,
|
4957
|
-
changeType: options.changeType,
|
4958
|
-
secondRecordName: options.key,
|
4959
|
-
secondRecordKind: 'hasMany'
|
4960
|
-
});
|
4961
|
-
|
4962
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4963
|
-
return change;
|
4964
|
-
};
|
4965
|
-
|
4966
|
-
|
4967
|
-
ManyToManyChange.createChange = function(childRecord, parentRecord, store, options) {
|
4968
|
-
// If the name of the belongsTo side of the relationship is specified,
|
4969
|
-
// use that
|
4970
|
-
// If the type of the parent is specified, look it up on the child's type
|
4971
|
-
// definition.
|
4972
|
-
var key = options.key;
|
4973
|
-
|
4974
|
-
var change = RelationshipChange._createChange({
|
4975
|
-
parentRecord: parentRecord,
|
4976
|
-
childRecord: childRecord,
|
4977
|
-
firstRecord: childRecord,
|
4978
|
-
secondRecord: parentRecord,
|
4979
|
-
firstRecordKind: 'hasMany',
|
4980
|
-
secondRecordKind: 'hasMany',
|
4981
|
-
store: store,
|
4982
|
-
changeType: options.changeType,
|
4983
|
-
firstRecordName: key
|
4984
|
-
});
|
4985
|
-
|
4986
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
4987
|
-
|
4988
|
-
return change;
|
4989
|
-
};
|
4990
|
-
|
4991
|
-
OneToOneChange.createChange = function(childRecord, parentRecord, store, options) {
|
4992
|
-
var key;
|
4993
|
-
|
4994
|
-
// If the name of the belongsTo side of the relationship is specified,
|
4995
|
-
// use that
|
4996
|
-
// If the type of the parent is specified, look it up on the child's type
|
4997
|
-
// definition.
|
4998
|
-
if (options.parentType) {
|
4999
|
-
key = options.parentType.inverseFor(options.key).name;
|
5000
|
-
} else if (options.key) {
|
5001
|
-
key = options.key;
|
5002
|
-
} else {
|
5003
|
-
}
|
5004
|
-
|
5005
|
-
var change = RelationshipChange._createChange({
|
5006
|
-
parentRecord: parentRecord,
|
5007
|
-
childRecord: childRecord,
|
5008
|
-
firstRecord: childRecord,
|
5009
|
-
secondRecord: parentRecord,
|
5010
|
-
firstRecordKind: 'belongsTo',
|
5011
|
-
secondRecordKind: 'belongsTo',
|
5012
|
-
store: store,
|
5013
|
-
changeType: options.changeType,
|
5014
|
-
firstRecordName: key
|
5015
|
-
});
|
5016
|
-
|
5017
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, null, change);
|
5018
|
-
|
5019
|
-
return change;
|
5020
|
-
};
|
5021
|
-
|
5022
|
-
OneToOneChange.maintainInvariant = function(options, store, childRecord, key){
|
5023
|
-
if (options.changeType === 'add' && store.recordIsMaterialized(childRecord)) {
|
5024
|
-
var oldParent = get(childRecord, key);
|
5025
|
-
if (oldParent) {
|
5026
|
-
var correspondingChange = OneToOneChange.createChange(childRecord, oldParent, store, {
|
5027
|
-
parentType: options.parentType,
|
5028
|
-
hasManyName: options.hasManyName,
|
5029
|
-
changeType: 'remove',
|
5030
|
-
key: options.key
|
5031
|
-
});
|
5032
|
-
store.addRelationshipChangeFor(childRecord, key, options.parentRecord , null, correspondingChange);
|
5033
|
-
correspondingChange.sync();
|
5034
|
-
}
|
5035
|
-
}
|
5036
|
-
};
|
5037
|
-
|
5038
|
-
OneToManyChange.createChange = function(childRecord, parentRecord, store, options) {
|
5039
|
-
var key;
|
5040
|
-
|
5041
|
-
// If the name of the belongsTo side of the relationship is specified,
|
5042
|
-
// use that
|
5043
|
-
// If the type of the parent is specified, look it up on the child's type
|
5044
|
-
// definition.
|
5045
|
-
if (options.parentType) {
|
5046
|
-
key = options.parentType.inverseFor(options.key).name;
|
5047
|
-
OneToManyChange.maintainInvariant( options, store, childRecord, key );
|
5048
|
-
} else if (options.key) {
|
5049
|
-
key = options.key;
|
5050
|
-
} else {
|
5051
|
-
}
|
5052
|
-
|
5053
|
-
var change = RelationshipChange._createChange({
|
5054
|
-
parentRecord: parentRecord,
|
5055
|
-
childRecord: childRecord,
|
5056
|
-
firstRecord: childRecord,
|
5057
|
-
secondRecord: parentRecord,
|
5058
|
-
firstRecordKind: 'belongsTo',
|
5059
|
-
secondRecordKind: 'hasMany',
|
5060
|
-
store: store,
|
5061
|
-
changeType: options.changeType,
|
5062
|
-
firstRecordName: key
|
5063
|
-
});
|
5064
|
-
|
5065
|
-
store.addRelationshipChangeFor(childRecord, key, parentRecord, change.getSecondRecordName(), change);
|
5066
|
-
|
5067
|
-
return change;
|
5068
|
-
};
|
5069
|
-
|
5070
|
-
OneToManyChange.maintainInvariant = function(options, store, childRecord, key){
|
5071
|
-
if (options.changeType === 'add' && childRecord) {
|
5072
|
-
var oldParent = get(childRecord, key);
|
5073
|
-
if (oldParent) {
|
5074
|
-
var correspondingChange = OneToManyChange.createChange(childRecord, oldParent, store, {
|
5075
|
-
parentType: options.parentType,
|
5076
|
-
hasManyName: options.hasManyName,
|
5077
|
-
changeType: 'remove',
|
5078
|
-
key: options.key
|
5079
|
-
});
|
5080
|
-
store.addRelationshipChangeFor(childRecord, key, options.parentRecord, correspondingChange.getSecondRecordName(), correspondingChange);
|
5081
|
-
correspondingChange.sync();
|
5082
|
-
}
|
5083
|
-
}
|
5084
|
-
};
|
5085
|
-
|
5086
|
-
/**
|
5087
|
-
@class RelationshipChange
|
5088
|
-
@namespace DS
|
5089
|
-
*/
|
5090
|
-
RelationshipChange.prototype = {
|
5091
|
-
getSecondRecordName: function() {
|
5092
|
-
var name = this.secondRecordName, parent;
|
5093
|
-
|
5094
|
-
if (!name) {
|
5095
|
-
parent = this.secondRecord;
|
5096
|
-
if (!parent) { return; }
|
5097
|
-
|
5098
|
-
var childType = this.firstRecord.constructor;
|
5099
|
-
var inverse = childType.inverseFor(this.firstRecordName);
|
5100
|
-
this.secondRecordName = inverse.name;
|
5101
|
-
}
|
5102
|
-
|
5103
|
-
return this.secondRecordName;
|
5104
|
-
},
|
5105
|
-
|
5106
|
-
/**
|
5107
|
-
Get the name of the relationship on the belongsTo side.
|
5108
|
-
|
5109
|
-
@method getFirstRecordName
|
5110
|
-
@return {String}
|
5111
|
-
*/
|
5112
|
-
getFirstRecordName: function() {
|
5113
|
-
return this.firstRecordName;
|
5114
|
-
},
|
5115
|
-
|
5116
|
-
/**
|
5117
|
-
@method destroy
|
5118
|
-
@private
|
5119
|
-
*/
|
5120
|
-
destroy: function() {
|
5121
|
-
var childRecord = this.childRecord;
|
5122
|
-
var belongsToName = this.getFirstRecordName();
|
5123
|
-
var hasManyName = this.getSecondRecordName();
|
5124
|
-
var store = this.store;
|
5125
|
-
|
5126
|
-
store.removeRelationshipChangeFor(childRecord, belongsToName, this.parentRecord, hasManyName, this.changeType);
|
5127
|
-
},
|
5128
|
-
|
5129
|
-
getSecondRecord: function(){
|
5130
|
-
return this.secondRecord;
|
5131
|
-
},
|
5132
|
-
|
5133
|
-
/**
|
5134
|
-
@method getFirstRecord
|
5135
|
-
@private
|
5136
|
-
*/
|
5137
|
-
getFirstRecord: function() {
|
5138
|
-
return this.firstRecord;
|
5139
|
-
},
|
5140
|
-
|
5141
|
-
coalesce: function(){
|
5142
|
-
var relationshipPairs = this.store.relationshipChangePairsFor(this.firstRecord);
|
5143
|
-
forEach(relationshipPairs, function(pair) {
|
5144
|
-
var addedChange = pair['add'];
|
5145
|
-
var removedChange = pair['remove'];
|
5146
|
-
if (addedChange && removedChange) {
|
5147
|
-
addedChange.destroy();
|
5148
|
-
removedChange.destroy();
|
5149
|
-
}
|
5150
|
-
});
|
5151
|
-
}
|
5152
|
-
};
|
5153
|
-
|
5154
|
-
RelationshipChangeAdd.prototype = Ember.create(RelationshipChange.create({}));
|
5155
|
-
RelationshipChangeRemove.prototype = Ember.create(RelationshipChange.create({}));
|
5156
|
-
|
5157
|
-
RelationshipChangeAdd.prototype.changeType = 'add';
|
5158
|
-
RelationshipChangeAdd.prototype.sync = function() {
|
5159
|
-
var secondRecordName = this.getSecondRecordName();
|
5160
|
-
var firstRecordName = this.getFirstRecordName();
|
5161
|
-
var firstRecord = this.getFirstRecord();
|
5162
|
-
var secondRecord = this.getSecondRecord();
|
5163
|
-
|
5164
|
-
//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);
|
5165
|
-
//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);
|
5166
|
-
|
5167
|
-
if (secondRecord instanceof Model && firstRecord instanceof Model) {
|
5168
|
-
if (this.secondRecordKind === 'belongsTo') {
|
5169
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5170
|
-
set(secondRecord, secondRecordName, firstRecord);
|
5171
|
-
});
|
5172
|
-
} else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5173
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5174
|
-
var relationship = get(secondRecord, secondRecordName);
|
5175
|
-
relationship.addObject(firstRecord);
|
5176
|
-
});
|
5177
|
-
}
|
5178
|
-
}
|
5179
|
-
|
5180
|
-
if (firstRecord instanceof Model && secondRecord instanceof Model && get(firstRecord, firstRecordName) !== secondRecord) {
|
5181
|
-
if (this.firstRecordKind === 'belongsTo') {
|
5182
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5183
|
-
set(firstRecord, firstRecordName, secondRecord);
|
5184
|
-
});
|
5185
|
-
} else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5186
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5187
|
-
var relationship = get(firstRecord, firstRecordName);
|
5188
|
-
relationship.addObject(secondRecord);
|
5189
|
-
});
|
5190
|
-
}
|
5191
|
-
}
|
5192
|
-
this.coalesce();
|
5193
|
-
};
|
5194
|
-
|
5195
|
-
RelationshipChangeRemove.prototype.changeType = 'remove';
|
5196
|
-
RelationshipChangeRemove.prototype.sync = function() {
|
5197
|
-
var secondRecordName = this.getSecondRecordName();
|
5198
|
-
var firstRecordName = this.getFirstRecordName();
|
5199
|
-
var firstRecord = this.getFirstRecord();
|
5200
|
-
var secondRecord = this.getSecondRecord();
|
5201
|
-
|
5202
|
-
//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);
|
5203
|
-
//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);
|
5204
|
-
|
5205
|
-
if (secondRecord instanceof Model && firstRecord instanceof Model) {
|
5206
|
-
if (this.secondRecordKind === 'belongsTo') {
|
5207
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5208
|
-
set(secondRecord, secondRecordName, null);
|
5209
|
-
});
|
5210
|
-
} else if (this.secondRecordKind === 'hasMany' && isSyncRelationship(secondRecord, secondRecordName)) {
|
5211
|
-
secondRecord.suspendRelationshipObservers(function() {
|
5212
|
-
var relationship = get(secondRecord, secondRecordName);
|
5213
|
-
relationship.removeObject(firstRecord);
|
5214
|
-
});
|
5215
|
-
}
|
5216
|
-
}
|
5217
|
-
|
5218
|
-
if (firstRecord instanceof Model && get(firstRecord, firstRecordName)) {
|
5219
|
-
if (this.firstRecordKind === 'belongsTo') {
|
5220
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5221
|
-
set(firstRecord, firstRecordName, null);
|
5222
|
-
});
|
5223
|
-
} else if (this.firstRecordKind === 'hasMany' && isSyncRelationship(firstRecord, firstRecordName)) {
|
5224
|
-
firstRecord.suspendRelationshipObservers(function() {
|
5225
|
-
var relationship = get(firstRecord, firstRecordName);
|
5226
|
-
relationship.removeObject(secondRecord);
|
5227
|
-
});
|
5228
|
-
}
|
5229
|
-
}
|
5230
|
-
|
5231
|
-
this.coalesce();
|
5232
|
-
};
|
5233
|
-
|
5234
|
-
__exports__.RelationshipChange = RelationshipChange;
|
5235
|
-
__exports__.RelationshipChangeAdd = RelationshipChangeAdd;
|
5236
|
-
__exports__.RelationshipChangeRemove = RelationshipChangeRemove;
|
5237
|
-
__exports__.OneToManyChange = OneToManyChange;
|
5238
|
-
__exports__.ManyToNoneChange = ManyToNoneChange;
|
5239
|
-
__exports__.OneToOneChange = OneToOneChange;
|
5240
|
-
__exports__.ManyToManyChange = ManyToManyChange;
|
5241
|
-
});
|
5242
4830
|
define("ember-data/system/container_proxy",
|
5243
4831
|
["exports"],
|
5244
4832
|
function(__exports__) {
|
@@ -5279,7 +4867,7 @@ define("ember-data/system/container_proxy",
|
|
5279
4867
|
};
|
5280
4868
|
|
5281
4869
|
ContainerProxy.prototype.registerDeprecations = function(proxyPairs) {
|
5282
|
-
var i, proxyPair, deprecated, valid
|
4870
|
+
var i, proxyPair, deprecated, valid;
|
5283
4871
|
|
5284
4872
|
for (i = proxyPairs.length; i > 0; i--) {
|
5285
4873
|
proxyPair = proxyPairs[i - 1];
|
@@ -6173,12 +5761,14 @@ define("ember-data/system/model/errors",
|
|
6173
5761
|
});
|
6174
5762
|
});
|
6175
5763
|
define("ember-data/system/model/model",
|
6176
|
-
["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/
|
6177
|
-
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
5764
|
+
["ember-data/system/model/states","ember-data/system/model/errors","ember-data/system/promise_proxies","ember-data/system/relationships/relationship","exports"],
|
5765
|
+
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
|
6178
5766
|
"use strict";
|
6179
5767
|
var RootState = __dependency1__["default"];
|
6180
5768
|
var Errors = __dependency2__["default"];
|
6181
5769
|
var PromiseObject = __dependency3__.PromiseObject;
|
5770
|
+
var createRelationshipFor = __dependency4__.createRelationshipFor;
|
5771
|
+
|
6182
5772
|
/**
|
6183
5773
|
@module ember-data
|
6184
5774
|
*/
|
@@ -6188,6 +5778,7 @@ define("ember-data/system/model/model",
|
|
6188
5778
|
var merge = Ember.merge;
|
6189
5779
|
var Promise = Ember.RSVP.Promise;
|
6190
5780
|
var forEach = Ember.ArrayPolyfills.forEach;
|
5781
|
+
var map = Ember.ArrayPolyfills.map;
|
6191
5782
|
|
6192
5783
|
var JSONSerializer;
|
6193
5784
|
var retrieveFromCurrentState = Ember.computed('currentState', function(key, value) {
|
@@ -6620,6 +6211,12 @@ define("ember-data/system/model/model",
|
|
6620
6211
|
this._attributes = {};
|
6621
6212
|
this._inFlightAttributes = {};
|
6622
6213
|
this._relationships = {};
|
6214
|
+
var model = this;
|
6215
|
+
//TODO Move into a getter for better perf
|
6216
|
+
this.constructor.eachRelationship(function(key, descriptor) {
|
6217
|
+
model._relationships[key] = createRelationshipFor(model, descriptor, model.store);
|
6218
|
+
});
|
6219
|
+
|
6623
6220
|
},
|
6624
6221
|
|
6625
6222
|
/**
|
@@ -6802,13 +6399,11 @@ define("ember-data/system/model/model",
|
|
6802
6399
|
*/
|
6803
6400
|
clearRelationships: function() {
|
6804
6401
|
this.eachRelationship(function(name, relationship) {
|
6805
|
-
|
6806
|
-
|
6807
|
-
|
6808
|
-
|
6809
|
-
|
6810
|
-
hasMany.destroy();
|
6811
|
-
}
|
6402
|
+
var rel = this._relationships[name];
|
6403
|
+
if (rel){
|
6404
|
+
//TODO(Igor) figure out whether we want to clear or disconnect
|
6405
|
+
rel.clear();
|
6406
|
+
rel.destroy();
|
6812
6407
|
}
|
6813
6408
|
}, this);
|
6814
6409
|
},
|
@@ -6823,9 +6418,9 @@ define("ember-data/system/model/model",
|
|
6823
6418
|
},
|
6824
6419
|
|
6825
6420
|
/**
|
6826
|
-
When a find request is triggered on the store, the user can optionally
|
6421
|
+
When a find request is triggered on the store, the user can optionally pass in
|
6827
6422
|
attributes and relationships to be preloaded. These are meant to behave as if they
|
6828
|
-
came back from the server,
|
6423
|
+
came back from the server, except the user obtained them out of band and is informing
|
6829
6424
|
the store of their existence. The most common use case is for supporting client side
|
6830
6425
|
nested URLs, such as `/posts/1/comments/2` so the user can do
|
6831
6426
|
`store.find('comment', 2, {post:1})` without having to fetch the post.
|
@@ -6864,15 +6459,20 @@ define("ember-data/system/model/model",
|
|
6864
6459
|
_preloadHasMany: function(key, preloadValue, type) {
|
6865
6460
|
var record = this;
|
6866
6461
|
|
6867
|
-
|
6868
|
-
|
6869
|
-
get(record, key).pushObject(recordToPush);
|
6462
|
+
var recordsToSet = map.call(preloadValue, function(recordToPush) {
|
6463
|
+
return record._convertStringOrNumberIntoRecord(recordToPush, type);
|
6870
6464
|
});
|
6465
|
+
//We use the pathway of setting the hasMany as if it came from the adapter
|
6466
|
+
//because the user told us that they know this relationships exists already
|
6467
|
+
this._relationships[key].updateRecordsFromAdapter(recordsToSet);
|
6871
6468
|
},
|
6872
6469
|
|
6873
6470
|
_preloadBelongsTo: function(key, preloadValue, type){
|
6874
|
-
var
|
6875
|
-
|
6471
|
+
var recordToSet = this._convertStringOrNumberIntoRecord(preloadValue, type);
|
6472
|
+
|
6473
|
+
//We use the pathway of setting the hasMany as if it came from the adapter
|
6474
|
+
//because the user told us that they know this relationships exists already
|
6475
|
+
this._relationships[key].setRecord(recordToSet);
|
6876
6476
|
},
|
6877
6477
|
|
6878
6478
|
_convertStringOrNumberIntoRecord: function(value, type) {
|
@@ -6947,9 +6547,7 @@ define("ember-data/system/model/model",
|
|
6947
6547
|
|
6948
6548
|
if (!data) { return; }
|
6949
6549
|
|
6950
|
-
this.
|
6951
|
-
this.notifyPropertyChange('data');
|
6952
|
-
});
|
6550
|
+
this.notifyPropertyChange('data');
|
6953
6551
|
},
|
6954
6552
|
|
6955
6553
|
/**
|
@@ -6961,32 +6559,6 @@ define("ember-data/system/model/model",
|
|
6961
6559
|
this.updateRecordArraysLater();
|
6962
6560
|
},
|
6963
6561
|
|
6964
|
-
dataDidChange: Ember.observer(function() {
|
6965
|
-
this.reloadHasManys();
|
6966
|
-
}, 'data'),
|
6967
|
-
|
6968
|
-
reloadHasManys: function() {
|
6969
|
-
var relationships = get(this.constructor, 'relationshipsByName');
|
6970
|
-
this.updateRecordArraysLater();
|
6971
|
-
relationships.forEach(function(name, relationship) {
|
6972
|
-
if (this._data.links && this._data.links[name]) { return; }
|
6973
|
-
if (relationship.kind === 'hasMany') {
|
6974
|
-
this.hasManyDidChange(relationship.key);
|
6975
|
-
}
|
6976
|
-
}, this);
|
6977
|
-
},
|
6978
|
-
|
6979
|
-
hasManyDidChange: function(key) {
|
6980
|
-
var hasMany = this._relationships[key];
|
6981
|
-
|
6982
|
-
if (hasMany) {
|
6983
|
-
var records = this._data[key] || [];
|
6984
|
-
|
6985
|
-
set(hasMany, 'content', Ember.A(records));
|
6986
|
-
set(hasMany, 'isLoaded', true);
|
6987
|
-
hasMany.trigger('didLoad');
|
6988
|
-
}
|
6989
|
-
},
|
6990
6562
|
|
6991
6563
|
/**
|
6992
6564
|
@method updateRecordArraysLater
|
@@ -7014,18 +6586,9 @@ define("ember-data/system/model/model",
|
|
7014
6586
|
this._data = data;
|
7015
6587
|
}
|
7016
6588
|
|
7017
|
-
var relationships = this._relationships;
|
7018
|
-
|
7019
|
-
this.eachRelationship(function(name, rel) {
|
7020
|
-
if (data.links && data.links[name]) { return; }
|
7021
|
-
if (rel.options.async) { relationships[name] = null; }
|
7022
|
-
});
|
7023
|
-
|
7024
6589
|
if (data) { this.pushedData(); }
|
7025
6590
|
|
7026
|
-
this.
|
7027
|
-
this.notifyPropertyChange('data');
|
7028
|
-
});
|
6591
|
+
this.notifyPropertyChange('data');
|
7029
6592
|
},
|
7030
6593
|
|
7031
6594
|
materializeId: function(id) {
|
@@ -7040,27 +6603,6 @@ define("ember-data/system/model/model",
|
|
7040
6603
|
this._data[name] = value;
|
7041
6604
|
},
|
7042
6605
|
|
7043
|
-
/**
|
7044
|
-
@method updateHasMany
|
7045
|
-
@private
|
7046
|
-
@param {String} name
|
7047
|
-
@param {Array} records
|
7048
|
-
*/
|
7049
|
-
updateHasMany: function(name, records) {
|
7050
|
-
this._data[name] = records;
|
7051
|
-
this.hasManyDidChange(name);
|
7052
|
-
},
|
7053
|
-
|
7054
|
-
/**
|
7055
|
-
@method updateBelongsTo
|
7056
|
-
@private
|
7057
|
-
@param {String} name
|
7058
|
-
@param {DS.Model} record
|
7059
|
-
*/
|
7060
|
-
updateBelongsTo: function(name, record) {
|
7061
|
-
this._data[name] = record;
|
7062
|
-
},
|
7063
|
-
|
7064
6606
|
/**
|
7065
6607
|
If the model `isDirty` this function will discard any unsaved
|
7066
6608
|
changes
|
@@ -7091,48 +6633,13 @@ define("ember-data/system/model/model",
|
|
7091
6633
|
|
7092
6634
|
this.send('rolledBack');
|
7093
6635
|
|
7094
|
-
this.
|
7095
|
-
this.notifyPropertyChange('data');
|
7096
|
-
});
|
6636
|
+
this.notifyPropertyChange('data');
|
7097
6637
|
},
|
7098
6638
|
|
7099
6639
|
toStringExtension: function() {
|
7100
6640
|
return get(this, 'id');
|
7101
6641
|
},
|
7102
6642
|
|
7103
|
-
/**
|
7104
|
-
The goal of this method is to temporarily disable specific observers
|
7105
|
-
that take action in response to application changes.
|
7106
|
-
|
7107
|
-
This allows the system to make changes (such as materialization and
|
7108
|
-
rollback) that should not trigger secondary behavior (such as setting an
|
7109
|
-
inverse relationship or marking records as dirty).
|
7110
|
-
|
7111
|
-
The specific implementation will likely change as Ember proper provides
|
7112
|
-
better infrastructure for suspending groups of observers, and if Array
|
7113
|
-
observation becomes more unified with regular observers.
|
7114
|
-
|
7115
|
-
@method suspendRelationshipObservers
|
7116
|
-
@private
|
7117
|
-
@param callback
|
7118
|
-
@param binding
|
7119
|
-
*/
|
7120
|
-
suspendRelationshipObservers: function(callback, binding) {
|
7121
|
-
var observers = get(this.constructor, 'relationshipNames').belongsTo;
|
7122
|
-
var self = this;
|
7123
|
-
|
7124
|
-
try {
|
7125
|
-
this._suspendedRelationships = true;
|
7126
|
-
Ember._suspendObservers(self, observers, null, 'belongsToDidChange', function() {
|
7127
|
-
Ember._suspendBeforeObservers(self, observers, null, 'belongsToWillChange', function() {
|
7128
|
-
callback.call(binding || self);
|
7129
|
-
});
|
7130
|
-
});
|
7131
|
-
} finally {
|
7132
|
-
this._suspendedRelationships = false;
|
7133
|
-
}
|
7134
|
-
},
|
7135
|
-
|
7136
6643
|
/**
|
7137
6644
|
Save the record and persist any changes to the record to an
|
7138
6645
|
extenal source via the adapter.
|
@@ -7498,18 +7005,6 @@ define("ember-data/system/model/states",
|
|
7498
7005
|
@class RootState
|
7499
7006
|
*/
|
7500
7007
|
|
7501
|
-
function hasDefinedProperties(object) {
|
7502
|
-
// Ignore internal property defined by simulated `Ember.create`.
|
7503
|
-
var names = Ember.keys(object);
|
7504
|
-
var i, l, name;
|
7505
|
-
for (i = 0, l = names.length; i < l; i++ ) {
|
7506
|
-
name = names[i];
|
7507
|
-
if (object.hasOwnProperty(name) && object[name]) { return true; }
|
7508
|
-
}
|
7509
|
-
|
7510
|
-
return false;
|
7511
|
-
}
|
7512
|
-
|
7513
7008
|
function didSetProperty(record, context) {
|
7514
7009
|
if (context.value === context.originalValue) {
|
7515
7010
|
delete record._attributes[context.name];
|
@@ -7584,12 +7079,8 @@ define("ember-data/system/model/states",
|
|
7584
7079
|
loadingData: Ember.K,
|
7585
7080
|
|
7586
7081
|
propertyWasReset: function(record, name) {
|
7587
|
-
var
|
7588
|
-
|
7589
|
-
for (var prop in record._attributes) {
|
7590
|
-
stillDirty = true;
|
7591
|
-
break;
|
7592
|
-
}
|
7082
|
+
var length = Ember.keys(record._attributes);
|
7083
|
+
var stillDirty = length > 0;
|
7593
7084
|
|
7594
7085
|
if (!stillDirty) { record.send('rolledBack'); }
|
7595
7086
|
},
|
@@ -7812,10 +7303,7 @@ define("ember-data/system/model/states",
|
|
7812
7303
|
|
7813
7304
|
loadedData: function(record) {
|
7814
7305
|
record.transitionTo('loaded.created.uncommitted');
|
7815
|
-
|
7816
|
-
record.suspendRelationshipObservers(function() {
|
7817
|
-
record.notifyPropertyChange('data');
|
7818
|
-
});
|
7306
|
+
record.notifyPropertyChange('data');
|
7819
7307
|
},
|
7820
7308
|
|
7821
7309
|
pushedData: function(record) {
|
@@ -8059,6 +7547,91 @@ define("ember-data/system/model/states",
|
|
8059
7547
|
|
8060
7548
|
__exports__["default"] = RootState;
|
8061
7549
|
});
|
7550
|
+
define("ember-data/system/promise_proxies",
|
7551
|
+
["exports"],
|
7552
|
+
function(__exports__) {
|
7553
|
+
"use strict";
|
7554
|
+
var Promise = Ember.RSVP.Promise;
|
7555
|
+
|
7556
|
+
/**
|
7557
|
+
A `PromiseArray` is an object that acts like both an `Ember.Array`
|
7558
|
+
and a promise. When the promise is resolved the resulting value
|
7559
|
+
will be set to the `PromiseArray`'s `content` property. This makes
|
7560
|
+
it easy to create data bindings with the `PromiseArray` that will be
|
7561
|
+
updated when the promise resolves.
|
7562
|
+
|
7563
|
+
For more information see the [Ember.PromiseProxyMixin
|
7564
|
+
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
7565
|
+
|
7566
|
+
Example
|
7567
|
+
|
7568
|
+
```javascript
|
7569
|
+
var promiseArray = DS.PromiseArray.create({
|
7570
|
+
promise: $.getJSON('/some/remote/data.json')
|
7571
|
+
});
|
7572
|
+
|
7573
|
+
promiseArray.get('length'); // 0
|
7574
|
+
|
7575
|
+
promiseArray.then(function() {
|
7576
|
+
promiseArray.get('length'); // 100
|
7577
|
+
});
|
7578
|
+
```
|
7579
|
+
|
7580
|
+
@class PromiseArray
|
7581
|
+
@namespace DS
|
7582
|
+
@extends Ember.ArrayProxy
|
7583
|
+
@uses Ember.PromiseProxyMixin
|
7584
|
+
*/
|
7585
|
+
var PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
|
7586
|
+
|
7587
|
+
/**
|
7588
|
+
A `PromiseObject` is an object that acts like both an `Ember.Object`
|
7589
|
+
and a promise. When the promise is resolved, then the resulting value
|
7590
|
+
will be set to the `PromiseObject`'s `content` property. This makes
|
7591
|
+
it easy to create data bindings with the `PromiseObject` that will
|
7592
|
+
be updated when the promise resolves.
|
7593
|
+
|
7594
|
+
For more information see the [Ember.PromiseProxyMixin
|
7595
|
+
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
7596
|
+
|
7597
|
+
Example
|
7598
|
+
|
7599
|
+
```javascript
|
7600
|
+
var promiseObject = DS.PromiseObject.create({
|
7601
|
+
promise: $.getJSON('/some/remote/data.json')
|
7602
|
+
});
|
7603
|
+
|
7604
|
+
promiseObject.get('name'); // null
|
7605
|
+
|
7606
|
+
promiseObject.then(function() {
|
7607
|
+
promiseObject.get('name'); // 'Tomster'
|
7608
|
+
});
|
7609
|
+
```
|
7610
|
+
|
7611
|
+
@class PromiseObject
|
7612
|
+
@namespace DS
|
7613
|
+
@extends Ember.ObjectProxy
|
7614
|
+
@uses Ember.PromiseProxyMixin
|
7615
|
+
*/
|
7616
|
+
var PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
7617
|
+
|
7618
|
+
var promiseObject = function(promise, label) {
|
7619
|
+
return PromiseObject.create({
|
7620
|
+
promise: Promise.resolve(promise, label)
|
7621
|
+
});
|
7622
|
+
};
|
7623
|
+
|
7624
|
+
var promiseArray = function(promise, label) {
|
7625
|
+
return PromiseArray.create({
|
7626
|
+
promise: Promise.resolve(promise, label)
|
7627
|
+
});
|
7628
|
+
};
|
7629
|
+
|
7630
|
+
__exports__.PromiseArray = PromiseArray;
|
7631
|
+
__exports__.PromiseObject = PromiseObject;
|
7632
|
+
__exports__.promiseArray = promiseArray;
|
7633
|
+
__exports__.promiseObject = promiseObject;
|
7634
|
+
});
|
8062
7635
|
define("ember-data/system/record_array_manager",
|
8063
7636
|
["ember-data/system/record_arrays","exports"],
|
8064
7637
|
function(__dependency1__, __exports__) {
|
@@ -8072,7 +7645,6 @@ define("ember-data/system/record_array_manager",
|
|
8072
7645
|
var AdapterPopulatedRecordArray = __dependency1__.AdapterPopulatedRecordArray;
|
8073
7646
|
var ManyArray = __dependency1__.ManyArray;
|
8074
7647
|
var get = Ember.get;
|
8075
|
-
var set = Ember.set;
|
8076
7648
|
var forEach = Ember.EnumerableUtils.forEach;
|
8077
7649
|
|
8078
7650
|
/**
|
@@ -8397,7 +7969,6 @@ define("ember-data/system/record_arrays/adapter_populated_record_array",
|
|
8397
7969
|
*/
|
8398
7970
|
|
8399
7971
|
var get = Ember.get;
|
8400
|
-
var set = Ember.set;
|
8401
7972
|
|
8402
7973
|
function cloneNull(source) {
|
8403
7974
|
var clone = Object.create(null);
|
@@ -8523,22 +8094,16 @@ define("ember-data/system/record_arrays/filtered_record_array",
|
|
8523
8094
|
});
|
8524
8095
|
});
|
8525
8096
|
define("ember-data/system/record_arrays/many_array",
|
8526
|
-
["ember-data/system/record_arrays/record_array","
|
8527
|
-
function(__dependency1__,
|
8097
|
+
["ember-data/system/record_arrays/record_array","exports"],
|
8098
|
+
function(__dependency1__, __exports__) {
|
8528
8099
|
"use strict";
|
8529
8100
|
var RecordArray = __dependency1__["default"];
|
8530
|
-
var RelationshipChange = __dependency2__.RelationshipChange;
|
8531
8101
|
|
8532
8102
|
/**
|
8533
8103
|
@module ember-data
|
8534
8104
|
*/
|
8535
8105
|
|
8536
8106
|
var get = Ember.get, set = Ember.set;
|
8537
|
-
var map = Ember.EnumerableUtils.map;
|
8538
|
-
|
8539
|
-
function sync(change) {
|
8540
|
-
change.sync();
|
8541
|
-
}
|
8542
8107
|
|
8543
8108
|
/**
|
8544
8109
|
A `ManyArray` is a `RecordArray` that represents the contents of a has-many
|
@@ -8579,7 +8144,6 @@ define("ember-data/system/record_arrays/many_array",
|
|
8579
8144
|
__exports__["default"] = RecordArray.extend({
|
8580
8145
|
init: function() {
|
8581
8146
|
this._super.apply(this, arguments);
|
8582
|
-
this._changesToSync = Ember.OrderedSet.create();
|
8583
8147
|
},
|
8584
8148
|
|
8585
8149
|
/**
|
@@ -8610,6 +8174,16 @@ define("ember-data/system/record_arrays/many_array",
|
|
8610
8174
|
|
8611
8175
|
isLoaded: false,
|
8612
8176
|
|
8177
|
+
/**
|
8178
|
+
The relationship which manages this array.
|
8179
|
+
|
8180
|
+
@property {DS.Model} owner
|
8181
|
+
@private
|
8182
|
+
*/
|
8183
|
+
|
8184
|
+
relationship: null,
|
8185
|
+
|
8186
|
+
|
8613
8187
|
/**
|
8614
8188
|
Used for async `hasMany` arrays
|
8615
8189
|
to keep track of when they will resolve.
|
@@ -8640,98 +8214,14 @@ define("ember-data/system/record_arrays/many_array",
|
|
8640
8214
|
}
|
8641
8215
|
},
|
8642
8216
|
|
8643
|
-
|
8644
|
-
|
8645
|
-
|
8646
|
-
|
8647
|
-
|
8648
|
-
var records = get(this, 'content');
|
8649
|
-
var store = get(this, 'store');
|
8650
|
-
var owner = get(this, 'owner');
|
8651
|
-
|
8652
|
-
var unloadedRecords = records.filterBy('isEmpty', true);
|
8653
|
-
store.scheduleFetchMany(unloadedRecords, owner);
|
8654
|
-
},
|
8655
|
-
|
8656
|
-
// Overrides Ember.Array's replace method to implement
|
8657
|
-
replaceContent: function(index, removed, added) {
|
8658
|
-
// Map the array of record objects into an array of client ids.
|
8659
|
-
added = map(added, function(record) {
|
8660
|
-
return record;
|
8661
|
-
}, this);
|
8662
|
-
|
8663
|
-
this._super(index, removed, added);
|
8664
|
-
},
|
8665
|
-
|
8666
|
-
arrangedContentDidChange: function() {
|
8667
|
-
Ember.run.once(this, 'fetch');
|
8668
|
-
},
|
8669
|
-
|
8670
|
-
arrayContentWillChange: function(index, removed, added) {
|
8671
|
-
var owner = get(this, 'owner');
|
8672
|
-
var name = get(this, 'name');
|
8673
|
-
|
8674
|
-
if (!owner._suspendedRelationships) {
|
8675
|
-
// This code is the first half of code that continues inside
|
8676
|
-
// of arrayContentDidChange. It gets or creates a change from
|
8677
|
-
// the child object, adds the current owner as the old
|
8678
|
-
// parent if this is the first time the object was removed
|
8679
|
-
// from a ManyArray, and sets `newParent` to null.
|
8680
|
-
//
|
8681
|
-
// Later, if the object is added to another ManyArray,
|
8682
|
-
// the `arrayContentDidChange` will set `newParent` on
|
8683
|
-
// the change.
|
8684
|
-
for (var i=index; i<index+removed; i++) {
|
8685
|
-
var record = get(this, 'content').objectAt(i);
|
8686
|
-
|
8687
|
-
var change = RelationshipChange.createChange(owner, record, get(this, 'store'), {
|
8688
|
-
parentType: owner.constructor,
|
8689
|
-
changeType: "remove",
|
8690
|
-
kind: "hasMany",
|
8691
|
-
key: name
|
8692
|
-
});
|
8693
|
-
|
8694
|
-
this._changesToSync.add(change);
|
8695
|
-
}
|
8217
|
+
replaceContent: function(idx, amt, objects){
|
8218
|
+
var records;
|
8219
|
+
if (amt > 0){
|
8220
|
+
records = get(this, 'content').slice(idx, idx+amt);
|
8221
|
+
this.get('relationship').removeRecords(records);
|
8696
8222
|
}
|
8697
|
-
|
8698
|
-
|
8699
|
-
},
|
8700
|
-
|
8701
|
-
arrayContentDidChange: function(index, removed, added) {
|
8702
|
-
this._super.apply(this, arguments);
|
8703
|
-
|
8704
|
-
var owner = get(this, 'owner');
|
8705
|
-
var name = get(this, 'name');
|
8706
|
-
var store = get(this, 'store');
|
8707
|
-
|
8708
|
-
if (!owner._suspendedRelationships) {
|
8709
|
-
// This code is the second half of code that started in
|
8710
|
-
// `arrayContentWillChange`. It gets or creates a change
|
8711
|
-
// from the child object, and adds the current owner as
|
8712
|
-
// the new parent.
|
8713
|
-
for (var i=index; i<index+added; i++) {
|
8714
|
-
var record = get(this, 'content').objectAt(i);
|
8715
|
-
|
8716
|
-
var change = RelationshipChange.createChange(owner, record, store, {
|
8717
|
-
parentType: owner.constructor,
|
8718
|
-
changeType: "add",
|
8719
|
-
kind:"hasMany",
|
8720
|
-
key: name
|
8721
|
-
});
|
8722
|
-
change.hasManyName = name;
|
8723
|
-
|
8724
|
-
this._changesToSync.add(change);
|
8725
|
-
}
|
8726
|
-
|
8727
|
-
// We wait until the array has finished being
|
8728
|
-
// mutated before syncing the OneToManyChanges created
|
8729
|
-
// in arrayContentWillChange, so that the array
|
8730
|
-
// membership test in the sync() logic operates
|
8731
|
-
// on the final results.
|
8732
|
-
this._changesToSync.forEach(sync);
|
8733
|
-
|
8734
|
-
this._changesToSync.clear();
|
8223
|
+
if (objects){
|
8224
|
+
this.get('relationship').addRecords(objects, idx);
|
8735
8225
|
}
|
8736
8226
|
},
|
8737
8227
|
|
@@ -8744,8 +8234,7 @@ define("ember-data/system/record_arrays/many_array",
|
|
8744
8234
|
@return {DS.Model} record
|
8745
8235
|
*/
|
8746
8236
|
createRecord: function(hash) {
|
8747
|
-
var
|
8748
|
-
var store = get(owner, 'store');
|
8237
|
+
var store = get(this, 'store');
|
8749
8238
|
var type = get(this, 'type');
|
8750
8239
|
var record;
|
8751
8240
|
|
@@ -8758,7 +8247,7 @@ define("ember-data/system/record_arrays/many_array",
|
|
8758
8247
|
});
|
8759
8248
|
});
|
8760
8249
|
define("ember-data/system/record_arrays/record_array",
|
8761
|
-
["ember-data/system/
|
8250
|
+
["ember-data/system/promise_proxies","exports"],
|
8762
8251
|
function(__dependency1__, __exports__) {
|
8763
8252
|
"use strict";
|
8764
8253
|
/**
|
@@ -8767,7 +8256,6 @@ define("ember-data/system/record_arrays/record_array",
|
|
8767
8256
|
|
8768
8257
|
var PromiseArray = __dependency1__.PromiseArray;
|
8769
8258
|
var get = Ember.get;
|
8770
|
-
var set = Ember.set;
|
8771
8259
|
|
8772
8260
|
/**
|
8773
8261
|
A record array is an array that contains records of a certain type. The record
|
@@ -8887,9 +8375,17 @@ define("ember-data/system/record_arrays/record_array",
|
|
8887
8375
|
@method addRecord
|
8888
8376
|
@private
|
8889
8377
|
@param {DS.Model} record
|
8378
|
+
@param {DS.Model} an optional index to insert at
|
8890
8379
|
*/
|
8891
|
-
addRecord: function(record) {
|
8892
|
-
get(this, 'content')
|
8380
|
+
addRecord: function(record, idx) {
|
8381
|
+
var content = get(this, 'content');
|
8382
|
+
if (idx === undefined) {
|
8383
|
+
content.addObject(record);
|
8384
|
+
} else {
|
8385
|
+
if (!content.contains(record)) {
|
8386
|
+
content.insertAt(idx, record);
|
8387
|
+
}
|
8388
|
+
}
|
8893
8389
|
},
|
8894
8390
|
|
8895
8391
|
/**
|
@@ -8991,14 +8487,7 @@ define("ember-data/system/relationship-meta",
|
|
8991
8487
|
};
|
8992
8488
|
}
|
8993
8489
|
|
8994
|
-
__exports__.relationshipFromMeta = relationshipFromMeta;
|
8995
|
-
var meta = Ember.meta(record);
|
8996
|
-
var desc = meta.descs[relationshipName];
|
8997
|
-
|
8998
|
-
return desc && !desc._meta.options.async;
|
8999
|
-
}
|
9000
|
-
|
9001
|
-
__exports__.isSyncRelationship = isSyncRelationship;
|
8490
|
+
__exports__.relationshipFromMeta = relationshipFromMeta;
|
9002
8491
|
});
|
9003
8492
|
define("ember-data/system/relationships",
|
9004
8493
|
["./relationships/belongs_to","./relationships/has_many","ember-data/system/relationships/ext","exports"],
|
@@ -9016,64 +8505,11 @@ define("ember-data/system/relationships",
|
|
9016
8505
|
__exports__.hasMany = hasMany;
|
9017
8506
|
});
|
9018
8507
|
define("ember-data/system/relationships/belongs_to",
|
9019
|
-
["ember-data/system/model","
|
9020
|
-
function(__dependency1__,
|
8508
|
+
["ember-data/system/model","exports"],
|
8509
|
+
function(__dependency1__, __exports__) {
|
9021
8510
|
"use strict";
|
9022
|
-
var get = Ember.get;
|
9023
|
-
var set = Ember.set;
|
9024
|
-
var isNone = Ember.isNone;
|
9025
|
-
var Promise = Ember.RSVP.Promise;
|
9026
|
-
|
9027
8511
|
var Model = __dependency1__.Model;
|
9028
|
-
var PromiseObject = __dependency2__.PromiseObject;
|
9029
|
-
var RelationshipChange = __dependency3__.RelationshipChange;
|
9030
|
-
var relationshipFromMeta = __dependency4__.relationshipFromMeta;
|
9031
|
-
var typeForRelationshipMeta = __dependency4__.typeForRelationshipMeta;
|
9032
|
-
var isSyncRelationship = __dependency4__.isSyncRelationship;
|
9033
|
-
|
9034
|
-
/**
|
9035
|
-
@module ember-data
|
9036
|
-
*/
|
9037
|
-
|
9038
|
-
function asyncBelongsTo(type, options, meta) {
|
9039
|
-
return Ember.computed('data', function(key, value) {
|
9040
|
-
var data = get(this, 'data');
|
9041
|
-
var store = get(this, 'store');
|
9042
|
-
var promiseLabel = "DS: Async belongsTo " + this + " : " + key;
|
9043
|
-
var promise;
|
9044
|
-
|
9045
|
-
meta.key = key;
|
9046
|
-
|
9047
|
-
if (arguments.length === 2) {
|
9048
|
-
return value === undefined ? null : PromiseObject.create({
|
9049
|
-
promise: Promise.cast(value, promiseLabel)
|
9050
|
-
});
|
9051
|
-
}
|
9052
|
-
|
9053
|
-
var link = data.links && data.links[key];
|
9054
|
-
var belongsTo = data[key];
|
9055
8512
|
|
9056
|
-
if (!isNone(belongsTo)) {
|
9057
|
-
var inverse = this.constructor.inverseFor(key);
|
9058
|
-
//but for now only in the oneToOne case
|
9059
|
-
if (inverse && inverse.kind === 'belongsTo'){
|
9060
|
-
set(belongsTo, inverse.name, this);
|
9061
|
-
}
|
9062
|
-
//TODO(Igor) after OR doesn't seem that will be called
|
9063
|
-
promise = store.findById(belongsTo.constructor, belongsTo.get('id')) || Promise.cast(belongsTo, promiseLabel);
|
9064
|
-
return PromiseObject.create({
|
9065
|
-
promise: promise
|
9066
|
-
});
|
9067
|
-
} else if (link) {
|
9068
|
-
promise = store.findBelongsTo(this, link, relationshipFromMeta(store, meta));
|
9069
|
-
return PromiseObject.create({
|
9070
|
-
promise: promise
|
9071
|
-
});
|
9072
|
-
} else {
|
9073
|
-
return null;
|
9074
|
-
}
|
9075
|
-
}).meta(meta);
|
9076
|
-
}
|
9077
8513
|
|
9078
8514
|
/**
|
9079
8515
|
`DS.belongsTo` is used to define One-To-One and One-To-Many
|
@@ -9139,32 +8575,15 @@ define("ember-data/system/relationships/belongs_to",
|
|
9139
8575
|
key: null
|
9140
8576
|
};
|
9141
8577
|
|
9142
|
-
|
9143
|
-
|
9144
|
-
|
9145
|
-
|
9146
|
-
|
9147
|
-
|
9148
|
-
var store = get(this, 'store');
|
9149
|
-
var belongsTo, typeClass;
|
9150
|
-
|
9151
|
-
if (typeof type === 'string') {
|
9152
|
-
typeClass = store.modelFor(type);
|
9153
|
-
} else {
|
9154
|
-
typeClass = type;
|
9155
|
-
}
|
9156
|
-
|
9157
|
-
if (arguments.length === 2) {
|
9158
|
-
return value === undefined ? null : value;
|
8578
|
+
return Ember.computed(function(key, value) {
|
8579
|
+
if (arguments.length>1) {
|
8580
|
+
if ( value === undefined ) {
|
8581
|
+
value = null;
|
8582
|
+
}
|
8583
|
+
this._relationships[key].setRecord(value);
|
9159
8584
|
}
|
9160
8585
|
|
9161
|
-
|
9162
|
-
|
9163
|
-
if (isNone(belongsTo)) { return null; }
|
9164
|
-
|
9165
|
-
store.findById(belongsTo.constructor, belongsTo.get('id'));
|
9166
|
-
|
9167
|
-
return belongsTo;
|
8586
|
+
return this._relationships[key].getRecord();
|
9168
8587
|
}).meta(meta);
|
9169
8588
|
}
|
9170
8589
|
|
@@ -9176,72 +8595,26 @@ define("ember-data/system/relationships/belongs_to",
|
|
9176
8595
|
@namespace DS
|
9177
8596
|
*/
|
9178
8597
|
Model.reopen({
|
8598
|
+
notifyBelongsToAdded: function(key, relationship) {
|
8599
|
+
this.notifyPropertyChange(key);
|
8600
|
+
},
|
9179
8601
|
|
9180
|
-
|
9181
|
-
|
9182
|
-
|
9183
|
-
@static
|
9184
|
-
@param record
|
9185
|
-
@param key
|
9186
|
-
*/
|
9187
|
-
belongsToWillChange: Ember.beforeObserver(function(record, key) {
|
9188
|
-
if (get(record, 'isLoaded') && isSyncRelationship(record, key)) {
|
9189
|
-
var oldParent = get(record, key);
|
9190
|
-
|
9191
|
-
if (oldParent) {
|
9192
|
-
var store = get(record, 'store');
|
9193
|
-
var change = RelationshipChange.createChange(record, oldParent, store, {
|
9194
|
-
key: key,
|
9195
|
-
kind: 'belongsTo',
|
9196
|
-
changeType: 'remove'
|
9197
|
-
});
|
9198
|
-
|
9199
|
-
change.sync();
|
9200
|
-
this._changesToSync[key] = change;
|
9201
|
-
}
|
9202
|
-
}
|
9203
|
-
}),
|
9204
|
-
|
9205
|
-
/**
|
9206
|
-
@method belongsToDidChange
|
9207
|
-
@private
|
9208
|
-
@static
|
9209
|
-
@param record
|
9210
|
-
@param key
|
9211
|
-
*/
|
9212
|
-
belongsToDidChange: Ember.immediateObserver(function(record, key) {
|
9213
|
-
if (get(record, 'isLoaded')) {
|
9214
|
-
var newParent = get(record, key);
|
9215
|
-
|
9216
|
-
if (newParent) {
|
9217
|
-
var store = get(record, 'store');
|
9218
|
-
var change = RelationshipChange.createChange(record, newParent, store, {
|
9219
|
-
key: key,
|
9220
|
-
kind: 'belongsTo',
|
9221
|
-
changeType: 'add'
|
9222
|
-
});
|
9223
|
-
|
9224
|
-
change.sync();
|
9225
|
-
}
|
9226
|
-
}
|
9227
|
-
|
9228
|
-
delete this._changesToSync[key];
|
9229
|
-
})
|
8602
|
+
notifyBelongsToRemoved: function(key) {
|
8603
|
+
this.notifyPropertyChange(key);
|
8604
|
+
}
|
9230
8605
|
});
|
9231
8606
|
|
9232
8607
|
__exports__["default"] = belongsTo;
|
9233
8608
|
});
|
9234
8609
|
define("ember-data/system/relationships/ext",
|
9235
|
-
["ember-
|
9236
|
-
function(__dependency1__, __dependency2__
|
8610
|
+
["ember-data/system/relationship-meta","ember-data/system/model"],
|
8611
|
+
function(__dependency1__, __dependency2__) {
|
9237
8612
|
"use strict";
|
9238
|
-
var
|
9239
|
-
var
|
9240
|
-
var
|
9241
|
-
var Model = __dependency3__.Model;
|
8613
|
+
var typeForRelationshipMeta = __dependency1__.typeForRelationshipMeta;
|
8614
|
+
var relationshipFromMeta = __dependency1__.relationshipFromMeta;
|
8615
|
+
var Model = __dependency2__.Model;
|
9242
8616
|
|
9243
8617
|
var get = Ember.get;
|
9244
|
-
var set = Ember.set;
|
9245
8618
|
|
9246
8619
|
/**
|
9247
8620
|
@module ember-data
|
@@ -9293,11 +8666,6 @@ define("ember-data/system/relationships/ext",
|
|
9293
8666
|
// the computed property.
|
9294
8667
|
var meta = value.meta();
|
9295
8668
|
|
9296
|
-
if (meta.isRelationship && meta.kind === 'belongsTo') {
|
9297
|
-
Ember.addObserver(proto, key, null, 'belongsToDidChange');
|
9298
|
-
Ember.addBeforeObserver(proto, key, null, 'belongsToWillChange');
|
9299
|
-
}
|
9300
|
-
|
9301
8669
|
meta.parentType = proto.constructor;
|
9302
8670
|
}
|
9303
8671
|
}
|
@@ -9672,7 +9040,28 @@ define("ember-data/system/relationships/ext",
|
|
9672
9040
|
get(this, 'relatedTypes').forEach(function(type) {
|
9673
9041
|
callback.call(binding, type);
|
9674
9042
|
});
|
9043
|
+
},
|
9044
|
+
|
9045
|
+
determineRelationshipType: function(knownSide) {
|
9046
|
+
var knownKey = knownSide.key;
|
9047
|
+
var knownKind = knownSide.kind;
|
9048
|
+
var inverse = this.inverseFor(knownKey);
|
9049
|
+
var key, otherKind;
|
9050
|
+
|
9051
|
+
if (!inverse) {
|
9052
|
+
return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';
|
9053
|
+
}
|
9054
|
+
|
9055
|
+
key = inverse.name;
|
9056
|
+
otherKind = inverse.kind;
|
9057
|
+
|
9058
|
+
if (otherKind === 'belongsTo') {
|
9059
|
+
return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';
|
9060
|
+
} else {
|
9061
|
+
return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';
|
9062
|
+
}
|
9675
9063
|
}
|
9064
|
+
|
9676
9065
|
});
|
9677
9066
|
|
9678
9067
|
Model.reopen({
|
@@ -9687,124 +9076,27 @@ define("ember-data/system/relationships/ext",
|
|
9687
9076
|
*/
|
9688
9077
|
eachRelationship: function(callback, binding) {
|
9689
9078
|
this.constructor.eachRelationship(callback, binding);
|
9079
|
+
},
|
9080
|
+
|
9081
|
+
relationshipFor: function(name) {
|
9082
|
+
return get(this.constructor, 'relationshipsByName').get(name);
|
9083
|
+
},
|
9084
|
+
|
9085
|
+
inverseFor: function(key) {
|
9086
|
+
return this.constructor.inverseFor(key);
|
9690
9087
|
}
|
9088
|
+
|
9691
9089
|
});
|
9692
9090
|
});
|
9693
9091
|
define("ember-data/system/relationships/has_many",
|
9694
|
-
["ember-data/system/
|
9695
|
-
function(__dependency1__,
|
9092
|
+
["ember-data/system/model","exports"],
|
9093
|
+
function(__dependency1__, __exports__) {
|
9696
9094
|
"use strict";
|
9697
9095
|
/**
|
9698
9096
|
@module ember-data
|
9699
9097
|
*/
|
9700
9098
|
|
9701
|
-
var
|
9702
|
-
|
9703
|
-
var relationshipFromMeta = __dependency2__.relationshipFromMeta;
|
9704
|
-
var typeForRelationshipMeta = __dependency2__.typeForRelationshipMeta;
|
9705
|
-
|
9706
|
-
var get = Ember.get;
|
9707
|
-
var set = Ember.set;
|
9708
|
-
var setProperties = Ember.setProperties;
|
9709
|
-
var map = Ember.EnumerableUtils.map;
|
9710
|
-
|
9711
|
-
/**
|
9712
|
-
Returns a computed property that synchronously returns a ManyArray for
|
9713
|
-
this relationship. If not all of the records in this relationship are
|
9714
|
-
loaded, it will raise an exception.
|
9715
|
-
*/
|
9716
|
-
|
9717
|
-
function syncHasMany(type, options, meta) {
|
9718
|
-
return Ember.computed('data', function(key) {
|
9719
|
-
return buildRelationship(this, key, options, function(store, data) {
|
9720
|
-
// Configure the metadata for the computed property to contain
|
9721
|
-
// the key.
|
9722
|
-
meta.key = key;
|
9723
|
-
|
9724
|
-
var records = data[key];
|
9725
|
-
|
9726
|
-
|
9727
|
-
return store.findMany(this, data[key], typeForRelationshipMeta(store, meta));
|
9728
|
-
});
|
9729
|
-
}).meta(meta).readOnly();
|
9730
|
-
}
|
9731
|
-
|
9732
|
-
/**
|
9733
|
-
Returns a computed property that itself returns a promise that resolves to a
|
9734
|
-
ManyArray.
|
9735
|
-
*/
|
9736
|
-
|
9737
|
-
function asyncHasMany(type, options, meta) {
|
9738
|
-
return Ember.computed('data', function(key) {
|
9739
|
-
// Configure the metadata for the computed property to contain
|
9740
|
-
// the key.
|
9741
|
-
meta.key = key;
|
9742
|
-
|
9743
|
-
var relationship = buildRelationship(this, key, options, function(store, data) {
|
9744
|
-
var link = data.links && data.links[key];
|
9745
|
-
var rel;
|
9746
|
-
var promiseLabel = "DS: Async hasMany " + this + " : " + key;
|
9747
|
-
var resolver = Ember.RSVP.defer(promiseLabel);
|
9748
|
-
|
9749
|
-
if (link) {
|
9750
|
-
rel = store.findHasMany(this, link, relationshipFromMeta(store, meta), resolver);
|
9751
|
-
} else {
|
9752
|
-
|
9753
|
-
//This is a temporary workaround for setting owner on the relationship
|
9754
|
-
//until single source of truth lands. It only works for OneToMany atm
|
9755
|
-
var records = data[key];
|
9756
|
-
var inverse = this.constructor.inverseFor(key);
|
9757
|
-
var owner = this;
|
9758
|
-
if (inverse && records) {
|
9759
|
-
if (inverse.kind === 'belongsTo'){
|
9760
|
-
map(records, function(record){
|
9761
|
-
set(record, inverse.name, owner);
|
9762
|
-
});
|
9763
|
-
}
|
9764
|
-
}
|
9765
|
-
|
9766
|
-
rel = store.findMany(owner, data[key], typeForRelationshipMeta(store, meta), resolver);
|
9767
|
-
}
|
9768
|
-
|
9769
|
-
// Cache the promise so we can use it when we come back and don't
|
9770
|
-
// need to rebuild the relationship.
|
9771
|
-
set(rel, 'promise', resolver.promise);
|
9772
|
-
|
9773
|
-
return rel;
|
9774
|
-
});
|
9775
|
-
|
9776
|
-
var promise = relationship.get('promise').then(function() {
|
9777
|
-
return relationship;
|
9778
|
-
}, null, "DS: Async hasMany records received");
|
9779
|
-
|
9780
|
-
return PromiseArray.create({
|
9781
|
-
promise: promise
|
9782
|
-
});
|
9783
|
-
}).meta(meta).readOnly();
|
9784
|
-
}
|
9785
|
-
|
9786
|
-
/*
|
9787
|
-
Builds the ManyArray for a relationship using the provided callback,
|
9788
|
-
but only if it had not been created previously. After building, it
|
9789
|
-
sets some metadata on the created ManyArray, such as the record which
|
9790
|
-
owns it and the name of the relationship.
|
9791
|
-
*/
|
9792
|
-
function buildRelationship(record, key, options, callback) {
|
9793
|
-
var rels = record._relationships;
|
9794
|
-
|
9795
|
-
if (rels[key]) { return rels[key]; }
|
9796
|
-
|
9797
|
-
var data = get(record, 'data');
|
9798
|
-
var store = get(record, 'store');
|
9799
|
-
|
9800
|
-
var relationship = rels[key] = callback.call(record, store, data);
|
9801
|
-
|
9802
|
-
return setProperties(relationship, {
|
9803
|
-
owner: record,
|
9804
|
-
name: key,
|
9805
|
-
isPolymorphic: options.polymorphic
|
9806
|
-
});
|
9807
|
-
}
|
9099
|
+
var Model = __dependency1__.Model;
|
9808
9100
|
|
9809
9101
|
/**
|
9810
9102
|
`DS.hasMany` is used to define One-To-Many and Many-To-Many
|
@@ -9904,18 +9196,313 @@ define("ember-data/system/relationships/has_many",
|
|
9904
9196
|
key: null
|
9905
9197
|
};
|
9906
9198
|
|
9907
|
-
|
9908
|
-
|
9199
|
+
return Ember.computed(function(key) {
|
9200
|
+
var relationship = this._relationships[key];
|
9201
|
+
return relationship.getRecords();
|
9202
|
+
}).meta(meta).readOnly();
|
9203
|
+
}
|
9204
|
+
|
9205
|
+
Model.reopen({
|
9206
|
+
notifyHasManyAdded: function(key, record, idx) {
|
9207
|
+
var relationship = this._relationships[key];
|
9208
|
+
var manyArray = relationship.manyArray;
|
9209
|
+
manyArray.addRecord(record, idx);
|
9210
|
+
//We need to notifyPropertyChange in the adding case because we need to make sure
|
9211
|
+
//we fetch the newly added record in case it is unloaded
|
9212
|
+
//TODO(Igor): Consider whether we could do this only if the record state is unloaded
|
9213
|
+
this.notifyPropertyChange(key);
|
9214
|
+
},
|
9215
|
+
|
9216
|
+
notifyHasManyRemoved: function(key, record) {
|
9217
|
+
var relationship = this._relationships[key];
|
9218
|
+
var manyArray = relationship.manyArray;
|
9219
|
+
manyArray.removeRecord(record);
|
9220
|
+
}
|
9221
|
+
});
|
9222
|
+
|
9223
|
+
|
9224
|
+
__exports__["default"] = hasMany;
|
9225
|
+
});
|
9226
|
+
define("ember-data/system/relationships/relationship",
|
9227
|
+
["ember-data/system/promise_proxies","exports"],
|
9228
|
+
function(__dependency1__, __exports__) {
|
9229
|
+
"use strict";
|
9230
|
+
var PromiseArray = __dependency1__.PromiseArray;
|
9231
|
+
var PromiseObject = __dependency1__.PromiseObject;
|
9232
|
+
|
9233
|
+
var Relationship = function(store, record, inverseKey, relationshipMeta) {
|
9234
|
+
this.members = new Ember.OrderedSet();
|
9235
|
+
this.store = store;
|
9236
|
+
this.key = relationshipMeta.key;
|
9237
|
+
this.inverseKey = inverseKey;
|
9238
|
+
this.record = record;
|
9239
|
+
this.key = relationshipMeta.key;
|
9240
|
+
this.isAsync = relationshipMeta.options.async;
|
9241
|
+
this.relationshipMeta = relationshipMeta;
|
9242
|
+
};
|
9243
|
+
|
9244
|
+
Relationship.prototype = {
|
9245
|
+
constructor: Relationship,
|
9246
|
+
hasFetchedLink: false,
|
9247
|
+
|
9248
|
+
destroy: Ember.K,
|
9249
|
+
|
9250
|
+
clear: function() {
|
9251
|
+
this.members.forEach(function(member) {
|
9252
|
+
this.removeRecord(member);
|
9253
|
+
}, this);
|
9254
|
+
},
|
9255
|
+
|
9256
|
+
removeRecords: function(records){
|
9257
|
+
var that = this;
|
9258
|
+
records.forEach(function(record){
|
9259
|
+
that.removeRecord(record);
|
9260
|
+
});
|
9261
|
+
},
|
9262
|
+
|
9263
|
+
addRecords: function(records, idx){
|
9264
|
+
var that = this;
|
9265
|
+
records.forEach(function(record){
|
9266
|
+
that.addRecord(record, idx);
|
9267
|
+
if (idx !== undefined) {
|
9268
|
+
idx++;
|
9269
|
+
}
|
9270
|
+
});
|
9271
|
+
},
|
9272
|
+
|
9273
|
+
|
9274
|
+
addRecord: function(record, idx) {
|
9275
|
+
if (!this.members.has(record)) {
|
9276
|
+
this.members.add(record);
|
9277
|
+
this.notifyRecordRelationshipAdded(record, idx);
|
9278
|
+
if (this.inverseKey) {
|
9279
|
+
record._relationships[this.inverseKey].addRecord(this.record);
|
9280
|
+
}
|
9281
|
+
this.record.updateRecordArrays();
|
9282
|
+
}
|
9283
|
+
},
|
9284
|
+
|
9285
|
+
removeRecord: function(record) {
|
9286
|
+
if (this.members.has(record)) {
|
9287
|
+
this.members.remove(record);
|
9288
|
+
this.notifyRecordRelationshipRemoved(record);
|
9289
|
+
if (this.inverseKey) {
|
9290
|
+
var inverseRelationship = record._relationships[this.inverseKey];
|
9291
|
+
//Need to check for existence, as the record might unloading at the moment
|
9292
|
+
if (inverseRelationship) {
|
9293
|
+
inverseRelationship.removeRecord(this.record);
|
9294
|
+
}
|
9295
|
+
}
|
9296
|
+
this.record.updateRecordArrays();
|
9297
|
+
}
|
9298
|
+
},
|
9299
|
+
|
9300
|
+
updateLink: function(link) {
|
9301
|
+
if (link !== this.link) {
|
9302
|
+
this.link = link;
|
9303
|
+
this.hasFetchedLink = false;
|
9304
|
+
this.record.notifyPropertyChange(this.key);
|
9305
|
+
}
|
9306
|
+
},
|
9307
|
+
|
9308
|
+
updateRecordsFromAdapter: function(records) {
|
9309
|
+
//TODO Once we have adapter support, we need to handle updated and canonical changes
|
9310
|
+
this.computeChanges(records);
|
9311
|
+
}
|
9312
|
+
};
|
9313
|
+
|
9314
|
+
var ManyRelationship = function(store, record, inverseKey, relationshipMeta) {
|
9315
|
+
this._super$constructor(store, record, inverseKey, relationshipMeta);
|
9316
|
+
this.belongsToType = relationshipMeta.type;
|
9317
|
+
this.manyArray = store.recordArrayManager.createManyArray(this.belongsToType, Ember.A());
|
9318
|
+
this.manyArray.relationship = this;
|
9319
|
+
this.isPolymorphic = relationshipMeta.options.polymorphic;
|
9320
|
+
this.manyArray.isPolymorphic = this.isPolymorphic;
|
9321
|
+
};
|
9322
|
+
|
9323
|
+
ManyRelationship.prototype = Object.create(Relationship.prototype);
|
9324
|
+
ManyRelationship.prototype.constructor = ManyRelationship;
|
9325
|
+
ManyRelationship.prototype._super$constructor = Relationship;
|
9326
|
+
|
9327
|
+
ManyRelationship.prototype.destroy = function() {
|
9328
|
+
this.manyArray.destroy();
|
9329
|
+
};
|
9330
|
+
|
9331
|
+
ManyRelationship.prototype.notifyRecordRelationshipAdded = function(record, idx) {
|
9332
|
+
this.record.notifyHasManyAdded(this.key, record, idx);
|
9333
|
+
};
|
9334
|
+
|
9335
|
+
ManyRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
|
9336
|
+
this.record.notifyHasManyRemoved(this.key, record);
|
9337
|
+
};
|
9338
|
+
|
9339
|
+
ManyRelationship.prototype.computeChanges = function(records) {
|
9340
|
+
var members = this.members;
|
9341
|
+
|
9342
|
+
records = setForArray(records);
|
9343
|
+
|
9344
|
+
members.forEach(function(member) {
|
9345
|
+
if (records.has(member)) return;
|
9346
|
+
|
9347
|
+
this.removeRecord(member);
|
9348
|
+
}, this);
|
9349
|
+
|
9350
|
+
var hasManyArray = this.manyArray;
|
9351
|
+
|
9352
|
+
records.forEach(function(record, index) {
|
9353
|
+
//Need to preserve the order of incoming records
|
9354
|
+
if (hasManyArray.objectAt(index) === record ) return;
|
9355
|
+
|
9356
|
+
this.removeRecord(record);
|
9357
|
+
this.addRecord(record, index);
|
9358
|
+
}, this);
|
9359
|
+
};
|
9360
|
+
|
9361
|
+
|
9362
|
+
ManyRelationship.prototype.getRecords = function() {
|
9363
|
+
if (this.isAsync) {
|
9364
|
+
var self = this;
|
9365
|
+
var promise;
|
9366
|
+
if (this.link && !this.hasFetchedLink) {
|
9367
|
+
promise = this.store.findHasMany(this.record, this.link, this.relationshipMeta).then(function(records){
|
9368
|
+
self.updateRecordsFromAdapter(records);
|
9369
|
+
self.hasFetchedLink = true;
|
9370
|
+
//TODO(Igor) try to abstract the isLoaded part
|
9371
|
+
self.manyArray.set('isLoaded', true);
|
9372
|
+
return self.manyArray;
|
9373
|
+
});
|
9374
|
+
} else {
|
9375
|
+
var manyArray = this.manyArray;
|
9376
|
+
promise = this.store.findMany(manyArray.toArray()).then(function(){
|
9377
|
+
self.manyArray.set('isLoaded', true);
|
9378
|
+
return manyArray;
|
9379
|
+
});
|
9380
|
+
}
|
9381
|
+
return PromiseArray.create({
|
9382
|
+
promise: promise
|
9383
|
+
});
|
9909
9384
|
} else {
|
9910
|
-
|
9385
|
+
|
9386
|
+
this.manyArray.set('isLoaded', true);
|
9387
|
+
return this.manyArray;
|
9388
|
+
}
|
9389
|
+
};
|
9390
|
+
|
9391
|
+
var BelongsToRelationship = function(store, record, inverseKey, relationshipMeta) {
|
9392
|
+
this._super$constructor(store, record, inverseKey, relationshipMeta);
|
9393
|
+
this.members.add(record);
|
9394
|
+
this.record = record;
|
9395
|
+
this.key = relationshipMeta.key;
|
9396
|
+
this.inverseKey = inverseKey;
|
9397
|
+
this.inverseRecord = null;
|
9398
|
+
};
|
9399
|
+
|
9400
|
+
BelongsToRelationship.prototype = Object.create(Relationship.prototype);
|
9401
|
+
BelongsToRelationship.prototype.constructor = BelongsToRelationship;
|
9402
|
+
BelongsToRelationship.prototype._super$constructor = Relationship;
|
9403
|
+
|
9404
|
+
BelongsToRelationship.prototype.setRecord = function(newRecord) {
|
9405
|
+
if (newRecord) {
|
9406
|
+
this.addRecord(newRecord);
|
9407
|
+
} else if (this.inverseRecord) {
|
9408
|
+
this.removeRecord(this.inverseRecord);
|
9911
9409
|
}
|
9410
|
+
};
|
9411
|
+
|
9412
|
+
BelongsToRelationship.prototype._super$addRecord = Relationship.prototype.addRecord;
|
9413
|
+
BelongsToRelationship.prototype.addRecord = function(newRecord) {
|
9414
|
+
if (this.members.has(newRecord)){ return;}
|
9415
|
+
var type = this.relationshipMeta.type;
|
9416
|
+
|
9417
|
+
if (this.inverseRecord && this.inverseKey) {
|
9418
|
+
this.removeRecord(this.inverseRecord);
|
9419
|
+
}
|
9420
|
+
|
9421
|
+
this.inverseRecord = newRecord;
|
9422
|
+
this._super$addRecord(newRecord);
|
9423
|
+
};
|
9424
|
+
|
9425
|
+
BelongsToRelationship.prototype.notifyRecordRelationshipAdded = function(newRecord) {
|
9426
|
+
this.record.notifyBelongsToAdded(this.key, this);
|
9427
|
+
};
|
9428
|
+
|
9429
|
+
BelongsToRelationship.prototype.notifyRecordRelationshipRemoved = function(record) {
|
9430
|
+
this.record.notifyBelongsToRemoved(this.key, this);
|
9431
|
+
};
|
9432
|
+
|
9433
|
+
BelongsToRelationship.prototype._super$removeRecord = Relationship.prototype.removeRecord;
|
9434
|
+
BelongsToRelationship.prototype.removeRecord = function(record) {
|
9435
|
+
if (!this.members.has(record)){ return;}
|
9436
|
+
this._super$removeRecord(record);
|
9437
|
+
this.inverseRecord = null;
|
9438
|
+
};
|
9439
|
+
|
9440
|
+
BelongsToRelationship.prototype.currentOtherSideFor = function() {
|
9441
|
+
return this.inverseRecord;
|
9442
|
+
};
|
9443
|
+
|
9444
|
+
BelongsToRelationship.prototype.getRecord = function() {
|
9445
|
+
if (this.isAsync) {
|
9446
|
+
var promise;
|
9447
|
+
|
9448
|
+
if (this.link && !this.hasFetchedLink){
|
9449
|
+
var self = this;
|
9450
|
+
promise = this.store.findBelongsTo(this.record, this.link, this.relationshipMeta).then(function(record){
|
9451
|
+
self.addRecord(record);
|
9452
|
+
self.hasFetchedLink = true;
|
9453
|
+
return record;
|
9454
|
+
});
|
9455
|
+
} else if (this.inverseRecord) {
|
9456
|
+
promise = this.store._findByRecord(this.inverseRecord);
|
9457
|
+
} else {
|
9458
|
+
promise = Ember.RSVP.Promise.resolve(null);
|
9459
|
+
}
|
9460
|
+
|
9461
|
+
return PromiseObject.create({
|
9462
|
+
promise: promise
|
9463
|
+
});
|
9464
|
+
} else {
|
9465
|
+
return this.inverseRecord;
|
9466
|
+
}
|
9467
|
+
};
|
9468
|
+
|
9469
|
+
function setForArray(array) {
|
9470
|
+
var set = new Ember.OrderedSet();
|
9471
|
+
|
9472
|
+
if (array) {
|
9473
|
+
for (var i=0, l=array.length; i<l; i++) {
|
9474
|
+
set.add(array[i]);
|
9475
|
+
}
|
9476
|
+
}
|
9477
|
+
|
9478
|
+
return set;
|
9912
9479
|
}
|
9913
9480
|
|
9914
|
-
|
9481
|
+
var createRelationshipFor = function(record, relationshipMeta, store){
|
9482
|
+
var inverseKey;
|
9483
|
+
var inverse = record.constructor.inverseFor(relationshipMeta.key);
|
9484
|
+
|
9485
|
+
if (inverse) {
|
9486
|
+
inverseKey = inverse.name;
|
9487
|
+
}
|
9488
|
+
|
9489
|
+
if (relationshipMeta.kind === 'hasMany'){
|
9490
|
+
return new ManyRelationship(store, record, inverseKey, relationshipMeta);
|
9491
|
+
}
|
9492
|
+
else {
|
9493
|
+
return new BelongsToRelationship(store, record, inverseKey, relationshipMeta);
|
9494
|
+
}
|
9495
|
+
};
|
9496
|
+
|
9497
|
+
|
9498
|
+
__exports__.Relationship = Relationship;
|
9499
|
+
__exports__.ManyRelationship = ManyRelationship;
|
9500
|
+
__exports__.BelongsToRelationship = BelongsToRelationship;
|
9501
|
+
__exports__.createRelationshipFor = createRelationshipFor;
|
9915
9502
|
});
|
9916
9503
|
define("ember-data/system/store",
|
9917
|
-
["ember-data/system/adapter","ember-inflector/system/string","exports"],
|
9918
|
-
function(__dependency1__, __dependency2__, __exports__) {
|
9504
|
+
["ember-data/system/adapter","ember-inflector/system/string","ember-data/system/promise_proxies","exports"],
|
9505
|
+
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
|
9919
9506
|
"use strict";
|
9920
9507
|
/*globals Ember*/
|
9921
9508
|
/*jshint eqnull:true*/
|
@@ -9928,6 +9515,10 @@ define("ember-data/system/store",
|
|
9928
9515
|
var Adapter = __dependency1__.Adapter;
|
9929
9516
|
var singularize = __dependency2__.singularize;
|
9930
9517
|
|
9518
|
+
var promiseArray = __dependency3__.promiseArray;
|
9519
|
+
var promiseObject = __dependency3__.promiseObject;
|
9520
|
+
|
9521
|
+
|
9931
9522
|
var get = Ember.get;
|
9932
9523
|
var set = Ember.set;
|
9933
9524
|
var once = Ember.run.once;
|
@@ -9937,7 +9528,7 @@ define("ember-data/system/store",
|
|
9937
9528
|
var map = Ember.EnumerableUtils.map;
|
9938
9529
|
var Promise = Ember.RSVP.Promise;
|
9939
9530
|
var copy = Ember.copy;
|
9940
|
-
var Store,
|
9531
|
+
var Store, RecordArrayManager, Model;
|
9941
9532
|
|
9942
9533
|
var camelize = Ember.String.camelize;
|
9943
9534
|
|
@@ -10058,7 +9649,6 @@ define("ember-data/system/store",
|
|
10058
9649
|
this.recordArrayManager = RecordArrayManager.create({
|
10059
9650
|
store: this
|
10060
9651
|
});
|
10061
|
-
this._relationshipChanges = {};
|
10062
9652
|
this._pendingSave = [];
|
10063
9653
|
//Used to keep track of all the find requests that need to be coalesced
|
10064
9654
|
this._pendingFetch = Ember.Map.create();
|
@@ -10269,10 +9859,10 @@ define("ember-data/system/store",
|
|
10269
9859
|
|
10270
9860
|
---
|
10271
9861
|
|
10272
|
-
You can optionally preload specific attributes and relationships that you know of
|
9862
|
+
You can optionally `preload` specific attributes and relationships that you know of
|
10273
9863
|
by passing them as the third argument to find.
|
10274
9864
|
|
10275
|
-
For example, if your Ember route looks like `/posts/1/comments/2` and
|
9865
|
+
For example, if your Ember route looks like `/posts/1/comments/2` and your API route
|
10276
9866
|
for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment
|
10277
9867
|
without fetching the post you can pass in the post to the `find` call:
|
10278
9868
|
|
@@ -10320,6 +9910,7 @@ define("ember-data/system/store",
|
|
10320
9910
|
@method find
|
10321
9911
|
@param {String or subclass of DS.Model} type
|
10322
9912
|
@param {Object|String|Integer|null} id
|
9913
|
+
@param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
|
10323
9914
|
@return {Promise} promise
|
10324
9915
|
*/
|
10325
9916
|
find: function(type, id, preload) {
|
@@ -10343,14 +9934,20 @@ define("ember-data/system/store",
|
|
10343
9934
|
@private
|
10344
9935
|
@param {String or subclass of DS.Model} type
|
10345
9936
|
@param {String|Integer} id
|
9937
|
+
@param {Object} preload - optional set of attributes and relationships passed in either as IDs or as actual models
|
10346
9938
|
@return {Promise} promise
|
10347
9939
|
*/
|
10348
9940
|
findById: function(typeName, id, preload) {
|
10349
|
-
var fetchedRecord;
|
10350
9941
|
|
10351
9942
|
var type = this.modelFor(typeName);
|
10352
9943
|
var record = this.recordForId(type, id);
|
10353
9944
|
|
9945
|
+
return this._findByRecord(record, preload);
|
9946
|
+
},
|
9947
|
+
|
9948
|
+
_findByRecord: function(record, preload) {
|
9949
|
+
var fetchedRecord;
|
9950
|
+
|
10354
9951
|
if (preload) {
|
10355
9952
|
record._preloadData(preload);
|
10356
9953
|
}
|
@@ -10362,7 +9959,7 @@ define("ember-data/system/store",
|
|
10362
9959
|
fetchedRecord = record._loadingPromise;
|
10363
9960
|
}
|
10364
9961
|
|
10365
|
-
return promiseObject(fetchedRecord || record, "DS: Store#
|
9962
|
+
return promiseObject(fetchedRecord || record, "DS: Store#findByRecord " + record.typeKey + " with id: " + get(record, 'id'));
|
10366
9963
|
},
|
10367
9964
|
|
10368
9965
|
/**
|
@@ -10377,7 +9974,6 @@ define("ember-data/system/store",
|
|
10377
9974
|
*/
|
10378
9975
|
findByIds: function(type, ids) {
|
10379
9976
|
var store = this;
|
10380
|
-
var promiseLabel = "DS: Store#findByIds " + type;
|
10381
9977
|
|
10382
9978
|
return promiseArray(Ember.RSVP.all(map(ids, function(id) {
|
10383
9979
|
return store.findById(type, id);
|
@@ -10446,7 +10042,6 @@ define("ember-data/system/store",
|
|
10446
10042
|
var adapter = store.adapterFor(type);
|
10447
10043
|
var shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;
|
10448
10044
|
var records = Ember.A(recordResolverPairs).mapBy('record');
|
10449
|
-
var resolvers = Ember.A(recordResolverPairs).mapBy('resolver');
|
10450
10045
|
|
10451
10046
|
function _fetchRecord(recordResolverPair) {
|
10452
10047
|
recordResolverPair.resolver.resolve(store.fetchRecord(recordResolverPair.record));
|
@@ -10603,29 +10198,14 @@ define("ember-data/system/store",
|
|
10603
10198
|
@param {Resolver} resolver
|
10604
10199
|
@return {DS.ManyArray} records
|
10605
10200
|
*/
|
10606
|
-
findMany: function(
|
10607
|
-
var
|
10608
|
-
|
10609
|
-
|
10610
|
-
|
10611
|
-
|
10612
|
-
manyArray.loadingRecordsCount = unloadedRecords.length;
|
10613
|
-
|
10614
|
-
if (unloadedRecords.length) {
|
10615
|
-
forEach(unloadedRecords, function(record) {
|
10616
|
-
this.recordArrayManager.registerWaitingRecordArray(record, manyArray);
|
10617
|
-
}, this);
|
10618
|
-
|
10619
|
-
resolver.resolve(this.scheduleFetchMany(unloadedRecords, owner));
|
10620
|
-
} else {
|
10621
|
-
if (resolver) { resolver.resolve(); }
|
10622
|
-
manyArray.set('isLoaded', true);
|
10623
|
-
once(manyArray, 'trigger', 'didLoad');
|
10624
|
-
}
|
10625
|
-
|
10626
|
-
return manyArray;
|
10201
|
+
findMany: function(records) {
|
10202
|
+
var store = this;
|
10203
|
+
return Promise.all( map(records, function(record) {
|
10204
|
+
return store._findByRecord(record);
|
10205
|
+
}));
|
10627
10206
|
},
|
10628
10207
|
|
10208
|
+
|
10629
10209
|
/**
|
10630
10210
|
If a relationship was originally populated by the adapter as a link
|
10631
10211
|
(as opposed to a list of IDs), this method is called when the
|
@@ -10644,13 +10224,11 @@ define("ember-data/system/store",
|
|
10644
10224
|
@param {String or subclass of DS.Model} type
|
10645
10225
|
@return {Promise} promise
|
10646
10226
|
*/
|
10647
|
-
findHasMany: function(owner, link,
|
10227
|
+
findHasMany: function(owner, link, type) {
|
10648
10228
|
var adapter = this.adapterFor(owner.constructor);
|
10649
10229
|
|
10650
10230
|
|
10651
|
-
|
10652
|
-
resolver.resolve(_findHasMany(adapter, this, owner, link, relationship));
|
10653
|
-
return records;
|
10231
|
+
return _findHasMany(adapter, this, owner, link, type);
|
10654
10232
|
},
|
10655
10233
|
|
10656
10234
|
/**
|
@@ -10990,6 +10568,7 @@ define("ember-data/system/store",
|
|
10990
10568
|
if (data) {
|
10991
10569
|
// normalize relationship IDs into records
|
10992
10570
|
data = normalizeRelationships(this, record.constructor, data, record);
|
10571
|
+
setupRelationships(this, record, data);
|
10993
10572
|
|
10994
10573
|
this.updateId(record, data);
|
10995
10574
|
}
|
@@ -11110,11 +10689,11 @@ define("ember-data/system/store",
|
|
11110
10689
|
var factory;
|
11111
10690
|
|
11112
10691
|
if (typeof key === 'string') {
|
11113
|
-
|
11114
|
-
|
11115
|
-
|
11116
|
-
|
11117
|
-
factory.typeKey = this._normalizeTypeKey(
|
10692
|
+
factory = this.container.lookupFactory('model:' + key);
|
10693
|
+
if (!factory) {
|
10694
|
+
throw new Ember.Error("No model was found for '" + key + "'");
|
10695
|
+
}
|
10696
|
+
factory.typeKey = factory.typeKey || this._normalizeTypeKey(key);
|
11118
10697
|
} else {
|
11119
10698
|
// A factory already supplied. Ensure it has a normalized key.
|
11120
10699
|
factory = key;
|
@@ -11192,16 +10771,28 @@ define("ember-data/system/store",
|
|
11192
10771
|
// _partial is an internal param used by `update`.
|
11193
10772
|
// If passed, it means that the data should be
|
11194
10773
|
// merged into the existing data, not replace it.
|
11195
|
-
|
11196
|
-
|
10774
|
+
|
11197
10775
|
var type = this.modelFor(typeName);
|
11198
10776
|
|
11199
|
-
//
|
10777
|
+
// If the payload contains relationships that are specified as
|
10778
|
+
// IDs, normalizeRelationships will convert them into DS.Model instances
|
10779
|
+
// (possibly unloaded) before we push the payload into the
|
10780
|
+
// store.
|
10781
|
+
|
11200
10782
|
data = normalizeRelationships(this, type, data);
|
11201
10783
|
|
10784
|
+
// Actually load the record into the store.
|
10785
|
+
|
11202
10786
|
this._load(type, data, _partial);
|
11203
10787
|
|
11204
|
-
|
10788
|
+
var record = this.recordForId(type, data.id);
|
10789
|
+
|
10790
|
+
// Now that the pushed record as well as any related records
|
10791
|
+
// are in the store, create the data structures used to track
|
10792
|
+
// relationships.
|
10793
|
+
setupRelationships(this, record, data);
|
10794
|
+
|
10795
|
+
return record;
|
11205
10796
|
},
|
11206
10797
|
|
11207
10798
|
/**
|
@@ -11334,9 +10925,14 @@ define("ember-data/system/store",
|
|
11334
10925
|
@return {Array}
|
11335
10926
|
*/
|
11336
10927
|
pushMany: function(type, datas) {
|
11337
|
-
|
11338
|
-
|
11339
|
-
|
10928
|
+
var length = datas.length;
|
10929
|
+
var result = new Array(length);
|
10930
|
+
|
10931
|
+
for (var i = 0; i < length; i++) {
|
10932
|
+
result[i] = this.push(type, datas[i]);
|
10933
|
+
}
|
10934
|
+
|
10935
|
+
return result;
|
11340
10936
|
},
|
11341
10937
|
|
11342
10938
|
/**
|
@@ -11419,59 +11015,6 @@ define("ember-data/system/store",
|
|
11419
11015
|
typeMap.records.splice(loc, 1);
|
11420
11016
|
},
|
11421
11017
|
|
11422
|
-
// ........................
|
11423
|
-
// . RELATIONSHIP CHANGES .
|
11424
|
-
// ........................
|
11425
|
-
|
11426
|
-
addRelationshipChangeFor: function(childRecord, childKey, parentRecord, parentKey, change) {
|
11427
|
-
var clientId = childRecord.clientId;
|
11428
|
-
var parentClientId = parentRecord ? parentRecord : parentRecord;
|
11429
|
-
var key = childKey + parentKey;
|
11430
|
-
var changes = this._relationshipChanges;
|
11431
|
-
|
11432
|
-
if (!(clientId in changes)) {
|
11433
|
-
changes[clientId] = {};
|
11434
|
-
}
|
11435
|
-
if (!(parentClientId in changes[clientId])) {
|
11436
|
-
changes[clientId][parentClientId] = {};
|
11437
|
-
}
|
11438
|
-
if (!(key in changes[clientId][parentClientId])) {
|
11439
|
-
changes[clientId][parentClientId][key] = {};
|
11440
|
-
}
|
11441
|
-
changes[clientId][parentClientId][key][change.changeType] = change;
|
11442
|
-
},
|
11443
|
-
|
11444
|
-
removeRelationshipChangeFor: function(clientRecord, childKey, parentRecord, parentKey, type) {
|
11445
|
-
var clientId = clientRecord.clientId;
|
11446
|
-
var parentClientId = parentRecord ? parentRecord.clientId : parentRecord;
|
11447
|
-
var changes = this._relationshipChanges;
|
11448
|
-
var key = childKey + parentKey;
|
11449
|
-
|
11450
|
-
if (!(clientId in changes) || !(parentClientId in changes[clientId]) || !(key in changes[clientId][parentClientId])){
|
11451
|
-
return;
|
11452
|
-
}
|
11453
|
-
delete changes[clientId][parentClientId][key][type];
|
11454
|
-
},
|
11455
|
-
|
11456
|
-
relationshipChangePairsFor: function(record){
|
11457
|
-
var toReturn = [];
|
11458
|
-
|
11459
|
-
if( !record ) { return toReturn; }
|
11460
|
-
|
11461
|
-
//TODO(Igor) What about the other side
|
11462
|
-
var changesObject = this._relationshipChanges[record.clientId];
|
11463
|
-
for (var objKey in changesObject){
|
11464
|
-
if (changesObject.hasOwnProperty(objKey)){
|
11465
|
-
for (var changeKey in changesObject[objKey]){
|
11466
|
-
if (changesObject[objKey].hasOwnProperty(changeKey)){
|
11467
|
-
toReturn.push(changesObject[objKey][changeKey]);
|
11468
|
-
}
|
11469
|
-
}
|
11470
|
-
}
|
11471
|
-
}
|
11472
|
-
return toReturn;
|
11473
|
-
},
|
11474
|
-
|
11475
11018
|
// ......................
|
11476
11019
|
// . PER-TYPE ADAPTERS
|
11477
11020
|
// ......................
|
@@ -11525,7 +11068,6 @@ define("ember-data/system/store",
|
|
11525
11068
|
willDestroy: function() {
|
11526
11069
|
var typeMaps = this.typeMaps;
|
11527
11070
|
var keys = Ember.keys(typeMaps);
|
11528
|
-
var store = this;
|
11529
11071
|
|
11530
11072
|
var types = map(keys, byType);
|
11531
11073
|
|
@@ -11553,30 +11095,15 @@ define("ember-data/system/store",
|
|
11553
11095
|
}
|
11554
11096
|
});
|
11555
11097
|
|
11098
|
+
|
11556
11099
|
function normalizeRelationships(store, type, data, record) {
|
11557
11100
|
type.eachRelationship(function(key, relationship) {
|
11558
|
-
// A link (usually a URL) was already provided in
|
11559
|
-
// normalized form
|
11560
|
-
if (data.links && data.links[key]) {
|
11561
|
-
if (record && relationship.options.async) { record._relationships[key] = null; }
|
11562
|
-
return;
|
11563
|
-
}
|
11564
|
-
|
11565
11101
|
var kind = relationship.kind;
|
11566
11102
|
var value = data[key];
|
11567
|
-
|
11568
|
-
if (value == null) {
|
11569
|
-
if (kind === 'hasMany' && record) {
|
11570
|
-
value = data[key] = record.get(key).toArray();
|
11571
|
-
}
|
11572
|
-
return;
|
11573
|
-
}
|
11574
|
-
|
11575
11103
|
if (kind === 'belongsTo') {
|
11576
11104
|
deserializeRecordId(store, data, key, relationship, value);
|
11577
11105
|
} else if (kind === 'hasMany') {
|
11578
11106
|
deserializeRecordIds(store, data, key, relationship, value);
|
11579
|
-
addUnsavedRecords(record, key, value);
|
11580
11107
|
}
|
11581
11108
|
});
|
11582
11109
|
|
@@ -11609,104 +11136,16 @@ define("ember-data/system/store",
|
|
11609
11136
|
}
|
11610
11137
|
|
11611
11138
|
function deserializeRecordIds(store, data, key, relationship, ids) {
|
11139
|
+
if (!Ember.isArray(ids)) {
|
11140
|
+
return;
|
11141
|
+
}
|
11612
11142
|
for (var i=0, l=ids.length; i<l; i++) {
|
11613
11143
|
deserializeRecordId(store, ids, i, relationship, ids[i]);
|
11614
11144
|
}
|
11615
11145
|
}
|
11616
11146
|
|
11617
|
-
// If there are any unsaved records that are in a hasMany they won't be
|
11618
|
-
// in the payload, so add them back in manually.
|
11619
|
-
function addUnsavedRecords(record, key, data) {
|
11620
|
-
if(record) {
|
11621
|
-
var unsavedRecords = uniqById(Ember.A(data), record.get(key).filterBy('isNew'));
|
11622
|
-
Ember.A(data).pushObjects(unsavedRecords);
|
11623
|
-
}
|
11624
|
-
}
|
11625
|
-
|
11626
|
-
function uniqById(data, records) {
|
11627
|
-
var currentIds = data.mapBy("id");
|
11628
|
-
return records.reject(function(record) {
|
11629
|
-
return Ember.A(currentIds).contains(record.id);
|
11630
|
-
});
|
11631
|
-
}
|
11632
|
-
|
11633
11147
|
// Delegation to the adapter and promise management
|
11634
|
-
/**
|
11635
|
-
A `PromiseArray` is an object that acts like both an `Ember.Array`
|
11636
|
-
and a promise. When the promise is resolved the resulting value
|
11637
|
-
will be set to the `PromiseArray`'s `content` property. This makes
|
11638
|
-
it easy to create data bindings with the `PromiseArray` that will be
|
11639
|
-
updated when the promise resolves.
|
11640
|
-
|
11641
|
-
For more information see the [Ember.PromiseProxyMixin
|
11642
|
-
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
11643
|
-
|
11644
|
-
Example
|
11645
|
-
|
11646
|
-
```javascript
|
11647
|
-
var promiseArray = DS.PromiseArray.create({
|
11648
|
-
promise: $.getJSON('/some/remote/data.json')
|
11649
|
-
});
|
11650
|
-
|
11651
|
-
promiseArray.get('length'); // 0
|
11652
|
-
|
11653
|
-
promiseArray.then(function() {
|
11654
|
-
promiseArray.get('length'); // 100
|
11655
|
-
});
|
11656
|
-
```
|
11657
|
-
|
11658
|
-
@class PromiseArray
|
11659
|
-
@namespace DS
|
11660
|
-
@extends Ember.ArrayProxy
|
11661
|
-
@uses Ember.PromiseProxyMixin
|
11662
|
-
*/
|
11663
|
-
PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
|
11664
|
-
/**
|
11665
|
-
A `PromiseObject` is an object that acts like both an `Ember.Object`
|
11666
|
-
and a promise. When the promise is resolved, then the resulting value
|
11667
|
-
will be set to the `PromiseObject`'s `content` property. This makes
|
11668
|
-
it easy to create data bindings with the `PromiseObject` that will
|
11669
|
-
be updated when the promise resolves.
|
11670
11148
|
|
11671
|
-
For more information see the [Ember.PromiseProxyMixin
|
11672
|
-
documentation](/api/classes/Ember.PromiseProxyMixin.html).
|
11673
|
-
|
11674
|
-
Example
|
11675
|
-
|
11676
|
-
```javascript
|
11677
|
-
var promiseObject = DS.PromiseObject.create({
|
11678
|
-
promise: $.getJSON('/some/remote/data.json')
|
11679
|
-
});
|
11680
|
-
|
11681
|
-
promiseObject.get('name'); // null
|
11682
|
-
|
11683
|
-
promiseObject.then(function() {
|
11684
|
-
promiseObject.get('name'); // 'Tomster'
|
11685
|
-
});
|
11686
|
-
```
|
11687
|
-
|
11688
|
-
@class PromiseObject
|
11689
|
-
@namespace DS
|
11690
|
-
@extends Ember.ObjectProxy
|
11691
|
-
@uses Ember.PromiseProxyMixin
|
11692
|
-
*/
|
11693
|
-
PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
11694
|
-
|
11695
|
-
function promiseObject(promise, label) {
|
11696
|
-
return PromiseObject.create({
|
11697
|
-
promise: Promise.cast(promise, label)
|
11698
|
-
});
|
11699
|
-
}
|
11700
|
-
|
11701
|
-
function promiseArray(promise, label) {
|
11702
|
-
return PromiseArray.create({
|
11703
|
-
promise: Promise.cast(promise, label)
|
11704
|
-
});
|
11705
|
-
}
|
11706
|
-
|
11707
|
-
function isThenable(object) {
|
11708
|
-
return object && typeof object.then === 'function';
|
11709
|
-
}
|
11710
11149
|
|
11711
11150
|
function serializerFor(container, type, defaultSerializer) {
|
11712
11151
|
return container.lookup('serializer:'+type) ||
|
@@ -11791,8 +11230,6 @@ define("ember-data/system/store",
|
|
11791
11230
|
throw new Error('adapter.findMany returned undefined, this was very likely a mistake');
|
11792
11231
|
}
|
11793
11232
|
|
11794
|
-
var guardedPromise;
|
11795
|
-
|
11796
11233
|
promise = Promise.cast(promise, label);
|
11797
11234
|
promise = _guard(promise, _bind(_objectIsAlive, store));
|
11798
11235
|
|
@@ -11818,7 +11255,7 @@ define("ember-data/system/store",
|
|
11818
11255
|
|
11819
11256
|
|
11820
11257
|
var records = store.pushMany(relationship.type, payload);
|
11821
|
-
|
11258
|
+
return records;
|
11822
11259
|
}, null, "DS: Extract payload of " + record + " : hasMany " + relationship.type);
|
11823
11260
|
}
|
11824
11261
|
|
@@ -11834,8 +11271,6 @@ define("ember-data/system/store",
|
|
11834
11271
|
return promise.then(function(adapterPayload) {
|
11835
11272
|
var payload = serializer.extract(store, relationship.type, adapterPayload, null, 'findBelongsTo');
|
11836
11273
|
var record = store.push(relationship.type, payload);
|
11837
|
-
|
11838
|
-
record.updateBelongsTo(relationship.key, record);
|
11839
11274
|
return record;
|
11840
11275
|
}, null, "DS: Extract payload of " + record + " : " + relationship.type);
|
11841
11276
|
}
|
@@ -11908,10 +11343,30 @@ define("ember-data/system/store",
|
|
11908
11343
|
}, label);
|
11909
11344
|
}
|
11910
11345
|
|
11911
|
-
|
11912
|
-
|
11913
|
-
|
11346
|
+
function setupRelationships(store, record, data) {
|
11347
|
+
var type = record.constructor;
|
11348
|
+
|
11349
|
+
type.eachRelationship(function(key, descriptor) {
|
11350
|
+
var kind = descriptor.kind;
|
11351
|
+
var value = data[key];
|
11352
|
+
var relationship = record._relationships[key];
|
11914
11353
|
|
11354
|
+
if (data.links && data.links[key]) {
|
11355
|
+
relationship.updateLink(data.links[key]);
|
11356
|
+
}
|
11357
|
+
|
11358
|
+
if (kind === 'belongsTo') {
|
11359
|
+
if (value === undefined) {
|
11360
|
+
return;
|
11361
|
+
}
|
11362
|
+
relationship.setRecord(value);
|
11363
|
+
} else if (kind === 'hasMany' && value) {
|
11364
|
+
relationship.updateRecordsFromAdapter(value);
|
11365
|
+
}
|
11366
|
+
});
|
11367
|
+
}
|
11368
|
+
|
11369
|
+
__exports__.Store = Store;
|
11915
11370
|
__exports__["default"] = Store;
|
11916
11371
|
});
|
11917
11372
|
define("ember-data/transforms",
|