ember-source 1.0.0.rc1.2 → 1.0.0.rc1.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ember-source might be problematic. Click here for more details.
- data/dist/ember-data-deps.js +1533 -1294
- data/dist/ember-data-deps.min.js +5 -5
- data/dist/ember-data-deps.prod.js +1520 -1281
- data/dist/ember-debug.js +2 -2
- data/dist/ember-old-router.js +1822 -3695
- data/dist/ember-old-router.min.js +8 -9
- data/dist/ember-old-router.prod.js +1817 -3690
- data/dist/ember-runtime.js +1532 -1293
- data/dist/ember-runtime.min.js +5 -5
- data/dist/ember-runtime.prod.js +1517 -1278
- data/dist/ember-spade.js +1 -1
- data/dist/ember-template-compiler.js +3 -3
- data/dist/ember-template-compiler.min.js +2 -2
- data/dist/ember-template-compiler.prod.js +1 -1
- data/dist/ember-tests.js +1 -1
- data/dist/ember.js +2855 -4662
- data/dist/ember.min.js +8 -9
- data/dist/ember.prod.js +2843 -4649
- metadata +2 -2
data/dist/ember-runtime.min.js
CHANGED
@@ -8,10 +8,10 @@
|
|
8
8
|
// ==========================================================================
|
9
9
|
|
10
10
|
|
11
|
-
// Version: v1.0.0-
|
12
|
-
// Last commit:
|
11
|
+
// Version: v1.0.0-rc.1-188-gb6bb967
|
12
|
+
// Last commit: b6bb967 (2013-03-16 18:09:42 -0700)
|
13
13
|
|
14
14
|
|
15
|
-
(function(){var e,t;(function(){var n={},r={};e=function(e,t,r){n[e]={deps:t,callback:r}},t=function(e){if(r[e])return r[e];r[e]={};var i=n[e],s=i.deps,o=i.callback,u=[],a;for(var f=0,l=s.length;f<l;f++)s[f]==="exports"?u.push(a={}):u.push(t(s[f]));var c=o.apply(this,u);return r[e]=a||c}})(),function(){function r(t){if(e.console&&e.console[t])return e.console[t].apply?function(){e.console[t].apply(e.console,arguments)}:function(){var n=Array.prototype.join.call(arguments,", ");e.console[t](n)}}"undefined"==typeof Ember&&(Ember={});var e=Ember.imports=Ember.imports||this,t=Ember.exports=Ember.exports||this,n=Ember.lookup=Ember.lookup||this;t.Em=t.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.1",Ember.ENV=Ember.ENV||("undefined"==typeof ENV?{}:ENV),Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,typeof Ember.EXTEND_PROTOTYPES=="undefined"&&(Ember.EXTEND_PROTOTYPES=!0),Ember.LOG_STACKTRACE_ON_DEPRECATION=Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,Ember.SHIM_ES5=Ember.ENV.SHIM_ES5===!1?!1:Ember.EXTEND_PROTOTYPES,Ember.K=function(){return this},"undefined"==typeof Ember.assert&&(Ember.assert=Ember.K),"undefined"==typeof Ember.warn&&(Ember.warn=Ember.K),"undefined"==typeof Ember.debug&&(Ember.debug=Ember.K),"undefined"==typeof Ember.deprecate&&(Ember.deprecate=Ember.K),"undefined"==typeof Ember.deprecateFunc&&(Ember.deprecateFunc=function(e,t){return t}),Ember.uuid=0,Ember.Logger={log:r("log")||Ember.K,warn:r("warn")||Ember.K,error:r("error")||Ember.K,info:r("info")||Ember.K,debug:r("debug")||r("info")||Ember.K},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.apply(t||this);try{return e.apply(t||this)}catch(n){Ember.onerror(n)}},Ember.merge=function(e,t){for(var n in t){if(!t.hasOwnProperty(n))continue;e[n]=t[n]}}}(),function(){var e=Ember.platform={};Ember.create=Object.create;if(!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,n){t.prototype=e,e=new t;if(n){t.prototype=e;for(var r in n)t.prototype[r]=n[r].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var n=Object.defineProperty,r,i;if(n)try{n({},"a",{get:function(){}})}catch(s){n=null}n&&(r=function(){var e={};return n(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),n(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),i=function(){try{return n(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?i||(n=function(e,t,n){var r;return typeof Node=="object"?r=e instanceof Node:r=typeof e=="object"&&typeof e.nodeType=="number"&&typeof e.nodeName=="string",r?e[t]=n.value:Object.defineProperty(e,t,n)}):n=null),e.defineProperty=n,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,n){n.get||(e[t]=n.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),function(){function h(e){this.descs={},this.watching={},this.cache={},this.source=e}function p(e,t){return!!e&&typeof e[t]=="function"}var e=Ember.platform.defineProperty,t=Ember.create,n="__ember"+ +(new Date),r=0,i=[],s={},o=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=n;var u={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(i,s){s||(s="ember");var o=s+r++;return i&&(u.value=o,e(i,n,u)),o},Ember.guidFor=function(o){if(o===undefined)return"(undefined)";if(o===null)return"(null)";var a,f,l=typeof o;switch(l){case"number":return f=i[o],f||(f=i[o]="nu"+o),f;case"string":return f=s[o],f||(f=s[o]="st"+r++),f;case"boolean":return o?"(true)":"(false)";default:if(o[n])return o[n];if(o===Object)return"(Object)";if(o===Array)return"(Array)";return f="ember"+r++,u.value=f,e(o,n,u),f}};var a={writable:!0,configurable:!1,enumerable:!1,value:null},f=Ember.GUID_KEY+"_meta";Ember.META_KEY=f;var l={descs:{},watching:{}};o&&(l.values={}),Ember.EMPTY_META=l,Object.freeze&&Object.freeze(l);var c=Ember.platform.defineProperty.isSimulated;c&&(h.prototype.__preventPlainObject__=!0,h.prototype.toJSON=function(){}),Ember.meta=function(r,i){var s=r[f];return i===!1?s||l:(s?s.source!==r&&(c||e(r,f,a),s=t(s),s.descs=t(s.descs),s.watching=t(s.watching),s.cache={},s.source=r,o&&(s.values=t(s.values)),r[f]=s):(c||e(r,f,a),s=new h(r),o&&(s.values={}),r[f]=s,s.descs.constructor=null),s)},Ember.getMeta=function(t,n){var r=Ember.meta(t,!1);return r[n]},Ember.setMeta=function(t,n,r){var i=Ember.meta(t,!0);return i[n]=r,r},Ember.metaPath=function(n,r,i){var s=Ember.meta(n,i),o,u;for(var a=0,f=r.length;a<f;a++){o=r[a],u=s[o];if(!u){if(!i)return undefined;u=s[o]={__ember_source__:n}}else if(u.__ember_source__!==n){if(!i)return undefined;u=s[o]=t(u),u.__ember_source__=n}s=u}return u},Ember.wrap=function(e,t){function n(){}function r(){var r,i=this._super;return this._super=t||n,r=e.apply(this,arguments),this._super=i,r}return r.wrappedFunction=e,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:e.length!==undefined&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return e===null||e===undefined?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=p,Ember.tryInvoke=function(e,t,n){if(p(e,t))return e[t].apply(e,n||[])};var d=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return e!==1}();d?Ember.tryFinally=function(e,t,n){var r,i,s;n=n||this;try{r=e.call(n)}finally{try{i=t.call(n)}catch(o){s=o}}if(s)throw s;return i===undefined?r:i}:Ember.tryFinally=function(e,t,n){var r,i;n=n||this;try{r=e.call(n)}finally{i=t.call(n)}return i===undefined?r:i},d?Ember.tryCatchFinally=function(e,t,n,r){var i,s,o,u;r=r||this;try{i=e.call(r)}catch(a){i=t.call(r,a)}finally{try{s=n.call(r)}catch(f){o=f}}if(o)throw o;return s===undefined?i:s}:Ember.tryCatchFinally=function(e,t,n,r){var i,s;r=r||this;try{i=e.call(r)}catch(o){i=t.call(r,o)}finally{s=n.call(r)}return s===undefined?i:s}}(),function(){Ember.Instrumentation={};var e=[],t={},n=function(n){var r=[],i;for(var s=0,o=e.length;s<o;s++)i=e[s],i.regex.test(n)&&r.push(i.object);return t[n]=r,r},r=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+(new Date)}}();Ember.Instrumentation.instrument=function(e,i,s,o){function d(){for(h=0,p=u.length;h<p;h++)c=u[h],l[h]=c.before(e,r(),i);return s.call(o)}function v(e){i=i||{},i.exception=e}function m(){for(h=0,p=u.length;h<p;h++)c=u[h],c.after(e,r(),i,l[h]);Ember.STRUCTURED_PROFILE&&console.timeEnd(a)}var u=t[e],a,f;Ember.STRUCTURED_PROFILE&&(a=e+": "+i.object,console.time(a)),u||(u=n(e));if(u.length===0)return f=s.call(o),Ember.STRUCTURED_PROFILE&&console.timeEnd(a),f;var l=[],c,h,p;return Ember.tryCatchFinally(d,v,m)},Ember.Instrumentation.subscribe=function(n,r){var i=n.split("."),s,o=[];for(var u=0,a=i.length;u<a;u++)s=i[u],s==="*"?o.push("[^\\.]*"):o.push(s);o=o.join("\\."),o+="(\\..*)?";var f={pattern:n,regex:new RegExp("^"+o+"$"),object:r};return e.push(f),t={},f},Ember.Instrumentation.unsubscribe=function(n){var r;for(var i=0,s=e.length;i<s;i++)e[i]===n&&(r=i);e.splice(r,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e=Ember.EnumerableUtils={map:function(e,t,n){return e.map?e.map.call(e,t,n):Array.prototype.map.call(e,t,n)},forEach:function(e,t,n){return e.forEach?e.forEach.call(e,t,n):Array.prototype.forEach.call(e,t,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):Array.prototype.indexOf.call(e,t,n)},indexesOf:function(t,n){return n===undefined?[]:e.map(n,function(n){return e.indexOf(t,n)})},addObject:function(t,n){var r=e.indexOf(t,n);r===-1&&t.push(n)},removeObject:function(t,n){var r=e.indexOf(t,n);r!==-1&&t.splice(r,1)},replace:function(e,t,n,r){if(e.replace)return e.replace(t,n,r);var i=Array.prototype.concat.apply([t,n],r);return e.splice.apply(e,i)},intersection:function(e,t){var n=[];return e.forEach(function(e){t.indexOf(e)>=0&&n.push(e)}),n}}}(),function(){var e=function(e){return e&&Function.prototype.toString.call(e).indexOf("[native code]")>-1},t=e(Array.prototype.map)?Array.prototype.map:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=new Array(n),i=arguments[1];for(var s=0;s<n;s++)s in t&&(r[s]=e.call(i,t[s],s,t));return r},n=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=arguments[1];for(var i=0;i<n;i++)i in t&&e.call(r,t[i],i,t)},r=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){t===null||t===undefined?t=0:t<0&&(t=Math.max(0,this.length+t));for(var n=t,r=this.length;n<r;n++)if(this[n]===e)return n;return-1};Ember.ArrayPolyfills={map:t,forEach:n,indexOf:r},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=n),Array.prototype.indexOf||(Array.prototype.indexOf=r))}(),function(){var e=Ember.guidFor,t=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},r=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t},i=Ember.OrderedSet=function(){this.clear()};i.create=function(){return new i},i.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(t){var n=e(t),r=this.presenceSet,i=this.list;if(n in r)return;r[n]=!0,i.push(t)},remove:function(n){var r=e(n),i=this.presenceSet,s=this.list;delete i[r];var o=t.call(s,n);o>-1&&s.splice(o,1)},isEmpty:function(){return this.list.length===0},has:function(t){var n=e(t),r=this.presenceSet;return n in r},forEach:function(e,t){var n=this.list.slice();for(var r=0,i=n.length;r<i;r++)e.call(t,n[r])},toArray:function(){return this.list.slice()},copy:function(){var e=new i;return e.presenceSet=n(this.presenceSet),e.list=this.list.slice(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={get:function(t){var n=this.values,r=e(t);return n[r]},set:function(t,n){var r=this.keys,i=this.values,s=e(t);r.add(t),i[s]=n},remove:function(t){var n=this.keys,r=this.values,i=e(t),s;return r.hasOwnProperty(i)?(n.remove(t),s=r[i],delete r[i],!0):!1},has:function(t){var n=this.values,r=e(t);return n.hasOwnProperty(r)},forEach:function(t,n){var r=this.keys,i=this.values;r.forEach(function(r){var s=e(r);t.call(n,r,i[s])})},copy:function(){return r(this,new s)}};var o=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};o.create=function(e){return e?new o(e):new s},o.prototype=Ember.create(s.prototype),o.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var n=this.defaultValue(e);return this.set(e,n),n},o.prototype.copy=function(){return r(this,new o({defaultValue:this.defaultValue}))}}(),function(){function a(e){return e.match(u)[0]}function f(e,n){var r=o.test(n),i=!r&&s.test(n),u;if(!e||i)e=Ember.lookup;r&&(n=n.slice(5)),e===Ember.lookup&&(u=a(n),e=t(e,u),n=n.slice(u.length+1));if(!n||n.length===0)throw new Error("Invalid Path");return[e,n]}function l(e,n){var r,i,s,u,a;if(e===null&&n.indexOf(".")===-1)return t(Ember.lookup,n);r=o.test(n);if(!e||r)s=f(e,n),e=s[0],n=s[1],s.length=0;i=n.split("."),a=i.length;for(u=0;e&&u<a;u++){e=t(e,i[u],!0);if(e&&e.isDestroyed)return undefined}return e}function c(e,t,r,i){var s;s=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(s.length+1)),t!=="this"&&(e=l(e,t));if(!s||s.length===0)throw new Error("You passed an empty path");if(!e){if(i)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return n(e,s,r)}var e=Ember.META_KEY,t,n,r=Ember.ENV.MANDATORY_SETTER,i=/^([A-Z$]|([0-9][A-Z$]))/,s=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,o=/^this[\.\*]/,u=/^([^\.\*]+)/;t=function(n,i){if(i==="")return n;!i&&"string"==typeof n&&(i=n,n=null);if(!n||i.indexOf(".")!==-1)return l(n,i);var s=n[e],o=s&&s.descs[i],u;return o?o.get(n,i):(r&&s&&s.watching[i]>0?u=s.values[i]:u=n[i],u!==undefined||"object"!=typeof n||i in n||"function"!=typeof n.unknownProperty?u:n.unknownProperty(i))},n=function(n,i,s,o){typeof n=="string"&&(s=i,i=n,n=null);if(!n||i.indexOf(".")!==-1)return c(n,i,s,o);var u=n[e],a=u&&u.descs[i],f,l;return a?a.set(n,i,s):(f="object"==typeof n&&!(i in n),f&&"function"==typeof n.setUnknownProperty?n.setUnknownProperty(i,s):u&&u.watching[i]>0?(r?l=u.values[i]:l=n[i],s!==l&&(Ember.propertyWillChange(n,i),r?l!==undefined||i in n?u.values[i]=s:Ember.defineProperty(n,i,null,s):n[i]=s,Ember.propertyDidChange(n,i))):n[i]=s),s},Ember.config.overrideAccessors&&(Ember.get=t,Ember.set=n,Ember.config.overrideAccessors(),t=Ember.get,n=Ember.set),Ember.normalizeTuple=function(e,t){return f(e,t)},Ember.getWithDefault=function(e,n,r){var i=t(e,n);return i===undefined?r:i},Ember.get=t,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get),Ember.set=n,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,r){return n(e,t,r,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet),Ember.isGlobalPath=function(e){return i.test(e)}}(),function(){var e=Ember.GUID_KEY,t=Ember.META_KEY,n=Ember.EMPTY_META,r=Ember.meta,i=Ember.create,s=Ember.platform.defineProperty,o=Ember.ENV.MANDATORY_SETTER,u=Ember.Descriptor=function(){},a=Ember.MANDATORY_SETTER_FUNCTION=function(e){},f=Ember.DEFAULT_GETTER_FUNCTION=function(e){return function(){var n=this[t];return n&&n.values[e]}};Ember.defineProperty=function(e,t,n,i,u){var l,c,h,p;return u||(u=r(e)),l=u.descs,c=u.descs[t],h=u.watching[t]>0,c instanceof Ember.Descriptor&&c.teardown(e,t),n instanceof Ember.Descriptor?(p=n,l[t]=n,o&&h?s(e,t,{configurable:!0,enumerable:!0,writable:!0,value:undefined}):e[t]=undefined,n.setup(e,t)):(l[t]=undefined,n==null?(p=i,o&&h?(u.values[t]=i,s(e,t,{configurable:!0,enumerable:!0,set:a,get:f(t)})):e[t]=i):(p=n,s(e,t,n))),h&&Ember.overrideChains(e,t,u),e.didDefineProperty&&e.didDefineProperty(e,t,p),this}}(),function(){function i(){this.clear()}function u(t){return t+e}function a(e){return e+t}var e=":change",t=":before",n=Ember.guidFor,r=0;i.prototype.add=function(e,t,n){var r=this.observerSet,i=this.observers,s=Ember.guidFor(e),o=r[s],u;return o||(r[s]=o={}),u=o[t],u===undefined&&(u=i.push({sender:e,keyName:t,eventName:n,listeners:[]})-1,o[t]=u),i[u].listeners},i.prototype.flush=function(){var e=this.observers,t,n,r,i;this.clear();for(t=0,n=e.length;t<n;++t){r=e[t],i=r.sender;if(i.isDestroying||i.isDestroyed)continue;Ember.sendEvent(i,r.eventName,[i,r.keyName],r.listeners)}},i.prototype.clear=function(){this.observerSet={},this.observers=[]};var s=new i,o=new i;Ember.beginPropertyChanges=function(){r++},Ember.endPropertyChanges=function(){r--,r<=0&&(s.clear(),o.flush())},Ember.changeProperties=function(e,t){Ember.beginPropertyChanges(),Ember.tryFinally(e,Ember.endPropertyChanges,t)},Ember.setProperties=function(e,t){return Ember.changeProperties(function(){for(var n in t)t.hasOwnProperty(n)&&Ember.set(e,n,t[n])}),e},Ember.addObserver=function(e,t,n,r){return Ember.addListener(e,u(t),n,r),Ember.watch(e,t),this},Ember.observersFor=function(e,t){return Ember.listenersFor(e,u(t))},Ember.removeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,u(t),n,r),this},Ember.addBeforeObserver=function(e,t,n,r){return Ember.addListener(e,a(t),n,r),Ember.watch(e,t),this},Ember._suspendBeforeObserver=function(e,t,n,r,i){return Ember._suspendListener(e,a(t),n,r,i)},Ember._suspendObserver=function(e,t,n,r,i){return Ember._suspendListener(e,u(t),n,r,i)};var f=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,t,n,r,i){var s=f.call(t,a);return Ember._suspendListeners(e,s,n,r,i)},Ember._suspendObservers=function(e,t,n,r,i){var s=f.call(t,u);return Ember._suspendListeners(e,s,n,r,i)},Ember.beforeObserversFor=function(e,t){return Ember.listenersFor(e,a(t))},Ember.removeBeforeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,a(t),n,r),this},Ember.notifyBeforeObservers=function(e,t){if(e.isDestroying)return;var n=a(t),i,o;r?(i=s.add(e,t,n),o=Ember.listenersDiff(e,n,i),Ember.sendEvent(e,n,[e,t],o)):Ember.sendEvent(e,n,[e,t])},Ember.notifyObservers=function(e,t){if(e.isDestroying)return;var n=u(t),i;r?(i=o.add(e,t,n),Ember.listenersUnion(e,n,i)):Ember.sendEvent(e,n,[e,t])}}(),function(){function p(e){return e.match(f)[0]}function d(e){return e==="*"||!l.test(e)}function v(t,n,r,i,s){var o=e(n);i[o]||(i[o]={});if(i[o][r])return;i[o][r]=!0;var u=s.deps;u=u&&u[r];if(u)for(var a in u){var f=s.descs[a];if(f&&f._suspended===n)continue;t(n,a)}}function y(e,t,n){if(e.isDestroying)return;var r=m,i=!r;i&&(r=m={}),v(O,e,t,r,n),i&&(m=null)}function b(e,t,n){if(e.isDestroying)return;var r=g,i=!r;i&&(r=g={}),v(M,e,t,r,n),i&&(g=null)}function w(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e),s=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(s=i.chainWatchers={}),s[n]||(s[n]=[]),s[n].push(r),Ember.watch(e,n)}function E(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e,!1);if(!i.hasOwnProperty("chainWatchers"))return;var s=i.chainWatchers;if(s[n]){s=s[n];for(var o=0,u=s.length;o<u;o++)s[o]===r&&s.splice(o,1)}Ember.unwatch(e,n)}function x(){if(S.length===0)return;var e=S;S=[],a.call(e,function(e){e[0].add(e[1])})}function T(e){return t(e,!1).proto===e}function k(e){var n=t(e),r=n.chains;return r?r.value()!==e&&(r=n.chains=r.copy(e)):r=n.chains=new N(null,null,e),r}function L(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=0,o=i.length;s<o;s++)i[s].willChange(r)}function A(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=i.length-1;s>=0;s--)i[s].didChange(r)}function O(e,n,r){var i=t(e,!1),s=i.watching[n]>0||n==="length",o=i.proto,u=i.descs[n];if(!s)return;if(o===e)return;u&&u.willChange&&u.willChange(e,n),y(e,n,i),L(e,n,i),Ember.notifyBeforeObservers(e,n)}function M(e,n){var r=t(e,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(s===e)return;o&&o.didChange&&o.didChange(e,n);if(!i&&n!=="length")return;b(e,n,r),A(e,n,r),Ember.notifyObservers(e,n)}var e=Ember.guidFor,t=Ember.meta,n=Ember.get,r=Ember.set,i=Ember.normalizeTuple,s=Ember.GUID_KEY,o=Ember.META_KEY,u=Ember.notifyObservers,a=Ember.ArrayPolyfills.forEach,f=/^([^\.\*]+)/,l=/[\.\*]/,c=Ember.ENV.MANDATORY_SETTER,h=Ember.platform.defineProperty,m,g,S=[],N=function(e,t,n){var r;this._parent=e,this._key=t,this._watching=n===undefined,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&w(this._object,this._key,this)),this._parent&&this._parent._key==="@each"&&this.value()},C=N.prototype;C.value=function(){if(this._value===undefined&&this._watching){var e=this._parent.value();this._value=e&&!T(e)?n(e,this._key):undefined}return this._value},C.destroy=function(){if(this._watching){var e=this._object;e&&E(e,this._key,this),this._watching=!1}},C.copy=function(e){var t=new N(null,null,e),n=this._paths,r;for(r in n){if(n[r]<=0)continue;t.add(r)}return t},C.add=function(e){var t,n,r,s,o;o=this._paths,o[e]=(o[e]||0)+1,t=this.value(),n=i(t,e);if(n[0]&&n[0]===t)e=n[1],r=p(e),e=e.slice(r.length+1);else{if(!n[0]){S.push([this,e]),n.length=0;return}s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]}n.length=0,this.chain(r,e,s)},C.remove=function(e){var t,n,r,s,o;o=this._paths,o[e]>0&&o[e]--,t=this.value(),n=i(t,e),n[0]===t?(e=n[1],r=p(e),e=e.slice(r.length+1)):(s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]),n.length=0,this.unchain(r,e)},C.count=0,C.chain=function(e,t,n){var r=this._chains,i;r||(r=this._chains={}),i=r[e],i||(i=r[e]=new N(this,e,n)),i.count++,t&&t.length>0&&(e=p(t),t=t.slice(e.length+1),i.chain(e,t))},C.unchain=function(e,t){var n=this._chains,r=n[e];t&&t.length>1&&(e=p(t),t=t.slice(e.length+1),r.unchain(e,t)),r.count--,r.count<=0&&(delete n[r._key],r.destroy())},C.willChange=function(){var e=this._chains;if(e)for(var t in e){if(!e.hasOwnProperty(t))continue;e[t].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},C.chainWillChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,n+1):(n>1&&Ember.propertyWillChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyWillChange(this.value(),t))},C.chainDidChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,n+1):(n>1&&Ember.propertyDidChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyDidChange(this.value(),t))},C.didChange=function(e){if(this._watching){var t=this._parent.value();t!==this._object&&(E(this._object,this._key,this),this._object=t,w(t,this._key,this)),this._value=undefined,this._parent&&this._parent._key==="@each"&&this.value()}var n=this._chains;if(n)for(var r in n){if(!n.hasOwnProperty(r))continue;n[r].didChange(e)}if(e)return;this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.overrideChains=function(e,t,n){A(e,t,n,!0)},Ember.watch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]?i[n]=(i[n]||0)+1:(i[n]=1,d(n)?(s=r.descs[n],s&&s.willWatch&&s.willWatch(e,n),"function"==typeof e.willWatchProperty&&e.willWatchProperty(n),c&&n in e&&(r.values[n]=e[n],h(e,n,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(n)}))):k(e).add(n)),this},Ember.isWatching=function(t,n){var r=t[o];return(r&&r.watching[n])>0},Ember.watch.flushPending=x,Ember.unwatch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]===1?(i[n]=0,d(n)?(s=r.descs[n],s&&s.didUnwatch&&s.didUnwatch(e,n),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(n),c&&n in e&&(h(e,n,{configurable:!0,enumerable:!0,writable:!0,value:r.values[n]}),delete r.values[n])):k(e).remove(n)):i[n]>1&&i[n]--,this},Ember.rewatch=function(e){var n=t(e,!1),r=n.chains;return s in e&&!e.hasOwnProperty(s)&&Ember.generateGuid(e,"ember"),r&&r.value()!==e&&(n.chains=r.copy(e)),this},Ember.finishChains=function(e){var n=t(e,!1),r=n.chains;r&&(r.value()!==e&&(n.chains=r=r.copy(e)),r.didChange(!0))},Ember.propertyWillChange=O,Ember.propertyDidChange=M;var _=[];Ember.destroy=function(e){var t=e[o],n,r,i,s;if(t){e[o]=null,n=t.chains;if(n){_.push(n);while(_.length>0){n=_.pop(),r=n._chains;if(r)for(i in r)r.hasOwnProperty(i)&&_.push(r[i]);n._watching&&(s=n._object,s&&E(s,n._key,n))}}}}}(),function(){function f(e,t,n){var r=t[n];return r?t.hasOwnProperty(n)||(r=t[n]=s(r)):r=t[n]={},r}function l(e,t){var n=t.deps;return n?t.hasOwnProperty("deps")||(n=t.deps=s(n)):n=t.deps={},n}function c(e,t,n,r){var i=e._dependentKeys,s,o,a,c,h;if(!i)return;s=l(t,r);for(o=0,a=i.length;o<a;o++)c=i[o],h=f(t,s,c),h[n]=(h[n]||0)+1,u(t,c)}function h(e,t,n,r){var i=e._dependentKeys,s,o,u,c,h;if(!i)return;s=l(t,r);for(o=0,u=i.length;o<u;o++)c=i[o],h=f(t,s,c),h[n]=(h[n]||0)-1,a(t,c)}function p(e,t){this.func=e,this._cacheable=t&&t.cacheable!==undefined?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys}var e=Ember.get,t=Ember.set,n=Ember.meta,r=Ember.guidFor,i=[].slice,s=Ember.create,o=Ember.META_KEY,u=Ember.watch,a=Ember.unwatch;Ember.ComputedProperty=p,p.prototype=new Ember.Descriptor;var d=p.prototype;d.cacheable=function(e){return this._cacheable=e!==!1,this},d.volatile=function(){return this.cacheable(!1)},d.property=function(){var e=[];for(var t=0,n=arguments.length;t<n;t++)e.push(arguments[t]);return this._dependentKeys=e,this},d.meta=function(e){return arguments.length===0?this._meta||{}:(this._meta=e,this)},d.willWatch=function(e,t){var n=e[o];t in n.cache||c(this,e,t,n)},d.didUnwatch=function(e,t){var n=e[o];t in n.cache||h(this,e,t,n)},d.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=n(e);t in r.cache&&(delete r.cache[t],r.watching[t]||h(this,e,t,r))}},d.get=function(e,t){var r,i,s;if(this._cacheable){s=n(e),i=s.cache;if(t in i)return i[t];r=i[t]=this.func.call(e,t),s.watching[t]||c(this,e,t,s)}else r=this.func.call(e,t);return r},d.set=function(e,t,r){var i=this._cacheable,s=this.func,o=n(e,i),u=o.watching[t],a=this._suspended,f=!1,l=o.cache,h,p;this._suspended=e;try{i&&l.hasOwnProperty(t)&&(h=l[t],f=!0),s.wrappedFunction&&(s=s.wrappedFunction);if(s.length===3)p=s.call(e,t,r,h);else{if(s.length!==2){Ember.defineProperty(e,t,null,h),Ember.set(e,t,r);return}p=s.call(e,t,r)}if(f&&h===p)return;u&&Ember.propertyWillChange(e,t),f&&delete l[t],i&&(!u&&!f&&c(this,e,t,o),l[t]=p),u&&Ember.propertyDidChange(e,t)}finally{this._suspended=a}return p},d.setup=function(e,t){var r=e[o];r&&r.watching[t]&&c(this,e,t,n(e))},d.teardown=function(e,t){var r=n(e);return(r.watching[t]||t in r.cache)&&h(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;arguments.length>1&&(t=i.call(arguments,0,-1),e=i.call(arguments,-1)[0]);var n=new p(e);return t&&n.property.apply(n,t),n},Ember.cacheFor=function(t,r){var i=n(t,!1).cache;if(i&&r in i)return i[r]},Ember.computed.not=function(t){return Ember.computed(t,function(n){return!e(this,t)})},Ember.computed.empty=function(t){return Ember.computed(t,function(n){var r=e(this,t);return r===undefined||r===null||r===""||Ember.isArray(r)&&e(r,"length")===0})},Ember.computed.bool=function(t){return Ember.computed(t,function(n){return!!e(this,t)})},Ember.computed.alias=function(n){return Ember.computed(n,function(r,i){return arguments.length===1?e(this,n):(t(this,n,i),i)})}}(),function(){function i(e,t,n){var r=-1;for(var i=0,s=e.length;i<s;i++)if(t===e[i][0]&&n===e[i][1]){r=i;break}return r}function s(n,r){var i=t(n,!0),s;return i.listeners||(i.listeners={}),i.hasOwnProperty("listeners")||(i.listeners=e(i.listeners)),s=i.listeners[r],s&&!i.listeners.hasOwnProperty(r)?s=i.listeners[r]=i.listeners[r].slice():s||(s=i.listeners[r]=[]),s}function o(e,t,n){var s=e[r],o=s&&s.listeners&&s.listeners[t];if(!o)return;for(var u=o.length-1;u>=0;u--){var a=o[u][0],f=o[u][1],l=o[u][2],c=o[u][3],h=i(n,a,f);h===-1&&n.push([a,f,l,c])}}function u(e,t,n){var s=e[r],o=s&&s.listeners&&s.listeners[t],u=[];if(!o)return;for(var a=o.length-1;a>=0;a--){var f=o[a][0],l=o[a][1],c=o[a][2],h=o[a][3],p=i(n,f,l);if(p!==-1)continue;n.push([f,l,c,h]),u.push([f,l,c,h])}return u}function a(e,t,n,r,o){!r&&"function"==typeof n&&(r=n,n=null);var u=s(e,t),a=i(u,n,r);if(a!==-1)return;u.push([n,r,o,undefined]),"function"==typeof e.didAddListener&&e.didAddListener(t,n,r)}function f(e,t,n,o){function u(n,r,o){var u=s(e,t),a=i(u,n,r);if(a===-1)return;u.splice(a,1),"function"==typeof e.didRemoveListener&&e.didRemoveListener(t,n,r)}!o&&"function"==typeof n&&(o=n,n=null);if(o)u(n,o);else{var a=e[r],f=a&&a.listeners&&a.listeners[t];if(!f)return;for(var l=f.length-1;l>=0;l--)u(f[l][0],f[l][1])}}function l(e,t,n,r,o){function l(){return o.call(n)}function c(){f&&(f[3]=undefined)}!r&&"function"==typeof n&&(r=n,n=null);var u=s(e,t),a=i(u,n,r),f;return a!==-1&&(f=u[a].slice(),f[3]=!0,u[a]=f),Ember.tryFinally(l,c)}function c(e,t,n,r,o){function d(){return o.call(n)}function v(){for(c=0,h=u.length;c<h;c++)u[c][3]=undefined}!r&&"function"==typeof n&&(r=n,n=null);var u=[],a,f,l,c,h;for(c=0,h=t.length;c<h;c++){a=t[c],f=s(e,a);var p=i(f,n,r);p!==-1&&(l=f[p].slice(),l[3]=!0,f[p]=l,u.push(l))}return Ember.tryFinally(d,v)}function h(e){var t=e[r].listeners,n=[];if(t)for(var i in t)t[i]&&n.push(i);return n}function p(e,t,n,i){e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,n);if(!i){var s=e[r];i=s&&s.listeners&&s.listeners[t]}if(!i)return;for(var o=i.length-1;o>=0;o--){if(!i[o]||i[o][3]===!0)continue;var u=i[o][0],a=i[o][1],l=i[o][2];l&&f(e,t,u,a),u||(u=e),"string"==typeof a&&(a=u[a]),n?a.apply(u,n):a.apply(u)}return!0}function d(e,t){var n=e[r],i=n&&n.listeners&&n.listeners[t];return!!i&&!!i.length}function v(e,t){var n=[],i=e[r],s=i&&i.listeners&&i.listeners[t];if(!s)return n;for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];n.push([a,f])}return n}var e=Ember.create,t=Ember.meta,n=Ember.metaPath,r=Ember.META_KEY;Ember.addListener=a,Ember.removeListener=f,Ember._suspendListener=l,Ember._suspendListeners=c,Ember.sendEvent=p,Ember.hasListeners=d,Ember.watchedEvents=h,Ember.listenersFor=v,Ember.listenersDiff=u,Ember.listenersUnion=o}(),function(){function n(t,n,r,i){return n===undefined&&(n=t,t=undefined),"string"==typeof n&&(n=t[n]),r&&i>0&&(r=r.length>i?e.call(r,i):null),Ember.handleErrors(function(){return n.apply(t||this,r||[])},this)}function u(){o=null,s.currentRunLoop&&s.end()}function l(){f=null;var e=+(new Date),t=-1;for(var r in a){if(!a.hasOwnProperty(r))continue;var i=a[r];if(i&&i.expires)if(e>=i.expires)delete a[r],n(i.target,i.method,i.args,2);else if(t<0||i.expires<t)t=i.expires}t>0&&(f=setTimeout(l,t- +(new Date)))}function c(e,t){t[this.tguid]&&delete t[this.tguid][this.mguid],a[e]&&n(this.target,this.method,this.args),delete a[e]}function h(e,t,n,r){var i=Ember.guidFor(t),o=Ember.guidFor(n),u=s.autorun().onceTimers,f=u[i]&&u[i][o],l;return f&&a[f]?a[f].args=r:(l={target:t,method:n,args:r,tguid:i,mguid:o},f=Ember.guidFor(l),a[f]=l,u[i]||(u[i]={}),u[i][o]=f,s.schedule(e,l,c,f,u)),f}function d(){p=null;for(var e in a){if(!a.hasOwnProperty(e))continue;var t=a[e];t.next&&(delete a[e],n(t.target,t.method,t.args,2))}}var e=[].slice,t=Ember.ArrayPolyfills.forEach,r,i=function(e){this._prev=e||null,this.onceTimers={}};i.prototype={end:function(){this.flush()},prev:function(){return this._prev},schedule:function(t,n,r){var i=this._queues,s;i||(i=this._queues={}),s=i[t],s||(s=i[t]=[]);var o=arguments.length>3?e.call(arguments,3):null;return s.push({target:n,method:r,args:o}),this},flush:function(e){function f(e){n(e.target,e.method,e.args)}function l(){t.call(u,f)}var i,s,o,u,a;if(!this._queues)return this;Ember.watch.flushPending();if(e)while(this._queues&&(u=this._queues[e]))this._queues[e]=null,e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f);else{i=Ember.run.queues,o=i.length,s=0;e:while(s<o){e=i[s],u=this._queues&&this._queues[e],delete this._queues[e],u&&(e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f));for(var c=0;c<=s;c++)if(this._queues&&this._queues[i[c]]){s=c;continue e}s++}}return r=null,this}},Ember.RunLoop=i,Ember.run=function(e,t){function o(){if(e||t)return n(e,t,i,2)}var r,i=arguments;return s.begin(),Ember.tryFinally(o,s.end)};var s=Ember.run;Ember.run.begin=function(){s.currentRunLoop=new i(s.currentRunLoop)},Ember.run.end=function(){function e(){s.currentRunLoop.end()}function t(){s.currentRunLoop=s.currentRunLoop.prev()}Ember.tryFinally(e,t)},Ember.run.queues=["sync","actions","destroy","timers"],Ember.run.schedule=function(e,t,n){var r=s.autorun();r.schedule.apply(r,arguments)};var o;Ember.run.hasScheduledTimers=function(){return!!(o||f||p)},Ember.run.cancelTimers=function(){o&&(clearTimeout(o),o=null),f&&(clearTimeout(f),f=null),p&&(clearTimeout(p),p=null),a={}},Ember.run.autorun=function(){return s.currentRunLoop||(s.begin(),o||(o=setTimeout(u,1))),s.currentRunLoop},Ember.run.sync=function(){s.autorun(),s.currentRunLoop.flush("sync")};var a={},f;Ember.run.later=function(t,n){var r,i,o,u,f;return arguments.length===2&&"function"==typeof t?(f=n,n=t,t=undefined,r=[t,n]):(r=e.call(arguments),f=r.pop()),i=+(new Date)+f,o={target:t,method:n,expires:i,args:r},u=Ember.guidFor(o),a[u]=o,s.once(a,l),u},Ember.run.once=function(t,n){return h("actions",t,n,e.call(arguments,2))},Ember.run.scheduleOnce=function(t,n,r,i){return h(t,n,r,e.call(arguments,3))};var p;Ember.run.next=function(t,n){var r,i={target:t,method:n,args:e.call(arguments),next:!0};return r=Ember.guidFor(i),a[r]=i,p||(p=setTimeout(d,1)),r},Ember.run.cancel=function(e){delete a[e]}}(),function(){function i(t,n){return e(r(n)?Ember.lookup:t,n)}function o(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}Ember.LOG_BINDINGS=!!Ember.ENV.LOG_BINDINGS;var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isGlobalPath,s=function(e,t){this._direction="fwd",this._from=t,this._to=
|
16
|
-
e,this._directionMap=Ember.Map.create()};s.prototype={copy:function(){var e=new s(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+n(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,n=this._to;return Ember.trySet(e,n,i(e,t)),Ember.addObserver(e,t,this,this.fromDidChange),this._oneWay||Ember.addObserver(e,n,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return Ember.removeObserver(e,this._from,this,this.fromDidChange),t&&Ember.removeObserver(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var n=this._directionMap,r=n.get(e);r||(Ember.run.schedule("sync",this,this._sync,e),n.set(e,t)),r==="back"&&t==="fwd"&&n.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(t.isDestroyed||!this._readyToSync)return;var r=this._directionMap,s=r.get(t),o=this._from,u=this._to;r.remove(t);if(s==="fwd"){var a=i(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",a,t),this._oneWay?Ember.trySet(t,u,a):Ember._suspendObserver(t,u,this,this.toDidChange,function(){Ember.trySet(t,u,a)})}else if(s==="back"){var f=e(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",f,t),Ember._suspendObserver(t,o,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(o)?Ember.lookup:t,o,f)})}}},o(s,{from:function(){var e=this,t=new e;return t.from.apply(t,arguments)},to:function(){var e=this,t=new e;return t.to.apply(t,arguments)},oneWay:function(e,t){var n=this,r=new n(null,e);return r.oneWay(t)}}),Ember.Binding=s,Ember.bind=function(e,t,n){return(new Ember.Binding(t,n)).connect(e)},Ember.oneWay=function(e,t,n){return(new Ember.Binding(t,n)).oneWay().connect(e)}}(),function(){function c(e){var t=Ember.meta(e,!0),n=t.mixins;return n?t.hasOwnProperty("mixins")||(n=t.mixins=a(n)):n=t.mixins={},n}function h(t,n){return n&&n.length>0&&(t.mixins=r.call(n,function(t){if(t instanceof e)return t;var n=new e;return n.properties=t,n})),t}function p(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function v(t,n){var r;return n instanceof e?(r=l(n),t[r]?d:(t[r]=n,n.properties)):n}function m(e,t,n){var r;return r=t.concatenatedProperties||n.concatenatedProperties,e.concatenatedProperties&&(r=r?r.concat(e.concatenatedProperties):e.concatenatedProperties),r}function g(e,t,n,r,i){var s;return r[t]===undefined&&(s=i[t]),s=s||e.descs[t],!!s&&s instanceof Ember.ComputedProperty?(n=a(n),n.func=Ember.wrap(n.func,s.func),n):n}function y(e,t,n,r,i){var s;return i[t]===undefined&&(s=r[t]),s=s||e[t],"function"!=typeof s?n:Ember.wrap(n,s)}function b(e,t,n,r){var i=r[t]||e[t];return i?"function"==typeof i.concat?i.concat(n):Ember.makeArray(i).concat(n):Ember.makeArray(n)}function w(e,n,r,s,o,u,a){if(r instanceof Ember.Descriptor){if(r===t&&o[n])return d;r.func&&(r=g(s,n,r,u,o)),o[n]=r,u[n]=undefined}else{if(p(r))r=y(e,n,r,u,o);else if(a&&i.call(a,n)>=0||n==="concatenatedProperties")r=b(e,n,r,u);o[n]=undefined,u[n]=r}}function E(e,t,n,r,i){function c(e){delete n[e],delete r[e]}var o,u,a,f,l;for(var h=0,p=e.length;h<p;h++){o=e[h],u=v(t,o);if(u===d)continue;if(u){l=Ember.meta(i),f=m(u,r,i);for(a in u){if(!u.hasOwnProperty(a))continue;w(i,a,u[a],l,n,r,f)}u.hasOwnProperty("toString")&&(i.toString=u.toString)}else o.mixins&&(E(o.mixins,t,n,r,i),o._without&&s.call(o._without,c))}}function S(e){var t=Ember.meta(e),n=t.required;if(!n||!t.hasOwnProperty("required"))n=t.required=n?a(n):{};return n}function T(e,t,n,r){if(x.test(t)){var i=r.bindings;i?r.hasOwnProperty("bindings")||(i=r.bindings=a(r.bindings)):i=r.bindings={},i[t]=n}}function N(e,t){var n=t.bindings,r,i,s;if(n){for(r in n)i=n[r],i&&(s=r.slice(0,-7),i instanceof Ember.Binding?(i=i.copy(),i.to(s)):i=new Ember.Binding(s,i),i.connect(e),e[r]=i);t.bindings={}}}function C(e,t){return N(e,t||Ember.meta(e)),e}function k(e,t,n,r,i){var s=t.methodName,o;return r[s]||i[s]?(o=i[s],t=r[s]):n.descs[s]?(t=n.descs[s],o=undefined):(t=undefined,o=e[s]),{desc:t,value:o}}function L(e,t,n,r,i){if("function"!=typeof n)return;var s=n[r];if(s)for(var o=0,u=s.length;o<u;o++)Ember[i](e,s[o],null,t)}function A(e,t,n){var r=e[t];L(e,t,r,"__ember_observesBefore__","removeBeforeObserver"),L(e,t,r,"__ember_observes__","removeObserver"),L(e,t,n,"__ember_observesBefore__","addBeforeObserver"),L(e,t,n,"__ember_observes__","addObserver")}function O(e,r,i){var s={},o={},u=Ember.meta(e),a,l,h;E(r,c(e),s,o,e);for(a in o){if(a==="contructor"||!o.hasOwnProperty(a))continue;h=s[a],l=o[a];if(h===t)continue;while(h&&h instanceof n){var p=k(e,h,u,s,o);h=p.desc,l=p.value}if(h===undefined&&l===undefined)continue;A(e,a,l),T(e,a,l,u),f(e,a,h,l,u)}return i||C(e,u),e}function _(e,t,n){var r=l(e);if(n[r])return!1;n[r]=!0;if(e===t)return!0;var i=e.mixins,s=i?i.length:0;while(--s>=0)if(_(i[s],t,n))return!0;return!1}function D(e,t,n){if(n[l(t)])return;n[l(t)]=!0;if(t.properties){var r=t.properties;for(var i in r)r.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&s.call(t.mixins,function(t){D(e,t,n)})}var e,t,n,r=Ember.ArrayPolyfills.map,i=Ember.ArrayPolyfills.indexOf,s=Ember.ArrayPolyfills.forEach,o=[].slice,u={},a=Ember.create,f=Ember.defineProperty,l=Ember.guidFor,d={},x=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=o.call(arguments,1);return O(e,t,!1),e},Ember.Mixin=function(){return h(this,arguments)},e=Ember.Mixin,e._apply=O,e.applyPartial=function(e){var t=o.call(arguments,1);return O(e,t,!0)},e.finishPartial=C,Ember.anyUnprocessedMixins=!1,e.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return h(new e,arguments)};var M=e.prototype;M.reopen=function(){var t,n;this.properties?(t=e.create(),t.properties=this.properties,delete this.properties,this.mixins=[t]):this.mixins||(this.mixins=[]);var r=arguments.length,i=this.mixins,s;for(s=0;s<r;s++)t=arguments[s],t instanceof e?i.push(t):(n=e.create(),n.properties=t,i.push(n));return this},M.apply=function(e){return O(e,[this],!1)},M.applyPartial=function(e){return O(e,[this],!0)},M.detect=function(t){if(!t)return!1;if(t instanceof e)return _(t,this,{});var n=Ember.meta(t,!1).mixins;return n?!!n[l(this)]:!1},M.without=function(){var t=new e(this);return t._without=o.call(arguments),t},M.keys=function(){var e={},t={},n=[];D(e,this,t);for(var r in e)e.hasOwnProperty(r)&&n.push(r);return n},e.mixins=function(e){var t=Ember.meta(e,!1).mixins,n=[];if(!t)return n;for(var r in t){var i=t[r];i.properties||n.push(i)}return n},t=new Ember.Descriptor,t.toString=function(){return"(Required Property)"},Ember.required=function(){return t},n=function(e){this.methodName=e},n.prototype=new Ember.Descriptor,Ember.alias=function(e){return new n(e)},Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new n(e)},Ember.observer=function(e){var t=o.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;e<t;e++)var n=arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=o.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){}(),function(){e("rsvp",[],function(){"use strict";function d(e,t){n.async(function(){e.trigger("promise:resolved",{detail:t}),e.isResolved=!0,e.resolvedValue=t})}function v(e,t){n.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedValue=t})}function m(e){var t,n=[],r=new c,i=e.length;i===0&&r.resolve([]);var s=function(e){return function(t){o(e,t)}},o=function(e,t){n[e]=t,--i===0&&r.resolve(n)},u=function(e){r.reject(e)};for(t=0;t<i;t++)e[t].then(s(t),u);return r}var e=typeof window!="undefined"?window:{},t=e.MutationObserver||e.WebKitMutationObserver,n,r;if(typeof process!="undefined"&&{}.toString.call(process)==="[object process]")r=function(e,t){process.nextTick(function(){e.call(t)})};else if(t){var i=[],s=new t(function(){var e=i.slice();i=[],e.forEach(function(e){var t=e[0],n=e[1];t.call(n)})}),o=document.createElement("div");s.observe(o,{attributes:!0}),window.addEventListener("unload",function(){s.disconnect(),s=null}),r=function(e,t){i.push([e,t]),o.setAttribute("drainQueue","drainQueue")}}else r=function(e,t){setTimeout(function(){e.call(t)},1)};var u=function(e,t){this.type=e;for(var n in t){if(!t.hasOwnProperty(n))continue;this[n]=t[n]}},a=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n][0]===t)return n;return-1},f=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},l={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,n){var r=f(this),i,s;e=e.split(/\s+/),n=n||this;while(s=e.shift())i=r[s],i||(i=r[s]=[]),a(i,t)===-1&&i.push([t,n])},off:function(e,t){var n=f(this),r,i,s;e=e.split(/\s+/);while(i=e.shift()){if(!t){n[i]=[];continue}r=n[i],s=a(r,t),s!==-1&&r.splice(s,1)}},trigger:function(e,t){var n=f(this),r,i,s,o,a;if(r=n[e])for(var l=0;l<r.length;l++)i=r[l],s=i[0],o=i[1],typeof t!="object"&&(t={detail:t}),a=new u(e,t),s.call(o,a)}},c=function(){this.on("promise:resolved",function(e){this.trigger("success",{detail:e.detail})},this),this.on("promise:failed",function(e){this.trigger("error",{detail:e.detail})},this)},h=function(){},p=function(e,t,n,r){var i=typeof n=="function",s,o,u,a;if(i)try{s=n(r.detail),u=!0}catch(f){a=!0,o=f}else s=r.detail,u=!0;s&&typeof s.then=="function"?s.then(function(e){t.resolve(e)},function(e){t.reject(e)}):i&&u?t.resolve(s):a?t.reject(o):t[e](s)};return c.prototype={then:function(e,t){var r=new c;return this.isResolved&&n.async(function(){p("resolve",r,e,{detail:this.resolvedValue})},this),this.isRejected&&n.async(function(){p("reject",r,t,{detail:this.rejectedValue})},this),this.on("promise:resolved",function(t){p("resolve",r,e,t)}),this.on("promise:failed",function(e){p("reject",r,t,e)}),r},resolve:function(e){d(this,e),this.resolve=h,this.reject=h},reject:function(e){v(this,e),this.resolve=h,this.reject=h}},l.mixin(c.prototype),n={async:r,Promise:c,Event:u,EventTarget:l,all:m,raiseOnUncaughtExceptions:!0},n})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function n(e){throw new Error(e+" is not currently supported on child containers")}function r(e,t){var n=s(e,t,"singleton");return n!==!1}function i(e,t){var n={};if(!t)return n;var r,i;for(var s=0,o=t.length;s<o;s++)r=t[s],i=e.lookup(r.fullName),n[r.property]=i;return n}function s(e,t,n){var r=e._options.get(t);if(r&&r[n]!==undefined)return r[n];var i=t.split(":")[0];r=e._typeOptions.get(i);if(r)return r[n]}function o(e,t){var n=e.normalize(t);return e.resolve(n)}function u(e,t){var n=o(e,t),r=t.split(":"),u=r[0],a=r[1],f;if(s(e,t,"instantiate")===!1)return n;if(n){var l=[];l=l.concat(e.typeInjections.get(u)||[]),l=l.concat(e.injections[t]||[]);var c=i(e,l);return c.container=e,c._debugContainerKey=t,f=n.create(c),f}}function a(e,t){e.cache.eachLocal(function(n,r){if(s(e,n,"instantiate")===!1)return;t(r)})}function f(e){e.cache.eachLocal(function(t,n){if(s(e,t,"instantiate")===!1)return;n.destroy()}),e.cache.dict={}}return e.prototype={get:function(e){var t=this.dict;if(t.hasOwnProperty(e))return t[e];if(this.parent)return this.parent.get(e)},set:function(e,t){this.dict[e]=t},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var n=this.dict;for(var r in n)n.hasOwnProperty(r)&&e.call(t,r,n[r])}},t.prototype={child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,n){e[t]=n},register:function(e,t,n,r){var i;e.indexOf(":")!==-1?(r=n,n=t,i=e):i=e+":"+t;var s=this.normalize(i);this.registry.set(s,n),this._options.set(s,r||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},lookup:function(e,t){e=this.normalize(e),t=t||{};if(this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var n=u(this,e);if(!n)return;return r(this,e)&&t.singleton!==!1&&this.cache.set(e,n),n},has:function(e){return this.cache.has(e)?!0:!!o(this,e)},optionsForType:function(e,t){this.parent&&n("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,r){this.parent&&n("typeInjection");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:r})},injection:function(e,t,r){this.parent&&n("injection");if(e.indexOf(":")===-1)return this.typeInjection(e,t,r);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:r})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;e<t;e++)this.children[e].destroy();this.children=[],a(this,function(e){e.isDestroying=!0}),a(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;e<t;e++)f(this.children[e]);f(this)}},t})}(),function(){function i(t,n,r,s){var o,u,a;if("object"!=typeof t||t===null)return t;if(n&&(u=e(r,t))>=0)return s[u];if(Ember.typeOf(t)==="array"){o=t.slice();if(n){u=o.length;while(--u>=0)o[u]=i(o[u],n,r,s)}}else if(Ember.Copyable&&Ember.Copyable.detect(t))o=t.copy(n,r,s);else{o={};for(a in t){if(!t.hasOwnProperty(a))continue;if(a.substring(0,2)==="__")continue;o[a]=n?i(t[a],n,r,s):t[a]}}return n&&(r.push(t),s.push(o)),o}var e=Ember.EnumerableUtils.indexOf,t={},n="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(n,function(e){t["[object "+e+"]"]=e.toLowerCase()});var r=Object.prototype.toString;Ember.typeOf=function(e){var n;return n=e===null||e===undefined?String(e):t[r.call(e)]||"object",n==="function"?Ember.Object&&Ember.Object.detect(e)&&(n="class"):n==="object"&&(e instanceof Error?n="error":Ember.Object&&e instanceof Ember.Object?n="instance":n="object"),n},Ember.isNone=function(e){return e===null||e===undefined},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return e===null||e===undefined||e.length===0&&typeof e!="function"||typeof e=="object"&&Ember.get(e,"length")===0},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty),Ember.compare=function o(e,t){if(e===t)return 0;var n=Ember.typeOf(e),r=Ember.typeOf(t),i=Ember.Comparable;if(i){if(n==="instance"&&i.detect(e.constructor))return e.constructor.compare(e,t);if(r==="instance"&&i.detect(t.constructor))return 1-t.constructor.compare(t,e)}var s=Ember.ORDER_DEFINITION_MAPPING;if(!s){var u=Ember.ORDER_DEFINITION;s=Ember.ORDER_DEFINITION_MAPPING={};var a,f;for(a=0,f=u.length;a<f;++a)s[u[a]]=a;delete Ember.ORDER_DEFINITION}var l=s[n],c=s[r];if(l<c)return-1;if(l>c)return 1;switch(n){case"boolean":case"number":if(e<t)return-1;if(e>t)return 1;return 0;case"string":var h=e.localeCompare(t);if(h<0)return-1;if(h>0)return 1;return 0;case"array":var p=e.length,d=t.length,v=Math.min(p,d),m=0,g=0;while(m===0&&g<v)m=o(e[g],t[g]),g++;if(m!==0)return m;if(p<d)return-1;if(p>d)return 1;return 0;case"instance":if(Ember.Comparable&&Ember.Comparable.detect(e))return e.compare(e,t);return 0;case"date":var y=e.getTime(),b=t.getTime();if(y<b)return-1;if(y>b)return 1;return 0;default:return 0}},Ember.copy=function(e,t){return"object"!=typeof e||e===null?e:Ember.Copyable&&Ember.Copyable.detect(e)?e.copy(t):i(e,t,t?[]:null,t?[]:null)},Ember.inspect=function(e){if(typeof e!="object"||e===null)return e+"";var t,n=[];for(var r in e)if(e.hasOwnProperty(r)){t=e[r];if(t==="toString")continue;Ember.typeOf(t)==="function"&&(t="function() { ... }"),n.push(r+": "+t)}return"{"+n.join(", ")+"}"},Ember.isEqual=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e===t},Ember.ORDER_DEFINITION=Ember.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class","date"],Ember.keys=Object.keys,Ember.keys||(Ember.keys=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t});var s=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){var e=Error.prototype.constructor.apply(this,arguments);for(var t=0;t<s.length;t++)this[s[t]]=e[s[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){var e=/[ _]/g,t={},n=/([a-z])([A-Z])/g,r=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,s=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var n=0;return e.replace(/%@([0-9]+)?/g,function(e,r){return r=r?parseInt(r,0)-1:n++,e=t[r],(e===null?"(null)":e===undefined?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(n,"$1_$2").toLowerCase()},dasherize:function(n){var r=t,i=r[n];return i?i:(i=Ember.String.decamelize(n).replace(e,"-"),r[n]=i,i)},camelize:function(e){return e.replace(r,function(e,t,n){return n?n.toUpperCase():""}).replace(/^([A-Z])/,function(e,t,n){return e.toLowerCase()})},classify:function(e){var t=e.split("."),n=[];for(var r=0,i=t.length;r<i;r++){var s=Ember.String.camelize(t[r]);n.push(s.charAt(0).toUpperCase()+s.substr(1))}return n.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(s,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,n=Ember.String.loc,r=Ember.String.camelize,i=Ember.String.decamelize,s=Ember.String.dasherize,o=Ember.String.underscore,u=Ember.String.capitalize,a=Ember.String.classify;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.String)String.prototype.fmt=function(){return e(this,arguments)},String.prototype.w=function(){return t(this)},String.prototype.loc=function(){return n(this,arguments)},String.prototype.camelize=function(){return r(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return s(this)},String.prototype.underscore=function(){return o(this)},String.prototype.classify=function(){return a(this)},String.prototype.capitalize=function(){return u(this)}}(),function(){var e=Array.prototype.slice;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Function)Function.prototype.property=function(){var e=Ember.computed(this);return e.property.apply(e,arguments)},Function.prototype.observes=function(){return this.__ember_observes__=e.call(arguments),this},Function.prototype.observesBefore=function(){return this.__ember_observesBefore__=e.call(arguments),this}}(),function(){}(),function(){function s(){return i.length===0?{}:i.pop()}function o(e){return i.push(e),null}function u(t,n){function i(i){var s=e(i,t);return r?n===s:!!s}var r=arguments.length===2;return i}var e=Ember.get,t=Ember.set,n=Array.prototype.slice,r=Ember.EnumerableUtils.indexOf,i=[];Ember.Enumerable=Ember.Mixin.create({isEnumerable:!0,nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(e(this,"length")===0)return undefined;var t=s(),n;return n=this.nextObject(0,null,t),o(t),n}).property("[]"),lastObject:Ember.computed(function(){var t=e(this,"length");if(t===0)return undefined;var n=s(),r=0,i,u=null;do u=i,i=this.nextObject(r++,u,n);while(i!==undefined);return o(n),u}).property("[]"),contains:function(e){return this.find(function(t){return t===e})!==undefined},forEach:function(t,n){if(typeof t!="function")throw new TypeError;var r=e(this,"length"),i=null,u=s();n===undefined&&(n=null);for(var a=0;a<r;a++){var f=this.nextObject(a,i,u);t.call(n,f,a,this),i=f}return i=null,u=o(u),this},getEach:function(e){return this.mapProperty(e)},setEach:function(e,n){return this.forEach(function(r){t(r,e,n)})},map:function(e,t){var n=[];return this.forEach(function(r,i,s){n[i]=e.call(t,r,i,s)}),n},mapProperty:function(t){return this.map(function(n){return e(n,t)})},filter:function(e,t){var n=[];return this.forEach(function(r,i,s){e.call(t,r,i,s)&&n.push(r)}),n},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterProperty:function(e,t){return this.filter(u.apply(this,arguments))},rejectProperty:function(t,n){var r=function(r){return e(r,t)===n},i=function(n){return!!e(n,t)},s=arguments.length===2?r:i;return this.reject(s)},find:function(t,n){var r=e(this,"length");n===undefined&&(n=null);var i=null,u,a=!1,f,l=s();for(var c=0;c<r&&!a;c++){u=this.nextObject(c,i,l);if(a=t.call(n,u,c,this))f=u;i=u}return u=i=null,l=o(l),f},findProperty:function(e,t){return this.find(u.apply(this,arguments))},every:function(e,t){return!this.find(function(n,r,i){return!e.call(t,n,r,i)})},everyProperty:function(e,t){return this.every(u.apply(this,arguments))},some:function(e,t){return!!this.find(function(n,r,i){return!!e.call(t,n,r,i)})},someProperty:function(e,t){return this.some(u.apply(this,arguments))},reduce:function(e,t,n){if(typeof e!="function")throw new TypeError;var r=t;return this.forEach(function(t,i){r=e.call(null,r,t,i,this,n)},this),r},invoke:function(e){var t,r=[];return arguments.length>1&&(t=n.call(arguments,1)),this.forEach(function(n,i){var s=n&&n[e];"function"==typeof s&&(r[i]=t?s.apply(n,t):s.call(n))},this),r},toArray:function(){var e=[];return this.forEach(function(t,n){e[n]=t}),e},compact:function(){return this.without(null)},without:function(e){if(!this.contains(e))return this;var t=[];return this.forEach(function(n){n!==e&&(t[t.length]=n)}),t},uniq:function(){var e=[];return this.forEach(function(t){r(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(e,t){return this}),addEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",t,r),Ember.addListener(this,"@enumerable:change",t,i),s||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",t,r),Ember.removeListener(this,"@enumerable:change",t,i),s&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.propertyWillChange(this,"[]"),s&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,t,n]),this},enumerableContentDidChange:function(t,n){var r=this.propertyDidChange,i,s,o;return"number"==typeof t?i=t:t?i=e(t,"length"):i=t=-1,"number"==typeof n?s=n:n?s=e(n,"length"):s=n=-1,o=s<0||i<0||s-i!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.sendEvent(this,"@enumerable:change",[this,t,n]),o&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this}})}(),function(){function s(e){return e===null||e===undefined}var e=Ember.get,t=Ember.set,n=Ember.meta,r=Ember.EnumerableUtils.map,i=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{isSCArray:!0,length:Ember.required(),objectAt:function(t){return t<0||t>=e(this,"length")?undefined:e(this,t)},objectsAt:function(e){var t=this;return r(e,function(e){return t.objectAt(e)})},nextObject:function(e){return this.objectAt(e)},"[]":Ember.computed(function(t,n){return n!==undefined&&this.replace(0,e(this,"length"),n),this}),firstObject:Ember.computed(function(){return this.objectAt(0)}),lastObject:Ember.computed(function(){return this.objectAt(e(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(t,n){var r=[],i=e(this,"length");s(t)&&(t=0);if(s(n)||n>i)n=i;while(t<n)r[r.length]=this.objectAt(t++);return r},indexOf:function(t,n){var r,i=e(this,"length");n===undefined&&(n=0),n<0&&(n+=i);for(r=n;r<i;r++)if(this.objectAt(r,!0)===t)return r;return-1},lastIndexOf:function(t,n){var r,i=e(this,"length");if(n===undefined||n>=i)n=i-1;n<0&&(n+=i);for(r=n;r>=0;r--)if(this.objectAt(r)===t)return r;return-1},addArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,r),Ember.addListener(this,"@array:change",t,i),s||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,r),Ember.removeListener(this,"@array:change",t,i),s&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,n,r){t===undefined?(t=0,n=r=-1):(n===undefined&&(n=-1),r===undefined&&(r=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,n,r]);var i,s;if(t>=0&&n>=0&&e(this,"hasEnumerableObservers")){i=[],s=t+n;for(var o=t;o<s;o++)i.push(this.objectAt(o))}else i=n;return this.enumerableContentWillChange(i,r),this},arrayContentDidChange:function(t,n,r){t===undefined?(t=0,n=r=-1):(n===undefined&&(n=-1),r===undefined&&(r=-1));var s,o;if(t>=0&&r>=0&&e(this,"hasEnumerableObservers")){s=[],o=t+r;for(var u=t;u<o;u++)s.push(this.objectAt(u))}else s=r;this.enumerableContentDidChange(n,s),Ember.sendEvent(this,"@array:change",[this,t,n,r]);var a=e(this,"length"),f=i(this,"firstObject"),l=i(this,"lastObject");return this.objectAt(0)!==f&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(a-1)!==l&&(Ember.propertyWillChange(this,"lastObject"),Ember.propertyDidChange(this,"lastObject")),this},"@each":Ember.computed(function(){return this.__each||(this.__each=new Ember.EachProxy(this)),this.__each})})}(),function(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,compare:Ember.required(Function)})}(),function(){var e=Ember.get,t=Ember.set;Ember.Copyable=Ember.Mixin.create({copy:Ember.required(Function),frozenCopy:function(){if(Ember.Freezable&&Ember.Freezable.detect(this))return e(this,"isFrozen")?this:this.copy().freeze();throw new Error(Ember.String.fmt("%@ does not support freezing",[this]))}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Freezable=Ember.Mixin.create({isFrozen:!1,freeze:function(){return e(this,"isFrozen")?this:(t(this,"isFrozen",!0),this)}}),Ember.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){var e=Ember.EnumerableUtils.forEach;Ember.MutableEnumerable=Ember.Mixin.create(Ember.Enumerable,{addObject:Ember.required(Function),addObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.addObject(e)},this),Ember.endPropertyChanges(this),this},removeObject:Ember.required(Function),removeObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.removeObject(e)},this),Ember.endPropertyChanges(this),this}})}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set,i=Ember.EnumerableUtils.forEach;Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=n(this,"length");return e===0?this:(this.replace(0,e,t),this)},insertAt:function(t,r){if(t>n(this,"length"))throw new Error(e);return this.replace(t,0,[r]),this},removeAt:function(r,i){if("number"==typeof r){if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1),this.replace(r,i,t)}return this},pushObject:function(e){return this.insertAt(n(this,"length"),e),e},pushObjects:function(e){return this.replace(n(this,"length"),0,e),this},popObject:function(){var e=n(this,"length");if(e===0)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(n(this,"length")===0)return null;var e=this.objectAt(0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=n(this,"length");if(e===0)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this.replace(0,t,e),this},removeObject:function(e){var t=n(this,"length")||0;while(--t>=0){var r=this.objectAt(t);r===e&&this.removeAt(t)}return this},addObject:function(e){return this.contains(e)||this.pushObject(e),this}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.defineProperty;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},n=arguments;arguments.length===1&&Ember.typeOf(arguments[0])==="array"&&(n=arguments[0]);for(var r=0;r<n.length;r++)t[n[r]]=e(this,n[r]);return t},set:function(e,n){return t(this,e,n),this},setProperties:function(e){return Ember.setProperties(this,e)},beginPropertyChanges:function(){return Ember.beginPropertyChanges(),this},endPropertyChanges:function(){return Ember.endPropertyChanges(),this},propertyWillChange:function(e){return Ember.propertyWillChange(this,e),this},propertyDidChange:function(e){return Ember.propertyDidChange(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addBeforeObserver:function(e,t,n){Ember.addBeforeObserver(this,e,t,n)},addObserver:function(e,t,n){Ember.addObserver(this,e,t,n)},removeObserver:function(e,t,n){Ember.removeObserver(this,e,t,n)},hasObserverFor:function(e){return Ember.hasListeners(this,e+":change")},getPath:function(e){return this.get(e)},setPath:function(e,t){return this.set(e,t)},getWithDefault:function(e,t){return Ember.getWithDefault(this,e,t)},incrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)+r),e(this,n)},decrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)-r),e(this,n)},toggleProperty:function(n){return t(this,n,!e(this,n)),e(this,n)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get,t=Ember.set;Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,targetObject:Ember.computed(function(){var t=e(this,"target");if(Ember.typeOf(t)==="string"){var n=e(this,t);return n===undefined&&(n=e(Ember.lookup,t)),n}return t}).property("target"),triggerAction:function(){var t=e(this,"action"),n=e(this,"targetObject");if(n&&t){var r;return typeof n.send=="function"?r=n.send(t,this):(typeof t=="string"&&(t=n[t]),r=t.call(n,this)),r!==!1&&(r=!0),r}return!1}})}(),function(){Ember.Evented=Ember.Mixin.create({on:function(e,t,n){Ember.addListener(this,e,t,n)},one:function(e,t,n){n||(n=t,t=null),Ember.addListener(this,e,t,n,!0)},trigger:function(e){var t=[],n,r;for(n=1,r=arguments.length;n<r;n++)t.push(arguments[n]);Ember.sendEvent(this,e,t)},fire:function(e){this.trigger.apply(this,arguments)},off:function(e,t,n){Ember.removeListener(this,e,t,n)},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.async=function(e,t){Ember.run.schedule("actions",t,e)};var n=Ember.get,r=Array.prototype.slice;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){var r=n(this,"promise");return r.then.apply(r,arguments)},resolve:function(e){n(this,"promise").resolve(e)},reject:function(e){n(this,"promise").reject(e)},promise:Ember.computed(function(){return new e.Promise})})}(),function(){}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function w(){var e=!1,t,i,o=function(){e||o.proto(),r(this,s,b),r(this,"_super",b);var u=a(this);u.proto=this;if(t){var f=t;t=null,this.reopen.apply(this,f)}if(i){var c=i;i=null;var h=this.concatenatedProperties;for(var p=0,d=c.length;p<d;p++){var m=c[p];for(var w in
|
17
|
-
m){if(!m.hasOwnProperty(w))continue;var E=m[w],S=Ember.IS_BINDING;if(S.test(w)){var x=u.bindings;x?u.hasOwnProperty("bindings")||(x=u.bindings=n(u.bindings)):x=u.bindings={},x[w]=E}var T=u.descs[w];if(h&&y(h,w)>=0){var N=this[w];N?"function"==typeof N.concat?E=N.concat(E):E=Ember.makeArray(N).concat(E):E=Ember.makeArray(E)}T?T.set(this,w,E):typeof this.setUnknownProperty!="function"||w in this?g?Ember.defineProperty(this,w,null,E):this[w]=E:this.setUnknownProperty(w,E)}}}v(this,u),delete u.proto,l(this),this.init.apply(this,arguments)};return o.toString=p.prototype.toString,o.willReopen=function(){e&&(o.PrototypeMixin=p.create(o.PrototypeMixin)),e=!1},o._initMixins=function(e){t=e},o._initProperties=function(e){i=e},o.proto=function(){var t=o.superclass;return t&&t.proto(),e||(e=!0,o.PrototypeMixin.applyPartial(o.prototype),f(o.prototype)),this.prototype},o}function S(e){return function(){return e}}var e=Ember.set,t=Ember.get,n=Ember.create,r=Ember.platform.defineProperty,i=Array.prototype.slice,s=Ember.GUID_KEY,o=Ember.guidFor,u=Ember.generateGuid,a=Ember.meta,f=Ember.rewatch,l=Ember.finishChains,c=Ember.destroy,h=Ember.run.schedule,p=Ember.Mixin,d=p._apply,v=p.finishPartial,m=p.prototype.reopen,g=Ember.ENV.MANDATORY_SETTER,y=Ember.EnumerableUtils.indexOf,b={configurable:!0,writable:!0,enumerable:!1,value:undefined},E=w();E.toString=function(){return"Ember.CoreObject"},E.PrototypeMixin=p.create({reopen:function(){return d(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){if(this._didCallDestroy)return;return this.isDestroying=!0,this._didCallDestroy=!0,this.willDestroy&&this.willDestroy(),h("destroy",this,this._scheduledDestroy),this},_scheduledDestroy:function(){c(this),e(this,"isDestroyed",!0),this.didDestroy&&this.didDestroy()},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function T(){var e=typeof this.toStringExtension=="function",t=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+o(this)+t+">";return this.toString=S(n),n}}),E.PrototypeMixin.ownerConstructor=E,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(E.PrototypeMixin),E.__super__=null;var x=p.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var e=w(),t;return e.ClassMixin=p.create(this.ClassMixin),e.PrototypeMixin=p.create(this.PrototypeMixin),e.ClassMixin.ownerConstructor=e,e.PrototypeMixin.ownerConstructor=e,m.apply(e.PrototypeMixin,arguments),e.superclass=this,e.__super__=this.prototype,t=e.prototype=n(this.prototype),t.constructor=e,u(t,"ember"),a(t).proto=t,e.ClassMixin.apply(e),e},createWithMixins:function(){var e=this;return arguments.length>0&&this._initMixins(arguments),new e},create:function(){var e=this;return arguments.length>0&&this._initProperties(arguments),new e},reopen:function(){return this.willReopen(),m.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return m.apply(this.ClassMixin,arguments),d(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;while(e){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=a(this.proto(),!1).descs[e];return t._meta||{}},eachComputedProperty:function(e,t){var n=this.proto(),r=a(n).descs,i={},s;for(var o in r)s=r[o],s instanceof Ember.ComputedProperty&&e.call(t||this,o,s._meta||i)}});x.ownerConstructor=E,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(x),E.ClassMixin=x,x.apply(E),Ember.CoreObject=E}(),function(){var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isNone;Ember.Set=Ember.CoreObject.extend(Ember.MutableEnumerable,Ember.Copyable,Ember.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(Ember.FROZEN_ERROR);var r=e(this,"length");if(r===0)return this;var i;this.enumerableContentWillChange(r,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var s=0;s<r;s++)i=n(this[s]),delete this[i],delete this[s];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(r,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var n=e(this,"length");if(e(t,"length")!==n)return!1;while(--n>=0)if(!t.contains(this[n]))return!1;return!0},add:Ember.aliasMethod("addObject"),remove:Ember.aliasMethod("removeObject"),pop:function(){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);var t=this.length>0?this[this.length-1]:null;return this.remove(t),t},push:Ember.aliasMethod("addObject"),shift:Ember.aliasMethod("pop"),unshift:Ember.aliasMethod("push"),addEach:Ember.aliasMethod("addObjects"),removeEach:Ember.aliasMethod("removeObjects"),init:function(e){this._super(),e&&this.addObjects(e)},nextObject:function(e){return this[e]},firstObject:Ember.computed(function(){return this.length>0?this[0]:undefined}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:undefined}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a;return o>=0&&o<u&&this[o]===i?this:(a=[i],this.enumerableContentWillChange(null,a),Ember.propertyWillChange(this,"lastObject"),u=e(this,"length"),this[s]=u,this[u]=i,t(this,"length",u+1),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(null,a),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a=o===0,f=o===u-1,l,c;return o>=0&&o<u&&this[o]===i&&(c=[i],this.enumerableContentWillChange(c,null),a&&Ember.propertyWillChange(this,"firstObject"),f&&Ember.propertyWillChange(this,"lastObject"),o<u-1&&(l=this[u-1],this[o]=l,this[n(l)]=o),delete this[s],delete this[u-1],t(this,"length",u-1),a&&Ember.propertyDidChange(this,"firstObject"),f&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(c,null)),this},contains:function(e){return this[n(e)]>=0},copy:function(){var r=this.constructor,i=new r,s=e(this,"length");t(i,"length",s);while(--s>=0)i[s]=this[s],i[n(this[s])]=s;return i},toString:function(){var e=this.length,t,n=[];for(t=0;t<e;t++)n[t]=this[t];return"Ember.Set<%@>".fmt(n.join(","))}})}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function o(e,t,n){var u=e.length;r[e.join(".")]=t;for(var f in t){if(!i.call(t,f))continue;var c=t[f];e[u]=f;if(c&&c.toString===l)c.toString=h(e.join(".")),c[a]=e.join(".");else if(c&&c.isNamespace){if(n[s(c)])continue;n[s(c)]=!0,o(e,c,n)}}e.length=u}function u(){var e=Ember.Namespace,t=Ember.lookup,n,r;if(e.PROCESSED)return;for(var i in t){if(i==="parent"||i==="top"||i==="frameElement")continue;if(i==="globalStorage"&&t.StorageList&&t.globalStorage instanceof t.StorageList)continue;if(t.hasOwnProperty&&!t.hasOwnProperty(i))continue;try{n=Ember.lookup[i],r=n&&n.isNamespace}catch(s){continue}r&&(n[a]=i)}}function f(e){var t=e.superclass;if(t)return t[a]?t[a]:f(t);return}function l(){!Ember.BOOTED&&!this[a]&&c();var e;if(this[a])e=this[a];else{var t=f(this);t?e="(subclass of "+t+")":e="(unknown mixin)",this.toString=h(e)}return e}function c(){var e=!n.PROCESSED,t=Ember.anyUnprocessedMixins;e&&(u(),n.PROCESSED=!0);if(e||t){var r=n.NAMESPACES,i;for(var s=0,a=r.length;s<a;s++)i=r[s],o([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function h(e){return function(){return e}}var e=Ember.get,t=Ember.ArrayPolyfills.indexOf,n=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var t=e(this,"name");return t?t:(u(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=undefined,e.splice(t.call(e,this),1),this._super()}});n.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:c,byName:function(e){return Ember.BOOTED||c(),r[e]}});var r=n.NAMESPACES_BY_ID,i={}.hasOwnProperty,s=Ember.guidFor,a=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=l}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e=Ember.get,t=Ember.set;Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(t){return e(this,"arrangedContent").objectAt(t)},replaceContent:function(t,n,r){e(this,"content").replace(t,n,r)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var t=e(this,"content");t&&t.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){var t=e(this,"content");this._setupContent()},"content"),_setupContent:function(){var t=e(this,"content");t&&t.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var t=e(this,"arrangedContent"),n=t?e(t,"length"):0;this.arrangedContentArrayWillChange(this,0,n,undefined),this.arrangedContentWillChange(this),this._teardownArrangedContent(t)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var t=e(this,"arrangedContent"),n=t?e(t,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,undefined,n)},"arrangedContent"),_setupArrangedContent:function(){var t=e(this,"arrangedContent");t&&t.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var t=e(this,"arrangedContent");t&&t.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(t){return e(this,"content")&&this.objectAtContent(t)},length:Ember.computed(function(){var t=e(this,"arrangedContent");return t?e(t,"length"):0}),replace:function(t,n,r){return e(this,"content")&&this.replaceContent(t,n,r),this},arrangedContentArrayWillChange:function(e,t,n,r){this.arrayContentWillChange(t,n,r)},arrangedContentArrayDidChange:function(e,t,n,r){this.arrayContentDidChange(t,n,r)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function f(e,t){var n=t.slice(8);if(n in this)return;u(this,n)}function l(e,t){var n=t.slice(8);if(n in this)return;a(this,n)}var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.addBeforeObserver,i=Ember.addObserver,s=Ember.removeBeforeObserver,o=Ember.removeObserver,u=Ember.propertyWillChange,a=Ember.propertyDidChange;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;r(this,t,null,f),i(this,t,null,l)},didUnwatchProperty:function(e){var t="content."+e;s(this,t,null,f),o(this,t,null,l)},unknownProperty:function(t){var n=e(this,"content");if(n)return e(n,t)},setUnknownProperty:function(n,r){var i=e(this,"content");return t(i,n,r)}})}(),function(){function o(e,t,r,i,s){var o=r._objects,u;o||(o=r._objects={});while(--s>=i){var a=e.objectAt(s);a&&(Ember.addBeforeObserver(a,t,r,"contentKeyWillChange"),Ember.addObserver(a,t,r,"contentKeyDidChange"),u=n(a),o[u]||(o[u]=[]),o[u].push(s))}}function u(e,t,r,i,s){var o=r._objects;o||(o=r._objects={});var u,a;while(--s>=i){var f=e.objectAt(s);f&&(Ember.removeBeforeObserver(f,t,r,"contentKeyWillChange"),Ember.removeObserver(f,t,r,"contentKeyDidChange"),a=n(f),u=o[a],u[u.indexOf(s)]=null)}}var e=Ember.set,t=Ember.get,n=Ember.guidFor,r=Ember.EnumerableUtils.forEach,i=Ember.Object.extend(Ember.Array,{init:function(e,t,n){this._super(),this._keyName=t,this._owner=n,this._content=e},objectAt:function(e){var n=this._content.objectAt(e);return n&&t(n,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?t(e,"length"):0})}),s=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),r(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e,t){var n;return n=new i(this._content,e,this),Ember.defineProperty(this,e,null,n),this.beginObservingContentKey(e),n},arrayWillChange:function(e,t,n,r){var i=this._keys,s,o,a;a=n>0?t+n:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;a>0&&u(e,s,this,t,a),Ember.propertyWillChange(this,s)}Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(e,t,n,r){var i=this._keys,s,u,a;a=r>0?t+r:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;a>0&&o(e,s,this,t,a),Ember.propertyDidChange(this,s)}Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(e){var n=this._keys;n||(n=this._keys={});if(!n[e]){n[e]=1;var r=this._content,i=t(r,"length");o(r,e,this,0,i)}else n[e]++},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var r=this._content,i=t(r,"length");u(r,e,this,0,i)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return e==="length"?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(t,n,r){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=r?e(r,"length"):0;this.arrayContentWillChange(t,n,i);if(!r||r.length===0)this.splice(t,n);else{var s=[t,n].concat(r);this.splice.apply(this,s)}return this.arrayContentDidChange(t,n,i),this},unknownProperty:function(e,t){var n;return t!==undefined&&n===undefined&&(n=this[e]=t),n},indexOf:function(e,t){var n,r=this.length;t===undefined?t=0:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n<r;n++)if(this[n]===e)return n;return-1},lastIndexOf:function(e,t){var n,r=this.length;t===undefined?t=r-1:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n>=0;n--)if(this[n]===e)return n;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),r=["length"];Ember.EnumerableUtils.forEach(n.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(n=n.without.apply(n,r)),Ember.NativeArray=n,Ember.A=function(e){return e===undefined&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){n.apply(Array.prototype),Ember.A=function(e){return e||[]}},(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Array)&&Ember.NativeArray.activate()}(),function(){var e=Ember.DeferredMixin,t=Ember.Object,n=Ember.get,r=Ember.Object.extend(e);r.reopenClass({promise:function(e,t){var i=r.create();return e.call(t,i),n(i,"promise")}}),Ember.Deferred=r}(),function(){var e=Ember.ENV.EMBER_LOAD_HOOKS||{},t={};Ember.onLoad=function(n,r){var i;e[n]=e[n]||Ember.A(),e[n].pushObject(r),(i=t[n])&&r(i)},Ember.runLoadHooks=function(n,r){var i;t[n]=r,(i=e[n])&&e[n].forEach(function(e){e(r)})}}(),function(){}(),function(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,store:null,model:Ember.computed.alias("content"),send:function(t){var n=[].slice.call(arguments,1),r;this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach;Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(t,r){var i=0,s=e(this,"sortProperties"),o=e(this,"sortAscending");return n(s,function(n){i===0&&(i=Ember.compare(e(t,n),e(r,n)),i!==0&&!o&&(i=-1*i))}),i},destroy:function(){var t=e(this,"content"),r=e(this,"sortProperties");return t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(t,r){var i=e(this,"content"),s=e(this,"isSorted"),o=e(this,"sortProperties"),u=this;return i&&s?(i=i.slice(),i.sort(function(e,t){return u.orderBy(e,t)}),n(i,function(e){n(o,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(i)):i}),_contentWillChange:Ember.beforeObserver(function(){var t=e(this,"content"),r=e(this,"sortProperties");t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},"content"),sortAscendingWillChange:Ember.beforeObserver(function(){this._lastSortAscending=e(this,"sortAscending")},"sortAscending"),sortAscendingDidChange:Ember.observer(function(){if(e(this,"sortAscending")!==this._lastSortAscending){var t=e(this,"arrangedContent");t.reverseObjects()}},"sortAscending"),contentArrayWillChange:function(t,r,i,s){var o=e(this,"isSorted");if(o){var u=e(this,"arrangedContent"),a=t.slice(r,r+i),f=e(this,"sortProperties");n(a,function(e){u.removeObject(e),n(f,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},contentArrayDidChange:function(t,r,i,s){var o=e(this,"isSorted"),u=e(this,"sortProperties");if(o){var a=t.slice(r,r+s),f=e(this,"arrangedContent");n(a,function(e){this.insertItemSorted(e),n(u,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},insertItemSorted:function(t){var n=e(this,"arrangedContent"),r=e(n,"length"),i=this._binarySearch(t,0,r);n.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var n=e(this,"arrangedContent"),r=n.indexOf(t),i=n.objectAt(r-1),s=n.objectAt(r+1),o=i&&this.orderBy(t,i),u=s&&this.orderBy(t,s);if(o<0||u>0)n.removeObject(t),this.insertItemSorted(t)},_binarySearch:function(t,n,r){var i,s,o,u;return n===r?n:(u=e(this,"arrangedContent"),i=n+Math.floor((r-n)/2),s=u.objectAt(i),o=this.orderBy(s,t),o<0?this._binarySearch(t,i+1,r):o>0?this._binarySearch(t,n,i):i)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.isGlobalPath,r=Ember.EnumerableUtils.forEach,i=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(t){return e(this,"itemController")},objectAtContent:function(t){var n=e(this,"length"),r=e(this,"arrangedContent"),i=r&&r.objectAt(t);if(t>=0&&t<n){var s=this.lookupItemController(i);if(s)return this.controllerAt(t,i,s)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(t,n,s){var o=e(this,"_subControllers"),u=o.slice(t,t+n);r(u,function(e){e&&e.destroy()}),i(o,t,n,new Array(s)),this._super(t,n,s)},init:function(){this._super(),this.get("content")||Ember.defineProperty(this,"content",undefined,Ember.A()),this.set("_subControllers",Ember.A())},controllerAt:function(t,n,r){var i=e(this,"container"),s=e(this,"_subControllers"),o=s[t];o||(o=i.lookup("controller:"+r,{singleton:!1}),s[t]=o);if(!o)throw new Error('Could not resolve itemController: "'+r+'"');return o.set("target",this),o.set("content",n),o},_subControllers:null,_resetSubControllers:function(){var t=e(this,"_subControllers");r(t,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}(),function(){}(),function(){}()})(),typeof location!="undefined"&&(location.hostname==="localhost"||location.hostname==="127.0.0.1")&&console.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. If you want full error messages please use the non-minified build provided on the Ember website.");
|
15
|
+
(function(){var e,t;(function(){var n={},r={};e=function(e,t,r){n[e]={deps:t,callback:r}},t=function(e){if(r[e])return r[e];r[e]={};var i=n[e],s=i.deps,o=i.callback,u=[],a;for(var f=0,l=s.length;f<l;f++)s[f]==="exports"?u.push(a={}):u.push(t(s[f]));var c=o.apply(this,u);return r[e]=a||c}})(),function(){function r(t){if(e.console&&e.console[t])return e.console[t].apply?function(){e.console[t].apply(e.console,arguments)}:function(){var n=Array.prototype.join.call(arguments,", ");e.console[t](n)}}"undefined"==typeof Ember&&(Ember={});var e=Ember.imports=Ember.imports||this,t=Ember.exports=Ember.exports||this,n=Ember.lookup=Ember.lookup||this;t.Em=t.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.1",Ember.ENV=Ember.ENV||("undefined"==typeof ENV?{}:ENV),Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,typeof Ember.EXTEND_PROTOTYPES=="undefined"&&(Ember.EXTEND_PROTOTYPES=!0),Ember.LOG_STACKTRACE_ON_DEPRECATION=Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,Ember.SHIM_ES5=Ember.ENV.SHIM_ES5===!1?!1:Ember.EXTEND_PROTOTYPES,Ember.LOG_VERSION=Ember.ENV.LOG_VERSION===!1?!1:!0,Ember.K=function(){return this},"undefined"==typeof Ember.assert&&(Ember.assert=Ember.K),"undefined"==typeof Ember.warn&&(Ember.warn=Ember.K),"undefined"==typeof Ember.debug&&(Ember.debug=Ember.K),"undefined"==typeof Ember.deprecate&&(Ember.deprecate=Ember.K),"undefined"==typeof Ember.deprecateFunc&&(Ember.deprecateFunc=function(e,t){return t}),Ember.uuid=0,Ember.Logger={log:r("log")||Ember.K,warn:r("warn")||Ember.K,error:r("error")||Ember.K,info:r("info")||Ember.K,debug:r("debug")||r("info")||Ember.K},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.apply(t||this);try{return e.apply(t||this)}catch(n){Ember.onerror(n)}},Ember.merge=function(e,t){for(var n in t){if(!t.hasOwnProperty(n))continue;e[n]=t[n]}},Ember.isNone=function(e){return e===null||e===undefined},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return e===null||e===undefined||e.length===0&&typeof e!="function"||typeof e=="object"&&Ember.get(e,"length")===0},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty)}(),function(){var e=Ember.platform={};Ember.create=Object.create;if(!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,n){t.prototype=e,e=new t;if(n){t.prototype=e;for(var r in n)t.prototype[r]=n[r].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var n=Object.defineProperty,r,i;if(n)try{n({},"a",{get:function(){}})}catch(s){n=null}n&&(r=function(){var e={};return n(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),n(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),i=function(){try{return n(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?i||(n=function(e,t,n){var r;return typeof Node=="object"?r=e instanceof Node:r=typeof e=="object"&&typeof e.nodeType=="number"&&typeof e.nodeName=="string",r?e[t]=n.value:Object.defineProperty(e,t,n)}):n=null),e.defineProperty=n,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,n){n.get||(e[t]=n.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),function(){function h(e){this.descs={},this.watching={},this.cache={},this.source=e}function p(e,t){return!!e&&typeof e[t]=="function"}var e=Ember.platform.defineProperty,t=Ember.create,n="__ember"+ +(new Date),r=0,i=[],s={},o=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=n;var u={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(i,s){s||(s="ember");var o=s+r++;return i&&(u.value=o,e(i,n,u)),o},Ember.guidFor=function(o){if(o===undefined)return"(undefined)";if(o===null)return"(null)";var a,f,l=typeof o;switch(l){case"number":return f=i[o],f||(f=i[o]="nu"+o),f;case"string":return f=s[o],f||(f=s[o]="st"+r++),f;case"boolean":return o?"(true)":"(false)";default:if(o[n])return o[n];if(o===Object)return"(Object)";if(o===Array)return"(Array)";return f="ember"+r++,u.value=f,e(o,n,u),f}};var a={writable:!0,configurable:!1,enumerable:!1,value:null},f=Ember.GUID_KEY+"_meta";Ember.META_KEY=f;var l={descs:{},watching:{}};o&&(l.values={}),Ember.EMPTY_META=l,Object.freeze&&Object.freeze(l);var c=Ember.platform.defineProperty.isSimulated;c&&(h.prototype.__preventPlainObject__=!0,h.prototype.toJSON=function(){}),Ember.meta=function(r,i){var s=r[f];return i===!1?s||l:(s?s.source!==r&&(c||e(r,f,a),s=t(s),s.descs=t(s.descs),s.watching=t(s.watching),s.cache={},s.source=r,o&&(s.values=t(s.values)),r[f]=s):(c||e(r,f,a),s=new h(r),o&&(s.values={}),r[f]=s,s.descs.constructor=null),s)},Ember.getMeta=function(t,n){var r=Ember.meta(t,!1);return r[n]},Ember.setMeta=function(t,n,r){var i=Ember.meta(t,!0);return i[n]=r,r},Ember.metaPath=function(n,r,i){var s=Ember.meta(n,i),o,u;for(var a=0,f=r.length;a<f;a++){o=r[a],u=s[o];if(!u){if(!i)return undefined;u=s[o]={__ember_source__:n}}else if(u.__ember_source__!==n){if(!i)return undefined;u=s[o]=t(u),u.__ember_source__=n}s=u}return u},Ember.wrap=function(e,t){function n(){}function r(){var r,i=this._super;return this._super=t||n,r=e.apply(this,arguments),this._super=i,r}return r.wrappedFunction=e,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:e.length!==undefined&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return e===null||e===undefined?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=p,Ember.tryInvoke=function(e,t,n){if(p(e,t))return e[t].apply(e,n||[])};var d=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return e!==1}();d?Ember.tryFinally=function(e,t,n){var r,i,s;n=n||this;try{r=e.call(n)}finally{try{i=t.call(n)}catch(o){s=o}}if(s)throw s;return i===undefined?r:i}:Ember.tryFinally=function(e,t,n){var r,i;n=n||this;try{r=e.call(n)}finally{i=t.call(n)}return i===undefined?r:i},d?Ember.tryCatchFinally=function(e,t,n,r){var i,s,o,u;r=r||this;try{i=e.call(r)}catch(a){i=t.call(r,a)}finally{try{s=n.call(r)}catch(f){o=f}}if(o)throw o;return s===undefined?i:s}:Ember.tryCatchFinally=function(e,t,n,r){var i,s;r=r||this;try{i=e.call(r)}catch(o){i=t.call(r,o)}finally{s=n.call(r)}return s===undefined?i:s}}(),function(){Ember.Instrumentation={};var e=[],t={},n=function(n){var r=[],i;for(var s=0,o=e.length;s<o;s++)i=e[s],i.regex.test(n)&&r.push(i.object);return t[n]=r,r},r=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+(new Date)}}();Ember.Instrumentation.instrument=function(e,i,s,o){function d(){for(h=0,p=u.length;h<p;h++)c=u[h],l[h]=c.before(e,r(),i);return s.call(o)}function v(e){i=i||{},i.exception=e}function m(){for(h=0,p=u.length;h<p;h++)c=u[h],c.after(e,r(),i,l[h]);Ember.STRUCTURED_PROFILE&&console.timeEnd(a)}var u=t[e],a,f;Ember.STRUCTURED_PROFILE&&(a=e+": "+i.object,console.time(a)),u||(u=n(e));if(u.length===0)return f=s.call(o),Ember.STRUCTURED_PROFILE&&console.timeEnd(a),f;var l=[],c,h,p;return Ember.tryCatchFinally(d,v,m)},Ember.Instrumentation.subscribe=function(n,r){var i=n.split("."),s,o=[];for(var u=0,a=i.length;u<a;u++)s=i[u],s==="*"?o.push("[^\\.]*"):o.push(s);o=o.join("\\."),o+="(\\..*)?";var f={pattern:n,regex:new RegExp("^"+o+"$"),object:r};return e.push(f),t={},f},Ember.Instrumentation.unsubscribe=function(n){var r;for(var i=0,s=e.length;i<s;i++)e[i]===n&&(r=i);e.splice(r,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e=Ember.EnumerableUtils={map:function(e,t,n){return e.map?e.map.call(e,t,n):Array.prototype.map.call(e,t,n)},forEach:function(e,t,n){return e.forEach?e.forEach.call(e,t,n):Array.prototype.forEach.call(e,t,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):Array.prototype.indexOf.call(e,t,n)},indexesOf:function(t,n){return n===undefined?[]:e.map(n,function(n){return e.indexOf(t,n)})},addObject:function(t,n){var r=e.indexOf(t,n);r===-1&&t.push(n)},removeObject:function(t,n){var r=e.indexOf(t,n);r!==-1&&t.splice(r,1)},replace:function(e,t,n,r){if(e.replace)return e.replace(t,n,r);var i=Array.prototype.concat.apply([t,n],r);return e.splice.apply(e,i)},intersection:function(e,t){var n=[];return e.forEach(function(e){t.indexOf(e)>=0&&n.push(e)}),n}}}(),function(){var e=function(e){return e&&Function.prototype.toString.call(e).indexOf("[native code]")>-1},t=e(Array.prototype.map)?Array.prototype.map:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=new Array(n),i=arguments[1];for(var s=0;s<n;s++)s in t&&(r[s]=e.call(i,t[s],s,t));return r},n=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=arguments[1];for(var i=0;i<n;i++)i in t&&e.call(r,t[i],i,t)},r=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){t===null||t===undefined?t=0:t<0&&(t=Math.max(0,this.length+t));for(var n=t,r=this.length;n<r;n++)if(this[n]===e)return n;return-1};Ember.ArrayPolyfills={map:t,forEach:n,indexOf:r},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=n),Array.prototype.indexOf||(Array.prototype.indexOf=r))}(),function(){var e=Ember.guidFor,t=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},r=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t},i=Ember.OrderedSet=function(){this.clear()};i.create=function(){return new i},i.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(t){var n=e(t),r=this.presenceSet,i=this.list;if(n in r)return;r[n]=!0,i.push(t)},remove:function(n){var r=e(n),i=this.presenceSet,s=this.list;delete i[r];var o=t.call(s,n);o>-1&&s.splice(o,1)},isEmpty:function(){return this.list.length===0},has:function(t){var n=e(t),r=this.presenceSet;return n in r},forEach:function(e,t){var n=this.list.slice();for(var r=0,i=n.length;r<i;r++)e.call(t,n[r])},toArray:function(){return this.list.slice()},copy:function(){var e=new i;return e.presenceSet=n(this.presenceSet),e.list=this.list.slice(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={get:function(t){var n=this.values,r=e(t);return n[r]},set:function(t,n){var r=this.keys,i=this.values,s=e(t);r.add(t),i[s]=n},remove:function(t){var n=this.keys,r=this.values,i=e(t),s;return r.hasOwnProperty(i)?(n.remove(t),s=r[i],delete r[i],!0):!1},has:function(t){var n=this.values,r=e(t);return n.hasOwnProperty(r)},forEach:function(t,n){var r=this.keys,i=this.values;r.forEach(function(r){var s=e(r);t.call(n,r,i[s])})},copy:function(){return r(this,new s)}};var o=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};o.create=function(e){return e?new o(e):new s},o.prototype=Ember.create(s.prototype),o.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var n=this.defaultValue(e);return this.set(e,n),n},o.prototype.copy=function(){return r(this,new o({defaultValue:this.defaultValue}))}}(),function(){function a(e){return e.match(u)[0]}function f(e,n){var r=o.test(n),i=!r&&s.test(n),u;if(!e||i)e=Ember.lookup;r&&(n=n.slice(5)),e===Ember.lookup&&(u=a(n),e=t(e,u),n=n.slice(u.length+1));if(!n||n.length===0)throw new Error("Invalid Path");return[e,n]}function l(e,n){var r,i,s,u,a;if(e===null&&n.indexOf(".")===-1)return t(Ember.lookup,n);r=o.test(n);if(!e||r)s=f(e,n),e=s[0],n=s[1],s.length=0;i=n.split("."),a=i.length;for(u=0;e&&u<a;u++){e=t(e,i[u],!0);if(e&&e.isDestroyed)return undefined}return e}function c(e,t,r,i){var s;s=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(s.length+1)),t!=="this"&&(e=l(e,t));if(!s||s.length===0)throw new Error("You passed an empty path");if(!e){if(i)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return n(e,s,r)}var e=Ember.META_KEY,t,n,r=Ember.ENV.MANDATORY_SETTER,i=/^([A-Z$]|([0-9][A-Z$]))/,s=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,o=/^this[\.\*]/,u=/^([^\.\*]+)/;t=function(n,i){if(i==="")return n;!i&&"string"==typeof n&&(i=n,n=null);if(!n||i.indexOf(".")!==-1)return l(n,i);var s=n[e],o=s&&s.descs[i],u;return o?o.get(n,i):(r&&s&&s.watching[i]>0?u=s.values[i]:u=n[i],u!==undefined||"object"!=typeof n||i in n||"function"!=typeof n.unknownProperty?u:n.unknownProperty(i))},n=function(n,i,s,o){typeof n=="string"&&(s=i,i=n,n=null);if(!n||i.indexOf(".")!==-1)return c(n,i,s,o);var u=n[e],a=u&&u.descs[i],f,l;return a?a.set(n,i,s):(f="object"==typeof n&&!(i in n),f&&"function"==typeof n.setUnknownProperty?n.setUnknownProperty(i,s):u&&u.watching[i]>0?(r?l=u.values[i]:l=n[i],s!==l&&(Ember.propertyWillChange(n,i),r?l!==undefined||i in n?u.values[i]=s:Ember.defineProperty(n,i,null,s):n[i]=s,Ember.propertyDidChange(n,i))):n[i]=s),s},Ember.config.overrideAccessors&&(Ember.get=t,Ember.set=n,Ember.config.overrideAccessors(),t=Ember.get,n=Ember.set),Ember.normalizeTuple=function(e,t){return f(e,t)},Ember.getWithDefault=function(e,n,r){var i=t(e,n);return i===undefined?r:i},Ember.get=t,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get),Ember.set=n,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,r){return n(e,t,r,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet),Ember.isGlobalPath=function(e){return i.test(e)}}(),function(){var e=Ember.META_KEY,t=Ember.meta,n=Ember.platform.defineProperty,r=Ember.ENV.MANDATORY_SETTER,i=Ember.Descriptor=function(){},s=Ember.MANDATORY_SETTER_FUNCTION=function(e){},o=Ember.DEFAULT_GETTER_FUNCTION=function(t){return function(){var n=this[e];return n&&n.values[t]}};Ember.defineProperty=function(e,i,u,a,f){var l,c,h,p;return f||(f=t(e)),l=f.descs,c=f.descs[i],h=f.watching[i]>0,c instanceof Ember.Descriptor&&c.teardown(e,i),u instanceof Ember.Descriptor?(p=u,l[i]=u,r&&h?n(e,i,{configurable:!0,enumerable:!0,writable:!0,value:undefined}):e[i]=undefined,u.setup(e,i)):(l[i]=undefined,u==null?(p=a,r&&h?(f.values[i]=a,n(e,i,{configurable:!0,enumerable:!0,set:s,get:o(i)})):e[i]=a):(p=u,n(e,i,u))),h&&Ember.overrideChains(e,i,f),e.didDefineProperty&&e.didDefineProperty(e,i,p),this}}(),function(){function i(){this.clear()}function u(t){return t+e}function a(e){return e+t}var e=":change",t=":before",n=Ember.guidFor,r=0;i.prototype.add=function(e,t,n){var r=this.observerSet,i=this.observers,s=Ember.guidFor(e),o=r[s],u;return o||(r[s]=o={}),u=o[t],u===undefined&&(u=i.push({sender:e,keyName:t,eventName:n,listeners:[]})-1,o[t]=u),i[u].listeners},i.prototype.flush=function(){var e=this.observers,t,n,r,i;this.clear();for(t=0,n=e.length;t<n;++t){r=e[t],i=r.sender;if(i.isDestroying||i.isDestroyed)continue;Ember.sendEvent(i,r.eventName,[i,r.keyName],r.listeners)}},i.prototype.clear=function(){this.observerSet={},this.observers=[]};var s=new i,o=new i;Ember.beginPropertyChanges=function(){r++},Ember.endPropertyChanges=function(){r--,r<=0&&(s.clear(),o.flush())},Ember.changeProperties=function(e,t){Ember.beginPropertyChanges(),Ember.tryFinally(e,Ember.endPropertyChanges,t)},Ember.setProperties=function(e,t){return Ember.changeProperties(function(){for(var n in t)t.hasOwnProperty(n)&&Ember.set(e,n,t[n])}),e},Ember.addObserver=function(e,t,n,r){return Ember.addListener(e,u(t),n,r),Ember.watch(e,t),this},Ember.observersFor=function(e,t){return Ember.listenersFor(e,u(t))},Ember.removeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,u(t),n,r),this},Ember.addBeforeObserver=function(e,t,n,r){return Ember.addListener(e,a(t),n,r),Ember.watch(e,t),this},Ember._suspendBeforeObserver=function(e,t,n,r,i){return Ember._suspendListener(e,a(t),n,r,i)},Ember._suspendObserver=function(e,t,n,r,i){return Ember._suspendListener(e,u(t),n,r,i)};var f=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,t,n,r,i){var s=f.call(t,a);return Ember._suspendListeners(e,s,n,r,i)},Ember._suspendObservers=function(e,t,n,r,i){var s=f.call(t,u);return Ember._suspendListeners(e,s,n,r,i)},Ember.beforeObserversFor=function(e,t){return Ember.listenersFor(e,a(t))},Ember.removeBeforeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,a(t),n,r),this},Ember.notifyBeforeObservers=function(e,t){if(e.isDestroying)return;var n=a(t),i,o;r?(i=s.add(e,t,n),o=Ember.listenersDiff(e,n,i),Ember.sendEvent(e,n,[e,t],o)):Ember.sendEvent(e,n,[e,t])},Ember.notifyObservers=function(e,t){if(e.isDestroying)return;var n=u(t),i;r?(i=o.add(e,t,n),Ember.listenersUnion(e,n,i)):Ember.sendEvent(e,n,[e,t])}}(),function(){function h(e){return e.match(a)[0]}function p(e){return e==="*"||!f.test(e)}function d(t,n,r,i,s){var o=e(n);i[o]||(i[o]={});if(i[o][r])return;i[o][r]=!0;var u=s.deps;u=u&&u[r];if(u)for(var a in u){var f=s.descs[a];if(f&&f._suspended===n)continue;t(n,a)}}function g(e,t,n){if(e.isDestroying)return;var r=v,i=!r;i&&(r=v={}),d(A,e,t,r,n),i&&(v=null)}function y(e,t,n){if(e.isDestroying)return;var r=m,i=!r;i&&(r=m={}),d(O,e,t,r,n),i&&(m=null)}function b(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e),s=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(s=i.chainWatchers={}),s[n]||(s[n]=[]),s[n].push(r),Ember.watch(e,n)}function w(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e,!1);if(!i.hasOwnProperty("chainWatchers"))return;var s=i.chainWatchers;if(s[n]){s=s[n];for(var o=0,u=s.length;o<u;o++)s[o]===r&&s.splice(o,1)}Ember.unwatch(e,n)}function S(){if(E.length===0)return;var e=E;E=[],u.call(e,function(e){e[0].add(e[1])})}function x(e){return t(e,!1).proto===e}function C(e){var n=t(e),r=n.chains;return r?r.value()!==e&&(r=n.chains=r.copy(e)):r=n.chains=new T(null,null,e),r}function k(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=0,o=i.length;s<o;s++)i[s].willChange(r)}function L(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=i.length-1;s>=0;s--)i[s].didChange(r)}function A(e,n){var r=t(e,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(!i)return;if(s===e)return;o&&o.willChange&&o.willChange(e,n),g(e,n,r),k(e,n,r),Ember.notifyBeforeObservers(e,n)}function O(e,n){var r=t(e,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(s===e)return;o&&o.didChange&&o.didChange(e,n);if(!i&&n!=="length")return;y(e,n,r),L(e,n,r),Ember.notifyObservers(e,n)}var e=Ember.guidFor,t=Ember.meta,n=Ember.get,r=Ember.set,i=Ember.normalizeTuple,s=Ember.GUID_KEY,o=Ember.META_KEY,u=Ember.ArrayPolyfills.forEach,a=/^([^\.\*]+)/,f=/[\.\*]/,l=Ember.ENV.MANDATORY_SETTER,c=Ember.platform.defineProperty,v,m,E=[],T=function(e,t,n){var r;this._parent=e,this._key=t,this._watching=n===undefined,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&b(this._object,this._key,this)),this._parent&&this._parent._key==="@each"&&this.value()},N=T.prototype;N.value=function(){if(this._value===undefined&&this._watching){var e=this._parent.value();this._value=e&&!x(e)?n(e,this._key):undefined}return this._value},N.destroy=function(){if(this._watching){var e=this._object;e&&w(e,this._key,this),this._watching=!1}},N.copy=function(e){var t=new T(null,null,e),n=this._paths,r;for(r in n){if(n[r]<=0)continue;t.add(r)}return t},N.add=function(e){var t,n,r,s,o;o=this._paths,o[e]=(o[e]||0)+1,t=this.value(),n=i(t,e);if(n[0]&&n[0]===t)e=n[1],r=h(e),e=e.slice(r.length+1);else{if(!n[0]){E.push([this,e]),n.length=0;return}s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]}n.length=0,this.chain(r,e,s)},N.remove=function(e){var t,n,r,s,o;o=this._paths,o[e]>0&&o[e]--,t=this.value(),n=i(t,e),n[0]===t?(e=n[1],r=h(e),e=e.slice(r.length+1)):(s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]),n.length=0,this.unchain(r,e)},N.count=0,N.chain=function(e,t,n){var r=this._chains,i;r||(r=this._chains={}),i=r[e],i||(i=r[e]=new T(this,e,n)),i.count++,t&&t.length>0&&(e=h(t),t=t.slice(e.length+1),i.chain(e,t))},N.unchain=function(e,t){var n=this._chains,r=n[e];t&&t.length>1&&(e=h(t),t=t.slice(e.length+1),r.unchain(e,t)),r.count--,r.count<=0&&(delete n[r._key],r.destroy())},N.willChange=function(){var e=this._chains;if(e)for(var t in e){if(!e.hasOwnProperty(t))continue;e[t].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},N.chainWillChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,n+1):(n>1&&Ember.propertyWillChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyWillChange(this.value(),t))},N.chainDidChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,n+1):(n>1&&Ember.propertyDidChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyDidChange(this.value(),t))},N.didChange=function(e){if(this._watching){var t=this._parent.value();t!==this._object&&(w(this._object,this._key,this),this._object=t,b(t,this._key,this)),this._value=undefined,this._parent&&this._parent._key==="@each"&&this.value()}var n=this._chains;if(n)for(var r in n){if(!n.hasOwnProperty(r))continue;n[r].didChange(e)}if(e)return;this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.overrideChains=function(e,t,n){L(e,t,n,!0)},Ember.watch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]?i[n]=(i[n]||0)+1:(i[n]=1,p(n)?(s=r.descs[n],s&&s.willWatch&&s.willWatch(e,n),"function"==typeof e.willWatchProperty&&e.willWatchProperty(n),l&&n in e&&(r.values[n]=e[n],c(e,n,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(n)}))):C(e).add(n)),this},Ember.isWatching=function(t,n){var r=t[o];return(r&&r.watching[n])>0},Ember.watch.flushPending=S,Ember.unwatch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]===1?(i[n]=0,p(n)?(s=r.descs[n],s&&s.didUnwatch&&s.didUnwatch(e,n),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(n),l&&n in e&&(c(e,n,{configurable:!0,enumerable:!0,writable:!0,value:r.values[n]}),delete r.values[n])):C(e).remove(n)):i[n]>1&&i[n]--,this},Ember.rewatch=function(e){var n=t(e,!1),r=n.chains;return s in e&&!e.hasOwnProperty(s)&&Ember.generateGuid(e,"ember"),r&&r.value()!==e&&(n.chains=r.copy(e)),this},Ember.finishChains=function(e){var n=t(e,!1),r=n.chains;r&&(r.value()!==e&&(n.chains=r=r.copy(e)),r.didChange(!0))},Ember.propertyWillChange=A,Ember.propertyDidChange=O;var M=[];Ember.destroy=function(e){var t=e[o],n,r,i,s;if(t){e[o]=null,n=t.chains;if(n){M.push(n);while(M.length>0){n=M.pop(),r=n._chains;if(r)for(i in r)r.hasOwnProperty(i)&&M.push(r[i]);n._watching&&(s=n._object,s&&w(s,n._key,n))}}}}}(),function(){function a(e,t,n){var r=t[n];return r?t.hasOwnProperty(n)||(r=t[n]=i(r)):r=t[n]={},r}function f(e,t){return a(e,t,"deps")}function l(e,t,n,r){var i=e._dependentKeys,s,u,l,c,h;if(!i)return;s=f(t,r);for(u=0,l=i.length;u<l;u++)c=i[u],h=a(t,s,c),h[n]=(h[n]||0)+1,o(t,c)}function c(e,t,n,r){var i=e._dependentKeys,s,o,l,c,h;if(!i)return;s=f(t,r);for(o=0,l=i.length;o<l;o++)c=i[o],h=a(t,s,c),h[n]=(h[n]||0)-1,u(t,c)}function h(e,t){this.func=e,this._cacheable=t&&t.cacheable!==undefined?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(t.readOnly!==undefined||!!t.readOnly)}var e=Ember.get,t=Ember.set,n=Ember.meta,r=[].slice,i=Ember.create,s=Ember.META_KEY,o=Ember.watch,u=Ember.unwatch;Ember.ComputedProperty=h,h.prototype=new Ember.Descriptor;var p=h.prototype;p.cacheable=function(e){return this._cacheable=e!==!1,this},p.volatile=function(){return this.cacheable(!1)},p.readOnly=function(e){return this._readOnly=e===undefined||!!e,this},p.property=function(){var e=[];for(var t=0,n=arguments.length;t<n;t++)e.push(arguments[t]);return this._dependentKeys=e,this},p.meta=function(e){return arguments.length===0?this._meta||{}:(this._meta=e,this)},p.willWatch=function(e,t){var n=e[s];t in n.cache||l(this,e,t,n)},p.didUnwatch=function(e,t){var n=e[s];t in n.cache||c(this,e,t,n)},p.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=n(e);t in r.cache&&(delete r.cache[t],r.watching[t]||c(this,e,t,r))}},p.get=function(e,t){var r,i,s;if(this._cacheable){s=n(e),i=s.cache;if(t in i)return i[t];r=i[t]=this.func.call(e,t),s.watching[t]||l(this,e,t,s)}else r=this.func.call(e,t);return r},p.set=function(e,t,r){var i=this._cacheable,s=this.func,o=n(e,i),u=o.watching[t],a=this._suspended,f=!1,c=o.cache,h,p;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{i&&c.hasOwnProperty(t)&&(h=c[t],f=!0),s.wrappedFunction&&(s=s.wrappedFunction);if(s.length===3)p=s.call(e,t,r,h);else{if(s.length!==2){Ember.defineProperty(e,t,null,h),Ember.set(e,t,r);return}p=s.call(e,t,r)}if(f&&h===p)return;u&&Ember.propertyWillChange(e,t),f&&delete c[t],i&&(!u&&!f&&l(this,e,t,o),c[t]=p),u&&Ember.propertyDidChange(e,t)}finally{this._suspended=a}return p},p.setup=function(e,t){var r=e[s];r&&r.watching[t]&&l(this,e,t,n(e))},p.teardown=function(e,t){var r=n(e);return(r.watching[t]||t in r.cache)&&c(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;arguments.length>1&&(t=r.call(arguments,0,-1),e=r.call(arguments,-1)[0]);if(typeof e!="function")throw new Error("Computed Property declared without a property function");var n=new h(e);return t&&n.property.apply(n,t),n},Ember.cacheFor=function(t,r){var i=n(t,!1).cache;if(i&&r in i)return i[r]},Ember.computed.not=function(t){return Ember.computed(t,function(n){return!e(this,t)})},Ember.computed.none=function(t){return Ember.computed(t,function(n){var r=e(this,t);return Ember.isNone(r)})},Ember.computed.empty=function(t){return Ember.computed(t,function(n){var r=e(this,t);return Ember.isEmpty(r)})},Ember.computed.bool=function(t){return Ember.computed(t,function(n){return!!e(this,t)})},Ember.computed.alias=function(n){return Ember.computed(n,function(r,i){return arguments.length>1?(t(this,n,i),i):e(this,n)})}}(),function(){function r(e,t,n){var r=-1;for(var i=0,s=e.length;i<s;i++)if(t===e[i][0]&&n===e[i][1]){r=i;break}return r}function i(n,r){var i=t(n,!0),s;return i.listeners||(i.listeners={}),i.hasOwnProperty("listeners")||(i.listeners=e(i.listeners)),s=i.listeners[r],s&&!i.listeners.hasOwnProperty(r)?s=i.listeners[r]=i.listeners[r].slice():s||(s=i.listeners[r]=[]),s}function s(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t];if(!o)return;for(var u=o.length-1;u>=0;u--){var a=o[u][0],f=o[u][1],l=o[u][2],c=o[u][3],h=r(i,a,f);h===-1&&i.push([a,f,l,c])}}function o(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t],u=[];if(!o)return;for(var a=o.length-1;a>=0;a--){var f=o[a][0],l=o[a][1],c=o[a][2],h=o[a][3],p=r(i,f,l);if(p!==-1)continue;i.push([f,l,c,h]),u.push([f,l,c,h])}return u}function u(e,t,n,s,o){!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s);if(a!==-1)return;u.push([n,s,o,undefined]),"function"==typeof e.didAddListener&&e.didAddListener(t,n,s)}function a(e,t,s,o){function u(n,s,o){var u=i(e,t),a=r(u,n,s);if(a===-1)return;u.splice(a,1),"function"==typeof e.didRemoveListener&&e.didRemoveListener(t,n,s)}!o&&"function"==typeof s&&(o=s,s=null);if(o)u(s,o);else{var a=e[n],f=a&&a.listeners&&a.listeners[t];if(!f)return;for(var l=f.length-1;l>=0;l--)u(f[l][0],f[l][1])}}function f(e,t,n,s,o){function l(){return o.call(n)}function c(){f&&(f[3]=undefined)}!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s),f;return a!==-1&&(f=u[a].slice(),f[3]=!0,u[a]=f),Ember.tryFinally(l,c)}function l(e,t,n,s,o){function d(){return o.call(n)}function v(){for(c=0,h=u.length;c<h;c++)u[c][3]=undefined}!s&&"function"==typeof n&&(s=n,n=null);var u=[],a,f,l,c,h;for(c=0,h=t.length;c<h;c++){a=t[c],f=i(e,a);var p=r(f,n,s);p!==-1&&(l=f[p].slice(),l[3]=!0,f[p]=l,u.push(l))}return Ember.tryFinally(d,v)}function c(e){var t=e[n].listeners,r=[];if(t)for(var i in t)t[i]&&r.push(i);return r}function h(e,t,r,i){e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,r);if(!i){var s=e[n];i=s&&s.listeners&&s.listeners[t]}if(!i)return;for(var o=i.length-1;o>=0;o--){if(!i[o]||i[o][3]===!0)continue;var u=i[o][0],f=i[o][1],l=i[o][2];l&&a(e,t,u,f),u||(u=e),"string"==typeof f&&(f=u[f]),r?f.apply(u,r):f.apply(u)}return!0}function p(e,t){var r=e[n],i=r&&r.listeners&&r.listeners[t];return!!i&&!!i.length}function d(e,t){var r=[],i=e[n],s=i&&i.listeners&&i.listeners[t];if(!s)return r;for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];r.push([a,f])}return r}var e=Ember.create,t=Ember.meta,n=Ember.META_KEY;Ember.addListener=u,Ember.removeListener=a,Ember._suspendListener=f,Ember._suspendListeners=l,Ember.sendEvent=h,Ember.hasListeners=p,Ember.watchedEvents=c,Ember.listenersFor=d,Ember.listenersDiff=o,Ember.listenersUnion=s}(),function(){function n(t,n,r,i){return n===undefined&&(n=t,t=undefined),"string"==typeof n&&(n=t[n]),r&&i>0&&(r=r.length>i?e.call(r,i):null),Ember.handleErrors(function(){return n.apply(t||this,r||[])},this)}function u(){o=null,s.currentRunLoop&&s.end()}function c(){f=null,s(function(){var e=+(new Date),t=-1;for(var r in a){if(!a.hasOwnProperty(r))continue;var i=a[r];if(i&&i.expires)if(e>=i.expires)delete a[r],n(i.target,i.method,i.args,2);else if(t<0||i.expires<t)t=i.expires}t>0&&(f=setTimeout(c,t-e),l=t)})}function h(e,t){t[this.tguid]&&delete t[this.tguid][this.mguid],a[e]&&n(this.target,this.method,this.args),delete a[e]}function p(e,t,n,r){var i=Ember.guidFor(t),o=Ember.guidFor(n),u=s.autorun().onceTimers,f=u[i]&&u[i][o],l;return f&&a[f]?a[f].args=r:(l={target:t,method:n,args:r,tguid:i,mguid:o},f=Ember.guidFor(l),a[f]=l,u[i]||(u[i]={}),u[i][o]=f,s.schedule(e,l,h,f,u)),f}var e=[].slice,t=Ember.ArrayPolyfills.forEach,r,i=function(e){this._prev=e||null,this.onceTimers={}};i.prototype={end:function(){this.flush()},prev:function(){return this._prev},schedule:function(t,n,r){var i=this._queues,s;i||(i=this._queues={}),s=i[t],s||(s=i[t]=[]);var o=arguments.length>3?e.call(arguments,3):null;return s.push({target:n,method:r,args:o}),this},flush:function(e){function f(e){n(e.target,e.method,e.args)}function l(){t.call(u,f)}var i,s,o,u,a;if(!this._queues)return this;Ember.watch.flushPending();if(e)while(this._queues&&(u=this._queues[e]))this._queues[e]=null,e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f);else{i=Ember.run.queues,o=i.length,s=0;e:while(s<o){e=i[s],u=this._queues&&this._queues[e],delete this._queues[e],u&&(e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f));for(var c=0;c<=s;c++)if(this._queues&&this._queues[i[c]]){s=c;continue e}s++}}return r=null,this}},Ember.RunLoop=i,Ember.run=function(e,t){function i(){if(e||t)return n(e,t,r,2)}var r=arguments;return s.begin(),Ember.tryFinally(i,s.end)};var s=Ember.run;Ember.run.begin=function(){s.currentRunLoop=new i(s.currentRunLoop)},Ember.run.end=function(){function e(){s.currentRunLoop.end()}function t(){s.currentRunLoop=s.currentRunLoop.prev()}Ember.tryFinally(e,t)},Ember.run.queues=["sync","actions","destroy"],Ember.run.schedule=function(e,t,n){var r=s.autorun();r.schedule.apply(r,arguments)};var o;Ember.run.hasScheduledTimers=function(){return!!o||!!f},Ember.run.cancelTimers=function(){o&&(clearTimeout(o),o=null),f&&(clearTimeout(f),f=null),a={}},Ember.run.autorun=function(){return s.currentRunLoop||(s.begin(),o||(o=setTimeout(u,1))),s.currentRunLoop},Ember.run.sync=function(){s.autorun(),s.currentRunLoop.flush("sync")};var a={},f,l;Ember.run.later=function(t,n){var r,i,s,o,u;return arguments.length===2&&"function"==typeof t?(u=n,n=t,t=undefined,r=[t,n]):(r=e.call(arguments),u=r.pop()),i=+(new Date)+u,s={target:t,method:n,expires:i,args:r},o=Ember.guidFor(s),a[o]=s,f&&i<l&&(clearTimeout(f),f=null),f||(f=setTimeout(c,u),l=i),o},Ember.run.once=function(t,n){return p("actions",t,n,e.call(arguments,2))},Ember.run.scheduleOnce=function(t
|
16
|
+
,n,r,i){return p(t,n,r,e.call(arguments,3))},Ember.run.next=function(){var t=e.call(arguments);return t.push(1),s.later.apply(this,t)},Ember.run.cancel=function(e){delete a[e]}}(),function(){function i(t,n){return e(r(n)?Ember.lookup:t,n)}function o(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}Ember.LOG_BINDINGS=!!Ember.ENV.LOG_BINDINGS;var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isGlobalPath,s=function(e,t){this._direction="fwd",this._from=t,this._to=e,this._directionMap=Ember.Map.create()};s.prototype={copy:function(){var e=new s(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+n(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,n=this._to;return Ember.trySet(e,n,i(e,t)),Ember.addObserver(e,t,this,this.fromDidChange),this._oneWay||Ember.addObserver(e,n,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return Ember.removeObserver(e,this._from,this,this.fromDidChange),t&&Ember.removeObserver(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var n=this._directionMap,r=n.get(e);r||(Ember.run.schedule("sync",this,this._sync,e),n.set(e,t)),r==="back"&&t==="fwd"&&n.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(t.isDestroyed||!this._readyToSync)return;var r=this._directionMap,s=r.get(t),o=this._from,u=this._to;r.remove(t);if(s==="fwd"){var a=i(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",a,t),this._oneWay?Ember.trySet(t,u,a):Ember._suspendObserver(t,u,this,this.toDidChange,function(){Ember.trySet(t,u,a)})}else if(s==="back"){var f=e(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",f,t),Ember._suspendObserver(t,o,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(o)?Ember.lookup:t,o,f)})}}},o(s,{from:function(){var e=this,t=new e;return t.from.apply(t,arguments)},to:function(){var e=this,t=new e;return t.to.apply(t,arguments)},oneWay:function(e,t){var n=this,r=new n(null,e);return r.oneWay(t)}}),Ember.Binding=s,Ember.bind=function(e,t,n){return(new Ember.Binding(t,n)).connect(e)},Ember.oneWay=function(e,t,n){return(new Ember.Binding(t,n)).oneWay().connect(e)}}(),function(){function l(e){var t=Ember.meta(e,!0),n=t.mixins;return n?t.hasOwnProperty("mixins")||(n=t.mixins=u(n)):n=t.mixins={},n}function c(t,n){return n&&n.length>0&&(t.mixins=r.call(n,function(t){if(t instanceof e)return t;var n=new e;return n.properties=t,n})),t}function h(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function d(t,n){var r;return n instanceof e?(r=f(n),t[r]?p:(t[r]=n,n.properties)):n}function v(e,t,n){var r;return r=t.concatenatedProperties||n.concatenatedProperties,e.concatenatedProperties&&(r=r?r.concat(e.concatenatedProperties):e.concatenatedProperties),r}function m(e,t,n,r,i){var s;return r[t]===undefined&&(s=i[t]),s=s||e.descs[t],!!s&&s instanceof Ember.ComputedProperty?(n=u(n),n.func=Ember.wrap(n.func,s.func),n):n}function g(e,t,n,r,i){var s;return i[t]===undefined&&(s=r[t]),s=s||e[t],"function"!=typeof s?n:Ember.wrap(n,s)}function y(e,t,n,r){var i=r[t]||e[t];return i?"function"==typeof i.concat?i.concat(n):Ember.makeArray(i).concat(n):Ember.makeArray(n)}function b(e,n,r,s,o,u,a){if(r instanceof Ember.Descriptor){if(r===t&&o[n])return p;r.func&&(r=m(s,n,r,u,o)),o[n]=r,u[n]=undefined}else{if(h(r))r=g(e,n,r,u,o);else if(a&&i.call(a,n)>=0||n==="concatenatedProperties")r=y(e,n,r,u);o[n]=undefined,u[n]=r}}function w(e,t,n,r,i){function c(e){delete n[e],delete r[e]}var o,u,a,f,l;for(var h=0,m=e.length;h<m;h++){o=e[h],u=d(t,o);if(u===p)continue;if(u){l=Ember.meta(i),f=v(u,r,i);for(a in u){if(!u.hasOwnProperty(a))continue;b(i,a,u[a],l,n,r,f)}u.hasOwnProperty("toString")&&(i.toString=u.toString)}else o.mixins&&(w(o.mixins,t,n,r,i),o._without&&s.call(o._without,c))}}function E(e){var t=Ember.meta(e),n=t.required;if(!n||!t.hasOwnProperty("required"))n=t.required=n?u(n):{};return n}function x(e,t,n,r){if(S.test(t)){var i=r.bindings;i?r.hasOwnProperty("bindings")||(i=r.bindings=u(r.bindings)):i=r.bindings={},i[t]=n}}function T(e,t){var n=t.bindings,r,i,s;if(n){for(r in n)i=n[r],i&&(s=r.slice(0,-7),i instanceof Ember.Binding?(i=i.copy(),i.to(s)):i=new Ember.Binding(s,i),i.connect(e),e[r]=i);t.bindings={}}}function N(e,t){return T(e,t||Ember.meta(e)),e}function C(e,t,n,r,i){var s=t.methodName,o;return r[s]||i[s]?(o=i[s],t=r[s]):n.descs[s]?(t=n.descs[s],o=undefined):(t=undefined,o=e[s]),{desc:t,value:o}}function k(e,t,n,r,i){if("function"!=typeof n)return;var s=n[r];if(s)for(var o=0,u=s.length;o<u;o++)Ember[i](e,s[o],null,t)}function L(e,t,n){var r=e[t];k(e,t,r,"__ember_observesBefore__","removeBeforeObserver"),k(e,t,r,"__ember_observes__","removeObserver"),k(e,t,n,"__ember_observesBefore__","addBeforeObserver"),k(e,t,n,"__ember_observes__","addObserver")}function A(e,r,i){var s={},o={},u=Ember.meta(e),f,c,h;w(r,l(e),s,o,e);for(f in o){if(f==="contructor"||!o.hasOwnProperty(f))continue;h=s[f],c=o[f];if(h===t)continue;while(h&&h instanceof n){var p=C(e,h,u,s,o);h=p.desc,c=p.value}if(h===undefined&&c===undefined)continue;L(e,f,c),x(e,f,c,u),a(e,f,h,c,u)}return i||N(e,u),e}function M(e,t,n){var r=f(e);if(n[r])return!1;n[r]=!0;if(e===t)return!0;var i=e.mixins,s=i?i.length:0;while(--s>=0)if(M(i[s],t,n))return!0;return!1}function _(e,t,n){if(n[f(t)])return;n[f(t)]=!0;if(t.properties){var r=t.properties;for(var i in r)r.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&s.call(t.mixins,function(t){_(e,t,n)})}var e,t,n,r=Ember.ArrayPolyfills.map,i=Ember.ArrayPolyfills.indexOf,s=Ember.ArrayPolyfills.forEach,o=[].slice,u=Ember.create,a=Ember.defineProperty,f=Ember.guidFor,p={},S=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=o.call(arguments,1);return A(e,t,!1),e},Ember.Mixin=function(){return c(this,arguments)},e=Ember.Mixin,e._apply=A,e.applyPartial=function(e){var t=o.call(arguments,1);return A(e,t,!0)},e.finishPartial=N,Ember.anyUnprocessedMixins=!1,e.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return c(new e,arguments)};var O=e.prototype;O.reopen=function(){var t,n;this.properties?(t=e.create(),t.properties=this.properties,delete this.properties,this.mixins=[t]):this.mixins||(this.mixins=[]);var r=arguments.length,i=this.mixins,s;for(s=0;s<r;s++)t=arguments[s],t instanceof e?i.push(t):(n=e.create(),n.properties=t,i.push(n));return this},O.apply=function(e){return A(e,[this],!1)},O.applyPartial=function(e){return A(e,[this],!0)},O.detect=function(t){if(!t)return!1;if(t instanceof e)return M(t,this,{});var n=Ember.meta(t,!1).mixins;return n?!!n[f(this)]:!1},O.without=function(){var t=new e(this);return t._without=o.call(arguments),t},O.keys=function(){var e={},t={},n=[];_(e,this,t);for(var r in e)e.hasOwnProperty(r)&&n.push(r);return n},e.mixins=function(e){var t=Ember.meta(e,!1).mixins,n=[];if(!t)return n;for(var r in t){var i=t[r];i.properties||n.push(i)}return n},t=new Ember.Descriptor,t.toString=function(){return"(Required Property)"},Ember.required=function(){return t},n=function(e){this.methodName=e},n.prototype=new Ember.Descriptor,Ember.alias=function(e){return new n(e)},Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new n(e)},Ember.observer=function(e){var t=o.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;e<t;e++)var n=arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=o.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){}(),function(){e("rsvp",[],function(){"use strict";function d(e,t){n.async(function(){e.trigger("promise:resolved",{detail:t}),e.isResolved=!0,e.resolvedValue=t})}function v(e,t){n.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedValue=t})}function m(e){var t,n=[],r=new c,i=e.length;i===0&&r.resolve([]);var s=function(e){return function(t){o(e,t)}},o=function(e,t){n[e]=t,--i===0&&r.resolve(n)},u=function(e){r.reject(e)};for(t=0;t<i;t++)e[t].then(s(t),u);return r}var e=typeof window!="undefined"?window:{},t=e.MutationObserver||e.WebKitMutationObserver,n,r;if(typeof process!="undefined"&&{}.toString.call(process)==="[object process]")r=function(e,t){process.nextTick(function(){e.call(t)})};else if(t){var i=[],s=new t(function(){var e=i.slice();i=[],e.forEach(function(e){var t=e[0],n=e[1];t.call(n)})}),o=document.createElement("div");s.observe(o,{attributes:!0}),window.addEventListener("unload",function(){s.disconnect(),s=null}),r=function(e,t){i.push([e,t]),o.setAttribute("drainQueue","drainQueue")}}else r=function(e,t){setTimeout(function(){e.call(t)},1)};var u=function(e,t){this.type=e;for(var n in t){if(!t.hasOwnProperty(n))continue;this[n]=t[n]}},a=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n][0]===t)return n;return-1},f=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},l={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,n){var r=f(this),i,s;e=e.split(/\s+/),n=n||this;while(s=e.shift())i=r[s],i||(i=r[s]=[]),a(i,t)===-1&&i.push([t,n])},off:function(e,t){var n=f(this),r,i,s;e=e.split(/\s+/);while(i=e.shift()){if(!t){n[i]=[];continue}r=n[i],s=a(r,t),s!==-1&&r.splice(s,1)}},trigger:function(e,t){var n=f(this),r,i,s,o,a;if(r=n[e])for(var l=0;l<r.length;l++)i=r[l],s=i[0],o=i[1],typeof t!="object"&&(t={detail:t}),a=new u(e,t),s.call(o,a)}},c=function(){this.on("promise:resolved",function(e){this.trigger("success",{detail:e.detail})},this),this.on("promise:failed",function(e){this.trigger("error",{detail:e.detail})},this)},h=function(){},p=function(e,t,n,r){var i=typeof n=="function",s,o,u,a;if(i)try{s=n(r.detail),u=!0}catch(f){a=!0,o=f}else s=r.detail,u=!0;s&&typeof s.then=="function"?s.then(function(e){t.resolve(e)},function(e){t.reject(e)}):i&&u?t.resolve(s):a?t.reject(o):t[e](s)};return c.prototype={then:function(e,t){var r=new c;return this.isResolved&&n.async(function(){p("resolve",r,e,{detail:this.resolvedValue})},this),this.isRejected&&n.async(function(){p("reject",r,t,{detail:this.rejectedValue})},this),this.on("promise:resolved",function(t){p("resolve",r,e,t)}),this.on("promise:failed",function(e){p("reject",r,t,e)}),r},resolve:function(e){d(this,e),this.resolve=h,this.reject=h},reject:function(e){v(this,e),this.resolve=h,this.reject=h}},l.mixin(c.prototype),n={async:r,Promise:c,Event:u,EventTarget:l,all:m,raiseOnUncaughtExceptions:!0},n})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function n(e){throw new Error(e+" is not currently supported on child containers")}function r(e,t){var n=s(e,t,"singleton");return n!==!1}function i(e,t){var n={};if(!t)return n;var r,i;for(var s=0,o=t.length;s<o;s++)r=t[s],i=e.lookup(r.fullName),n[r.property]=i;return n}function s(e,t,n){var r=e._options.get(t);if(r&&r[n]!==undefined)return r[n];var i=t.split(":")[0];r=e._typeOptions.get(i);if(r)return r[n]}function o(e,t){var n=e.normalize(t);return e.resolve(n)}function u(e,t){var n=o(e,t),r=t.split(":"),u=r[0],a=r[1],f;if(s(e,t,"instantiate")===!1)return n;if(n){var l=[];l=l.concat(e.typeInjections.get(u)||[]),l=l.concat(e.injections[t]||[]);var c=i(e,l);return c.container=e,c._debugContainerKey=t,f=n.create(c),f}}function a(e,t){e.cache.eachLocal(function(n,r){if(s(e,n,"instantiate")===!1)return;t(r)})}function f(e){e.cache.eachLocal(function(t,n){if(s(e,t,"instantiate")===!1)return;n.destroy()}),e.cache.dict={}}return e.prototype={get:function(e){var t=this.dict;if(t.hasOwnProperty(e))return t[e];if(this.parent)return this.parent.get(e)},set:function(e,t){this.dict[e]=t},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var n=this.dict;for(var r in n)n.hasOwnProperty(r)&&e.call(t,r,n[r])}},t.prototype={child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,n){e[t]=n},register:function(e,t,n,r){var i;e.indexOf(":")!==-1?(r=n,n=t,i=e):i=e+":"+t;var s=this.normalize(i);this.registry.set(s,n),this._options.set(s,r||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},lookup:function(e,t){e=this.normalize(e),t=t||{};if(this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var n=u(this,e);if(!n)return;return r(this,e)&&t.singleton!==!1&&this.cache.set(e,n),n},has:function(e){return this.cache.has(e)?!0:!!o(this,e)},optionsForType:function(e,t){this.parent&&n("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,r){this.parent&&n("typeInjection");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:r})},injection:function(e,t,r){this.parent&&n("injection");if(e.indexOf(":")===-1)return this.typeInjection(e,t,r);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:r})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;e<t;e++)this.children[e].destroy();this.children=[],a(this,function(e){e.isDestroying=!0}),a(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;e<t;e++)f(this.children[e]);f(this)}},t})}(),function(){function i(t,n,r,s){var o,u,a;if("object"!=typeof t||t===null)return t;if(n&&(u=e(r,t))>=0)return s[u];if(Ember.typeOf(t)==="array"){o=t.slice();if(n){u=o.length;while(--u>=0)o[u]=i(o[u],n,r,s)}}else if(Ember.Copyable&&Ember.Copyable.detect(t))o=t.copy(n,r,s);else{o={};for(a in t){if(!t.hasOwnProperty(a))continue;if(a.substring(0,2)==="__")continue;o[a]=n?i(t[a],n,r,s):t[a]}}return n&&(r.push(t),s.push(o)),o}var e=Ember.EnumerableUtils.indexOf,t={},n="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(n,function(e){t["[object "+e+"]"]=e.toLowerCase()});var r=Object.prototype.toString;Ember.typeOf=function(e){var n;return n=e===null||e===undefined?String(e):t[r.call(e)]||"object",n==="function"?Ember.Object&&Ember.Object.detect(e)&&(n="class"):n==="object"&&(e instanceof Error?n="error":Ember.Object&&e instanceof Ember.Object?n="instance":n="object"),n},Ember.compare=function o(e,t){if(e===t)return 0;var n=Ember.typeOf(e),r=Ember.typeOf(t),i=Ember.Comparable;if(i){if(n==="instance"&&i.detect(e.constructor))return e.constructor.compare(e,t);if(r==="instance"&&i.detect(t.constructor))return 1-t.constructor.compare(t,e)}var s=Ember.ORDER_DEFINITION_MAPPING;if(!s){var u=Ember.ORDER_DEFINITION;s=Ember.ORDER_DEFINITION_MAPPING={};var a,f;for(a=0,f=u.length;a<f;++a)s[u[a]]=a;delete Ember.ORDER_DEFINITION}var l=s[n],c=s[r];if(l<c)return-1;if(l>c)return 1;switch(n){case"boolean":case"number":if(e<t)return-1;if(e>t)return 1;return 0;case"string":var h=e.localeCompare(t);if(h<0)return-1;if(h>0)return 1;return 0;case"array":var p=e.length,d=t.length,v=Math.min(p,d),m=0,g=0;while(m===0&&g<v)m=o(e[g],t[g]),g++;if(m!==0)return m;if(p<d)return-1;if(p>d)return 1;return 0;case"instance":if(Ember.Comparable&&Ember.Comparable.detect(e))return e.compare(e,t);return 0;case"date":var y=e.getTime(),b=t.getTime();if(y<b)return-1;if(y>b)return 1;return 0;default:return 0}},Ember.copy=function(e,t){return"object"!=typeof e||e===null?e:Ember.Copyable&&Ember.Copyable.detect(e)?e.copy(t):i(e,t,t?[]:null,t?[]:null)},Ember.inspect=function(e){if(typeof e!="object"||e===null)return e+"";var t,n=[];for(var r in e)if(e.hasOwnProperty(r)){t=e[r];if(t==="toString")continue;Ember.typeOf(t)==="function"&&(t="function() { ... }"),n.push(r+": "+t)}return"{"+n.join(", ")+"}"},Ember.isEqual=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e===t},Ember.ORDER_DEFINITION=Ember.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class","date"],Ember.keys=Object.keys,Ember.keys||(Ember.keys=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t});var s=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){var e=Error.prototype.constructor.apply(this,arguments);for(var t=0;t<s.length;t++)this[s[t]]=e[s[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){Ember.RSVP=t("rsvp")}(),function(){var e=/[ _]/g,t={},n=/([a-z])([A-Z])/g,r=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,s=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var n=0;return e.replace(/%@([0-9]+)?/g,function(e,r){return r=r?parseInt(r,0)-1:n++,e=t[r],(e===null?"(null)":e===undefined?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(n,"$1_$2").toLowerCase()},dasherize:function(n){var r=t,i=r.hasOwnProperty(n),s;return i?r[n]:(s=Ember.String.decamelize(n).replace(e,"-"),r[n]=s,s)},camelize:function(e){return e.replace(r,function(e,t,n){return n?n.toUpperCase():""}).replace(/^([A-Z])/,function(e,t,n){return e.toLowerCase()})},classify:function(e){var t=e.split("."),n=[];for(var r=0,i=t.length;r<i;r++){var s=Ember.String.camelize(t[r]);n.push(s.charAt(0).toUpperCase()+s.substr(1))}return n.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(s,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,n=Ember.String.loc,r=Ember.String.camelize,i=Ember.String.decamelize,s=Ember.String.dasherize,o=Ember.String.underscore,u=Ember.String.capitalize,a=Ember.String.classify;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.String)String.prototype.fmt=function(){return e(this,arguments)},String.prototype.w=function(){return t(this)},String.prototype.loc=function(){return n(this,arguments)},String.prototype.camelize=function(){return r(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return s(this)},String.prototype.underscore=function(){return o(this)},String.prototype.classify=function(){return a(this)},String.prototype.capitalize=function(){return u(this)}}(),function(){var e=Array.prototype.slice;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Function)Function.prototype.property=function(){var e=Ember.computed(this);return e.property.apply(e,arguments)},Function.prototype.observes=function(){return this.__ember_observes__=e.call(arguments),this},Function.prototype.observesBefore=function(){return this.__ember_observesBefore__=e.call(arguments),this}}(),function(){}(),function(){function s(){return i.length===0?{}:i.pop()}function o(e){return i.push(e),null}function u(t,n){function i(i){var s=e(i,t);return r?n===s:!!s}var r=arguments.length===2;return i}var e=Ember.get,t=Ember.set,n=Array.prototype.slice,r=Ember.EnumerableUtils.indexOf,i=[];Ember.Enumerable=Ember.Mixin.create({isEnumerable:!0,nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(e(this,"length")===0)return undefined;var t=s(),n;return n=this.nextObject(0,null,t),o(t),n}).property("[]"),lastObject:Ember.computed(function(){var t=e(this,"length");if(t===0)return undefined;var n=s(),r=0,i,u=null;do u=i,i=this.nextObject(r++,u,n);while(i!==undefined);return o(n),u}).property("[]"),contains:function(e){return this.find(function(t){return t===e})!==undefined},forEach:function(t,n){if(typeof t!="function")throw new TypeError;var r=e(this,"length"),i=null,u=s();n===undefined&&(n=null);for(var a=0;a<r;a++){var f=this.nextObject(a,i,u);t.call(n,f,a,this),i=f}return i=null,u=o(u),this},getEach:function(e){return this.mapProperty(e)},setEach:function(e,n){return this.forEach(function(r){t(r,e,n)})},map:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){n[i]=e.call(t,r,i,s)}),n},mapProperty:function(t){return this.map(function(n){return e(n,t)})},filter:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){e.call(t,r,i,s)&&n.push(r)}),n},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterProperty:function(e,t){return this.filter(u.apply(this,arguments))},rejectProperty:function(t,n){var r=function(r){return e(r,t)===n},i=function(n){return!!e(n,t)},s=arguments.length===2?r:i;return this.reject(s)},find:function(t,n){var r=e(this,"length");n===undefined&&(n=null);var i=null,u,a=!1,f,l=s();for(var c=0;c<r&&!a;c++){u=this.nextObject(c,i,l);if(a=t.call(n,u,c,this))f=u;i=u}return u=i=null,l=o(l),f},findProperty:function(e,t){return this.find(u.apply(this,arguments))},every:function(e,t){return!this.find(function(n,r,i){return!e.call(t,n,r,i)})},everyProperty:function(e,t){return this.every(u.apply(this,arguments))},some:function(e,t){return!!this.find(function(n,r,i){return!!e.call(t,n,r,i)})},someProperty:function(e,t){return this.some(u.apply(this,arguments))},reduce:function(e,t,n){if(typeof e!="function")throw new TypeError;var r=t;return this.forEach(function(t,i){r=e.call(null,r,t,i,this,n)},this),r},invoke:function(e){var t,r=Ember.A([]);return arguments.length>1&&(t=n.call(arguments,1)),this.forEach(function(n,i){var s=n&&n[e];"function"==typeof s&&(r[i]=t?s.apply(n,t):s.call(n))},this),r},toArray:function(){var e=Ember.A([]);return this.forEach(function(t,n){e[n]=t}),e},compact:function(){return this.without(null)},without:function(e){if(!this.contains(e))return this;var t=Ember.A([]);return this.forEach(function(n){n!==e&&(t[t.length]=n)}),t},uniq:function(){var e=Ember.A([]);return this.forEach(function(t){r(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(e,t){return this}),addEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",t,r),Ember.addListener(this,"@enumerable:change",t,i),s||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",t,r),Ember.removeListener(this,"@enumerable:change",t,i),s&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.propertyWillChange(this,"[]"),s&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,t,n]),this},enumerableContentDidChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.sendEvent(this,"@enumerable:change",[this,t,n]),s&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this}})}(),function(){function i(e){return e===null||e===undefined}var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.map,r=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{isSCArray:!0,length:Ember.required(),objectAt:function(t){return t<0||t>=e(this,"length")?undefined:e(this,t)},objectsAt:function(e){var t=this;return n(e,function(e){return t.objectAt(e)})},nextObject:function(e){return this.objectAt(e)},"[]":Ember.computed(function(t,n){return n!==undefined&&this.replace(0,e(this,"length"),n),this}),firstObject:Ember.computed(function(){return this.objectAt(0)}),lastObject:Ember.computed(function(){return this.objectAt(e(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(t,n){var r=Ember.A([]),s=e(this,"length");i(t)&&(t=0);if(i(n)||n>s)n=s;t<0&&(t=s+t),n<0&&(n=s+n);while(t<n)r[r.length]=this.objectAt(t++);return r},indexOf:function(t,n){var r,i=e(this,"length");n===undefined&&(n=0),n<0&&(n+=i);for(r=n;r<i;r++)if(this.objectAt(r,!0)===t)return r;return-1},lastIndexOf:function(t,n){var r,i=e(this,"length");if(n===undefined||n>=i)n=i-1;n<0&&(n+=i);for(r=n;r>=0;r--)if(this.objectAt(r)===t)return r;return-1},addArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,r),Ember.addListener(this,"@array:change",t,i),s||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,r),Ember.removeListener(this,"@array:change",t,i),s&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,n,r){t===undefined?(t=0,n=r=-1):(n===undefined&&(n=-1),r===undefined&&(r=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,n,r]);var i,s;if(t>=0&&n>=0&&e(this,"hasEnumerableObservers")){i=[],s=t+n;for(var o=t;o<s;o++)i.push(this.objectAt(o))}else i=n;return this.enumerableContentWillChange(i,r),this},arrayContentDidChange:function(t,n,i){t===undefined?(t=0,n=i=-1):(n===undefined&&(n=-1),i===undefined&&(i=-1));var s,o;if(t>=0&&i>=0&&e(this,"hasEnumerableObservers")){s=[],o=t+i;for(var u=t;u<o;u++)s.push(this.objectAt(u))}else s=i;this.enumerableContentDidChange(n,s),Ember.sendEvent(this,"@array:change",[this,t,n,i]);var a=e(this,"length"),f=r(this,"firstObject"),l=r(this,"lastObject");return this.objectAt(0)!==f&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(a-1)!==l&&(Ember.propertyWillChange(this,"lastObject"),Ember.propertyDidChange(this,"lastObject")),this},"@each":Ember.computed(function(){return this.__each||(this.__each=new Ember.EachProxy(this)),this.__each})})}(),function(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,compare:Ember.required(Function)})}(),function(){var e=Ember.get,t=Ember.set;Ember.Copyable=Ember.Mixin.create({copy:Ember.required(Function),frozenCopy:function(){if(Ember.Freezable&&Ember.Freezable.detect(this))return e(this,"isFrozen")?this:this.copy().freeze();throw new Error(Ember.String.fmt("%@ does not support freezing",[this]))}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Freezable=Ember.Mixin.create({isFrozen:!1,freeze:function(){return e(this,"isFrozen")?this:(t(this,"isFrozen",!0),this)}}),Ember.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){var e=Ember.EnumerableUtils.forEach;Ember.MutableEnumerable=Ember.Mixin.create(Ember.Enumerable,{addObject:Ember.required(Function),addObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.addObject(e)},this),Ember.endPropertyChanges(this),this},removeObject:Ember.required(Function),removeObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.removeObject(e)},this),Ember.endPropertyChanges(this),this}})}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=n(this,"length");return e===0?this:(this.replace(0,e,t),this)},insertAt:function(t,r){if(t>n(this,"length"))throw new Error(e);return this.replace(t,0,[r]),this},removeAt:function(r,i){if("number"==typeof r){if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1),this.replace(r,i,t)}return this},pushObject:function(e){return this.insertAt(n(this,"length"),e),e},pushObjects:function(e){return this.replace(n(this,"length"),0,e),this},popObject:function(){var e=n(this,"length");if(e===0)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(n(this,"length")===0)return null;var e=this.objectAt(0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=n(this,"length");if(e===0)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this.replace(0,t,e),this},removeObject:function(e){var t=n(this,"length")||0;while(--t>=0){var r=this.objectAt(t);r===e&&this.removeAt(t)}return this},addObject:function(e){return this.contains(e)||this.pushObject(e),this}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},n=arguments;arguments.length===1&&Ember.typeOf(arguments[0])==="array"&&(n=arguments[0]);for(var r=0;r<n.length;r++)t[n[r]]=e(this,n[r]);return t},set:function(e,n){return t(this,e,n),this},setProperties:function(e){return Ember.setProperties(this,e)},beginPropertyChanges:function(){return Ember.beginPropertyChanges(),this},endPropertyChanges:function(){return Ember.endPropertyChanges(),this},propertyWillChange:function(e){return Ember.propertyWillChange(this,e),this},propertyDidChange:function(e){return Ember.propertyDidChange(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addBeforeObserver:function(e,t,n){Ember.addBeforeObserver(this,e,t,n)},addObserver:function(e,t,n){Ember.addObserver(this,e,t,n)},removeObserver:function(e,t,n){Ember.removeObserver(this,e,t,n)},hasObserverFor:function(e){return Ember.hasListeners(this,e+":change")},getPath:function(e){return this.get(e)},setPath:function(e,t){return this.set(e,t)},getWithDefault:function(e,t){return Ember.getWithDefault(this,e,t)},incrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)+r),e(this,n)},decrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)-r),e(this,n)},toggleProperty:function(n){return t(this,n,!e(this,n)),e(this,n)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get,t=Ember.set;Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,targetObject:Ember.computed(function(){var t=e(this,"target");if(Ember.typeOf(t)==="string"){var n=e(this,t);return n===undefined&&(n=e(Ember.lookup,t)),n}return t}).property("target"),triggerAction:function(){var t=e(this,"action"),n=e(this,"targetObject");if(n&&t){var r;return typeof n.send=="function"?r=n.send(t,this):(typeof t=="string"&&(t=n[t]),r=t.call(n,this)),r!==!1&&(r=!0),r}return!1}})}(),function(){Ember.Evented=Ember.Mixin.create({on:function(e,t,n){return Ember.addListener(this,e,t,n),this},one:function(e,t,n){return n||(n=t,t=null),Ember.addListener(this,e,t,n,!0),this},trigger:function(e){var t=[],n,r;for(n=1,r=arguments.length;n<r;n++)t.push(arguments[n]);Ember.sendEvent(this,e,t)},fire:function(e){this.trigger.apply(this,arguments)},off:function(e,t,n){return Ember.removeListener(this,e,t,n),this},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.async=function(e,t){Ember.run.schedule("actions",t,e)};var n=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){var r=n(this,"promise");return r.then.apply(r,arguments)},resolve:function(e){n(this,"promise").resolve(e)},reject:function(e){n(this,"promise").reject(e)},promise:Ember.computed(function(){return new e.Promise})})}(),function(){}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function b(){var e=!1,t,s,o=function(){e||o.proto(),r(this,i,y),r(this,"_super",y);var a=u(this);a.proto=this;if(t){var l=t;t=null,this.reopen.apply(this
|
17
|
+
,l)}if(s){var c=s;s=null;var h=this.concatenatedProperties;for(var p=0,v=c.length;p<v;p++){var b=c[p];for(var w in b){if(!b.hasOwnProperty(w))continue;var E=b[w],S=Ember.IS_BINDING;if(S.test(w)){var x=a.bindings;x?a.hasOwnProperty("bindings")||(x=a.bindings=n(a.bindings)):x=a.bindings={},x[w]=E}var T=a.descs[w];if(h&&g(h,w)>=0){var N=this[w];N?"function"==typeof N.concat?E=N.concat(E):E=Ember.makeArray(N).concat(E):E=Ember.makeArray(E)}T?T.set(this,w,E):typeof this.setUnknownProperty!="function"||w in this?m?Ember.defineProperty(this,w,null,E):this[w]=E:this.setUnknownProperty(w,E)}}}d(this,a),delete a.proto,f(this),this.init.apply(this,arguments)};return o.toString=h.prototype.toString,o.willReopen=function(){e&&(o.PrototypeMixin=h.create(o.PrototypeMixin)),e=!1},o._initMixins=function(e){t=e},o._initProperties=function(e){s=e},o.proto=function(){var t=o.superclass;return t&&t.proto(),e||(e=!0,o.PrototypeMixin.applyPartial(o.prototype),a(o.prototype)),this.prototype},o}function E(e){return function(){return e}}var e=Ember.set,t=Ember.get,n=Ember.create,r=Ember.platform.defineProperty,i=Ember.GUID_KEY,s=Ember.guidFor,o=Ember.generateGuid,u=Ember.meta,a=Ember.rewatch,f=Ember.finishChains,l=Ember.destroy,c=Ember.run.schedule,h=Ember.Mixin,p=h._apply,d=h.finishPartial,v=h.prototype.reopen,m=Ember.ENV.MANDATORY_SETTER,g=Ember.EnumerableUtils.indexOf,y={configurable:!0,writable:!0,enumerable:!1,value:undefined},w=b();w.toString=function(){return"Ember.CoreObject"},w.PrototypeMixin=h.create({reopen:function(){return p(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){if(this._didCallDestroy)return;return this.isDestroying=!0,this._didCallDestroy=!0,this.willDestroy&&this.willDestroy(),c("destroy",this,this._scheduledDestroy),this},_scheduledDestroy:function(){l(this),e(this,"isDestroyed",!0),this.didDestroy&&this.didDestroy()},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function x(){var e=typeof this.toStringExtension=="function",t=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+s(this)+t+">";return this.toString=E(n),n}}),w.PrototypeMixin.ownerConstructor=w,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(w.PrototypeMixin),w.__super__=null;var S=h.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var e=b(),t;return e.ClassMixin=h.create(this.ClassMixin),e.PrototypeMixin=h.create(this.PrototypeMixin),e.ClassMixin.ownerConstructor=e,e.PrototypeMixin.ownerConstructor=e,v.apply(e.PrototypeMixin,arguments),e.superclass=this,e.__super__=this.prototype,t=e.prototype=n(this.prototype),t.constructor=e,o(t,"ember"),u(t).proto=t,e.ClassMixin.apply(e),e},createWithMixins:function(){var e=this;return arguments.length>0&&this._initMixins(arguments),new e},create:function(){var e=this;return arguments.length>0&&this._initProperties(arguments),new e},reopen:function(){return this.willReopen(),v.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return v.apply(this.ClassMixin,arguments),p(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;while(e){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=u(this.proto(),!1).descs[e];return t._meta||{}},eachComputedProperty:function(e,t){var n=this.proto(),r=u(n).descs,i={},s;for(var o in r)s=r[o],s instanceof Ember.ComputedProperty&&e.call(t||this,o,s._meta||i)}});S.ownerConstructor=w,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(S),w.ClassMixin=S,S.apply(w),Ember.CoreObject=w}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function o(e,t,n){var u=e.length;r[e.join(".")]=t;for(var f in t){if(!i.call(t,f))continue;var c=t[f];e[u]=f;if(c&&c.toString===l)c.toString=h(e.join(".")),c[a]=e.join(".");else if(c&&c.isNamespace){if(n[s(c)])continue;n[s(c)]=!0,o(e,c,n)}}e.length=u}function u(){var e=Ember.Namespace,t=Ember.lookup,n,r;if(e.PROCESSED)return;for(var i in t){if(i==="parent"||i==="top"||i==="frameElement")continue;if(i==="globalStorage"&&t.StorageList&&t.globalStorage instanceof t.StorageList)continue;if(t.hasOwnProperty&&!t.hasOwnProperty(i))continue;try{n=Ember.lookup[i],r=n&&n.isNamespace}catch(s){continue}r&&(n[a]=i)}}function f(e){var t=e.superclass;if(t)return t[a]?t[a]:f(t);return}function l(){!Ember.BOOTED&&!this[a]&&c();var e;if(this[a])e=this[a];else{var t=f(this);t?e="(subclass of "+t+")":e="(unknown mixin)",this.toString=h(e)}return e}function c(){var e=!n.PROCESSED,t=Ember.anyUnprocessedMixins;e&&(u(),n.PROCESSED=!0);if(e||t){var r=n.NAMESPACES,i;for(var s=0,a=r.length;s<a;s++)i=r[s],o([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function h(e){return function(){return e}}var e=Ember.get,t=Ember.ArrayPolyfills.indexOf,n=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var t=e(this,"name");return t?t:(u(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=undefined,e.splice(t.call(e,this),1),this._super()}});n.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:c,byName:function(e){return Ember.BOOTED||c(),r[e]}});var r=n.NAMESPACES_BY_ID,i={}.hasOwnProperty,s=Ember.guidFor,a=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=l}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(e){return n(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,r){n(this,"content").replace(e,t,r)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var e=n(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){var e=n(this,"content");this._setupContent()},"content"),_setupContent:function(){var e=n(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,undefined),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,undefined,t)},"arrangedContent"),_setupArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(e){return n(this,"content")&&this.objectAtContent(e)},length:Ember.computed(function(){var e=n(this,"arrangedContent");return e?n(e,"length"):0}),_replace:function(e,t,r){var i=n(this,"content");return i&&this.replaceContent(e,t,r),this},replace:function(){if(n(this,"arrangedContent")!==n(this,"content"))throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(t,r){if(t>n(this,"content.length"))throw new Error(e);return this._replace(t,0,[r]),this},insertAt:function(e,t){if(n(this,"arrangedContent")===n(this,"content"))return this._insertAt(e,t);throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(r,i){if("number"==typeof r){var s=n(this,"content"),o=n(this,"arrangedContent"),u=[],a;if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1);for(a=r;a<r+i;a++)u.push(s.indexOf(o.objectAt(a)));u.sort(function(e,t){return t-e}),Ember.beginPropertyChanges();for(a=0;a<u.length;a++)this._replace(u[a],1,t);Ember.endPropertyChanges()}return this},pushObject:function(e){return this._insertAt(n(this,"content.length"),e),e},pushObjects:function(e){return this._replace(n(this,"length"),0,e),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this._replace(0,t,e),this},unshiftObject:function(e){return this._insertAt(0,e),e},unshiftObjects:function(e){return this._replace(0,0,e),this},slice:function(){var e=this.toArray();return e.slice.apply(e,arguments)},arrangedContentArrayWillChange:function(e,t,n,r){this.arrayContentWillChange(t,n,r)},arrangedContentArrayDidChange:function(e,t,n,r){this.arrayContentDidChange(t,n,r)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function f(e,t){var n=t.slice(8);if(n in this)return;u(this,n)}function l(e,t){var n=t.slice(8);if(n in this)return;a(this,n)}var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.addBeforeObserver,i=Ember.addObserver,s=Ember.removeBeforeObserver,o=Ember.removeObserver,u=Ember.propertyWillChange,a=Ember.propertyDidChange;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;r(this,t,null,f),i(this,t,null,l)},didUnwatchProperty:function(e){var t="content."+e;s(this,t,null,f),o(this,t,null,l)},unknownProperty:function(t){var n=e(this,"content");if(n)return e(n,t)},setUnknownProperty:function(n,r){var i=e(this,"content");return t(i,n,r)}}),Ember.ObjectProxy.reopenClass({create:function(){var e,t,n,r,i,s;if(arguments.length){t=this.proto();for(n=0,r=arguments.length;n<r;n++){i=arguments[n];for(s in i){if(!i.hasOwnProperty(s)||s in t)continue;e||(e={}),e[s]=null}}e&&this._initMixins([e])}return this._super.apply(this,arguments)}})}(),function(){function o(e,t,r,i,s){var o=r._objects,u;o||(o=r._objects={});while(--s>=i){var a=e.objectAt(s);a&&(Ember.addBeforeObserver(a,t,r,"contentKeyWillChange"),Ember.addObserver(a,t,r,"contentKeyDidChange"),u=n(a),o[u]||(o[u]=[]),o[u].push(s))}}function u(e,t,r,i,s){var o=r._objects;o||(o=r._objects={});var u,a;while(--s>=i){var f=e.objectAt(s);f&&(Ember.removeBeforeObserver(f,t,r,"contentKeyWillChange"),Ember.removeObserver(f,t,r,"contentKeyDidChange"),a=n(f),u=o[a],u[u.indexOf(s)]=null)}}var e=Ember.set,t=Ember.get,n=Ember.guidFor,r=Ember.EnumerableUtils.forEach,i=Ember.Object.extend(Ember.Array,{init:function(e,t,n){this._super(),this._keyName=t,this._owner=n,this._content=e},objectAt:function(e){var n=this._content.objectAt(e);return n&&t(n,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?t(e,"length"):0})}),s=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),r(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e,t){var n;return n=new i(this._content,e,this),Ember.defineProperty(this,e,null,n),this.beginObservingContentKey(e),n},arrayWillChange:function(e,t,n,r){var i=this._keys,s,o;o=n>0?t+n:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;o>0&&u(e,s,this,t,o),Ember.propertyWillChange(this,s)}Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(e,t,n,r){var i=this._keys,s,u;u=r>0?t+r:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;u>0&&o(e,s,this,t,u),Ember.propertyDidChange(this,s)}Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(e){var n=this._keys;n||(n=this._keys={});if(!n[e]){n[e]=1;var r=this._content,i=t(r,"length");o(r,e,this,0,i)}else n[e]++},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var r=this._content,i=t(r,"length");u(r,e,this,0,i)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return e==="length"?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(t,n,r){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=r?e(r,"length"):0;this.arrayContentWillChange(t,n,i);if(!r||r.length===0)this.splice(t,n);else{var s=[t,n].concat(r);this.splice.apply(this,s)}return this.arrayContentDidChange(t,n,i),this},unknownProperty:function(e,t){var n;return t!==undefined&&n===undefined&&(n=this[e]=t),n},indexOf:function(e,t){var n,r=this.length;t===undefined?t=0:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n<r;n++)if(this[n]===e)return n;return-1},lastIndexOf:function(e,t){var n,r=this.length;t===undefined?t=r-1:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n>=0;n--)if(this[n]===e)return n;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),r=["length"];Ember.EnumerableUtils.forEach(n.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(n=n.without.apply(n,r)),Ember.NativeArray=n,Ember.A=function(e){return e===undefined&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){n.apply(Array.prototype),Ember.A=function(e){return e||[]}},(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Array)&&Ember.NativeArray.activate()}(),function(){var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isNone,i=Ember.String.fmt;Ember.Set=Ember.CoreObject.extend(Ember.MutableEnumerable,Ember.Copyable,Ember.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(Ember.FROZEN_ERROR);var r=e(this,"length");if(r===0)return this;var i;this.enumerableContentWillChange(r,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var s=0;s<r;s++)i=n(this[s]),delete this[i],delete this[s];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(r,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var n=e(this,"length");if(e(t,"length")!==n)return!1;while(--n>=0)if(!t.contains(this[n]))return!1;return!0},add:Ember.aliasMethod("addObject"),remove:Ember.aliasMethod("removeObject"),pop:function(){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);var t=this.length>0?this[this.length-1]:null;return this.remove(t),t},push:Ember.aliasMethod("addObject"),shift:Ember.aliasMethod("pop"),unshift:Ember.aliasMethod("push"),addEach:Ember.aliasMethod("addObjects"),removeEach:Ember.aliasMethod("removeObjects"),init:function(e){this._super(),e&&this.addObjects(e)},nextObject:function(e){return this[e]},firstObject:Ember.computed(function(){return this.length>0?this[0]:undefined}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:undefined}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a;return o>=0&&o<u&&this[o]===i?this:(a=[i],this.enumerableContentWillChange(null,a),Ember.propertyWillChange(this,"lastObject"),u=e(this,"length"),this[s]=u,this[u]=i,t(this,"length",u+1),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(null,a),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a=o===0,f=o===u-1,l,c;return o>=0&&o<u&&this[o]===i&&(c=[i],this.enumerableContentWillChange(c,null),a&&Ember.propertyWillChange(this,"firstObject"),f&&Ember.propertyWillChange(this,"lastObject"),o<u-1&&(l=this[u-1],this[o]=l,this[n(l)]=o),delete this[s],delete this[u-1],t(this,"length",u-1),a&&Ember.propertyDidChange(this,"firstObject"),f&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(c,null)),this},contains:function(e){return this[n(e)]>=0},copy:function(){var r=this.constructor,i=new r,s=e(this,"length");t(i,"length",s);while(--s>=0)i[s]=this[s],i[n(this[s])]=s;return i},toString:function(){var e=this.length,t,n=[];for(t=0;t<e;t++)n[t]=this[t];return i("Ember.Set<%@>",[n.join(",")])}})}(),function(){var e=Ember.DeferredMixin,t=Ember.get,n=Ember.Object.extend(e);n.reopenClass({promise:function(e,r){var i=n.create();return e.call(r,i),t(i,"promise")}}),Ember.Deferred=n}(),function(){var e=Ember.ENV.EMBER_LOAD_HOOKS||{},t={};Ember.onLoad=function(n,r){var i;e[n]=e[n]||Ember.A(),e[n].pushObject(r),(i=t[n])&&r(i)},Ember.runLoadHooks=function(n,r){var i;t[n]=r,(i=e[n])&&e[n].forEach(function(e){e(r)})}}(),function(){}(),function(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,store:null,model:Ember.computed.alias("content"),send:function(t){var n=[].slice.call(arguments,1),r;this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach;Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(t,r){var i=0,s=e(this,"sortProperties"),o=e(this,"sortAscending");return n(s,function(n){i===0&&(i=Ember.compare(e(t,n),e(r,n)),i!==0&&!o&&(i=-1*i))}),i},destroy:function(){var t=e(this,"content"),r=e(this,"sortProperties");return t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(t,r){var i=e(this,"content"),s=e(this,"isSorted"),o=e(this,"sortProperties"),u=this;return i&&s?(i=i.slice(),i.sort(function(e,t){return u.orderBy(e,t)}),n(i,function(e){n(o,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(i)):i}),_contentWillChange:Ember.beforeObserver(function(){var t=e(this,"content"),r=e(this,"sortProperties");t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},"content"),sortAscendingWillChange:Ember.beforeObserver(function(){this._lastSortAscending=e(this,"sortAscending")},"sortAscending"),sortAscendingDidChange:Ember.observer(function(){if(e(this,"sortAscending")!==this._lastSortAscending){var t=e(this,"arrangedContent");t.reverseObjects()}},"sortAscending"),contentArrayWillChange:function(t,r,i,s){var o=e(this,"isSorted");if(o){var u=e(this,"arrangedContent"),a=t.slice(r,r+i),f=e(this,"sortProperties");n(a,function(e){u.removeObject(e),n(f,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},contentArrayDidChange:function(t,r,i,s){var o=e(this,"isSorted"),u=e(this,"sortProperties");if(o){var a=t.slice(r,r+s);n(a,function(e){this.insertItemSorted(e),n(u,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},insertItemSorted:function(t){var n=e(this,"arrangedContent"),r=e(n,"length"),i=this._binarySearch(t,0,r);n.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var n=e(this,"arrangedContent"),r=n.indexOf(t),i=n.objectAt(r-1),s=n.objectAt(r+1),o=i&&this.orderBy(t,i),u=s&&this.orderBy(t,s);if(o<0||u>0)n.removeObject(t),this.insertItemSorted(t)},_binarySearch:function(t,n,r){var i,s,o,u;return n===r?n:(u=e(this,"arrangedContent"),i=n+Math.floor((r-n)/2),s=u.objectAt(i),o=this.orderBy(s,t),o<0?this._binarySearch(t,i+1,r):o>0?this._binarySearch(t,n,i):i)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach,r=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(t){return e(this,"itemController")},objectAtContent:function(t){var n=e(this,"length"),r=e(this,"arrangedContent"),i=r&&r.objectAt(t);if(t>=0&&t<n){var s=this.lookupItemController(i);if(s)return this.controllerAt(t,i,s)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(t,i,s){var o=e(this,"_subControllers"),u=o.slice(t,t+i);n(u,function(e){e&&e.destroy()}),r(o,t,i,new Array(s)),this._super(t,i,s)},init:function(){this._super(),this.get("content")||Ember.defineProperty(this,"content",undefined,Ember.A()),this.set("_subControllers",Ember.A())},controllerAt:function(t,n,r){var i=e(this,"container"),s=e(this,"_subControllers"),o=s[t];o||(o=i.lookup("controller:"+r,{singleton:!1}),s[t]=o);if(!o)throw new Error('Could not resolve itemController: "'+r+'"');return o.set("target",this),o.set("content",n),o},_subControllers:null,_resetSubControllers:function(){var t=e(this,"_subControllers");n(t,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}(),function(){}(),function(){}()})(),typeof location!="undefined"&&(location.hostname==="localhost"||location.hostname==="127.0.0.1")&&console.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. If you want full error messages please use the non-minified build provided on the Ember website.");
|
data/dist/ember-runtime.prod.js
CHANGED
@@ -141,6 +141,15 @@ Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !
|
|
141
141
|
*/
|
142
142
|
Ember.SHIM_ES5 = (Ember.ENV.SHIM_ES5 === false) ? false : Ember.EXTEND_PROTOTYPES;
|
143
143
|
|
144
|
+
/**
|
145
|
+
Determines whether Ember logs info about version of used libraries
|
146
|
+
|
147
|
+
@property LOG_VERSION
|
148
|
+
@type Boolean
|
149
|
+
@default true
|
150
|
+
*/
|
151
|
+
Ember.LOG_VERSION = (Ember.ENV.LOG_VERSION === false) ? false : true;
|
152
|
+
|
144
153
|
/**
|
145
154
|
Empty function. Useful for some operations.
|
146
155
|
|
@@ -253,6 +262,58 @@ Ember.merge = function(original, updates) {
|
|
253
262
|
}
|
254
263
|
};
|
255
264
|
|
265
|
+
/**
|
266
|
+
Returns true if the passed value is null or undefined. This avoids errors
|
267
|
+
from JSLint complaining about use of ==, which can be technically
|
268
|
+
confusing.
|
269
|
+
|
270
|
+
```javascript
|
271
|
+
Ember.isNone(); // true
|
272
|
+
Ember.isNone(null); // true
|
273
|
+
Ember.isNone(undefined); // true
|
274
|
+
Ember.isNone(''); // false
|
275
|
+
Ember.isNone([]); // false
|
276
|
+
Ember.isNone(function(){}); // false
|
277
|
+
```
|
278
|
+
|
279
|
+
@method isNone
|
280
|
+
@for Ember
|
281
|
+
@param {Object} obj Value to test
|
282
|
+
@return {Boolean}
|
283
|
+
*/
|
284
|
+
Ember.isNone = function(obj) {
|
285
|
+
return obj === null || obj === undefined;
|
286
|
+
};
|
287
|
+
Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.", Ember.isNone);
|
288
|
+
|
289
|
+
/**
|
290
|
+
Verifies that a value is `null` or an empty string, empty array,
|
291
|
+
or empty function.
|
292
|
+
|
293
|
+
Constrains the rules on `Ember.isNone` by returning false for empty
|
294
|
+
string and empty arrays.
|
295
|
+
|
296
|
+
```javascript
|
297
|
+
Ember.isEmpty(); // true
|
298
|
+
Ember.isEmpty(null); // true
|
299
|
+
Ember.isEmpty(undefined); // true
|
300
|
+
Ember.isEmpty(''); // true
|
301
|
+
Ember.isEmpty([]); // true
|
302
|
+
Ember.isEmpty('Adam Hawkins'); // false
|
303
|
+
Ember.isEmpty([0,1,2]); // false
|
304
|
+
```
|
305
|
+
|
306
|
+
@method isEmpty
|
307
|
+
@for Ember
|
308
|
+
@param {Object} obj Value to test
|
309
|
+
@return {Boolean}
|
310
|
+
*/
|
311
|
+
Ember.isEmpty = function(obj) {
|
312
|
+
return obj === null || obj === undefined || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
|
313
|
+
};
|
314
|
+
Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty) ;
|
315
|
+
|
316
|
+
|
256
317
|
})();
|
257
318
|
|
258
319
|
|
@@ -1596,7 +1657,7 @@ var MapWithDefault = Ember.MapWithDefault = function(options) {
|
|
1596
1657
|
@static
|
1597
1658
|
@param [options]
|
1598
1659
|
@param {anything} [options.defaultValue]
|
1599
|
-
@return {Ember.MapWithDefault|Ember.Map} If options are passed, returns
|
1660
|
+
@return {Ember.MapWithDefault|Ember.Map} If options are passed, returns
|
1600
1661
|
`Ember.MapWithDefault` otherwise returns `Ember.Map`
|
1601
1662
|
*/
|
1602
1663
|
MapWithDefault.create = function(options) {
|
@@ -1659,7 +1720,7 @@ var FIRST_KEY = /^([^\.\*]+)/;
|
|
1659
1720
|
// ..........................................................
|
1660
1721
|
// GET AND SET
|
1661
1722
|
//
|
1662
|
-
// If we are on a platform that supports accessors we can
|
1723
|
+
// If we are on a platform that supports accessors we can use those.
|
1663
1724
|
// Otherwise simulate accessors by looking up the property directly on the
|
1664
1725
|
// object.
|
1665
1726
|
|
@@ -1670,7 +1731,7 @@ var FIRST_KEY = /^([^\.\*]+)/;
|
|
1670
1731
|
|
1671
1732
|
If you plan to run on IE8 and older browsers then you should use this
|
1672
1733
|
method anytime you want to retrieve a property on an object that you don't
|
1673
|
-
know for sure is private. (Properties beginning with an underscore '_'
|
1734
|
+
know for sure is private. (Properties beginning with an underscore '_'
|
1674
1735
|
are considered private.)
|
1675
1736
|
|
1676
1737
|
On all newer browsers, you only need to use this method to retrieve
|
@@ -1731,7 +1792,7 @@ get = function get(obj, keyName) {
|
|
1731
1792
|
|
1732
1793
|
If you plan to run on IE8 and older browsers then you should use this
|
1733
1794
|
method anytime you want to set a property on an object that you don't
|
1734
|
-
know for sure is private. (Properties beginning with an underscore '_'
|
1795
|
+
know for sure is private. (Properties beginning with an underscore '_'
|
1735
1796
|
are considered private.)
|
1736
1797
|
|
1737
1798
|
On all newer browsers, you only need to use this method to set
|
@@ -1961,11 +2022,8 @@ Ember.isGlobalPath = function(path) {
|
|
1961
2022
|
@module ember-metal
|
1962
2023
|
*/
|
1963
2024
|
|
1964
|
-
var
|
1965
|
-
META_KEY = Ember.META_KEY,
|
1966
|
-
EMPTY_META = Ember.EMPTY_META,
|
2025
|
+
var META_KEY = Ember.META_KEY,
|
1967
2026
|
metaFor = Ember.meta,
|
1968
|
-
o_create = Ember.create,
|
1969
2027
|
objectDefineProperty = Ember.platform.defineProperty;
|
1970
2028
|
|
1971
2029
|
var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
|
@@ -2385,7 +2443,6 @@ var guidFor = Ember.guidFor, // utils.js
|
|
2385
2443
|
META_KEY = Ember.META_KEY, // utils.js
|
2386
2444
|
// circular reference observer depends on Ember.watch
|
2387
2445
|
// we should move change events to this file or its own property_events.js
|
2388
|
-
notifyObservers = Ember.notifyObservers, // observer.js
|
2389
2446
|
forEach = Ember.ArrayPolyfills.forEach, // array.js
|
2390
2447
|
FIRST_KEY = /^([^\.\*]+)/,
|
2391
2448
|
IS_PATH = /[\.\*]/;
|
@@ -2924,7 +2981,7 @@ Ember.finishChains = function(obj) {
|
|
2924
2981
|
@param {String} keyName The property key (or path) that will change.
|
2925
2982
|
@return {void}
|
2926
2983
|
*/
|
2927
|
-
function propertyWillChange(obj, keyName
|
2984
|
+
function propertyWillChange(obj, keyName) {
|
2928
2985
|
var m = metaFor(obj, false),
|
2929
2986
|
watching = m.watching[keyName] > 0 || keyName === 'length',
|
2930
2987
|
proto = m.proto,
|
@@ -3031,7 +3088,6 @@ Ember.destroy = function (obj) {
|
|
3031
3088
|
var get = Ember.get,
|
3032
3089
|
set = Ember.set,
|
3033
3090
|
metaFor = Ember.meta,
|
3034
|
-
guidFor = Ember.guidFor,
|
3035
3091
|
a_slice = [].slice,
|
3036
3092
|
o_create = Ember.create,
|
3037
3093
|
META_KEY = Ember.META_KEY,
|
@@ -3067,20 +3123,8 @@ function keysForDep(obj, depsMeta, depKey) {
|
|
3067
3123
|
return keys;
|
3068
3124
|
}
|
3069
3125
|
|
3070
|
-
/* return obj[META_KEY].deps */
|
3071
3126
|
function metaForDeps(obj, meta) {
|
3072
|
-
|
3073
|
-
// If the current object has no dependencies...
|
3074
|
-
if (!deps) {
|
3075
|
-
// initialize the dependencies with a pointer back to
|
3076
|
-
// the current object
|
3077
|
-
deps = meta.deps = {};
|
3078
|
-
} else if (!meta.hasOwnProperty('deps')) {
|
3079
|
-
// otherwise if the dependencies are inherited from the
|
3080
|
-
// object's superclass, clone the deps
|
3081
|
-
deps = meta.deps = o_create(deps);
|
3082
|
-
}
|
3083
|
-
return deps;
|
3127
|
+
return keysForDep(obj, meta, 'deps');
|
3084
3128
|
}
|
3085
3129
|
|
3086
3130
|
function addDependentKeys(desc, obj, keyName, meta) {
|
@@ -3133,8 +3177,10 @@ function removeDependentKeys(desc, obj, keyName, meta) {
|
|
3133
3177
|
*/
|
3134
3178
|
function ComputedProperty(func, opts) {
|
3135
3179
|
this.func = func;
|
3180
|
+
|
3136
3181
|
this._cacheable = (opts && opts.cacheable !== undefined) ? opts.cacheable : true;
|
3137
3182
|
this._dependentKeys = opts && opts.dependentKeys;
|
3183
|
+
this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly);
|
3138
3184
|
}
|
3139
3185
|
|
3140
3186
|
Ember.ComputedProperty = ComputedProperty;
|
@@ -3189,6 +3235,28 @@ ComputedPropertyPrototype.volatile = function() {
|
|
3189
3235
|
return this.cacheable(false);
|
3190
3236
|
};
|
3191
3237
|
|
3238
|
+
/**
|
3239
|
+
Call on a computed property to set it into read-only mode. When in this
|
3240
|
+
mode the computed property will throw an error when set.
|
3241
|
+
|
3242
|
+
```javascript
|
3243
|
+
MyApp.person = Ember.Object.create({
|
3244
|
+
guid: function() {
|
3245
|
+
return 'guid-guid-guid';
|
3246
|
+
}.property().readOnly()
|
3247
|
+
});
|
3248
|
+
|
3249
|
+
MyApp.person.set('guid', 'new-guid'); // will throw an exception
|
3250
|
+
```
|
3251
|
+
|
3252
|
+
@method readOnly
|
3253
|
+
@chainable
|
3254
|
+
*/
|
3255
|
+
ComputedPropertyPrototype.readOnly = function(readOnly) {
|
3256
|
+
this._readOnly = readOnly === undefined || !!readOnly;
|
3257
|
+
return this;
|
3258
|
+
};
|
3259
|
+
|
3192
3260
|
/**
|
3193
3261
|
Sets the dependent keys on this computed property. Pass any number of
|
3194
3262
|
arguments containing key paths that this computed property depends on.
|
@@ -3313,9 +3381,14 @@ ComputedPropertyPrototype.set = function(obj, keyName, value) {
|
|
3313
3381
|
cache = meta.cache,
|
3314
3382
|
cachedValue, ret;
|
3315
3383
|
|
3384
|
+
if (this._readOnly) {
|
3385
|
+
throw new Error('Cannot Set: ' + keyName + ' on: ' + obj.toString() );
|
3386
|
+
}
|
3387
|
+
|
3316
3388
|
this._suspended = obj;
|
3317
3389
|
|
3318
3390
|
try {
|
3391
|
+
|
3319
3392
|
if (cacheable && cache.hasOwnProperty(keyName)) {
|
3320
3393
|
cachedValue = cache[keyName];
|
3321
3394
|
hadCachedValue = true;
|
@@ -3406,6 +3479,10 @@ Ember.computed = function(func) {
|
|
3406
3479
|
func = a_slice.call(arguments, -1)[0];
|
3407
3480
|
}
|
3408
3481
|
|
3482
|
+
if ( typeof func !== "function" ) {
|
3483
|
+
throw new Error("Computed Property declared without a property function");
|
3484
|
+
}
|
3485
|
+
|
3409
3486
|
var cp = new ComputedProperty(func);
|
3410
3487
|
|
3411
3488
|
if (args) {
|
@@ -3446,6 +3523,18 @@ Ember.computed.not = function(dependentKey) {
|
|
3446
3523
|
});
|
3447
3524
|
};
|
3448
3525
|
|
3526
|
+
/**
|
3527
|
+
@method computed.none
|
3528
|
+
@for Ember
|
3529
|
+
@param {String} dependentKey
|
3530
|
+
*/
|
3531
|
+
Ember.computed.none = function(dependentKey) {
|
3532
|
+
return Ember.computed(dependentKey, function(key) {
|
3533
|
+
var val = get(this, dependentKey);
|
3534
|
+
return Ember.isNone(val);
|
3535
|
+
});
|
3536
|
+
};
|
3537
|
+
|
3449
3538
|
/**
|
3450
3539
|
@method computed.empty
|
3451
3540
|
@for Ember
|
@@ -3454,7 +3543,7 @@ Ember.computed.not = function(dependentKey) {
|
|
3454
3543
|
Ember.computed.empty = function(dependentKey) {
|
3455
3544
|
return Ember.computed(dependentKey, function(key) {
|
3456
3545
|
var val = get(this, dependentKey);
|
3457
|
-
return
|
3546
|
+
return Ember.isEmpty(val);
|
3458
3547
|
});
|
3459
3548
|
};
|
3460
3549
|
|
@@ -3472,15 +3561,16 @@ Ember.computed.bool = function(dependentKey) {
|
|
3472
3561
|
/**
|
3473
3562
|
@method computed.alias
|
3474
3563
|
@for Ember
|
3564
|
+
|
3475
3565
|
@param {String} dependentKey
|
3476
3566
|
*/
|
3477
3567
|
Ember.computed.alias = function(dependentKey) {
|
3478
3568
|
return Ember.computed(dependentKey, function(key, value){
|
3479
|
-
if (arguments.length
|
3480
|
-
return get(this, dependentKey);
|
3481
|
-
} else {
|
3569
|
+
if (arguments.length > 1) {
|
3482
3570
|
set(this, dependentKey, value);
|
3483
3571
|
return value;
|
3572
|
+
} else {
|
3573
|
+
return get(this, dependentKey);
|
3484
3574
|
}
|
3485
3575
|
});
|
3486
3576
|
};
|
@@ -3496,7 +3586,6 @@ Ember.computed.alias = function(dependentKey) {
|
|
3496
3586
|
|
3497
3587
|
var o_create = Ember.create,
|
3498
3588
|
metaFor = Ember.meta,
|
3499
|
-
metaPath = Ember.metaPath,
|
3500
3589
|
META_KEY = Ember.META_KEY;
|
3501
3590
|
|
3502
3591
|
/*
|
@@ -4069,7 +4158,7 @@ Ember.RunLoop = RunLoop;
|
|
4069
4158
|
|
4070
4159
|
```javascript
|
4071
4160
|
Ember.run(function(){
|
4072
|
-
// code to be execute within a RunLoop
|
4161
|
+
// code to be execute within a RunLoop
|
4073
4162
|
});
|
4074
4163
|
```
|
4075
4164
|
|
@@ -4085,8 +4174,7 @@ Ember.RunLoop = RunLoop;
|
|
4085
4174
|
@return {Object} return value from invoking the passed function.
|
4086
4175
|
*/
|
4087
4176
|
Ember.run = function(target, method) {
|
4088
|
-
var
|
4089
|
-
args = arguments;
|
4177
|
+
var args = arguments;
|
4090
4178
|
run.begin();
|
4091
4179
|
|
4092
4180
|
function tryable() {
|
@@ -4104,11 +4192,11 @@ var run = Ember.run;
|
|
4104
4192
|
/**
|
4105
4193
|
Begins a new RunLoop. Any deferred actions invoked after the begin will
|
4106
4194
|
be buffered until you invoke a matching call to `Ember.run.end()`. This is
|
4107
|
-
|
4195
|
+
a lower-level way to use a RunLoop instead of using `Ember.run()`.
|
4108
4196
|
|
4109
4197
|
```javascript
|
4110
4198
|
Ember.run.begin();
|
4111
|
-
// code to be execute within a RunLoop
|
4199
|
+
// code to be execute within a RunLoop
|
4112
4200
|
Ember.run.end();
|
4113
4201
|
```
|
4114
4202
|
|
@@ -4126,7 +4214,7 @@ Ember.run.begin = function() {
|
|
4126
4214
|
|
4127
4215
|
```javascript
|
4128
4216
|
Ember.run.begin();
|
4129
|
-
// code to be execute within a RunLoop
|
4217
|
+
// code to be execute within a RunLoop
|
4130
4218
|
Ember.run.end();
|
4131
4219
|
```
|
4132
4220
|
|
@@ -4150,9 +4238,9 @@ Ember.run.end = function() {
|
|
4150
4238
|
|
4151
4239
|
@property queues
|
4152
4240
|
@type Array
|
4153
|
-
@default ['sync', 'actions', 'destroy'
|
4241
|
+
@default ['sync', 'actions', 'destroy']
|
4154
4242
|
*/
|
4155
|
-
Ember.run.queues = ['sync', 'actions', 'destroy'
|
4243
|
+
Ember.run.queues = ['sync', 'actions', 'destroy'];
|
4156
4244
|
|
4157
4245
|
/**
|
4158
4246
|
Adds the passed target/method and any optional arguments to the named
|
@@ -4165,19 +4253,19 @@ Ember.run.queues = ['sync', 'actions', 'destroy', 'timers'];
|
|
4165
4253
|
the `run.queues` property.
|
4166
4254
|
|
4167
4255
|
```javascript
|
4168
|
-
Ember.run.schedule('timers', this, function(){
|
4169
|
-
// this will be executed at the end of the RunLoop, when timers are run
|
4170
|
-
console.log("scheduled on timers queue");
|
4171
|
-
});
|
4172
|
-
|
4173
4256
|
Ember.run.schedule('sync', this, function(){
|
4174
|
-
// this will be executed
|
4257
|
+
// this will be executed in the first RunLoop queue, when bindings are synced
|
4175
4258
|
console.log("scheduled on sync queue");
|
4176
4259
|
});
|
4177
4260
|
|
4261
|
+
Ember.run.schedule('actions', this, function(){
|
4262
|
+
// this will be executed in the 'actions' queue, after bindings have synced.
|
4263
|
+
console.log("scheduled on actions queue");
|
4264
|
+
});
|
4265
|
+
|
4178
4266
|
// Note the functions will be run in order based on the run queues order. Output would be:
|
4179
4267
|
// scheduled on sync queue
|
4180
|
-
// scheduled on
|
4268
|
+
// scheduled on actions queue
|
4181
4269
|
```
|
4182
4270
|
|
4183
4271
|
@method schedule
|
@@ -4203,7 +4291,7 @@ function autorun() {
|
|
4203
4291
|
|
4204
4292
|
// Used by global test teardown
|
4205
4293
|
Ember.run.hasScheduledTimers = function() {
|
4206
|
-
return !!(scheduledAutorun || scheduledLater
|
4294
|
+
return !!(scheduledAutorun || scheduledLater);
|
4207
4295
|
};
|
4208
4296
|
|
4209
4297
|
// Used by global test teardown
|
@@ -4216,10 +4304,6 @@ Ember.run.cancelTimers = function () {
|
|
4216
4304
|
clearTimeout(scheduledLater);
|
4217
4305
|
scheduledLater = null;
|
4218
4306
|
}
|
4219
|
-
if (scheduledNext) {
|
4220
|
-
clearTimeout(scheduledNext);
|
4221
|
-
scheduledNext = null;
|
4222
|
-
}
|
4223
4307
|
timers = {};
|
4224
4308
|
};
|
4225
4309
|
|
@@ -4254,7 +4338,8 @@ Ember.run.autorun = function() {
|
|
4254
4338
|
bindings in the application to sync.
|
4255
4339
|
|
4256
4340
|
You should call this method anytime you need any changed state to propagate
|
4257
|
-
throughout the app immediately without repainting the UI
|
4341
|
+
throughout the app immediately without repainting the UI (which happens
|
4342
|
+
in the later 'render' queue added by the `ember-views` package).
|
4258
4343
|
|
4259
4344
|
```javascript
|
4260
4345
|
Ember.run.sync();
|
@@ -4274,25 +4359,30 @@ Ember.run.sync = function() {
|
|
4274
4359
|
|
4275
4360
|
var timers = {}; // active timers...
|
4276
4361
|
|
4277
|
-
var scheduledLater;
|
4362
|
+
var scheduledLater, scheduledLaterExpires;
|
4278
4363
|
function invokeLaterTimers() {
|
4279
4364
|
scheduledLater = null;
|
4280
|
-
|
4281
|
-
|
4282
|
-
|
4283
|
-
|
4284
|
-
|
4285
|
-
if (
|
4286
|
-
|
4287
|
-
|
4288
|
-
|
4289
|
-
|
4365
|
+
run(function() {
|
4366
|
+
var now = (+ new Date()), earliest = -1;
|
4367
|
+
for (var key in timers) {
|
4368
|
+
if (!timers.hasOwnProperty(key)) { continue; }
|
4369
|
+
var timer = timers[key];
|
4370
|
+
if (timer && timer.expires) {
|
4371
|
+
if (now >= timer.expires) {
|
4372
|
+
delete timers[key];
|
4373
|
+
invoke(timer.target, timer.method, timer.args, 2);
|
4374
|
+
} else {
|
4375
|
+
if (earliest < 0 || (timer.expires < earliest)) { earliest = timer.expires; }
|
4376
|
+
}
|
4290
4377
|
}
|
4291
4378
|
}
|
4292
|
-
}
|
4293
4379
|
|
4294
|
-
|
4295
|
-
|
4380
|
+
// schedule next timeout to fire when the earliest timer expires
|
4381
|
+
if (earliest > 0) {
|
4382
|
+
scheduledLater = setTimeout(invokeLaterTimers, earliest - now);
|
4383
|
+
scheduledLaterExpires = earliest;
|
4384
|
+
}
|
4385
|
+
});
|
4296
4386
|
}
|
4297
4387
|
|
4298
4388
|
/**
|
@@ -4340,7 +4430,19 @@ Ember.run.later = function(target, method) {
|
|
4340
4430
|
timer = { target: target, method: method, expires: expires, args: args };
|
4341
4431
|
guid = Ember.guidFor(timer);
|
4342
4432
|
timers[guid] = timer;
|
4343
|
-
|
4433
|
+
|
4434
|
+
if(scheduledLater && expires < scheduledLaterExpires) {
|
4435
|
+
// Cancel later timer (then reschedule earlier timer below)
|
4436
|
+
clearTimeout(scheduledLater);
|
4437
|
+
scheduledLater = null;
|
4438
|
+
}
|
4439
|
+
|
4440
|
+
if (!scheduledLater) {
|
4441
|
+
// Schedule later timers to be run.
|
4442
|
+
scheduledLater = setTimeout(invokeLaterTimers, wait);
|
4443
|
+
scheduledLaterExpires = expires;
|
4444
|
+
}
|
4445
|
+
|
4344
4446
|
return guid;
|
4345
4447
|
};
|
4346
4448
|
|
@@ -4396,6 +4498,21 @@ function scheduleOnce(queue, target, method, args) {
|
|
4396
4498
|
});
|
4397
4499
|
```
|
4398
4500
|
|
4501
|
+
Also note that passing an anonymous function to `Ember.run.once` will
|
4502
|
+
not prevent additional calls with an identical anonymous function from
|
4503
|
+
scheduling the items multiple times, e.g.:
|
4504
|
+
|
4505
|
+
```javascript
|
4506
|
+
function scheduleIt() {
|
4507
|
+
Ember.run.once(myContext, function() { console.log("Closure"); });
|
4508
|
+
}
|
4509
|
+
scheduleIt();
|
4510
|
+
scheduleIt();
|
4511
|
+
// "Closure" will print twice, even though we're using `Ember.run.once`,
|
4512
|
+
// because the function we pass to it is anonymous and won't match the
|
4513
|
+
// previously scheduled operation.
|
4514
|
+
```
|
4515
|
+
|
4399
4516
|
@method once
|
4400
4517
|
@param {Object} [target] target of method to invoke
|
4401
4518
|
@param {Function|String} method The method to invoke.
|
@@ -4412,22 +4529,9 @@ Ember.run.scheduleOnce = function(queue, target, method, args) {
|
|
4412
4529
|
return scheduleOnce(queue, target, method, slice.call(arguments, 3));
|
4413
4530
|
};
|
4414
4531
|
|
4415
|
-
var scheduledNext;
|
4416
|
-
function invokeNextTimers() {
|
4417
|
-
scheduledNext = null;
|
4418
|
-
for(var key in timers) {
|
4419
|
-
if (!timers.hasOwnProperty(key)) { continue; }
|
4420
|
-
var timer = timers[key];
|
4421
|
-
if (timer.next) {
|
4422
|
-
delete timers[key];
|
4423
|
-
invoke(timer.target, timer.method, timer.args, 2);
|
4424
|
-
}
|
4425
|
-
}
|
4426
|
-
}
|
4427
|
-
|
4428
4532
|
/**
|
4429
4533
|
Schedules an item to run after control has been returned to the system.
|
4430
|
-
This is
|
4534
|
+
This is equivalent to calling `Ember.run.later` with a wait time of 1ms.
|
4431
4535
|
|
4432
4536
|
```javascript
|
4433
4537
|
Ember.run.next(myContext, function(){
|
@@ -4443,20 +4547,10 @@ function invokeNextTimers() {
|
|
4443
4547
|
@param {Object} [args*] Optional arguments to pass to the timeout.
|
4444
4548
|
@return {Object} timer
|
4445
4549
|
*/
|
4446
|
-
Ember.run.next = function(
|
4447
|
-
var
|
4448
|
-
|
4449
|
-
|
4450
|
-
method: method,
|
4451
|
-
args: slice.call(arguments),
|
4452
|
-
next: true
|
4453
|
-
};
|
4454
|
-
|
4455
|
-
guid = Ember.guidFor(timer);
|
4456
|
-
timers[guid] = timer;
|
4457
|
-
|
4458
|
-
if (!scheduledNext) { scheduledNext = setTimeout(invokeNextTimers, 1); }
|
4459
|
-
return guid;
|
4550
|
+
Ember.run.next = function() {
|
4551
|
+
var args = slice.call(arguments);
|
4552
|
+
args.push(1); // 1 millisecond wait
|
4553
|
+
return run.later.apply(this, args);
|
4460
4554
|
};
|
4461
4555
|
|
4462
4556
|
/**
|
@@ -4961,7 +5055,6 @@ var Mixin, REQUIRED, Alias,
|
|
4961
5055
|
a_indexOf = Ember.ArrayPolyfills.indexOf,
|
4962
5056
|
a_forEach = Ember.ArrayPolyfills.forEach,
|
4963
5057
|
a_slice = [].slice,
|
4964
|
-
EMPTY_META = {}, // dummy for non-writable meta
|
4965
5058
|
o_create = Ember.create,
|
4966
5059
|
defineProperty = Ember.defineProperty,
|
4967
5060
|
guidFor = Ember.guidFor;
|
@@ -5330,6 +5423,38 @@ Mixin.finishPartial = finishPartial;
|
|
5330
5423
|
Ember.anyUnprocessedMixins = false;
|
5331
5424
|
|
5332
5425
|
/**
|
5426
|
+
Creates an instance of a class. Accepts either no arguments, or an object
|
5427
|
+
containing values to initialize the newly instantiated object with.
|
5428
|
+
|
5429
|
+
```javascript
|
5430
|
+
App.Person = Ember.Object.extend({
|
5431
|
+
helloWorld: function() {
|
5432
|
+
alert("Hi, my name is " + this.get('name'));
|
5433
|
+
}
|
5434
|
+
});
|
5435
|
+
|
5436
|
+
var tom = App.Person.create({
|
5437
|
+
name: 'Tom Dale'
|
5438
|
+
});
|
5439
|
+
|
5440
|
+
tom.helloWorld(); // alerts "Hi, my name is Tom Dale".
|
5441
|
+
```
|
5442
|
+
|
5443
|
+
`create` will call the `init` function if defined during
|
5444
|
+
`Ember.AnyObject.extend`
|
5445
|
+
|
5446
|
+
If no arguments are passed to `create`, it will not set values to the new
|
5447
|
+
instance during initialization:
|
5448
|
+
|
5449
|
+
```javascript
|
5450
|
+
var noName = App.Person.create();
|
5451
|
+
noName.helloWorld(); // alerts undefined
|
5452
|
+
```
|
5453
|
+
|
5454
|
+
NOTE: For performance reasons, you cannot declare methods or computed
|
5455
|
+
properties during `create`. You should instead declare methods and computed
|
5456
|
+
properties when using `extend`.
|
5457
|
+
|
5333
5458
|
@method create
|
5334
5459
|
@static
|
5335
5460
|
@param arguments*
|
@@ -5845,35 +5970,35 @@ define("rsvp",
|
|
5845
5970
|
}
|
5846
5971
|
|
5847
5972
|
function all(promises) {
|
5848
|
-
|
5849
|
-
|
5850
|
-
|
5973
|
+
var i, results = [];
|
5974
|
+
var allPromise = new Promise();
|
5975
|
+
var remaining = promises.length;
|
5851
5976
|
|
5852
5977
|
if (remaining === 0) {
|
5853
5978
|
allPromise.resolve([]);
|
5854
5979
|
}
|
5855
5980
|
|
5856
|
-
|
5857
|
-
|
5858
|
-
|
5859
|
-
|
5860
|
-
|
5981
|
+
var resolver = function(index) {
|
5982
|
+
return function(value) {
|
5983
|
+
resolve(index, value);
|
5984
|
+
};
|
5985
|
+
};
|
5861
5986
|
|
5862
|
-
|
5863
|
-
|
5864
|
-
|
5865
|
-
|
5866
|
-
|
5867
|
-
|
5987
|
+
var resolve = function(index, value) {
|
5988
|
+
results[index] = value;
|
5989
|
+
if (--remaining === 0) {
|
5990
|
+
allPromise.resolve(results);
|
5991
|
+
}
|
5992
|
+
};
|
5868
5993
|
|
5869
|
-
|
5870
|
-
|
5871
|
-
|
5994
|
+
var reject = function(error) {
|
5995
|
+
allPromise.reject(error);
|
5996
|
+
};
|
5872
5997
|
|
5873
|
-
|
5874
|
-
|
5875
|
-
|
5876
|
-
|
5998
|
+
for (i = 0; i < remaining; i++) {
|
5999
|
+
promises[i].then(resolver(i), reject);
|
6000
|
+
}
|
6001
|
+
return allPromise;
|
5877
6002
|
}
|
5878
6003
|
|
5879
6004
|
EventTarget.mixin(Promise.prototype);
|
@@ -6249,57 +6374,6 @@ Ember.typeOf = function(item) {
|
|
6249
6374
|
return ret;
|
6250
6375
|
};
|
6251
6376
|
|
6252
|
-
/**
|
6253
|
-
Returns true if the passed value is null or undefined. This avoids errors
|
6254
|
-
from JSLint complaining about use of ==, which can be technically
|
6255
|
-
confusing.
|
6256
|
-
|
6257
|
-
```javascript
|
6258
|
-
Ember.isNone(); // true
|
6259
|
-
Ember.isNone(null); // true
|
6260
|
-
Ember.isNone(undefined); // true
|
6261
|
-
Ember.isNone(''); // false
|
6262
|
-
Ember.isNone([]); // false
|
6263
|
-
Ember.isNone(function(){}); // false
|
6264
|
-
```
|
6265
|
-
|
6266
|
-
@method isNone
|
6267
|
-
@for Ember
|
6268
|
-
@param {Object} obj Value to test
|
6269
|
-
@return {Boolean}
|
6270
|
-
*/
|
6271
|
-
Ember.isNone = function(obj) {
|
6272
|
-
return obj === null || obj === undefined;
|
6273
|
-
};
|
6274
|
-
Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.", Ember.isNone);
|
6275
|
-
|
6276
|
-
/**
|
6277
|
-
Verifies that a value is `null` or an empty string, empty array,
|
6278
|
-
or empty function.
|
6279
|
-
|
6280
|
-
Constrains the rules on `Ember.isNone` by returning false for empty
|
6281
|
-
string and empty arrays.
|
6282
|
-
|
6283
|
-
```javascript
|
6284
|
-
Ember.isEmpty(); // true
|
6285
|
-
Ember.isEmpty(null); // true
|
6286
|
-
Ember.isEmpty(undefined); // true
|
6287
|
-
Ember.isEmpty(''); // true
|
6288
|
-
Ember.isEmpty([]); // true
|
6289
|
-
Ember.isEmpty('Adam Hawkins'); // false
|
6290
|
-
Ember.isEmpty([0,1,2]); // false
|
6291
|
-
```
|
6292
|
-
|
6293
|
-
@method isEmpty
|
6294
|
-
@for Ember
|
6295
|
-
@param {Object} obj Value to test
|
6296
|
-
@return {Boolean}
|
6297
|
-
*/
|
6298
|
-
Ember.isEmpty = function(obj) {
|
6299
|
-
return obj === null || obj === undefined || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
|
6300
|
-
};
|
6301
|
-
Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty) ;
|
6302
|
-
|
6303
6377
|
/**
|
6304
6378
|
This will compare two javascript values of possibly different types.
|
6305
6379
|
It will tell you which one is greater than the other by returning:
|
@@ -6592,6 +6666,20 @@ Ember.Error.prototype = Ember.create(Error.prototype);
|
|
6592
6666
|
|
6593
6667
|
|
6594
6668
|
|
6669
|
+
(function() {
|
6670
|
+
/**
|
6671
|
+
Expose RSVP implementation
|
6672
|
+
|
6673
|
+
@class RSVP
|
6674
|
+
@namespace Ember
|
6675
|
+
@constructor
|
6676
|
+
*/
|
6677
|
+
Ember.RSVP = requireModule('rsvp');
|
6678
|
+
|
6679
|
+
})();
|
6680
|
+
|
6681
|
+
|
6682
|
+
|
6595
6683
|
(function() {
|
6596
6684
|
/**
|
6597
6685
|
@module ember
|
@@ -6740,10 +6828,11 @@ Ember.String = {
|
|
6740
6828
|
*/
|
6741
6829
|
dasherize: function(str) {
|
6742
6830
|
var cache = STRING_DASHERIZE_CACHE,
|
6743
|
-
|
6831
|
+
hit = cache.hasOwnProperty(str),
|
6832
|
+
ret;
|
6744
6833
|
|
6745
|
-
if (
|
6746
|
-
return
|
6834
|
+
if (hit) {
|
6835
|
+
return cache[str];
|
6747
6836
|
} else {
|
6748
6837
|
ret = Ember.String.decamelize(str).replace(STRING_DASHERIZE_REGEXP,'-');
|
6749
6838
|
cache[str] = ret;
|
@@ -6753,7 +6842,7 @@ Ember.String = {
|
|
6753
6842
|
},
|
6754
6843
|
|
6755
6844
|
/**
|
6756
|
-
Returns the
|
6845
|
+
Returns the lowerCamelCase form of a string.
|
6757
6846
|
|
6758
6847
|
```javascript
|
6759
6848
|
'innerHTML'.camelize(); // 'innerHTML'
|
@@ -6824,10 +6913,10 @@ Ember.String = {
|
|
6824
6913
|
/**
|
6825
6914
|
Returns the Capitalized form of a string
|
6826
6915
|
|
6827
|
-
'innerHTML'.capitalize()
|
6828
|
-
'action_name'.capitalize()
|
6829
|
-
'css-class-name'.capitalize()
|
6830
|
-
'my favorite items'.capitalize()
|
6916
|
+
'innerHTML'.capitalize() // 'InnerHTML'
|
6917
|
+
'action_name'.capitalize() // 'Action_name'
|
6918
|
+
'css-class-name'.capitalize() // 'Css-class-name'
|
6919
|
+
'my favorite items'.capitalize() // 'My favorite items'
|
6831
6920
|
|
6832
6921
|
@method capitalize
|
6833
6922
|
@param {String} str
|
@@ -7171,8 +7260,7 @@ function iter(key, value) {
|
|
7171
7260
|
@extends Ember.Mixin
|
7172
7261
|
@since Ember 0.9
|
7173
7262
|
*/
|
7174
|
-
Ember.Enumerable = Ember.Mixin.create(
|
7175
|
-
/** @scope Ember.Enumerable.prototype */ {
|
7263
|
+
Ember.Enumerable = Ember.Mixin.create({
|
7176
7264
|
|
7177
7265
|
// compatibility
|
7178
7266
|
isEnumerable: true,
|
@@ -7205,7 +7293,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7205
7293
|
|
7206
7294
|
@method nextObject
|
7207
7295
|
@param {Number} index the current index of the iteration
|
7208
|
-
@param {Object} previousObject the value returned by the last call to
|
7296
|
+
@param {Object} previousObject the value returned by the last call to
|
7209
7297
|
`nextObject`.
|
7210
7298
|
@param {Object} context a context object you can use to maintain state.
|
7211
7299
|
@return {Object} the next object in the iteration or undefined
|
@@ -7224,10 +7312,10 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7224
7312
|
|
7225
7313
|
```javascript
|
7226
7314
|
var arr = ["a", "b", "c"];
|
7227
|
-
arr.firstObject
|
7315
|
+
arr.get('firstObject'); // "a"
|
7228
7316
|
|
7229
7317
|
var arr = [];
|
7230
|
-
arr.firstObject
|
7318
|
+
arr.get('firstObject'); // undefined
|
7231
7319
|
```
|
7232
7320
|
|
7233
7321
|
@property firstObject
|
@@ -7250,10 +7338,10 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7250
7338
|
|
7251
7339
|
```javascript
|
7252
7340
|
var arr = ["a", "b", "c"];
|
7253
|
-
arr.lastObject
|
7341
|
+
arr.get('lastObject'); // "c"
|
7254
7342
|
|
7255
7343
|
var arr = [];
|
7256
|
-
arr.lastObject
|
7344
|
+
arr.get('lastObject'); // undefined
|
7257
7345
|
```
|
7258
7346
|
|
7259
7347
|
@property lastObject
|
@@ -7386,7 +7474,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7386
7474
|
@return {Array} The mapped array.
|
7387
7475
|
*/
|
7388
7476
|
map: function(callback, target) {
|
7389
|
-
var ret = [];
|
7477
|
+
var ret = Ember.A([]);
|
7390
7478
|
this.forEach(function(x, idx, i) {
|
7391
7479
|
ret[idx] = callback.call(target, x, idx,i);
|
7392
7480
|
});
|
@@ -7436,7 +7524,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7436
7524
|
@return {Array} A filtered array.
|
7437
7525
|
*/
|
7438
7526
|
filter: function(callback, target) {
|
7439
|
-
var ret = [];
|
7527
|
+
var ret = Ember.A([]);
|
7440
7528
|
this.forEach(function(x, idx, i) {
|
7441
7529
|
if (callback.call(target, x, idx, i)) ret.push(x);
|
7442
7530
|
});
|
@@ -7725,7 +7813,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7725
7813
|
@return {Array} return values from calling invoke.
|
7726
7814
|
*/
|
7727
7815
|
invoke: function(methodName) {
|
7728
|
-
var args, ret = [];
|
7816
|
+
var args, ret = Ember.A([]);
|
7729
7817
|
if (arguments.length>1) args = a_slice.call(arguments, 1);
|
7730
7818
|
|
7731
7819
|
this.forEach(function(x, idx) {
|
@@ -7746,7 +7834,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7746
7834
|
@return {Array} the enumerable as an array.
|
7747
7835
|
*/
|
7748
7836
|
toArray: function() {
|
7749
|
-
var ret = [];
|
7837
|
+
var ret = Ember.A([]);
|
7750
7838
|
this.forEach(function(o, idx) { ret[idx] = o; });
|
7751
7839
|
return ret ;
|
7752
7840
|
},
|
@@ -7780,7 +7868,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7780
7868
|
*/
|
7781
7869
|
without: function(value) {
|
7782
7870
|
if (!this.contains(value)) return this; // nothing to do
|
7783
|
-
var ret = []
|
7871
|
+
var ret = Ember.A([]);
|
7784
7872
|
this.forEach(function(k) {
|
7785
7873
|
if (k !== value) ret[ret.length] = k;
|
7786
7874
|
}) ;
|
@@ -7800,7 +7888,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7800
7888
|
@return {Ember.Enumerable}
|
7801
7889
|
*/
|
7802
7890
|
uniq: function() {
|
7803
|
-
var ret = [];
|
7891
|
+
var ret = Ember.A([]);
|
7804
7892
|
this.forEach(function(k){
|
7805
7893
|
if (a_indexOf(ret, k)<0) ret.push(k);
|
7806
7894
|
});
|
@@ -7832,7 +7920,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7832
7920
|
|
7833
7921
|
@method addEnumerableObserver
|
7834
7922
|
@param {Object} target
|
7835
|
-
@param {Hash} opts
|
7923
|
+
@param {Hash} [opts]
|
7836
7924
|
*/
|
7837
7925
|
addEnumerableObserver: function(target, opts) {
|
7838
7926
|
var willChange = (opts && opts.willChange) || 'enumerableWillChange',
|
@@ -7930,7 +8018,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7930
8018
|
@chainable
|
7931
8019
|
*/
|
7932
8020
|
enumerableContentDidChange: function(removing, adding) {
|
7933
|
-
var
|
8021
|
+
var removeCnt, addCnt, hasDelta;
|
7934
8022
|
|
7935
8023
|
if ('number' === typeof removing) removeCnt = removing;
|
7936
8024
|
else if (removing) removeCnt = get(removing, 'length');
|
@@ -7968,7 +8056,7 @@ Ember.Enumerable = Ember.Mixin.create(
|
|
7968
8056
|
// HELPERS
|
7969
8057
|
//
|
7970
8058
|
|
7971
|
-
var get = Ember.get, set = Ember.set,
|
8059
|
+
var get = Ember.get, set = Ember.set, map = Ember.EnumerableUtils.map, cacheFor = Ember.cacheFor;
|
7972
8060
|
|
7973
8061
|
function none(obj) { return obj===null || obj===undefined; }
|
7974
8062
|
|
@@ -8110,15 +8198,19 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8110
8198
|
```
|
8111
8199
|
|
8112
8200
|
@method slice
|
8113
|
-
@param
|
8114
|
-
@param
|
8201
|
+
@param {Integer} beginIndex (Optional) index to begin slicing from.
|
8202
|
+
@param {Integer} endIndex (Optional) index to end the slice at.
|
8115
8203
|
@return {Array} New array with specified slice
|
8116
8204
|
*/
|
8117
8205
|
slice: function(beginIndex, endIndex) {
|
8118
|
-
var ret = [];
|
8206
|
+
var ret = Ember.A([]);
|
8119
8207
|
var length = get(this, 'length') ;
|
8120
8208
|
if (none(beginIndex)) beginIndex = 0 ;
|
8121
8209
|
if (none(endIndex) || (endIndex > length)) endIndex = length ;
|
8210
|
+
|
8211
|
+
if (beginIndex < 0) beginIndex = length + beginIndex;
|
8212
|
+
if (endIndex < 0) endIndex = length + endIndex;
|
8213
|
+
|
8122
8214
|
while(beginIndex < endIndex) {
|
8123
8215
|
ret[ret.length] = this.objectAt(beginIndex++) ;
|
8124
8216
|
}
|
@@ -8272,9 +8364,9 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8272
8364
|
|
8273
8365
|
@method arrayContentWillChange
|
8274
8366
|
@param {Number} startIdx The starting index in the array that will change.
|
8275
|
-
@param {Number} removeAmt The number of items that will be removed. If you
|
8367
|
+
@param {Number} removeAmt The number of items that will be removed. If you
|
8276
8368
|
pass `null` assumes 0
|
8277
|
-
@param {Number} addAmt The number of items that will be added If you
|
8369
|
+
@param {Number} addAmt The number of items that will be added If you
|
8278
8370
|
pass `null` assumes 0.
|
8279
8371
|
@return {Ember.Array} receiver
|
8280
8372
|
*/
|
@@ -8635,8 +8727,7 @@ var forEach = Ember.EnumerableUtils.forEach;
|
|
8635
8727
|
@extends Ember.Mixin
|
8636
8728
|
@uses Ember.Enumerable
|
8637
8729
|
*/
|
8638
|
-
Ember.MutableEnumerable = Ember.Mixin.create(Ember.Enumerable,
|
8639
|
-
/** @scope Ember.MutableEnumerable.prototype */ {
|
8730
|
+
Ember.MutableEnumerable = Ember.Mixin.create(Ember.Enumerable, {
|
8640
8731
|
|
8641
8732
|
/**
|
8642
8733
|
__Required.__ You must implement this method to apply this mixin.
|
@@ -8721,7 +8812,7 @@ var EMPTY = [];
|
|
8721
8812
|
// HELPERS
|
8722
8813
|
//
|
8723
8814
|
|
8724
|
-
var get = Ember.get, set = Ember.set
|
8815
|
+
var get = Ember.get, set = Ember.set;
|
8725
8816
|
|
8726
8817
|
/**
|
8727
8818
|
This mixin defines the API for modifying array-like objects. These methods
|
@@ -8748,11 +8839,11 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,
|
|
8748
8839
|
passed array. You should also call `this.enumerableContentDidChange()`
|
8749
8840
|
|
8750
8841
|
@method replace
|
8751
|
-
@param {Number} idx Starting index in the array to replace. If
|
8842
|
+
@param {Number} idx Starting index in the array to replace. If
|
8752
8843
|
idx >= length, then append to the end of the array.
|
8753
|
-
@param {Number} amt Number of elements that should be removed from
|
8844
|
+
@param {Number} amt Number of elements that should be removed from
|
8754
8845
|
the array, starting at *idx*.
|
8755
|
-
@param {Array} objects An array of zero or more objects that should be
|
8846
|
+
@param {Array} objects An array of zero or more objects that should be
|
8756
8847
|
inserted into the array at *idx*
|
8757
8848
|
*/
|
8758
8849
|
replace: Ember.required(),
|
@@ -9017,7 +9108,7 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,
|
|
9017
9108
|
@submodule ember-runtime
|
9018
9109
|
*/
|
9019
9110
|
|
9020
|
-
var get = Ember.get, set = Ember.set
|
9111
|
+
var get = Ember.get, set = Ember.set;
|
9021
9112
|
|
9022
9113
|
/**
|
9023
9114
|
## Overview
|
@@ -9615,6 +9706,16 @@ Ember.TargetActionSupport = Ember.Mixin.create({
|
|
9615
9706
|
// outputs: 'Our person has greeted'
|
9616
9707
|
```
|
9617
9708
|
|
9709
|
+
You can also chain multiple event subscriptions:
|
9710
|
+
|
9711
|
+
```javascript
|
9712
|
+
person.on('greet', function() {
|
9713
|
+
console.log('Our person has greeted');
|
9714
|
+
}).one('greet', function() {
|
9715
|
+
console.log('Offer one-time special');
|
9716
|
+
}).off('event', this, forgetThis);
|
9717
|
+
```
|
9718
|
+
|
9618
9719
|
@class Evented
|
9619
9720
|
@namespace Ember
|
9620
9721
|
@extends Ember.Mixin
|
@@ -9642,6 +9743,7 @@ Ember.Evented = Ember.Mixin.create({
|
|
9642
9743
|
*/
|
9643
9744
|
on: function(name, target, method) {
|
9644
9745
|
Ember.addListener(this, name, target, method);
|
9746
|
+
return this;
|
9645
9747
|
},
|
9646
9748
|
|
9647
9749
|
/**
|
@@ -9665,6 +9767,7 @@ Ember.Evented = Ember.Mixin.create({
|
|
9665
9767
|
}
|
9666
9768
|
|
9667
9769
|
Ember.addListener(this, name, target, method, true);
|
9770
|
+
return this;
|
9668
9771
|
},
|
9669
9772
|
|
9670
9773
|
/**
|
@@ -9708,6 +9811,7 @@ Ember.Evented = Ember.Mixin.create({
|
|
9708
9811
|
*/
|
9709
9812
|
off: function(name, target, method) {
|
9710
9813
|
Ember.removeListener(this, name, target, method);
|
9814
|
+
return this;
|
9711
9815
|
},
|
9712
9816
|
|
9713
9817
|
/**
|
@@ -9738,8 +9842,7 @@ RSVP.async = function(callback, binding) {
|
|
9738
9842
|
@submodule ember-runtime
|
9739
9843
|
*/
|
9740
9844
|
|
9741
|
-
var get = Ember.get
|
9742
|
-
slice = Array.prototype.slice;
|
9845
|
+
var get = Ember.get;
|
9743
9846
|
|
9744
9847
|
/**
|
9745
9848
|
@class Deferred
|
@@ -9815,7 +9918,6 @@ Ember.Container.set = Ember.set;
|
|
9815
9918
|
var set = Ember.set, get = Ember.get,
|
9816
9919
|
o_create = Ember.create,
|
9817
9920
|
o_defineProperty = Ember.platform.defineProperty,
|
9818
|
-
a_slice = Array.prototype.slice,
|
9819
9921
|
GUID_KEY = Ember.GUID_KEY,
|
9820
9922
|
guidFor = Ember.guidFor,
|
9821
9923
|
generateGuid = Ember.generateGuid,
|
@@ -9962,6 +10064,37 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
9962
10064
|
|
9963
10065
|
isInstance: true,
|
9964
10066
|
|
10067
|
+
/**
|
10068
|
+
An overridable method called when objects are instantiated. By default,
|
10069
|
+
does nothing unless it is overridden during class definition.
|
10070
|
+
|
10071
|
+
Example:
|
10072
|
+
|
10073
|
+
```javascript
|
10074
|
+
App.Person = Ember.Object.extend({
|
10075
|
+
init: function() {
|
10076
|
+
this._super();
|
10077
|
+
alert('Name is ' + this.get('name'));
|
10078
|
+
}
|
10079
|
+
});
|
10080
|
+
|
10081
|
+
var steve = App.Person.create({
|
10082
|
+
name: "Steve"
|
10083
|
+
});
|
10084
|
+
|
10085
|
+
// alerts 'Name is Steve'.
|
10086
|
+
```
|
10087
|
+
|
10088
|
+
NOTE: If you do override `init` for a framework class like `Ember.View` or
|
10089
|
+
`Ember.ArrayController`, be sure to call `this._super()` in your
|
10090
|
+
`init` declaration! If you don't, Ember may not have an opportunity to
|
10091
|
+
do important setup work, and you'll see strange behavior in your
|
10092
|
+
application.
|
10093
|
+
|
10094
|
+
```
|
10095
|
+
|
10096
|
+
@method init
|
10097
|
+
*/
|
9965
10098
|
init: function() {},
|
9966
10099
|
|
9967
10100
|
/**
|
@@ -10006,14 +10139,14 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10006
10139
|
view.get('classNames'); // ['ember-view', 'bar', 'foo', 'baz']
|
10007
10140
|
```
|
10008
10141
|
Adding a single property that is not an array will just add it in the array:
|
10009
|
-
|
10142
|
+
|
10010
10143
|
```javascript
|
10011
10144
|
var view = App.FooBarView.create({
|
10012
10145
|
classNames: 'baz'
|
10013
10146
|
})
|
10014
10147
|
view.get('classNames'); // ['ember-view', 'bar', 'foo', 'baz']
|
10015
10148
|
```
|
10016
|
-
|
10149
|
+
|
10017
10150
|
Using the `concatenatedProperties` property, we can tell to Ember that mix
|
10018
10151
|
the content of the properties.
|
10019
10152
|
|
@@ -10112,7 +10245,7 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10112
10245
|
}
|
10113
10246
|
});
|
10114
10247
|
teacher = App.Teacher.create()
|
10115
|
-
teacher.toString();
|
10248
|
+
teacher.toString(); //=> "<App.Teacher:ember1026:Tom Dale>"
|
10116
10249
|
|
10117
10250
|
@method toString
|
10118
10251
|
@return {String} string representation
|
@@ -10290,687 +10423,721 @@ Ember.CoreObject = CoreObject;
|
|
10290
10423
|
@submodule ember-runtime
|
10291
10424
|
*/
|
10292
10425
|
|
10293
|
-
var get = Ember.get, set = Ember.set, guidFor = Ember.guidFor, none = Ember.isNone;
|
10294
|
-
|
10295
10426
|
/**
|
10296
|
-
|
10427
|
+
`Ember.Object` is the main base class for all Ember objects. It is a subclass
|
10428
|
+
of `Ember.CoreObject` with the `Ember.Observable` mixin applied. For details,
|
10429
|
+
see the documentation for each of these.
|
10297
10430
|
|
10298
|
-
|
10299
|
-
|
10300
|
-
|
10301
|
-
|
10431
|
+
@class Object
|
10432
|
+
@namespace Ember
|
10433
|
+
@extends Ember.CoreObject
|
10434
|
+
@uses Ember.Observable
|
10435
|
+
*/
|
10436
|
+
Ember.Object = Ember.CoreObject.extend(Ember.Observable);
|
10437
|
+
Ember.Object.toString = function() { return "Ember.Object"; };
|
10302
10438
|
|
10303
|
-
|
10304
|
-
on any enumerable object including both Sets and Arrays.
|
10439
|
+
})();
|
10305
10440
|
|
10306
|
-
## Creating a Set
|
10307
10441
|
|
10308
|
-
You can create a set like you would most objects using
|
10309
|
-
`new Ember.Set()`. Most new sets you create will be empty, but you can
|
10310
|
-
also initialize the set with some content by passing an array or other
|
10311
|
-
enumerable of objects to the constructor.
|
10312
10442
|
|
10313
|
-
|
10314
|
-
|
10443
|
+
(function() {
|
10444
|
+
/**
|
10445
|
+
@module ember
|
10446
|
+
@submodule ember-runtime
|
10447
|
+
*/
|
10315
10448
|
|
10316
|
-
|
10317
|
-
// creates a new empty set
|
10318
|
-
var foundNames = new Ember.Set();
|
10449
|
+
var get = Ember.get, indexOf = Ember.ArrayPolyfills.indexOf;
|
10319
10450
|
|
10320
|
-
|
10321
|
-
|
10451
|
+
/**
|
10452
|
+
A Namespace is an object usually used to contain other objects or methods
|
10453
|
+
such as an application or framework. Create a namespace anytime you want
|
10454
|
+
to define one of these new containers.
|
10322
10455
|
|
10323
|
-
|
10324
|
-
var namesCopy = new Ember.Set(names);
|
10456
|
+
# Example Usage
|
10325
10457
|
|
10326
|
-
|
10327
|
-
|
10458
|
+
```javascript
|
10459
|
+
MyFramework = Ember.Namespace.create({
|
10460
|
+
VERSION: '1.0.0'
|
10461
|
+
});
|
10328
10462
|
```
|
10329
10463
|
|
10330
|
-
|
10331
|
-
|
10332
|
-
|
10333
|
-
|
10334
|
-
|
10464
|
+
@class Namespace
|
10465
|
+
@namespace Ember
|
10466
|
+
@extends Ember.Object
|
10467
|
+
*/
|
10468
|
+
var Namespace = Ember.Namespace = Ember.Object.extend({
|
10469
|
+
isNamespace: true,
|
10335
10470
|
|
10336
|
-
|
10337
|
-
|
10338
|
-
|
10339
|
-
|
10340
|
-
you add the object to the set again.
|
10471
|
+
init: function() {
|
10472
|
+
Ember.Namespace.NAMESPACES.push(this);
|
10473
|
+
Ember.Namespace.PROCESSED = false;
|
10474
|
+
},
|
10341
10475
|
|
10342
|
-
|
10343
|
-
|
10476
|
+
toString: function() {
|
10477
|
+
var name = get(this, 'name');
|
10478
|
+
if (name) { return name; }
|
10344
10479
|
|
10345
|
-
|
10346
|
-
|
10347
|
-
|
10348
|
-
queue when you don't care which order the jobs are executed in.
|
10480
|
+
findNamespaces();
|
10481
|
+
return this[Ember.GUID_KEY+'_name'];
|
10482
|
+
},
|
10349
10483
|
|
10350
|
-
|
10484
|
+
nameClasses: function() {
|
10485
|
+
processNamespace([this.toString()], this, {});
|
10486
|
+
},
|
10351
10487
|
|
10352
|
-
|
10353
|
-
|
10488
|
+
destroy: function() {
|
10489
|
+
var namespaces = Ember.Namespace.NAMESPACES;
|
10490
|
+
Ember.lookup[this.toString()] = undefined;
|
10491
|
+
namespaces.splice(indexOf.call(namespaces, this), 1);
|
10492
|
+
this._super();
|
10493
|
+
}
|
10494
|
+
});
|
10354
10495
|
|
10355
|
-
|
10496
|
+
Namespace.reopenClass({
|
10497
|
+
NAMESPACES: [Ember],
|
10498
|
+
NAMESPACES_BY_ID: {},
|
10499
|
+
PROCESSED: false,
|
10500
|
+
processAll: processAllNamespaces,
|
10501
|
+
byName: function(name) {
|
10502
|
+
if (!Ember.BOOTED) {
|
10503
|
+
processAllNamespaces();
|
10504
|
+
}
|
10356
10505
|
|
10357
|
-
|
10358
|
-
|
10359
|
-
|
10360
|
-
removed from the set. See `Ember.Enumerable` for more information on
|
10361
|
-
enumerables.
|
10506
|
+
return NAMESPACES_BY_ID[name];
|
10507
|
+
}
|
10508
|
+
});
|
10362
10509
|
|
10363
|
-
|
10364
|
-
it is very inefficient to re-filter all of the items each time the set
|
10365
|
-
changes. It would be better if you could just adjust the filtered set based
|
10366
|
-
on what was changed on the original set. The same issue applies to merging
|
10367
|
-
sets, as well.
|
10510
|
+
var NAMESPACES_BY_ID = Namespace.NAMESPACES_BY_ID;
|
10368
10511
|
|
10369
|
-
|
10512
|
+
var hasOwnProp = ({}).hasOwnProperty,
|
10513
|
+
guidFor = Ember.guidFor;
|
10370
10514
|
|
10371
|
-
|
10372
|
-
|
10373
|
-
The most useful ones will be `Ember.Enumerable` and
|
10374
|
-
`Ember.MutableEnumerable` which implement most of the common iterator
|
10375
|
-
methods you are used to on Array.
|
10515
|
+
function processNamespace(paths, root, seen) {
|
10516
|
+
var idx = paths.length;
|
10376
10517
|
|
10377
|
-
|
10378
|
-
APIs on `Ember.Set` as well. Once a set is frozen it can no longer be
|
10379
|
-
modified. The benefit of this is that when you call `frozenCopy()` on it,
|
10380
|
-
Ember will avoid making copies of the set. This allows you to write
|
10381
|
-
code that can know with certainty when the underlying set data will or
|
10382
|
-
will not be modified.
|
10518
|
+
NAMESPACES_BY_ID[paths.join('.')] = root;
|
10383
10519
|
|
10384
|
-
|
10385
|
-
|
10386
|
-
|
10387
|
-
|
10388
|
-
@uses Ember.Copyable
|
10389
|
-
@uses Ember.Freezable
|
10390
|
-
@since Ember 0.9
|
10391
|
-
*/
|
10392
|
-
Ember.Set = Ember.CoreObject.extend(Ember.MutableEnumerable, Ember.Copyable, Ember.Freezable,
|
10393
|
-
/** @scope Ember.Set.prototype */ {
|
10520
|
+
// Loop over all of the keys in the namespace, looking for classes
|
10521
|
+
for(var key in root) {
|
10522
|
+
if (!hasOwnProp.call(root, key)) { continue; }
|
10523
|
+
var obj = root[key];
|
10394
10524
|
|
10395
|
-
|
10396
|
-
|
10397
|
-
|
10525
|
+
// If we are processing the `Ember` namespace, for example, the
|
10526
|
+
// `paths` will start with `["Ember"]`. Every iteration through
|
10527
|
+
// the loop will update the **second** element of this list with
|
10528
|
+
// the key, so processing `Ember.View` will make the Array
|
10529
|
+
// `['Ember', 'View']`.
|
10530
|
+
paths[idx] = key;
|
10398
10531
|
|
10399
|
-
|
10400
|
-
|
10532
|
+
// If we have found an unprocessed class
|
10533
|
+
if (obj && obj.toString === classToString) {
|
10534
|
+
// Replace the class' `toString` with the dot-separated path
|
10535
|
+
// and set its `NAME_KEY`
|
10536
|
+
obj.toString = makeToString(paths.join('.'));
|
10537
|
+
obj[NAME_KEY] = paths.join('.');
|
10401
10538
|
|
10402
|
-
|
10403
|
-
|
10404
|
-
|
10405
|
-
|
10406
|
-
|
10539
|
+
// Support nested namespaces
|
10540
|
+
} else if (obj && obj.isNamespace) {
|
10541
|
+
// Skip aliased namespaces
|
10542
|
+
if (seen[guidFor(obj)]) { continue; }
|
10543
|
+
seen[guidFor(obj)] = true;
|
10407
10544
|
|
10408
|
-
|
10409
|
-
|
10410
|
-
|
10545
|
+
// Process the child namespace
|
10546
|
+
processNamespace(paths, obj, seen);
|
10547
|
+
}
|
10548
|
+
}
|
10411
10549
|
|
10412
|
-
|
10413
|
-
|
10414
|
-
colors.length; // 3
|
10415
|
-
colors.clear();
|
10416
|
-
colors.length; // 0
|
10417
|
-
```
|
10550
|
+
paths.length = idx; // cut out last item
|
10551
|
+
}
|
10418
10552
|
|
10419
|
-
|
10420
|
-
|
10421
|
-
*/
|
10422
|
-
clear: function() {
|
10423
|
-
if (this.isFrozen) { throw new Error(Ember.FROZEN_ERROR); }
|
10553
|
+
function findNamespaces() {
|
10554
|
+
var Namespace = Ember.Namespace, lookup = Ember.lookup, obj, isNamespace;
|
10424
10555
|
|
10425
|
-
|
10426
|
-
if (len === 0) { return this; }
|
10556
|
+
if (Namespace.PROCESSED) { return; }
|
10427
10557
|
|
10428
|
-
|
10558
|
+
for (var prop in lookup) {
|
10559
|
+
// These don't raise exceptions but can cause warnings
|
10560
|
+
if (prop === "parent" || prop === "top" || prop === "frameElement") { continue; }
|
10429
10561
|
|
10430
|
-
|
10431
|
-
|
10432
|
-
|
10562
|
+
// get(window.globalStorage, 'isNamespace') would try to read the storage for domain isNamespace and cause exception in Firefox.
|
10563
|
+
// globalStorage is a storage obsoleted by the WhatWG storage specification. See https://developer.mozilla.org/en/DOM/Storage#globalStorage
|
10564
|
+
if (prop === "globalStorage" && lookup.StorageList && lookup.globalStorage instanceof lookup.StorageList) { continue; }
|
10565
|
+
// Unfortunately, some versions of IE don't support window.hasOwnProperty
|
10566
|
+
if (lookup.hasOwnProperty && !lookup.hasOwnProperty(prop)) { continue; }
|
10433
10567
|
|
10434
|
-
|
10435
|
-
|
10436
|
-
|
10437
|
-
|
10568
|
+
// At times we are not allowed to access certain properties for security reasons.
|
10569
|
+
// There are also times where even if we can access them, we are not allowed to access their properties.
|
10570
|
+
try {
|
10571
|
+
obj = Ember.lookup[prop];
|
10572
|
+
isNamespace = obj && obj.isNamespace;
|
10573
|
+
} catch (e) {
|
10574
|
+
continue;
|
10438
10575
|
}
|
10439
10576
|
|
10440
|
-
|
10577
|
+
if (isNamespace) {
|
10441
10578
|
|
10442
|
-
|
10443
|
-
|
10444
|
-
|
10579
|
+
obj[NAME_KEY] = prop;
|
10580
|
+
}
|
10581
|
+
}
|
10582
|
+
}
|
10445
10583
|
|
10446
|
-
|
10447
|
-
},
|
10584
|
+
var NAME_KEY = Ember.NAME_KEY = Ember.GUID_KEY + '_name';
|
10448
10585
|
|
10449
|
-
|
10450
|
-
|
10451
|
-
|
10586
|
+
function superClassString(mixin) {
|
10587
|
+
var superclass = mixin.superclass;
|
10588
|
+
if (superclass) {
|
10589
|
+
if (superclass[NAME_KEY]) { return superclass[NAME_KEY]; }
|
10590
|
+
else { return superClassString(superclass); }
|
10591
|
+
} else {
|
10592
|
+
return;
|
10593
|
+
}
|
10594
|
+
}
|
10452
10595
|
|
10453
|
-
|
10454
|
-
|
10455
|
-
|
10596
|
+
function classToString() {
|
10597
|
+
if (!Ember.BOOTED && !this[NAME_KEY]) {
|
10598
|
+
processAllNamespaces();
|
10599
|
+
}
|
10456
10600
|
|
10457
|
-
|
10458
|
-
same_colors.isEqual(["purple", "brown"]); // false
|
10459
|
-
```
|
10601
|
+
var ret;
|
10460
10602
|
|
10461
|
-
|
10462
|
-
|
10463
|
-
|
10464
|
-
|
10465
|
-
|
10466
|
-
|
10467
|
-
|
10603
|
+
if (this[NAME_KEY]) {
|
10604
|
+
ret = this[NAME_KEY];
|
10605
|
+
} else {
|
10606
|
+
var str = superClassString(this);
|
10607
|
+
if (str) {
|
10608
|
+
ret = "(subclass of " + str + ")";
|
10609
|
+
} else {
|
10610
|
+
ret = "(unknown mixin)";
|
10611
|
+
}
|
10612
|
+
this.toString = makeToString(ret);
|
10613
|
+
}
|
10468
10614
|
|
10469
|
-
|
10470
|
-
|
10615
|
+
return ret;
|
10616
|
+
}
|
10471
10617
|
|
10472
|
-
|
10473
|
-
|
10474
|
-
|
10618
|
+
function processAllNamespaces() {
|
10619
|
+
var unprocessedNamespaces = !Namespace.PROCESSED,
|
10620
|
+
unprocessedMixins = Ember.anyUnprocessedMixins;
|
10475
10621
|
|
10476
|
-
|
10477
|
-
|
10622
|
+
if (unprocessedNamespaces) {
|
10623
|
+
findNamespaces();
|
10624
|
+
Namespace.PROCESSED = true;
|
10625
|
+
}
|
10478
10626
|
|
10479
|
-
|
10480
|
-
|
10481
|
-
|
10482
|
-
|
10627
|
+
if (unprocessedNamespaces || unprocessedMixins) {
|
10628
|
+
var namespaces = Namespace.NAMESPACES, namespace;
|
10629
|
+
for (var i=0, l=namespaces.length; i<l; i++) {
|
10630
|
+
namespace = namespaces[i];
|
10631
|
+
processNamespace([namespace.toString()], namespace, {});
|
10632
|
+
}
|
10483
10633
|
|
10484
|
-
|
10634
|
+
Ember.anyUnprocessedMixins = false;
|
10635
|
+
}
|
10636
|
+
}
|
10485
10637
|
|
10486
|
-
|
10487
|
-
|
10488
|
-
|
10489
|
-
colors.add("blue"); // ["blue"]
|
10490
|
-
colors.add("red"); // ["blue", "red"]
|
10491
|
-
colors.add(null); // ["blue", "red"]
|
10492
|
-
colors.add(undefined); // ["blue", "red"]
|
10493
|
-
```
|
10638
|
+
function makeToString(ret) {
|
10639
|
+
return function() { return ret; };
|
10640
|
+
}
|
10494
10641
|
|
10495
|
-
|
10496
|
-
@param {Object} obj The object to add.
|
10497
|
-
@return {Ember.Set} The set itself.
|
10498
|
-
*/
|
10499
|
-
add: Ember.aliasMethod('addObject'),
|
10642
|
+
Ember.Mixin.prototype.toString = classToString;
|
10500
10643
|
|
10501
|
-
|
10502
|
-
Removes the object from the set if it is found. If you pass a `null` value
|
10503
|
-
or an object that is already not in the set, this method will have no
|
10504
|
-
effect. This is an alias for `Ember.MutableEnumerable.removeObject()`.
|
10644
|
+
})();
|
10505
10645
|
|
10506
|
-
```javascript
|
10507
|
-
var colors = new Ember.Set(["red", "green", "blue"]);
|
10508
|
-
colors.remove("red"); // ["blue", "green"]
|
10509
|
-
colors.remove("purple"); // ["blue", "green"]
|
10510
|
-
colors.remove(null); // ["blue", "green"]
|
10511
|
-
```
|
10512
10646
|
|
10513
|
-
@method remove
|
10514
|
-
@param {Object} obj The object to remove
|
10515
|
-
@return {Ember.Set} The set itself.
|
10516
|
-
*/
|
10517
|
-
remove: Ember.aliasMethod('removeObject'),
|
10518
10647
|
|
10519
|
-
|
10520
|
-
|
10648
|
+
(function() {
|
10649
|
+
Ember.Application = Ember.Namespace.extend();
|
10521
10650
|
|
10522
|
-
|
10523
|
-
var colors = new Ember.Set(["green", "blue"]);
|
10524
|
-
colors.pop(); // "blue"
|
10525
|
-
colors.pop(); // "green"
|
10526
|
-
colors.pop(); // null
|
10527
|
-
```
|
10651
|
+
})();
|
10528
10652
|
|
10529
|
-
@method pop
|
10530
|
-
@return {Object} The removed object from the set or null.
|
10531
|
-
*/
|
10532
|
-
pop: function() {
|
10533
|
-
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
10534
|
-
var obj = this.length > 0 ? this[this.length-1] : null;
|
10535
|
-
this.remove(obj);
|
10536
|
-
return obj;
|
10537
|
-
},
|
10538
10653
|
|
10539
|
-
/**
|
10540
|
-
Inserts the given object on to the end of the set. It returns
|
10541
|
-
the set itself.
|
10542
10654
|
|
10543
|
-
|
10655
|
+
(function() {
|
10656
|
+
/**
|
10657
|
+
@module ember
|
10658
|
+
@submodule ember-runtime
|
10659
|
+
*/
|
10544
10660
|
|
10545
|
-
|
10546
|
-
|
10547
|
-
colors.push("red"); // ["red"]
|
10548
|
-
colors.push("green"); // ["red", "green"]
|
10549
|
-
colors.push("blue"); // ["red", "green", "blue"]
|
10550
|
-
```
|
10661
|
+
var OUT_OF_RANGE_EXCEPTION = "Index out of range";
|
10662
|
+
var EMPTY = [];
|
10551
10663
|
|
10552
|
-
|
10553
|
-
@return {Ember.Set} The set itself.
|
10554
|
-
*/
|
10555
|
-
push: Ember.aliasMethod('addObject'),
|
10664
|
+
var get = Ember.get, set = Ember.set;
|
10556
10665
|
|
10557
|
-
|
10558
|
-
|
10666
|
+
/**
|
10667
|
+
An ArrayProxy wraps any other object that implements `Ember.Array` and/or
|
10668
|
+
`Ember.MutableArray,` forwarding all requests. This makes it very useful for
|
10669
|
+
a number of binding use cases or other cases where being able to swap
|
10670
|
+
out the underlying array is useful.
|
10559
10671
|
|
10560
|
-
|
10672
|
+
A simple example of usage:
|
10561
10673
|
|
10562
|
-
|
10563
|
-
|
10564
|
-
|
10565
|
-
colors.shift(); // "green"
|
10566
|
-
colors.shift(); // null
|
10567
|
-
```
|
10674
|
+
```javascript
|
10675
|
+
var pets = ['dog', 'cat', 'fish'];
|
10676
|
+
var ap = Ember.ArrayProxy.create({ content: Ember.A(pets) });
|
10568
10677
|
|
10569
|
-
|
10570
|
-
|
10571
|
-
|
10572
|
-
|
10678
|
+
ap.get('firstObject'); // 'dog'
|
10679
|
+
ap.set('content', ['amoeba', 'paramecium']);
|
10680
|
+
ap.get('firstObject'); // 'amoeba'
|
10681
|
+
```
|
10573
10682
|
|
10574
|
-
|
10575
|
-
|
10576
|
-
|
10683
|
+
This class can also be useful as a layer to transform the contents of
|
10684
|
+
an array, as they are accessed. This can be done by overriding
|
10685
|
+
`objectAtContent`:
|
10577
10686
|
|
10578
|
-
|
10687
|
+
```javascript
|
10688
|
+
var pets = ['dog', 'cat', 'fish'];
|
10689
|
+
var ap = Ember.ArrayProxy.create({
|
10690
|
+
content: Ember.A(pets),
|
10691
|
+
objectAtContent: function(idx) {
|
10692
|
+
return this.get('content').objectAt(idx).toUpperCase();
|
10693
|
+
}
|
10694
|
+
});
|
10579
10695
|
|
10580
|
-
|
10581
|
-
|
10582
|
-
colors.unshift("red"); // ["red"]
|
10583
|
-
colors.unshift("green"); // ["red", "green"]
|
10584
|
-
colors.unshift("blue"); // ["red", "green", "blue"]
|
10585
|
-
```
|
10696
|
+
ap.get('firstObject'); // . 'DOG'
|
10697
|
+
```
|
10586
10698
|
|
10587
|
-
|
10588
|
-
|
10589
|
-
|
10590
|
-
|
10699
|
+
@class ArrayProxy
|
10700
|
+
@namespace Ember
|
10701
|
+
@extends Ember.Object
|
10702
|
+
@uses Ember.MutableArray
|
10703
|
+
*/
|
10704
|
+
Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray,
|
10705
|
+
/** @scope Ember.ArrayProxy.prototype */ {
|
10591
10706
|
|
10592
10707
|
/**
|
10593
|
-
|
10708
|
+
The content array. Must be an object that implements `Ember.Array` and/or
|
10709
|
+
`Ember.MutableArray.`
|
10594
10710
|
|
10595
|
-
|
10711
|
+
@property content
|
10712
|
+
@type Ember.Array
|
10713
|
+
*/
|
10714
|
+
content: null,
|
10596
10715
|
|
10597
|
-
|
10598
|
-
|
10599
|
-
|
10600
|
-
|
10716
|
+
/**
|
10717
|
+
The array that the proxy pretends to be. In the default `ArrayProxy`
|
10718
|
+
implementation, this and `content` are the same. Subclasses of `ArrayProxy`
|
10719
|
+
can override this property to provide things like sorting and filtering.
|
10601
10720
|
|
10602
|
-
|
10603
|
-
@param {Ember.Enumerable} objects the objects to add.
|
10604
|
-
@return {Ember.Set} The set itself.
|
10721
|
+
@property arrangedContent
|
10605
10722
|
*/
|
10606
|
-
|
10723
|
+
arrangedContent: Ember.computed.alias('content'),
|
10607
10724
|
|
10608
10725
|
/**
|
10609
|
-
|
10610
|
-
|
10611
|
-
|
10726
|
+
Should actually retrieve the object at the specified index from the
|
10727
|
+
content. You can override this method in subclasses to transform the
|
10728
|
+
content item to something new.
|
10612
10729
|
|
10613
|
-
|
10614
|
-
var colors = new Ember.Set(["red", "green", "blue"]);
|
10615
|
-
colors.removeEach(["red", "blue"]); // ["green"]
|
10616
|
-
```
|
10730
|
+
This method will only be called if content is non-`null`.
|
10617
10731
|
|
10618
|
-
@method
|
10619
|
-
@param {
|
10620
|
-
@return {
|
10732
|
+
@method objectAtContent
|
10733
|
+
@param {Number} idx The index to retrieve.
|
10734
|
+
@return {Object} the value or undefined if none found
|
10621
10735
|
*/
|
10622
|
-
|
10736
|
+
objectAtContent: function(idx) {
|
10737
|
+
return get(this, 'arrangedContent').objectAt(idx);
|
10738
|
+
},
|
10623
10739
|
|
10624
|
-
|
10625
|
-
|
10626
|
-
|
10740
|
+
/**
|
10741
|
+
Should actually replace the specified objects on the content array.
|
10742
|
+
You can override this method in subclasses to transform the content item
|
10743
|
+
into something new.
|
10627
10744
|
|
10628
|
-
|
10629
|
-
this._super();
|
10630
|
-
if (items) this.addObjects(items);
|
10631
|
-
},
|
10745
|
+
This method will only be called if content is non-`null`.
|
10632
10746
|
|
10633
|
-
|
10634
|
-
|
10635
|
-
|
10747
|
+
@method replaceContent
|
10748
|
+
@param {Number} idx The starting index
|
10749
|
+
@param {Number} amt The number of items to remove from the content.
|
10750
|
+
@param {Array} objects Optional array of objects to insert or null if no
|
10751
|
+
objects.
|
10752
|
+
@return {void}
|
10753
|
+
*/
|
10754
|
+
replaceContent: function(idx, amt, objects) {
|
10755
|
+
get(this, 'content').replace(idx, amt, objects);
|
10636
10756
|
},
|
10637
10757
|
|
10638
|
-
|
10639
|
-
|
10640
|
-
return this.length > 0 ? this[0] : undefined;
|
10641
|
-
}),
|
10758
|
+
/**
|
10759
|
+
@private
|
10642
10760
|
|
10643
|
-
|
10644
|
-
|
10645
|
-
return this.length > 0 ? this[this.length-1] : undefined;
|
10646
|
-
}),
|
10761
|
+
Invoked when the content property is about to change. Notifies observers that the
|
10762
|
+
entire array content will change.
|
10647
10763
|
|
10648
|
-
|
10649
|
-
|
10650
|
-
|
10651
|
-
|
10764
|
+
@method _contentWillChange
|
10765
|
+
*/
|
10766
|
+
_contentWillChange: Ember.beforeObserver(function() {
|
10767
|
+
this._teardownContent();
|
10768
|
+
}, 'content'),
|
10652
10769
|
|
10653
|
-
|
10654
|
-
|
10655
|
-
len = get(this, 'length'),
|
10656
|
-
added ;
|
10770
|
+
_teardownContent: function() {
|
10771
|
+
var content = get(this, 'content');
|
10657
10772
|
|
10658
|
-
if (
|
10773
|
+
if (content) {
|
10774
|
+
content.removeArrayObserver(this, {
|
10775
|
+
willChange: 'contentArrayWillChange',
|
10776
|
+
didChange: 'contentArrayDidChange'
|
10777
|
+
});
|
10778
|
+
}
|
10779
|
+
},
|
10659
10780
|
|
10660
|
-
|
10781
|
+
contentArrayWillChange: Ember.K,
|
10782
|
+
contentArrayDidChange: Ember.K,
|
10661
10783
|
|
10662
|
-
|
10663
|
-
|
10784
|
+
/**
|
10785
|
+
@private
|
10664
10786
|
|
10665
|
-
|
10666
|
-
|
10667
|
-
this[len] = obj;
|
10668
|
-
set(this, 'length', len+1);
|
10787
|
+
Invoked when the content property changes. Notifies observers that the
|
10788
|
+
entire array content has changed.
|
10669
10789
|
|
10670
|
-
|
10671
|
-
|
10790
|
+
@method _contentDidChange
|
10791
|
+
*/
|
10792
|
+
_contentDidChange: Ember.observer(function() {
|
10793
|
+
var content = get(this, 'content');
|
10672
10794
|
|
10673
|
-
|
10795
|
+
|
10796
|
+
this._setupContent();
|
10797
|
+
}, 'content'),
|
10798
|
+
|
10799
|
+
_setupContent: function() {
|
10800
|
+
var content = get(this, 'content');
|
10801
|
+
|
10802
|
+
if (content) {
|
10803
|
+
content.addArrayObserver(this, {
|
10804
|
+
willChange: 'contentArrayWillChange',
|
10805
|
+
didChange: 'contentArrayDidChange'
|
10806
|
+
});
|
10807
|
+
}
|
10674
10808
|
},
|
10675
10809
|
|
10676
|
-
|
10677
|
-
|
10678
|
-
|
10679
|
-
if (none(obj)) return this; // nothing to do
|
10810
|
+
_arrangedContentWillChange: Ember.beforeObserver(function() {
|
10811
|
+
var arrangedContent = get(this, 'arrangedContent'),
|
10812
|
+
len = arrangedContent ? get(arrangedContent, 'length') : 0;
|
10680
10813
|
|
10681
|
-
|
10682
|
-
|
10683
|
-
len = get(this, 'length'),
|
10684
|
-
isFirst = idx === 0,
|
10685
|
-
isLast = idx === len-1,
|
10686
|
-
last, removed;
|
10814
|
+
this.arrangedContentArrayWillChange(this, 0, len, undefined);
|
10815
|
+
this.arrangedContentWillChange(this);
|
10687
10816
|
|
10817
|
+
this._teardownArrangedContent(arrangedContent);
|
10818
|
+
}, 'arrangedContent'),
|
10688
10819
|
|
10689
|
-
|
10690
|
-
|
10820
|
+
_arrangedContentDidChange: Ember.observer(function() {
|
10821
|
+
var arrangedContent = get(this, 'arrangedContent'),
|
10822
|
+
len = arrangedContent ? get(arrangedContent, 'length') : 0;
|
10691
10823
|
|
10692
|
-
this.enumerableContentWillChange(removed, null);
|
10693
|
-
if (isFirst) { Ember.propertyWillChange(this, 'firstObject'); }
|
10694
|
-
if (isLast) { Ember.propertyWillChange(this, 'lastObject'); }
|
10695
10824
|
|
10696
|
-
|
10697
|
-
if (idx < len-1) {
|
10698
|
-
last = this[len-1];
|
10699
|
-
this[idx] = last;
|
10700
|
-
this[guidFor(last)] = idx;
|
10701
|
-
}
|
10825
|
+
this._setupArrangedContent();
|
10702
10826
|
|
10703
|
-
|
10704
|
-
|
10705
|
-
|
10827
|
+
this.arrangedContentDidChange(this);
|
10828
|
+
this.arrangedContentArrayDidChange(this, 0, undefined, len);
|
10829
|
+
}, 'arrangedContent'),
|
10706
10830
|
|
10707
|
-
|
10708
|
-
|
10709
|
-
this.enumerableContentDidChange(removed, null);
|
10710
|
-
}
|
10831
|
+
_setupArrangedContent: function() {
|
10832
|
+
var arrangedContent = get(this, 'arrangedContent');
|
10711
10833
|
|
10712
|
-
|
10834
|
+
if (arrangedContent) {
|
10835
|
+
arrangedContent.addArrayObserver(this, {
|
10836
|
+
willChange: 'arrangedContentArrayWillChange',
|
10837
|
+
didChange: 'arrangedContentArrayDidChange'
|
10838
|
+
});
|
10839
|
+
}
|
10713
10840
|
},
|
10714
10841
|
|
10715
|
-
|
10716
|
-
|
10717
|
-
return this[guidFor(obj)]>=0;
|
10718
|
-
},
|
10842
|
+
_teardownArrangedContent: function() {
|
10843
|
+
var arrangedContent = get(this, 'arrangedContent');
|
10719
10844
|
|
10720
|
-
|
10721
|
-
|
10722
|
-
|
10723
|
-
|
10724
|
-
|
10725
|
-
ret[guidFor(this[loc])] = loc;
|
10845
|
+
if (arrangedContent) {
|
10846
|
+
arrangedContent.removeArrayObserver(this, {
|
10847
|
+
willChange: 'arrangedContentArrayWillChange',
|
10848
|
+
didChange: 'arrangedContentArrayDidChange'
|
10849
|
+
});
|
10726
10850
|
}
|
10727
|
-
return ret;
|
10728
10851
|
},
|
10729
10852
|
|
10730
|
-
|
10731
|
-
|
10732
|
-
for(idx = 0; idx < len; idx++) {
|
10733
|
-
array[idx] = this[idx];
|
10734
|
-
}
|
10735
|
-
return "Ember.Set<%@>".fmt(array.join(','));
|
10736
|
-
}
|
10853
|
+
arrangedContentWillChange: Ember.K,
|
10854
|
+
arrangedContentDidChange: Ember.K,
|
10737
10855
|
|
10738
|
-
|
10856
|
+
objectAt: function(idx) {
|
10857
|
+
return get(this, 'content') && this.objectAtContent(idx);
|
10858
|
+
},
|
10739
10859
|
|
10740
|
-
|
10860
|
+
length: Ember.computed(function() {
|
10861
|
+
var arrangedContent = get(this, 'arrangedContent');
|
10862
|
+
return arrangedContent ? get(arrangedContent, 'length') : 0;
|
10863
|
+
// No dependencies since Enumerable notifies length of change
|
10864
|
+
}),
|
10741
10865
|
|
10866
|
+
_replace: function(idx, amt, objects) {
|
10867
|
+
var content = get(this, 'content');
|
10742
10868
|
|
10869
|
+
if (content) this.replaceContent(idx, amt, objects);
|
10870
|
+
return this;
|
10871
|
+
},
|
10743
10872
|
|
10744
|
-
|
10745
|
-
|
10746
|
-
|
10747
|
-
|
10748
|
-
|
10873
|
+
replace: function() {
|
10874
|
+
if (get(this, 'arrangedContent') === get(this, 'content')) {
|
10875
|
+
this._replace.apply(this, arguments);
|
10876
|
+
} else {
|
10877
|
+
throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");
|
10878
|
+
}
|
10879
|
+
},
|
10749
10880
|
|
10750
|
-
|
10751
|
-
|
10752
|
-
|
10753
|
-
|
10881
|
+
_insertAt: function(idx, object) {
|
10882
|
+
if (idx > get(this, 'content.length')) throw new Error(OUT_OF_RANGE_EXCEPTION);
|
10883
|
+
this._replace(idx, 0, [object]);
|
10884
|
+
return this;
|
10885
|
+
},
|
10754
10886
|
|
10755
|
-
|
10756
|
-
|
10757
|
-
|
10758
|
-
|
10759
|
-
|
10760
|
-
|
10761
|
-
|
10887
|
+
insertAt: function(idx, object) {
|
10888
|
+
if (get(this, 'arrangedContent') === get(this, 'content')) {
|
10889
|
+
return this._insertAt(idx, object);
|
10890
|
+
} else {
|
10891
|
+
throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.");
|
10892
|
+
}
|
10893
|
+
},
|
10762
10894
|
|
10763
|
-
|
10895
|
+
removeAt: function(start, len) {
|
10896
|
+
if ('number' === typeof start) {
|
10897
|
+
var content = get(this, 'content'),
|
10898
|
+
arrangedContent = get(this, 'arrangedContent'),
|
10899
|
+
indices = [], i;
|
10764
10900
|
|
10901
|
+
if ((start < 0) || (start >= get(this, 'length'))) {
|
10902
|
+
throw new Error(OUT_OF_RANGE_EXCEPTION);
|
10903
|
+
}
|
10765
10904
|
|
10905
|
+
if (len === undefined) len = 1;
|
10766
10906
|
|
10767
|
-
|
10768
|
-
|
10769
|
-
|
10770
|
-
|
10771
|
-
|
10907
|
+
// Get a list of indices in original content to remove
|
10908
|
+
for (i=start; i<start+len; i++) {
|
10909
|
+
// Use arrangedContent here so we avoid confusion with objects transformed by objectAtContent
|
10910
|
+
indices.push(content.indexOf(arrangedContent.objectAt(i)));
|
10911
|
+
}
|
10772
10912
|
|
10773
|
-
|
10913
|
+
// Replace in reverse order since indices will change
|
10914
|
+
indices.sort(function(a,b) { return b - a; });
|
10774
10915
|
|
10775
|
-
|
10776
|
-
|
10777
|
-
|
10778
|
-
|
10916
|
+
Ember.beginPropertyChanges();
|
10917
|
+
for (i=0; i<indices.length; i++) {
|
10918
|
+
this._replace(indices[i], 1, EMPTY);
|
10919
|
+
}
|
10920
|
+
Ember.endPropertyChanges();
|
10921
|
+
}
|
10779
10922
|
|
10780
|
-
|
10923
|
+
return this ;
|
10924
|
+
},
|
10781
10925
|
|
10782
|
-
|
10783
|
-
|
10784
|
-
|
10785
|
-
}
|
10786
|
-
```
|
10926
|
+
pushObject: function(obj) {
|
10927
|
+
this._insertAt(get(this, 'content.length'), obj) ;
|
10928
|
+
return obj ;
|
10929
|
+
},
|
10787
10930
|
|
10788
|
-
|
10789
|
-
|
10790
|
-
|
10791
|
-
|
10792
|
-
var Namespace = Ember.Namespace = Ember.Object.extend({
|
10793
|
-
isNamespace: true,
|
10931
|
+
pushObjects: function(objects) {
|
10932
|
+
this._replace(get(this, 'length'), 0, objects);
|
10933
|
+
return this;
|
10934
|
+
},
|
10794
10935
|
|
10795
|
-
|
10796
|
-
|
10797
|
-
|
10936
|
+
setObjects: function(objects) {
|
10937
|
+
if (objects.length === 0) return this.clear();
|
10938
|
+
|
10939
|
+
var len = get(this, 'length');
|
10940
|
+
this._replace(0, len, objects);
|
10941
|
+
return this;
|
10798
10942
|
},
|
10799
10943
|
|
10800
|
-
|
10801
|
-
|
10802
|
-
|
10944
|
+
unshiftObject: function(obj) {
|
10945
|
+
this._insertAt(0, obj) ;
|
10946
|
+
return obj ;
|
10947
|
+
},
|
10803
10948
|
|
10804
|
-
|
10805
|
-
|
10949
|
+
unshiftObjects: function(objects) {
|
10950
|
+
this._replace(0, 0, objects);
|
10951
|
+
return this;
|
10806
10952
|
},
|
10807
10953
|
|
10808
|
-
|
10809
|
-
|
10954
|
+
slice: function() {
|
10955
|
+
var arr = this.toArray();
|
10956
|
+
return arr.slice.apply(arr, arguments);
|
10810
10957
|
},
|
10811
10958
|
|
10812
|
-
|
10813
|
-
|
10814
|
-
|
10815
|
-
|
10959
|
+
arrangedContentArrayWillChange: function(item, idx, removedCnt, addedCnt) {
|
10960
|
+
this.arrayContentWillChange(idx, removedCnt, addedCnt);
|
10961
|
+
},
|
10962
|
+
|
10963
|
+
arrangedContentArrayDidChange: function(item, idx, removedCnt, addedCnt) {
|
10964
|
+
this.arrayContentDidChange(idx, removedCnt, addedCnt);
|
10965
|
+
},
|
10966
|
+
|
10967
|
+
init: function() {
|
10816
10968
|
this._super();
|
10969
|
+
this._setupContent();
|
10970
|
+
this._setupArrangedContent();
|
10971
|
+
},
|
10972
|
+
|
10973
|
+
willDestroy: function() {
|
10974
|
+
this._teardownArrangedContent();
|
10975
|
+
this._teardownContent();
|
10817
10976
|
}
|
10818
10977
|
});
|
10819
10978
|
|
10820
|
-
Namespace.reopenClass({
|
10821
|
-
NAMESPACES: [Ember],
|
10822
|
-
NAMESPACES_BY_ID: {},
|
10823
|
-
PROCESSED: false,
|
10824
|
-
processAll: processAllNamespaces,
|
10825
|
-
byName: function(name) {
|
10826
|
-
if (!Ember.BOOTED) {
|
10827
|
-
processAllNamespaces();
|
10828
|
-
}
|
10829
|
-
|
10830
|
-
return NAMESPACES_BY_ID[name];
|
10831
|
-
}
|
10832
|
-
});
|
10833
|
-
|
10834
|
-
var NAMESPACES_BY_ID = Namespace.NAMESPACES_BY_ID;
|
10835
|
-
|
10836
|
-
var hasOwnProp = ({}).hasOwnProperty,
|
10837
|
-
guidFor = Ember.guidFor;
|
10838
|
-
|
10839
|
-
function processNamespace(paths, root, seen) {
|
10840
|
-
var idx = paths.length;
|
10841
10979
|
|
10842
|
-
|
10980
|
+
})();
|
10843
10981
|
|
10844
|
-
// Loop over all of the keys in the namespace, looking for classes
|
10845
|
-
for(var key in root) {
|
10846
|
-
if (!hasOwnProp.call(root, key)) { continue; }
|
10847
|
-
var obj = root[key];
|
10848
10982
|
|
10849
|
-
// If we are processing the `Ember` namespace, for example, the
|
10850
|
-
// `paths` will start with `["Ember"]`. Every iteration through
|
10851
|
-
// the loop will update the **second** element of this list with
|
10852
|
-
// the key, so processing `Ember.View` will make the Array
|
10853
|
-
// `['Ember', 'View']`.
|
10854
|
-
paths[idx] = key;
|
10855
10983
|
|
10856
|
-
|
10857
|
-
|
10858
|
-
|
10859
|
-
|
10860
|
-
|
10861
|
-
obj[NAME_KEY] = paths.join('.');
|
10984
|
+
(function() {
|
10985
|
+
/**
|
10986
|
+
@module ember
|
10987
|
+
@submodule ember-runtime
|
10988
|
+
*/
|
10862
10989
|
|
10863
|
-
|
10864
|
-
|
10865
|
-
|
10866
|
-
|
10867
|
-
|
10990
|
+
var get = Ember.get,
|
10991
|
+
set = Ember.set,
|
10992
|
+
fmt = Ember.String.fmt,
|
10993
|
+
addBeforeObserver = Ember.addBeforeObserver,
|
10994
|
+
addObserver = Ember.addObserver,
|
10995
|
+
removeBeforeObserver = Ember.removeBeforeObserver,
|
10996
|
+
removeObserver = Ember.removeObserver,
|
10997
|
+
propertyWillChange = Ember.propertyWillChange,
|
10998
|
+
propertyDidChange = Ember.propertyDidChange;
|
10868
10999
|
|
10869
|
-
|
10870
|
-
|
10871
|
-
|
10872
|
-
|
11000
|
+
function contentPropertyWillChange(content, contentKey) {
|
11001
|
+
var key = contentKey.slice(8); // remove "content."
|
11002
|
+
if (key in this) { return; } // if shadowed in proxy
|
11003
|
+
propertyWillChange(this, key);
|
11004
|
+
}
|
10873
11005
|
|
10874
|
-
|
11006
|
+
function contentPropertyDidChange(content, contentKey) {
|
11007
|
+
var key = contentKey.slice(8); // remove "content."
|
11008
|
+
if (key in this) { return; } // if shadowed in proxy
|
11009
|
+
propertyDidChange(this, key);
|
10875
11010
|
}
|
10876
11011
|
|
10877
|
-
|
10878
|
-
|
11012
|
+
/**
|
11013
|
+
`Ember.ObjectProxy` forwards all properties not defined by the proxy itself
|
11014
|
+
to a proxied `content` object.
|
10879
11015
|
|
10880
|
-
|
11016
|
+
```javascript
|
11017
|
+
object = Ember.Object.create({
|
11018
|
+
name: 'Foo'
|
11019
|
+
});
|
10881
11020
|
|
10882
|
-
|
10883
|
-
|
10884
|
-
|
11021
|
+
proxy = Ember.ObjectProxy.create({
|
11022
|
+
content: object
|
11023
|
+
});
|
10885
11024
|
|
10886
|
-
|
10887
|
-
|
10888
|
-
|
10889
|
-
|
10890
|
-
if (lookup.hasOwnProperty && !lookup.hasOwnProperty(prop)) { continue; }
|
11025
|
+
// Access and change existing properties
|
11026
|
+
proxy.get('name') // 'Foo'
|
11027
|
+
proxy.set('name', 'Bar');
|
11028
|
+
object.get('name') // 'Bar'
|
10891
11029
|
|
10892
|
-
|
10893
|
-
|
10894
|
-
|
10895
|
-
|
10896
|
-
isNamespace = obj && obj.isNamespace;
|
10897
|
-
} catch (e) {
|
10898
|
-
continue;
|
10899
|
-
}
|
11030
|
+
// Create new 'description' property on `object`
|
11031
|
+
proxy.set('description', 'Foo is a whizboo baz');
|
11032
|
+
object.get('description') // 'Foo is a whizboo baz'
|
11033
|
+
```
|
10900
11034
|
|
10901
|
-
|
11035
|
+
While `content` is unset, setting a property to be delegated will throw an
|
11036
|
+
Error.
|
10902
11037
|
|
10903
|
-
|
10904
|
-
|
10905
|
-
|
10906
|
-
|
11038
|
+
```javascript
|
11039
|
+
proxy = Ember.ObjectProxy.create({
|
11040
|
+
content: null,
|
11041
|
+
flag: null
|
11042
|
+
});
|
11043
|
+
proxy.set('flag', true);
|
11044
|
+
proxy.get('flag'); // true
|
11045
|
+
proxy.get('foo'); // undefined
|
11046
|
+
proxy.set('foo', 'data'); // throws Error
|
11047
|
+
```
|
10907
11048
|
|
10908
|
-
|
11049
|
+
Delegated properties can be bound to and will change when content is updated.
|
10909
11050
|
|
10910
|
-
|
10911
|
-
var superclass = mixin.superclass;
|
10912
|
-
if (superclass) {
|
10913
|
-
if (superclass[NAME_KEY]) { return superclass[NAME_KEY]; }
|
10914
|
-
else { return superClassString(superclass); }
|
10915
|
-
} else {
|
10916
|
-
return;
|
10917
|
-
}
|
10918
|
-
}
|
11051
|
+
Computed properties on the proxy itself can depend on delegated properties.
|
10919
11052
|
|
10920
|
-
|
10921
|
-
|
10922
|
-
|
10923
|
-
|
11053
|
+
```javascript
|
11054
|
+
ProxyWithComputedProperty = Ember.ObjectProxy.extend({
|
11055
|
+
fullName: function () {
|
11056
|
+
var firstName = this.get('firstName'),
|
11057
|
+
lastName = this.get('lastName');
|
11058
|
+
if (firstName && lastName) {
|
11059
|
+
return firstName + ' ' + lastName;
|
11060
|
+
}
|
11061
|
+
return firstName || lastName;
|
11062
|
+
}.property('firstName', 'lastName')
|
11063
|
+
});
|
10924
11064
|
|
10925
|
-
|
11065
|
+
proxy = ProxyWithComputedProperty.create();
|
10926
11066
|
|
10927
|
-
|
10928
|
-
|
10929
|
-
|
10930
|
-
|
10931
|
-
if (str) {
|
10932
|
-
ret = "(subclass of " + str + ")";
|
10933
|
-
} else {
|
10934
|
-
ret = "(unknown mixin)";
|
10935
|
-
}
|
10936
|
-
this.toString = makeToString(ret);
|
10937
|
-
}
|
11067
|
+
proxy.get('fullName'); // undefined
|
11068
|
+
proxy.set('content', {
|
11069
|
+
firstName: 'Tom', lastName: 'Dale'
|
11070
|
+
}); // triggers property change for fullName on proxy
|
10938
11071
|
|
10939
|
-
|
10940
|
-
|
11072
|
+
proxy.get('fullName'); // 'Tom Dale'
|
11073
|
+
```
|
10941
11074
|
|
10942
|
-
|
10943
|
-
|
10944
|
-
|
11075
|
+
@class ObjectProxy
|
11076
|
+
@namespace Ember
|
11077
|
+
@extends Ember.Object
|
11078
|
+
*/
|
11079
|
+
Ember.ObjectProxy = Ember.Object.extend(
|
11080
|
+
/** @scope Ember.ObjectProxy.prototype */ {
|
11081
|
+
/**
|
11082
|
+
The object whose properties will be forwarded.
|
10945
11083
|
|
10946
|
-
|
10947
|
-
|
10948
|
-
|
10949
|
-
|
11084
|
+
@property content
|
11085
|
+
@type Ember.Object
|
11086
|
+
@default null
|
11087
|
+
*/
|
11088
|
+
content: null,
|
11089
|
+
_contentDidChange: Ember.observer(function() {
|
10950
11090
|
|
10951
|
-
|
10952
|
-
var namespaces = Namespace.NAMESPACES, namespace;
|
10953
|
-
for (var i=0, l=namespaces.length; i<l; i++) {
|
10954
|
-
namespace = namespaces[i];
|
10955
|
-
processNamespace([namespace.toString()], namespace, {});
|
10956
|
-
}
|
11091
|
+
}, 'content'),
|
10957
11092
|
|
10958
|
-
|
10959
|
-
}
|
10960
|
-
}
|
11093
|
+
isTruthy: Ember.computed.bool('content'),
|
10961
11094
|
|
10962
|
-
|
10963
|
-
return function() { return ret; };
|
10964
|
-
}
|
11095
|
+
_debugContainerKey: null,
|
10965
11096
|
|
10966
|
-
|
11097
|
+
willWatchProperty: function (key) {
|
11098
|
+
var contentKey = 'content.' + key;
|
11099
|
+
addBeforeObserver(this, contentKey, null, contentPropertyWillChange);
|
11100
|
+
addObserver(this, contentKey, null, contentPropertyDidChange);
|
11101
|
+
},
|
10967
11102
|
|
10968
|
-
|
11103
|
+
didUnwatchProperty: function (key) {
|
11104
|
+
var contentKey = 'content.' + key;
|
11105
|
+
removeBeforeObserver(this, contentKey, null, contentPropertyWillChange);
|
11106
|
+
removeObserver(this, contentKey, null, contentPropertyDidChange);
|
11107
|
+
},
|
11108
|
+
|
11109
|
+
unknownProperty: function (key) {
|
11110
|
+
var content = get(this, 'content');
|
11111
|
+
if (content) {
|
11112
|
+
return get(content, key);
|
11113
|
+
}
|
11114
|
+
},
|
10969
11115
|
|
11116
|
+
setUnknownProperty: function (key, value) {
|
11117
|
+
var content = get(this, 'content');
|
10970
11118
|
|
11119
|
+
return set(content, key, value);
|
11120
|
+
}
|
11121
|
+
});
|
10971
11122
|
|
10972
|
-
(
|
10973
|
-
|
11123
|
+
Ember.ObjectProxy.reopenClass({
|
11124
|
+
create: function () {
|
11125
|
+
var mixin, prototype, i, l, properties, keyName;
|
11126
|
+
if (arguments.length) {
|
11127
|
+
prototype = this.proto();
|
11128
|
+
for (i = 0, l = arguments.length; i < l; i++) {
|
11129
|
+
properties = arguments[i];
|
11130
|
+
for (keyName in properties) {
|
11131
|
+
if (!properties.hasOwnProperty(keyName) || keyName in prototype) { continue; }
|
11132
|
+
if (!mixin) mixin = {};
|
11133
|
+
mixin[keyName] = null;
|
11134
|
+
}
|
11135
|
+
}
|
11136
|
+
if (mixin) this._initMixins([mixin]);
|
11137
|
+
}
|
11138
|
+
return this._super.apply(this, arguments);
|
11139
|
+
}
|
11140
|
+
});
|
10974
11141
|
|
10975
11142
|
})();
|
10976
11143
|
|
@@ -10983,234 +11150,361 @@ Ember.Application = Ember.Namespace.extend();
|
|
10983
11150
|
*/
|
10984
11151
|
|
10985
11152
|
|
10986
|
-
var get = Ember.get,
|
11153
|
+
var set = Ember.set, get = Ember.get, guidFor = Ember.guidFor;
|
11154
|
+
var forEach = Ember.EnumerableUtils.forEach;
|
10987
11155
|
|
10988
|
-
|
10989
|
-
An ArrayProxy wraps any other object that implements `Ember.Array` and/or
|
10990
|
-
`Ember.MutableArray,` forwarding all requests. This makes it very useful for
|
10991
|
-
a number of binding use cases or other cases where being able to swap
|
10992
|
-
out the underlying array is useful.
|
11156
|
+
var EachArray = Ember.Object.extend(Ember.Array, {
|
10993
11157
|
|
10994
|
-
|
11158
|
+
init: function(content, keyName, owner) {
|
11159
|
+
this._super();
|
11160
|
+
this._keyName = keyName;
|
11161
|
+
this._owner = owner;
|
11162
|
+
this._content = content;
|
11163
|
+
},
|
10995
11164
|
|
10996
|
-
|
10997
|
-
|
10998
|
-
|
11165
|
+
objectAt: function(idx) {
|
11166
|
+
var item = this._content.objectAt(idx);
|
11167
|
+
return item && get(item, this._keyName);
|
11168
|
+
},
|
10999
11169
|
|
11000
|
-
|
11001
|
-
|
11002
|
-
|
11003
|
-
|
11170
|
+
length: Ember.computed(function() {
|
11171
|
+
var content = this._content;
|
11172
|
+
return content ? get(content, 'length') : 0;
|
11173
|
+
})
|
11004
11174
|
|
11005
|
-
|
11006
|
-
an array, as they are accessed. This can be done by overriding
|
11007
|
-
`objectAtContent`:
|
11175
|
+
});
|
11008
11176
|
|
11009
|
-
|
11010
|
-
var pets = ['dog', 'cat', 'fish'];
|
11011
|
-
var ap = Ember.ArrayProxy.create({
|
11012
|
-
content: Ember.A(pets),
|
11013
|
-
objectAtContent: function(idx) {
|
11014
|
-
return this.get('content').objectAt(idx).toUpperCase();
|
11015
|
-
}
|
11016
|
-
});
|
11177
|
+
var IS_OBSERVER = /^.+:(before|change)$/;
|
11017
11178
|
|
11018
|
-
|
11019
|
-
|
11179
|
+
function addObserverForContentKey(content, keyName, proxy, idx, loc) {
|
11180
|
+
var objects = proxy._objects, guid;
|
11181
|
+
if (!objects) objects = proxy._objects = {};
|
11020
11182
|
|
11021
|
-
|
11183
|
+
while(--loc>=idx) {
|
11184
|
+
var item = content.objectAt(loc);
|
11185
|
+
if (item) {
|
11186
|
+
Ember.addBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
|
11187
|
+
Ember.addObserver(item, keyName, proxy, 'contentKeyDidChange');
|
11188
|
+
|
11189
|
+
// keep track of the index each item was found at so we can map
|
11190
|
+
// it back when the obj changes.
|
11191
|
+
guid = guidFor(item);
|
11192
|
+
if (!objects[guid]) objects[guid] = [];
|
11193
|
+
objects[guid].push(loc);
|
11194
|
+
}
|
11195
|
+
}
|
11196
|
+
}
|
11197
|
+
|
11198
|
+
function removeObserverForContentKey(content, keyName, proxy, idx, loc) {
|
11199
|
+
var objects = proxy._objects;
|
11200
|
+
if (!objects) objects = proxy._objects = {};
|
11201
|
+
var indicies, guid;
|
11202
|
+
|
11203
|
+
while(--loc>=idx) {
|
11204
|
+
var item = content.objectAt(loc);
|
11205
|
+
if (item) {
|
11206
|
+
Ember.removeBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
|
11207
|
+
Ember.removeObserver(item, keyName, proxy, 'contentKeyDidChange');
|
11208
|
+
|
11209
|
+
guid = guidFor(item);
|
11210
|
+
indicies = objects[guid];
|
11211
|
+
indicies[indicies.indexOf(loc)] = null;
|
11212
|
+
}
|
11213
|
+
}
|
11214
|
+
}
|
11215
|
+
|
11216
|
+
/**
|
11217
|
+
This is the object instance returned when you get the `@each` property on an
|
11218
|
+
array. It uses the unknownProperty handler to automatically create
|
11219
|
+
EachArray instances for property names.
|
11220
|
+
|
11221
|
+
@private
|
11222
|
+
@class EachProxy
|
11022
11223
|
@namespace Ember
|
11023
11224
|
@extends Ember.Object
|
11024
|
-
@uses Ember.MutableArray
|
11025
11225
|
*/
|
11026
|
-
Ember.
|
11027
|
-
/** @scope Ember.ArrayProxy.prototype */ {
|
11226
|
+
Ember.EachProxy = Ember.Object.extend({
|
11028
11227
|
|
11029
|
-
|
11030
|
-
|
11031
|
-
|
11228
|
+
init: function(content) {
|
11229
|
+
this._super();
|
11230
|
+
this._content = content;
|
11231
|
+
content.addArrayObserver(this);
|
11032
11232
|
|
11033
|
-
|
11034
|
-
|
11035
|
-
|
11036
|
-
|
11233
|
+
// in case someone is already observing some keys make sure they are
|
11234
|
+
// added
|
11235
|
+
forEach(Ember.watchedEvents(this), function(eventName) {
|
11236
|
+
this.didAddListener(eventName);
|
11237
|
+
}, this);
|
11238
|
+
},
|
11037
11239
|
|
11038
11240
|
/**
|
11039
|
-
|
11040
|
-
|
11041
|
-
can override this property to provide things like sorting and filtering.
|
11241
|
+
You can directly access mapped properties by simply requesting them.
|
11242
|
+
The `unknownProperty` handler will generate an EachArray of each item.
|
11042
11243
|
|
11043
|
-
|
11244
|
+
@method unknownProperty
|
11245
|
+
@param keyName {String}
|
11246
|
+
@param value {anything}
|
11044
11247
|
*/
|
11045
|
-
|
11248
|
+
unknownProperty: function(keyName, value) {
|
11249
|
+
var ret;
|
11250
|
+
ret = new EachArray(this._content, keyName, this);
|
11251
|
+
Ember.defineProperty(this, keyName, null, ret);
|
11252
|
+
this.beginObservingContentKey(keyName);
|
11253
|
+
return ret;
|
11254
|
+
},
|
11046
11255
|
|
11047
|
-
|
11048
|
-
|
11049
|
-
|
11050
|
-
content item to something new.
|
11256
|
+
// ..........................................................
|
11257
|
+
// ARRAY CHANGES
|
11258
|
+
// Invokes whenever the content array itself changes.
|
11051
11259
|
|
11052
|
-
|
11260
|
+
arrayWillChange: function(content, idx, removedCnt, addedCnt) {
|
11261
|
+
var keys = this._keys, key, lim;
|
11053
11262
|
|
11054
|
-
|
11055
|
-
|
11056
|
-
@return {Object} the value or undefined if none found
|
11057
|
-
*/
|
11058
|
-
objectAtContent: function(idx) {
|
11059
|
-
return get(this, 'arrangedContent').objectAt(idx);
|
11060
|
-
},
|
11263
|
+
lim = removedCnt>0 ? idx+removedCnt : -1;
|
11264
|
+
Ember.beginPropertyChanges(this);
|
11061
11265
|
|
11062
|
-
|
11063
|
-
|
11064
|
-
You can override this method in subclasses to transform the content item
|
11065
|
-
into something new.
|
11266
|
+
for(key in keys) {
|
11267
|
+
if (!keys.hasOwnProperty(key)) { continue; }
|
11066
11268
|
|
11067
|
-
|
11269
|
+
if (lim>0) removeObserverForContentKey(content, key, this, idx, lim);
|
11068
11270
|
|
11069
|
-
|
11070
|
-
|
11071
|
-
|
11072
|
-
@
|
11073
|
-
|
11074
|
-
@return {void}
|
11075
|
-
*/
|
11076
|
-
replaceContent: function(idx, amt, objects) {
|
11077
|
-
get(this, 'content').replace(idx, amt, objects);
|
11271
|
+
Ember.propertyWillChange(this, key);
|
11272
|
+
}
|
11273
|
+
|
11274
|
+
Ember.propertyWillChange(this._content, '@each');
|
11275
|
+
Ember.endPropertyChanges(this);
|
11078
11276
|
},
|
11079
11277
|
|
11080
|
-
|
11081
|
-
|
11278
|
+
arrayDidChange: function(content, idx, removedCnt, addedCnt) {
|
11279
|
+
var keys = this._keys, key, lim;
|
11082
11280
|
|
11083
|
-
|
11084
|
-
|
11281
|
+
lim = addedCnt>0 ? idx+addedCnt : -1;
|
11282
|
+
Ember.beginPropertyChanges(this);
|
11085
11283
|
|
11086
|
-
|
11087
|
-
|
11088
|
-
_contentWillChange: Ember.beforeObserver(function() {
|
11089
|
-
this._teardownContent();
|
11090
|
-
}, 'content'),
|
11284
|
+
for(key in keys) {
|
11285
|
+
if (!keys.hasOwnProperty(key)) { continue; }
|
11091
11286
|
|
11092
|
-
|
11093
|
-
var content = get(this, 'content');
|
11287
|
+
if (lim>0) addObserverForContentKey(content, key, this, idx, lim);
|
11094
11288
|
|
11095
|
-
|
11096
|
-
content.removeArrayObserver(this, {
|
11097
|
-
willChange: 'contentArrayWillChange',
|
11098
|
-
didChange: 'contentArrayDidChange'
|
11099
|
-
});
|
11289
|
+
Ember.propertyDidChange(this, key);
|
11100
11290
|
}
|
11101
|
-
},
|
11102
|
-
|
11103
|
-
contentArrayWillChange: Ember.K,
|
11104
|
-
contentArrayDidChange: Ember.K,
|
11105
11291
|
|
11106
|
-
|
11107
|
-
|
11292
|
+
Ember.propertyDidChange(this._content, '@each');
|
11293
|
+
Ember.endPropertyChanges(this);
|
11294
|
+
},
|
11108
11295
|
|
11109
|
-
|
11110
|
-
|
11296
|
+
// ..........................................................
|
11297
|
+
// LISTEN FOR NEW OBSERVERS AND OTHER EVENT LISTENERS
|
11298
|
+
// Start monitoring keys based on who is listening...
|
11111
11299
|
|
11112
|
-
|
11113
|
-
|
11114
|
-
|
11115
|
-
|
11300
|
+
didAddListener: function(eventName) {
|
11301
|
+
if (IS_OBSERVER.test(eventName)) {
|
11302
|
+
this.beginObservingContentKey(eventName.slice(0, -7));
|
11303
|
+
}
|
11304
|
+
},
|
11116
11305
|
|
11306
|
+
didRemoveListener: function(eventName) {
|
11307
|
+
if (IS_OBSERVER.test(eventName)) {
|
11308
|
+
this.stopObservingContentKey(eventName.slice(0, -7));
|
11309
|
+
}
|
11310
|
+
},
|
11117
11311
|
|
11118
|
-
|
11119
|
-
|
11312
|
+
// ..........................................................
|
11313
|
+
// CONTENT KEY OBSERVING
|
11314
|
+
// Actual watch keys on the source content.
|
11120
11315
|
|
11121
|
-
|
11122
|
-
var
|
11316
|
+
beginObservingContentKey: function(keyName) {
|
11317
|
+
var keys = this._keys;
|
11318
|
+
if (!keys) keys = this._keys = {};
|
11319
|
+
if (!keys[keyName]) {
|
11320
|
+
keys[keyName] = 1;
|
11321
|
+
var content = this._content,
|
11322
|
+
len = get(content, 'length');
|
11323
|
+
addObserverForContentKey(content, keyName, this, 0, len);
|
11324
|
+
} else {
|
11325
|
+
keys[keyName]++;
|
11326
|
+
}
|
11327
|
+
},
|
11123
11328
|
|
11124
|
-
|
11125
|
-
|
11126
|
-
|
11127
|
-
|
11128
|
-
|
11329
|
+
stopObservingContentKey: function(keyName) {
|
11330
|
+
var keys = this._keys;
|
11331
|
+
if (keys && (keys[keyName]>0) && (--keys[keyName]<=0)) {
|
11332
|
+
var content = this._content,
|
11333
|
+
len = get(content, 'length');
|
11334
|
+
removeObserverForContentKey(content, keyName, this, 0, len);
|
11129
11335
|
}
|
11130
11336
|
},
|
11131
11337
|
|
11132
|
-
|
11133
|
-
|
11134
|
-
|
11338
|
+
contentKeyWillChange: function(obj, keyName) {
|
11339
|
+
Ember.propertyWillChange(this, keyName);
|
11340
|
+
},
|
11135
11341
|
|
11136
|
-
|
11137
|
-
|
11342
|
+
contentKeyDidChange: function(obj, keyName) {
|
11343
|
+
Ember.propertyDidChange(this, keyName);
|
11344
|
+
}
|
11138
11345
|
|
11139
|
-
|
11140
|
-
}, 'arrangedContent'),
|
11346
|
+
});
|
11141
11347
|
|
11142
|
-
_arrangedContentDidChange: Ember.observer(function() {
|
11143
|
-
var arrangedContent = get(this, 'arrangedContent'),
|
11144
|
-
len = arrangedContent ? get(arrangedContent, 'length') : 0;
|
11145
11348
|
|
11146
11349
|
|
11147
|
-
|
11350
|
+
})();
|
11148
11351
|
|
11149
|
-
this.arrangedContentDidChange(this);
|
11150
|
-
this.arrangedContentArrayDidChange(this, 0, undefined, len);
|
11151
|
-
}, 'arrangedContent'),
|
11152
11352
|
|
11153
|
-
_setupArrangedContent: function() {
|
11154
|
-
var arrangedContent = get(this, 'arrangedContent');
|
11155
11353
|
|
11156
|
-
|
11157
|
-
|
11158
|
-
|
11159
|
-
|
11160
|
-
|
11161
|
-
}
|
11162
|
-
},
|
11354
|
+
(function() {
|
11355
|
+
/**
|
11356
|
+
@module ember
|
11357
|
+
@submodule ember-runtime
|
11358
|
+
*/
|
11163
11359
|
|
11164
|
-
_teardownArrangedContent: function() {
|
11165
|
-
var arrangedContent = get(this, 'arrangedContent');
|
11166
11360
|
|
11167
|
-
|
11168
|
-
arrangedContent.removeArrayObserver(this, {
|
11169
|
-
willChange: 'arrangedContentArrayWillChange',
|
11170
|
-
didChange: 'arrangedContentArrayDidChange'
|
11171
|
-
});
|
11172
|
-
}
|
11173
|
-
},
|
11361
|
+
var get = Ember.get, set = Ember.set;
|
11174
11362
|
|
11175
|
-
|
11176
|
-
|
11363
|
+
// Add Ember.Array to Array.prototype. Remove methods with native
|
11364
|
+
// implementations and supply some more optimized versions of generic methods
|
11365
|
+
// because they are so common.
|
11366
|
+
var NativeArray = Ember.Mixin.create(Ember.MutableArray, Ember.Observable, Ember.Copyable, {
|
11177
11367
|
|
11178
|
-
|
11179
|
-
|
11368
|
+
// because length is a built-in property we need to know to just get the
|
11369
|
+
// original property.
|
11370
|
+
get: function(key) {
|
11371
|
+
if (key==='length') return this.length;
|
11372
|
+
else if ('number' === typeof key) return this[key];
|
11373
|
+
else return this._super(key);
|
11180
11374
|
},
|
11181
11375
|
|
11182
|
-
|
11183
|
-
|
11184
|
-
|
11185
|
-
// No dependencies since Enumerable notifies length of change
|
11186
|
-
}),
|
11376
|
+
objectAt: function(idx) {
|
11377
|
+
return this[idx];
|
11378
|
+
},
|
11187
11379
|
|
11380
|
+
// primitive for array support.
|
11188
11381
|
replace: function(idx, amt, objects) {
|
11189
11382
|
|
11190
|
-
if (
|
11191
|
-
|
11383
|
+
if (this.isFrozen) throw Ember.FROZEN_ERROR ;
|
11384
|
+
|
11385
|
+
// if we replaced exactly the same number of items, then pass only the
|
11386
|
+
// replaced range. Otherwise, pass the full remaining array length
|
11387
|
+
// since everything has shifted
|
11388
|
+
var len = objects ? get(objects, 'length') : 0;
|
11389
|
+
this.arrayContentWillChange(idx, amt, len);
|
11390
|
+
|
11391
|
+
if (!objects || objects.length === 0) {
|
11392
|
+
this.splice(idx, amt) ;
|
11393
|
+
} else {
|
11394
|
+
var args = [idx, amt].concat(objects) ;
|
11395
|
+
this.splice.apply(this,args) ;
|
11396
|
+
}
|
11397
|
+
|
11398
|
+
this.arrayContentDidChange(idx, amt, len);
|
11399
|
+
return this ;
|
11192
11400
|
},
|
11193
11401
|
|
11194
|
-
|
11195
|
-
|
11402
|
+
// If you ask for an unknown property, then try to collect the value
|
11403
|
+
// from member items.
|
11404
|
+
unknownProperty: function(key, value) {
|
11405
|
+
var ret;// = this.reducedProperty(key, value) ;
|
11406
|
+
if ((value !== undefined) && ret === undefined) {
|
11407
|
+
ret = this[key] = value;
|
11408
|
+
}
|
11409
|
+
return ret ;
|
11196
11410
|
},
|
11197
11411
|
|
11198
|
-
|
11199
|
-
|
11412
|
+
// If browser did not implement indexOf natively, then override with
|
11413
|
+
// specialized version
|
11414
|
+
indexOf: function(object, startAt) {
|
11415
|
+
var idx, len = this.length;
|
11416
|
+
|
11417
|
+
if (startAt === undefined) startAt = 0;
|
11418
|
+
else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
|
11419
|
+
if (startAt < 0) startAt += len;
|
11420
|
+
|
11421
|
+
for(idx=startAt;idx<len;idx++) {
|
11422
|
+
if (this[idx] === object) return idx ;
|
11423
|
+
}
|
11424
|
+
return -1;
|
11200
11425
|
},
|
11201
11426
|
|
11202
|
-
|
11203
|
-
this.
|
11204
|
-
|
11205
|
-
|
11427
|
+
lastIndexOf: function(object, startAt) {
|
11428
|
+
var idx, len = this.length;
|
11429
|
+
|
11430
|
+
if (startAt === undefined) startAt = len-1;
|
11431
|
+
else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
|
11432
|
+
if (startAt < 0) startAt += len;
|
11433
|
+
|
11434
|
+
for(idx=startAt;idx>=0;idx--) {
|
11435
|
+
if (this[idx] === object) return idx ;
|
11436
|
+
}
|
11437
|
+
return -1;
|
11206
11438
|
},
|
11207
11439
|
|
11208
|
-
|
11209
|
-
|
11210
|
-
|
11440
|
+
copy: function(deep) {
|
11441
|
+
if (deep) {
|
11442
|
+
return this.map(function(item){ return Ember.copy(item, true); });
|
11443
|
+
}
|
11444
|
+
|
11445
|
+
return this.slice();
|
11211
11446
|
}
|
11212
11447
|
});
|
11213
11448
|
|
11449
|
+
// Remove any methods implemented natively so we don't override them
|
11450
|
+
var ignore = ['length'];
|
11451
|
+
Ember.EnumerableUtils.forEach(NativeArray.keys(), function(methodName) {
|
11452
|
+
if (Array.prototype[methodName]) ignore.push(methodName);
|
11453
|
+
});
|
11454
|
+
|
11455
|
+
if (ignore.length>0) {
|
11456
|
+
NativeArray = NativeArray.without.apply(NativeArray, ignore);
|
11457
|
+
}
|
11458
|
+
|
11459
|
+
/**
|
11460
|
+
The NativeArray mixin contains the properties needed to to make the native
|
11461
|
+
Array support Ember.MutableArray and all of its dependent APIs. Unless you
|
11462
|
+
have `Ember.EXTEND_PROTOTYPES` or `Ember.EXTEND_PROTOTYPES.Array` set to
|
11463
|
+
false, this will be applied automatically. Otherwise you can apply the mixin
|
11464
|
+
at anytime by calling `Ember.NativeArray.activate`.
|
11465
|
+
|
11466
|
+
@class NativeArray
|
11467
|
+
@namespace Ember
|
11468
|
+
@extends Ember.Mixin
|
11469
|
+
@uses Ember.MutableArray
|
11470
|
+
@uses Ember.MutableEnumerable
|
11471
|
+
@uses Ember.Copyable
|
11472
|
+
@uses Ember.Freezable
|
11473
|
+
*/
|
11474
|
+
Ember.NativeArray = NativeArray;
|
11475
|
+
|
11476
|
+
/**
|
11477
|
+
Creates an `Ember.NativeArray` from an Array like object.
|
11478
|
+
Does not modify the original object.
|
11479
|
+
|
11480
|
+
@method A
|
11481
|
+
@for Ember
|
11482
|
+
@return {Ember.NativeArray}
|
11483
|
+
*/
|
11484
|
+
Ember.A = function(arr){
|
11485
|
+
if (arr === undefined) { arr = []; }
|
11486
|
+
return Ember.Array.detect(arr) ? arr : Ember.NativeArray.apply(arr);
|
11487
|
+
};
|
11488
|
+
|
11489
|
+
/**
|
11490
|
+
Activates the mixin on the Array.prototype if not already applied. Calling
|
11491
|
+
this method more than once is safe.
|
11492
|
+
|
11493
|
+
@method activate
|
11494
|
+
@for Ember.NativeArray
|
11495
|
+
@static
|
11496
|
+
@return {void}
|
11497
|
+
*/
|
11498
|
+
Ember.NativeArray.activate = function() {
|
11499
|
+
NativeArray.apply(Array.prototype);
|
11500
|
+
|
11501
|
+
Ember.A = function(arr) { return arr || []; };
|
11502
|
+
};
|
11503
|
+
|
11504
|
+
if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Array) {
|
11505
|
+
Ember.NativeArray.activate();
|
11506
|
+
}
|
11507
|
+
|
11214
11508
|
|
11215
11509
|
})();
|
11216
11510
|
|
@@ -11222,505 +11516,452 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray,
|
|
11222
11516
|
@submodule ember-runtime
|
11223
11517
|
*/
|
11224
11518
|
|
11225
|
-
var get = Ember.get,
|
11226
|
-
set = Ember.set,
|
11227
|
-
fmt = Ember.String.fmt,
|
11228
|
-
addBeforeObserver = Ember.addBeforeObserver,
|
11229
|
-
addObserver = Ember.addObserver,
|
11230
|
-
removeBeforeObserver = Ember.removeBeforeObserver,
|
11231
|
-
removeObserver = Ember.removeObserver,
|
11232
|
-
propertyWillChange = Ember.propertyWillChange,
|
11233
|
-
propertyDidChange = Ember.propertyDidChange;
|
11234
|
-
|
11235
|
-
function contentPropertyWillChange(content, contentKey) {
|
11236
|
-
var key = contentKey.slice(8); // remove "content."
|
11237
|
-
if (key in this) { return; } // if shadowed in proxy
|
11238
|
-
propertyWillChange(this, key);
|
11239
|
-
}
|
11240
|
-
|
11241
|
-
function contentPropertyDidChange(content, contentKey) {
|
11242
|
-
var key = contentKey.slice(8); // remove "content."
|
11243
|
-
if (key in this) { return; } // if shadowed in proxy
|
11244
|
-
propertyDidChange(this, key);
|
11245
|
-
}
|
11519
|
+
var get = Ember.get, set = Ember.set, guidFor = Ember.guidFor, none = Ember.isNone, fmt = Ember.String.fmt;
|
11246
11520
|
|
11247
11521
|
/**
|
11248
|
-
|
11249
|
-
to a proxied `content` object.
|
11522
|
+
An unordered collection of objects.
|
11250
11523
|
|
11251
|
-
|
11252
|
-
object
|
11253
|
-
|
11254
|
-
|
11524
|
+
A Set works a bit like an array except that its items are not ordered. You
|
11525
|
+
can create a set to efficiently test for membership for an object. You can
|
11526
|
+
also iterate through a set just like an array, even accessing objects by
|
11527
|
+
index, however there is no guarantee as to their order.
|
11255
11528
|
|
11256
|
-
|
11257
|
-
|
11258
|
-
});
|
11529
|
+
All Sets are observable via the Enumerable Observer API - which works
|
11530
|
+
on any enumerable object including both Sets and Arrays.
|
11259
11531
|
|
11260
|
-
|
11261
|
-
proxy.get('name') // 'Foo'
|
11262
|
-
proxy.set('name', 'Bar');
|
11263
|
-
object.get('name') // 'Bar'
|
11532
|
+
## Creating a Set
|
11264
11533
|
|
11265
|
-
|
11266
|
-
|
11267
|
-
|
11268
|
-
|
11534
|
+
You can create a set like you would most objects using
|
11535
|
+
`new Ember.Set()`. Most new sets you create will be empty, but you can
|
11536
|
+
also initialize the set with some content by passing an array or other
|
11537
|
+
enumerable of objects to the constructor.
|
11269
11538
|
|
11270
|
-
|
11271
|
-
|
11539
|
+
Finally, you can pass in an existing set and the set will be copied. You
|
11540
|
+
can also create a copy of a set by calling `Ember.Set#copy()`.
|
11272
11541
|
|
11273
11542
|
```javascript
|
11274
|
-
|
11275
|
-
|
11276
|
-
flag: null
|
11277
|
-
});
|
11278
|
-
proxy.set('flag', true);
|
11279
|
-
proxy.get('flag'); // true
|
11280
|
-
proxy.get('foo'); // undefined
|
11281
|
-
proxy.set('foo', 'data'); // throws Error
|
11282
|
-
```
|
11543
|
+
// creates a new empty set
|
11544
|
+
var foundNames = new Ember.Set();
|
11283
11545
|
|
11284
|
-
|
11546
|
+
// creates a set with four names in it.
|
11547
|
+
var names = new Ember.Set(["Charles", "Tom", "Juan", "Alex"]); // :P
|
11285
11548
|
|
11286
|
-
|
11549
|
+
// creates a copy of the names set.
|
11550
|
+
var namesCopy = new Ember.Set(names);
|
11287
11551
|
|
11288
|
-
|
11289
|
-
|
11290
|
-
|
11291
|
-
var firstName = this.get('firstName'),
|
11292
|
-
lastName = this.get('lastName');
|
11293
|
-
if (firstName && lastName) {
|
11294
|
-
return firstName + ' ' + lastName;
|
11295
|
-
}
|
11296
|
-
return firstName || lastName;
|
11297
|
-
}.property('firstName', 'lastName')
|
11298
|
-
});
|
11552
|
+
// same as above.
|
11553
|
+
var anotherNamesCopy = names.copy();
|
11554
|
+
```
|
11299
11555
|
|
11300
|
-
|
11556
|
+
## Adding/Removing Objects
|
11301
11557
|
|
11302
|
-
|
11303
|
-
|
11304
|
-
|
11305
|
-
}); // triggers property change for fullName on proxy
|
11306
|
-
|
11307
|
-
proxy.get('fullName'); // 'Tom Dale'
|
11308
|
-
```
|
11309
|
-
|
11310
|
-
@class ObjectProxy
|
11311
|
-
@namespace Ember
|
11312
|
-
@extends Ember.Object
|
11313
|
-
*/
|
11314
|
-
Ember.ObjectProxy = Ember.Object.extend(
|
11315
|
-
/** @scope Ember.ObjectProxy.prototype */ {
|
11316
|
-
/**
|
11317
|
-
The object whose properties will be forwarded.
|
11318
|
-
|
11319
|
-
@property content
|
11320
|
-
@type Ember.Object
|
11321
|
-
@default null
|
11322
|
-
*/
|
11323
|
-
content: null,
|
11324
|
-
_contentDidChange: Ember.observer(function() {
|
11558
|
+
You generally add or remove objects from a set using `add()` or
|
11559
|
+
`remove()`. You can add any type of object including primitives such as
|
11560
|
+
numbers, strings, and booleans.
|
11325
11561
|
|
11326
|
-
|
11562
|
+
Unlike arrays, objects can only exist one time in a set. If you call `add()`
|
11563
|
+
on a set with the same object multiple times, the object will only be added
|
11564
|
+
once. Likewise, calling `remove()` with the same object multiple times will
|
11565
|
+
remove the object the first time and have no effect on future calls until
|
11566
|
+
you add the object to the set again.
|
11327
11567
|
|
11328
|
-
|
11568
|
+
NOTE: You cannot add/remove `null` or `undefined` to a set. Any attempt to do
|
11569
|
+
so will be ignored.
|
11329
11570
|
|
11330
|
-
|
11571
|
+
In addition to add/remove you can also call `push()`/`pop()`. Push behaves
|
11572
|
+
just like `add()` but `pop()`, unlike `remove()` will pick an arbitrary
|
11573
|
+
object, remove it and return it. This is a good way to use a set as a job
|
11574
|
+
queue when you don't care which order the jobs are executed in.
|
11331
11575
|
|
11332
|
-
|
11333
|
-
var contentKey = 'content.' + key;
|
11334
|
-
addBeforeObserver(this, contentKey, null, contentPropertyWillChange);
|
11335
|
-
addObserver(this, contentKey, null, contentPropertyDidChange);
|
11336
|
-
},
|
11576
|
+
## Testing for an Object
|
11337
11577
|
|
11338
|
-
|
11339
|
-
|
11340
|
-
removeBeforeObserver(this, contentKey, null, contentPropertyWillChange);
|
11341
|
-
removeObserver(this, contentKey, null, contentPropertyDidChange);
|
11342
|
-
},
|
11578
|
+
To test for an object's presence in a set you simply call
|
11579
|
+
`Ember.Set#contains()`.
|
11343
11580
|
|
11344
|
-
|
11345
|
-
var content = get(this, 'content');
|
11346
|
-
if (content) {
|
11347
|
-
return get(content, key);
|
11348
|
-
}
|
11349
|
-
},
|
11581
|
+
## Observing changes
|
11350
11582
|
|
11351
|
-
|
11352
|
-
|
11583
|
+
When using `Ember.Set`, you can observe the `"[]"` property to be
|
11584
|
+
alerted whenever the content changes. You can also add an enumerable
|
11585
|
+
observer to the set to be notified of specific objects that are added and
|
11586
|
+
removed from the set. See `Ember.Enumerable` for more information on
|
11587
|
+
enumerables.
|
11353
11588
|
|
11354
|
-
|
11355
|
-
|
11356
|
-
|
11589
|
+
This is often unhelpful. If you are filtering sets of objects, for instance,
|
11590
|
+
it is very inefficient to re-filter all of the items each time the set
|
11591
|
+
changes. It would be better if you could just adjust the filtered set based
|
11592
|
+
on what was changed on the original set. The same issue applies to merging
|
11593
|
+
sets, as well.
|
11357
11594
|
|
11358
|
-
|
11595
|
+
## Other Methods
|
11359
11596
|
|
11597
|
+
`Ember.Set` primary implements other mixin APIs. For a complete reference
|
11598
|
+
on the methods you will use with `Ember.Set`, please consult these mixins.
|
11599
|
+
The most useful ones will be `Ember.Enumerable` and
|
11600
|
+
`Ember.MutableEnumerable` which implement most of the common iterator
|
11601
|
+
methods you are used to on Array.
|
11360
11602
|
|
11603
|
+
Note that you can also use the `Ember.Copyable` and `Ember.Freezable`
|
11604
|
+
APIs on `Ember.Set` as well. Once a set is frozen it can no longer be
|
11605
|
+
modified. The benefit of this is that when you call `frozenCopy()` on it,
|
11606
|
+
Ember will avoid making copies of the set. This allows you to write
|
11607
|
+
code that can know with certainty when the underlying set data will or
|
11608
|
+
will not be modified.
|
11361
11609
|
|
11362
|
-
|
11363
|
-
|
11364
|
-
@
|
11365
|
-
@
|
11610
|
+
@class Set
|
11611
|
+
@namespace Ember
|
11612
|
+
@extends Ember.CoreObject
|
11613
|
+
@uses Ember.MutableEnumerable
|
11614
|
+
@uses Ember.Copyable
|
11615
|
+
@uses Ember.Freezable
|
11616
|
+
@since Ember 0.9
|
11366
11617
|
*/
|
11618
|
+
Ember.Set = Ember.CoreObject.extend(Ember.MutableEnumerable, Ember.Copyable, Ember.Freezable,
|
11619
|
+
/** @scope Ember.Set.prototype */ {
|
11367
11620
|
|
11621
|
+
// ..........................................................
|
11622
|
+
// IMPLEMENT ENUMERABLE APIS
|
11623
|
+
//
|
11368
11624
|
|
11369
|
-
|
11370
|
-
|
11371
|
-
|
11372
|
-
var EachArray = Ember.Object.extend(Ember.Array, {
|
11373
|
-
|
11374
|
-
init: function(content, keyName, owner) {
|
11375
|
-
this._super();
|
11376
|
-
this._keyName = keyName;
|
11377
|
-
this._owner = owner;
|
11378
|
-
this._content = content;
|
11379
|
-
},
|
11380
|
-
|
11381
|
-
objectAt: function(idx) {
|
11382
|
-
var item = this._content.objectAt(idx);
|
11383
|
-
return item && get(item, this._keyName);
|
11384
|
-
},
|
11385
|
-
|
11386
|
-
length: Ember.computed(function() {
|
11387
|
-
var content = this._content;
|
11388
|
-
return content ? get(content, 'length') : 0;
|
11389
|
-
})
|
11625
|
+
/**
|
11626
|
+
This property will change as the number of objects in the set changes.
|
11390
11627
|
|
11391
|
-
|
11628
|
+
@property length
|
11629
|
+
@type number
|
11630
|
+
@default 0
|
11631
|
+
*/
|
11632
|
+
length: 0,
|
11392
11633
|
|
11393
|
-
|
11634
|
+
/**
|
11635
|
+
Clears the set. This is useful if you want to reuse an existing set
|
11636
|
+
without having to recreate it.
|
11394
11637
|
|
11395
|
-
|
11396
|
-
|
11397
|
-
|
11638
|
+
```javascript
|
11639
|
+
var colors = new Ember.Set(["red", "green", "blue"]);
|
11640
|
+
colors.length; // 3
|
11641
|
+
colors.clear();
|
11642
|
+
colors.length; // 0
|
11643
|
+
```
|
11398
11644
|
|
11399
|
-
|
11400
|
-
|
11401
|
-
|
11402
|
-
|
11403
|
-
|
11645
|
+
@method clear
|
11646
|
+
@return {Ember.Set} An empty Set
|
11647
|
+
*/
|
11648
|
+
clear: function() {
|
11649
|
+
if (this.isFrozen) { throw new Error(Ember.FROZEN_ERROR); }
|
11404
11650
|
|
11405
|
-
|
11406
|
-
|
11407
|
-
guid = guidFor(item);
|
11408
|
-
if (!objects[guid]) objects[guid] = [];
|
11409
|
-
objects[guid].push(loc);
|
11410
|
-
}
|
11411
|
-
}
|
11412
|
-
}
|
11651
|
+
var len = get(this, 'length');
|
11652
|
+
if (len === 0) { return this; }
|
11413
11653
|
|
11414
|
-
|
11415
|
-
var objects = proxy._objects;
|
11416
|
-
if (!objects) objects = proxy._objects = {};
|
11417
|
-
var indicies, guid;
|
11654
|
+
var guid;
|
11418
11655
|
|
11419
|
-
|
11420
|
-
|
11421
|
-
|
11422
|
-
Ember.removeBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
|
11423
|
-
Ember.removeObserver(item, keyName, proxy, 'contentKeyDidChange');
|
11656
|
+
this.enumerableContentWillChange(len, 0);
|
11657
|
+
Ember.propertyWillChange(this, 'firstObject');
|
11658
|
+
Ember.propertyWillChange(this, 'lastObject');
|
11424
11659
|
|
11425
|
-
|
11426
|
-
|
11427
|
-
|
11660
|
+
for (var i=0; i < len; i++){
|
11661
|
+
guid = guidFor(this[i]);
|
11662
|
+
delete this[guid];
|
11663
|
+
delete this[i];
|
11428
11664
|
}
|
11429
|
-
}
|
11430
|
-
}
|
11431
|
-
|
11432
|
-
/**
|
11433
|
-
This is the object instance returned when you get the `@each` property on an
|
11434
|
-
array. It uses the unknownProperty handler to automatically create
|
11435
|
-
EachArray instances for property names.
|
11436
11665
|
|
11437
|
-
|
11438
|
-
@class EachProxy
|
11439
|
-
@namespace Ember
|
11440
|
-
@extends Ember.Object
|
11441
|
-
*/
|
11442
|
-
Ember.EachProxy = Ember.Object.extend({
|
11666
|
+
set(this, 'length', 0);
|
11443
11667
|
|
11444
|
-
|
11445
|
-
|
11446
|
-
this.
|
11447
|
-
content.addArrayObserver(this);
|
11668
|
+
Ember.propertyDidChange(this, 'firstObject');
|
11669
|
+
Ember.propertyDidChange(this, 'lastObject');
|
11670
|
+
this.enumerableContentDidChange(len, 0);
|
11448
11671
|
|
11449
|
-
|
11450
|
-
// added
|
11451
|
-
forEach(Ember.watchedEvents(this), function(eventName) {
|
11452
|
-
this.didAddListener(eventName);
|
11453
|
-
}, this);
|
11672
|
+
return this;
|
11454
11673
|
},
|
11455
11674
|
|
11456
11675
|
/**
|
11457
|
-
|
11458
|
-
|
11676
|
+
Returns true if the passed object is also an enumerable that contains the
|
11677
|
+
same objects as the receiver.
|
11459
11678
|
|
11460
|
-
|
11461
|
-
|
11462
|
-
|
11679
|
+
```javascript
|
11680
|
+
var colors = ["red", "green", "blue"],
|
11681
|
+
same_colors = new Ember.Set(colors);
|
11682
|
+
|
11683
|
+
same_colors.isEqual(colors); // true
|
11684
|
+
same_colors.isEqual(["purple", "brown"]); // false
|
11685
|
+
```
|
11686
|
+
|
11687
|
+
@method isEqual
|
11688
|
+
@param {Ember.Set} obj the other object.
|
11689
|
+
@return {Boolean}
|
11463
11690
|
*/
|
11464
|
-
|
11465
|
-
|
11466
|
-
|
11467
|
-
Ember.defineProperty(this, keyName, null, ret);
|
11468
|
-
this.beginObservingContentKey(keyName);
|
11469
|
-
return ret;
|
11470
|
-
},
|
11691
|
+
isEqual: function(obj) {
|
11692
|
+
// fail fast
|
11693
|
+
if (!Ember.Enumerable.detect(obj)) return false;
|
11471
11694
|
|
11472
|
-
|
11473
|
-
|
11474
|
-
// Invokes whenever the content array itself changes.
|
11695
|
+
var loc = get(this, 'length');
|
11696
|
+
if (get(obj, 'length') !== loc) return false;
|
11475
11697
|
|
11476
|
-
|
11477
|
-
|
11698
|
+
while(--loc >= 0) {
|
11699
|
+
if (!obj.contains(this[loc])) return false;
|
11700
|
+
}
|
11478
11701
|
|
11479
|
-
|
11480
|
-
|
11702
|
+
return true;
|
11703
|
+
},
|
11481
11704
|
|
11482
|
-
|
11483
|
-
|
11705
|
+
/**
|
11706
|
+
Adds an object to the set. Only non-`null` objects can be added to a set
|
11707
|
+
and those can only be added once. If the object is already in the set or
|
11708
|
+
the passed value is null this method will have no effect.
|
11484
11709
|
|
11485
|
-
|
11710
|
+
This is an alias for `Ember.MutableEnumerable.addObject()`.
|
11486
11711
|
|
11487
|
-
|
11488
|
-
|
11712
|
+
```javascript
|
11713
|
+
var colors = new Ember.Set();
|
11714
|
+
colors.add("blue"); // ["blue"]
|
11715
|
+
colors.add("blue"); // ["blue"]
|
11716
|
+
colors.add("red"); // ["blue", "red"]
|
11717
|
+
colors.add(null); // ["blue", "red"]
|
11718
|
+
colors.add(undefined); // ["blue", "red"]
|
11719
|
+
```
|
11489
11720
|
|
11490
|
-
|
11491
|
-
|
11492
|
-
|
11721
|
+
@method add
|
11722
|
+
@param {Object} obj The object to add.
|
11723
|
+
@return {Ember.Set} The set itself.
|
11724
|
+
*/
|
11725
|
+
add: Ember.aliasMethod('addObject'),
|
11493
11726
|
|
11494
|
-
|
11495
|
-
|
11727
|
+
/**
|
11728
|
+
Removes the object from the set if it is found. If you pass a `null` value
|
11729
|
+
or an object that is already not in the set, this method will have no
|
11730
|
+
effect. This is an alias for `Ember.MutableEnumerable.removeObject()`.
|
11496
11731
|
|
11497
|
-
|
11498
|
-
Ember.
|
11732
|
+
```javascript
|
11733
|
+
var colors = new Ember.Set(["red", "green", "blue"]);
|
11734
|
+
colors.remove("red"); // ["blue", "green"]
|
11735
|
+
colors.remove("purple"); // ["blue", "green"]
|
11736
|
+
colors.remove(null); // ["blue", "green"]
|
11737
|
+
```
|
11499
11738
|
|
11500
|
-
|
11501
|
-
|
11739
|
+
@method remove
|
11740
|
+
@param {Object} obj The object to remove
|
11741
|
+
@return {Ember.Set} The set itself.
|
11742
|
+
*/
|
11743
|
+
remove: Ember.aliasMethod('removeObject'),
|
11502
11744
|
|
11503
|
-
|
11745
|
+
/**
|
11746
|
+
Removes the last element from the set and returns it, or `null` if it's empty.
|
11504
11747
|
|
11505
|
-
|
11506
|
-
|
11748
|
+
```javascript
|
11749
|
+
var colors = new Ember.Set(["green", "blue"]);
|
11750
|
+
colors.pop(); // "blue"
|
11751
|
+
colors.pop(); // "green"
|
11752
|
+
colors.pop(); // null
|
11753
|
+
```
|
11507
11754
|
|
11508
|
-
|
11509
|
-
|
11755
|
+
@method pop
|
11756
|
+
@return {Object} The removed object from the set or null.
|
11757
|
+
*/
|
11758
|
+
pop: function() {
|
11759
|
+
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
11760
|
+
var obj = this.length > 0 ? this[this.length-1] : null;
|
11761
|
+
this.remove(obj);
|
11762
|
+
return obj;
|
11510
11763
|
},
|
11511
11764
|
|
11512
|
-
|
11513
|
-
|
11514
|
-
|
11765
|
+
/**
|
11766
|
+
Inserts the given object on to the end of the set. It returns
|
11767
|
+
the set itself.
|
11515
11768
|
|
11516
|
-
|
11517
|
-
if (IS_OBSERVER.test(eventName)) {
|
11518
|
-
this.beginObservingContentKey(eventName.slice(0, -7));
|
11519
|
-
}
|
11520
|
-
},
|
11769
|
+
This is an alias for `Ember.MutableEnumerable.addObject()`.
|
11521
11770
|
|
11522
|
-
|
11523
|
-
|
11524
|
-
|
11525
|
-
|
11526
|
-
|
11771
|
+
```javascript
|
11772
|
+
var colors = new Ember.Set();
|
11773
|
+
colors.push("red"); // ["red"]
|
11774
|
+
colors.push("green"); // ["red", "green"]
|
11775
|
+
colors.push("blue"); // ["red", "green", "blue"]
|
11776
|
+
```
|
11527
11777
|
|
11528
|
-
|
11529
|
-
|
11530
|
-
|
11778
|
+
@method push
|
11779
|
+
@return {Ember.Set} The set itself.
|
11780
|
+
*/
|
11781
|
+
push: Ember.aliasMethod('addObject'),
|
11531
11782
|
|
11532
|
-
|
11533
|
-
|
11534
|
-
if (!keys) keys = this._keys = {};
|
11535
|
-
if (!keys[keyName]) {
|
11536
|
-
keys[keyName] = 1;
|
11537
|
-
var content = this._content,
|
11538
|
-
len = get(content, 'length');
|
11539
|
-
addObserverForContentKey(content, keyName, this, 0, len);
|
11540
|
-
} else {
|
11541
|
-
keys[keyName]++;
|
11542
|
-
}
|
11543
|
-
},
|
11783
|
+
/**
|
11784
|
+
Removes the last element from the set and returns it, or `null` if it's empty.
|
11544
11785
|
|
11545
|
-
|
11546
|
-
|
11547
|
-
|
11548
|
-
|
11549
|
-
|
11550
|
-
|
11551
|
-
|
11552
|
-
|
11786
|
+
This is an alias for `Ember.Set.pop()`.
|
11787
|
+
|
11788
|
+
```javascript
|
11789
|
+
var colors = new Ember.Set(["green", "blue"]);
|
11790
|
+
colors.shift(); // "blue"
|
11791
|
+
colors.shift(); // "green"
|
11792
|
+
colors.shift(); // null
|
11793
|
+
```
|
11794
|
+
|
11795
|
+
@method shift
|
11796
|
+
@return {Object} The removed object from the set or null.
|
11797
|
+
*/
|
11798
|
+
shift: Ember.aliasMethod('pop'),
|
11553
11799
|
|
11554
|
-
|
11555
|
-
|
11556
|
-
|
11800
|
+
/**
|
11801
|
+
Inserts the given object on to the end of the set. It returns
|
11802
|
+
the set itself.
|
11557
11803
|
|
11558
|
-
|
11559
|
-
Ember.propertyDidChange(this, keyName);
|
11560
|
-
}
|
11804
|
+
This is an alias of `Ember.Set.push()`
|
11561
11805
|
|
11562
|
-
|
11806
|
+
```javascript
|
11807
|
+
var colors = new Ember.Set();
|
11808
|
+
colors.unshift("red"); // ["red"]
|
11809
|
+
colors.unshift("green"); // ["red", "green"]
|
11810
|
+
colors.unshift("blue"); // ["red", "green", "blue"]
|
11811
|
+
```
|
11563
11812
|
|
11813
|
+
@method unshift
|
11814
|
+
@return {Ember.Set} The set itself.
|
11815
|
+
*/
|
11816
|
+
unshift: Ember.aliasMethod('push'),
|
11564
11817
|
|
11818
|
+
/**
|
11819
|
+
Adds each object in the passed enumerable to the set.
|
11565
11820
|
|
11566
|
-
|
11821
|
+
This is an alias of `Ember.MutableEnumerable.addObjects()`
|
11567
11822
|
|
11823
|
+
```javascript
|
11824
|
+
var colors = new Ember.Set();
|
11825
|
+
colors.addEach(["red", "green", "blue"]); // ["red", "green", "blue"]
|
11826
|
+
```
|
11568
11827
|
|
11828
|
+
@method addEach
|
11829
|
+
@param {Ember.Enumerable} objects the objects to add.
|
11830
|
+
@return {Ember.Set} The set itself.
|
11831
|
+
*/
|
11832
|
+
addEach: Ember.aliasMethod('addObjects'),
|
11569
11833
|
|
11570
|
-
|
11571
|
-
|
11572
|
-
@module ember
|
11573
|
-
@submodule ember-runtime
|
11574
|
-
*/
|
11834
|
+
/**
|
11835
|
+
Removes each object in the passed enumerable to the set.
|
11575
11836
|
|
11837
|
+
This is an alias of `Ember.MutableEnumerable.removeObjects()`
|
11576
11838
|
|
11577
|
-
|
11839
|
+
```javascript
|
11840
|
+
var colors = new Ember.Set(["red", "green", "blue"]);
|
11841
|
+
colors.removeEach(["red", "blue"]); // ["green"]
|
11842
|
+
```
|
11578
11843
|
|
11579
|
-
|
11580
|
-
|
11581
|
-
|
11582
|
-
|
11844
|
+
@method removeEach
|
11845
|
+
@param {Ember.Enumerable} objects the objects to remove.
|
11846
|
+
@return {Ember.Set} The set itself.
|
11847
|
+
*/
|
11848
|
+
removeEach: Ember.aliasMethod('removeObjects'),
|
11583
11849
|
|
11584
|
-
//
|
11585
|
-
//
|
11586
|
-
|
11587
|
-
|
11588
|
-
|
11589
|
-
|
11850
|
+
// ..........................................................
|
11851
|
+
// PRIVATE ENUMERABLE SUPPORT
|
11852
|
+
//
|
11853
|
+
|
11854
|
+
init: function(items) {
|
11855
|
+
this._super();
|
11856
|
+
if (items) this.addObjects(items);
|
11590
11857
|
},
|
11591
11858
|
|
11592
|
-
|
11859
|
+
// implement Ember.Enumerable
|
11860
|
+
nextObject: function(idx) {
|
11593
11861
|
return this[idx];
|
11594
11862
|
},
|
11595
11863
|
|
11596
|
-
//
|
11597
|
-
|
11598
|
-
|
11599
|
-
|
11600
|
-
|
11601
|
-
// if we replaced exactly the same number of items, then pass only the
|
11602
|
-
// replaced range. Otherwise, pass the full remaining array length
|
11603
|
-
// since everything has shifted
|
11604
|
-
var len = objects ? get(objects, 'length') : 0;
|
11605
|
-
this.arrayContentWillChange(idx, amt, len);
|
11864
|
+
// more optimized version
|
11865
|
+
firstObject: Ember.computed(function() {
|
11866
|
+
return this.length > 0 ? this[0] : undefined;
|
11867
|
+
}),
|
11606
11868
|
|
11607
|
-
|
11608
|
-
|
11609
|
-
|
11610
|
-
|
11611
|
-
this.splice.apply(this,args) ;
|
11612
|
-
}
|
11869
|
+
// more optimized version
|
11870
|
+
lastObject: Ember.computed(function() {
|
11871
|
+
return this.length > 0 ? this[this.length-1] : undefined;
|
11872
|
+
}),
|
11613
11873
|
|
11614
|
-
|
11615
|
-
|
11616
|
-
|
11874
|
+
// implements Ember.MutableEnumerable
|
11875
|
+
addObject: function(obj) {
|
11876
|
+
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
11877
|
+
if (none(obj)) return this; // nothing to do
|
11617
11878
|
|
11618
|
-
|
11619
|
-
|
11620
|
-
|
11621
|
-
|
11622
|
-
if ((value !== undefined) && ret === undefined) {
|
11623
|
-
ret = this[key] = value;
|
11624
|
-
}
|
11625
|
-
return ret ;
|
11626
|
-
},
|
11879
|
+
var guid = guidFor(obj),
|
11880
|
+
idx = this[guid],
|
11881
|
+
len = get(this, 'length'),
|
11882
|
+
added ;
|
11627
11883
|
|
11628
|
-
|
11629
|
-
// specialized version
|
11630
|
-
indexOf: function(object, startAt) {
|
11631
|
-
var idx, len = this.length;
|
11884
|
+
if (idx>=0 && idx<len && (this[idx] === obj)) return this; // added
|
11632
11885
|
|
11633
|
-
|
11634
|
-
else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
|
11635
|
-
if (startAt < 0) startAt += len;
|
11886
|
+
added = [obj];
|
11636
11887
|
|
11637
|
-
|
11638
|
-
|
11639
|
-
}
|
11640
|
-
return -1;
|
11641
|
-
},
|
11888
|
+
this.enumerableContentWillChange(null, added);
|
11889
|
+
Ember.propertyWillChange(this, 'lastObject');
|
11642
11890
|
|
11643
|
-
|
11644
|
-
|
11891
|
+
len = get(this, 'length');
|
11892
|
+
this[guid] = len;
|
11893
|
+
this[len] = obj;
|
11894
|
+
set(this, 'length', len+1);
|
11645
11895
|
|
11646
|
-
|
11647
|
-
|
11648
|
-
if (startAt < 0) startAt += len;
|
11896
|
+
Ember.propertyDidChange(this, 'lastObject');
|
11897
|
+
this.enumerableContentDidChange(null, added);
|
11649
11898
|
|
11650
|
-
|
11651
|
-
if (this[idx] === object) return idx ;
|
11652
|
-
}
|
11653
|
-
return -1;
|
11899
|
+
return this;
|
11654
11900
|
},
|
11655
11901
|
|
11656
|
-
|
11657
|
-
|
11658
|
-
|
11659
|
-
|
11902
|
+
// implements Ember.MutableEnumerable
|
11903
|
+
removeObject: function(obj) {
|
11904
|
+
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
11905
|
+
if (none(obj)) return this; // nothing to do
|
11660
11906
|
|
11661
|
-
|
11662
|
-
|
11663
|
-
|
11907
|
+
var guid = guidFor(obj),
|
11908
|
+
idx = this[guid],
|
11909
|
+
len = get(this, 'length'),
|
11910
|
+
isFirst = idx === 0,
|
11911
|
+
isLast = idx === len-1,
|
11912
|
+
last, removed;
|
11664
11913
|
|
11665
|
-
// Remove any methods implemented natively so we don't override them
|
11666
|
-
var ignore = ['length'];
|
11667
|
-
Ember.EnumerableUtils.forEach(NativeArray.keys(), function(methodName) {
|
11668
|
-
if (Array.prototype[methodName]) ignore.push(methodName);
|
11669
|
-
});
|
11670
11914
|
|
11671
|
-
if (
|
11672
|
-
|
11673
|
-
}
|
11915
|
+
if (idx>=0 && idx<len && (this[idx] === obj)) {
|
11916
|
+
removed = [obj];
|
11674
11917
|
|
11675
|
-
|
11676
|
-
|
11677
|
-
|
11678
|
-
have `Ember.EXTEND_PROTOTYPES or `Ember.EXTEND_PROTOTYPES.Array` set to
|
11679
|
-
false, this will be applied automatically. Otherwise you can apply the mixin
|
11680
|
-
at anytime by calling `Ember.NativeArray.activate`.
|
11918
|
+
this.enumerableContentWillChange(removed, null);
|
11919
|
+
if (isFirst) { Ember.propertyWillChange(this, 'firstObject'); }
|
11920
|
+
if (isLast) { Ember.propertyWillChange(this, 'lastObject'); }
|
11681
11921
|
|
11682
|
-
|
11683
|
-
|
11684
|
-
|
11685
|
-
|
11686
|
-
|
11687
|
-
|
11688
|
-
@uses Ember.Freezable
|
11689
|
-
*/
|
11690
|
-
Ember.NativeArray = NativeArray;
|
11922
|
+
// swap items - basically move the item to the end so it can be removed
|
11923
|
+
if (idx < len-1) {
|
11924
|
+
last = this[len-1];
|
11925
|
+
this[idx] = last;
|
11926
|
+
this[guidFor(last)] = idx;
|
11927
|
+
}
|
11691
11928
|
|
11692
|
-
|
11693
|
-
|
11694
|
-
|
11929
|
+
delete this[guid];
|
11930
|
+
delete this[len-1];
|
11931
|
+
set(this, 'length', len-1);
|
11695
11932
|
|
11696
|
-
|
11697
|
-
|
11698
|
-
|
11699
|
-
|
11700
|
-
Ember.A = function(arr){
|
11701
|
-
if (arr === undefined) { arr = []; }
|
11702
|
-
return Ember.Array.detect(arr) ? arr : Ember.NativeArray.apply(arr);
|
11703
|
-
};
|
11933
|
+
if (isFirst) { Ember.propertyDidChange(this, 'firstObject'); }
|
11934
|
+
if (isLast) { Ember.propertyDidChange(this, 'lastObject'); }
|
11935
|
+
this.enumerableContentDidChange(removed, null);
|
11936
|
+
}
|
11704
11937
|
|
11705
|
-
|
11706
|
-
|
11707
|
-
this method more than once is safe.
|
11938
|
+
return this;
|
11939
|
+
},
|
11708
11940
|
|
11709
|
-
|
11710
|
-
|
11711
|
-
|
11712
|
-
|
11713
|
-
*/
|
11714
|
-
Ember.NativeArray.activate = function() {
|
11715
|
-
NativeArray.apply(Array.prototype);
|
11941
|
+
// optimized version
|
11942
|
+
contains: function(obj) {
|
11943
|
+
return this[guidFor(obj)]>=0;
|
11944
|
+
},
|
11716
11945
|
|
11717
|
-
|
11718
|
-
|
11946
|
+
copy: function() {
|
11947
|
+
var C = this.constructor, ret = new C(), loc = get(this, 'length');
|
11948
|
+
set(ret, 'length', loc);
|
11949
|
+
while(--loc>=0) {
|
11950
|
+
ret[loc] = this[loc];
|
11951
|
+
ret[guidFor(this[loc])] = loc;
|
11952
|
+
}
|
11953
|
+
return ret;
|
11954
|
+
},
|
11719
11955
|
|
11720
|
-
|
11721
|
-
|
11722
|
-
|
11956
|
+
toString: function() {
|
11957
|
+
var len = this.length, idx, array = [];
|
11958
|
+
for(idx = 0; idx < len; idx++) {
|
11959
|
+
array[idx] = this[idx];
|
11960
|
+
}
|
11961
|
+
return fmt("Ember.Set<%@>", [array.join(',')]);
|
11962
|
+
}
|
11723
11963
|
|
11964
|
+
});
|
11724
11965
|
|
11725
11966
|
})();
|
11726
11967
|
|
@@ -11728,7 +11969,6 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Array) {
|
|
11728
11969
|
|
11729
11970
|
(function() {
|
11730
11971
|
var DeferredMixin = Ember.DeferredMixin, // mixins/deferred
|
11731
|
-
EmberObject = Ember.Object, // system/object
|
11732
11972
|
get = Ember.get;
|
11733
11973
|
|
11734
11974
|
var Deferred = Ember.Object.extend(DeferredMixin);
|
@@ -12051,7 +12291,6 @@ Ember.SortableMixin = Ember.Mixin.create(Ember.MutableEnumerable, {
|
|
12051
12291
|
|
12052
12292
|
if (isSorted) {
|
12053
12293
|
var addedObjects = array.slice(idx, idx+addedCount);
|
12054
|
-
var arrangedContent = get(this, 'arrangedContent');
|
12055
12294
|
|
12056
12295
|
forEach(addedObjects, function(item) {
|
12057
12296
|
this.insertItemSorted(item);
|
@@ -12121,8 +12360,8 @@ Ember.SortableMixin = Ember.Mixin.create(Ember.MutableEnumerable, {
|
|
12121
12360
|
@submodule ember-runtime
|
12122
12361
|
*/
|
12123
12362
|
|
12124
|
-
var get = Ember.get, set = Ember.set,
|
12125
|
-
|
12363
|
+
var get = Ember.get, set = Ember.set, forEach = Ember.EnumerableUtils.forEach,
|
12364
|
+
replace = Ember.EnumerableUtils.replace;
|
12126
12365
|
|
12127
12366
|
/**
|
12128
12367
|
`Ember.ArrayController` provides a way for you to publish a collection of
|