ember-source 1.0.0.rc8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ember-source might be problematic. Click here for more details.
- checksums.yaml +6 -14
- data/VERSION +1 -1
- data/dist/ember-data-deps.js +909 -1597
- data/dist/ember-data-deps.min.js +6 -6
- data/dist/ember-data-deps.prod.js +892 -1591
- data/dist/ember-debug.js +14 -2
- data/dist/ember-runtime.js +909 -113
- data/dist/ember-runtime.min.js +6 -6
- data/dist/ember-runtime.prod.js +892 -108
- data/dist/ember-spade.js +1 -1
- data/dist/ember-template-compiler.js +3 -12
- data/dist/ember-template-compiler.min.js +3 -3
- data/dist/ember-template-compiler.prod.js +0 -9
- data/dist/ember-tests.js +1 -1
- data/dist/ember.js +1302 -1799
- data/dist/ember.min.js +10 -10
- data/dist/ember.prod.js +1260 -1785
- data/lib/ember/version.rb +6 -2
- metadata +6 -14
- data/dist/ember-old-router.js +0 -28808
- data/dist/ember-old-router.min.js +0 -21
- data/dist/ember-old-router.prod.js +0 -28605
- data/dist/ember-params.js +0 -32394
- data/dist/ember-snork.js +0 -32321
- data/dist/ember2.js +0 -32377
- data/dist/ember3.js +0 -32379
data/dist/ember-data-deps.min.js
CHANGED
@@ -8,11 +8,11 @@
|
|
8
8
|
// ==========================================================================
|
9
9
|
|
10
10
|
|
11
|
-
// Version: v1.0.0
|
12
|
-
// Last commit:
|
11
|
+
// Version: v1.0.0
|
12
|
+
// Last commit: e2ea0cf (2013-08-31 23:47:39 -0700)
|
13
13
|
|
14
14
|
|
15
|
-
!function(){var e,t;!function(){var r={},n={};e=function(e,t,n){r[e]={deps:t,callback:n}},t=function(e){if(n[e])return n[e];n[e]={};var i,o,s,a,u;if(i=r[e],!i)throw new Error("Module '"+e+"' not found.");o=i.deps,s=i.callback,a=[];for(var c=0,h=o.length;h>c;c++)"exports"===o[c]?a.push(u={}):a.push(t(o[c]));var l=s.apply(this,a);return n[e]=u||l}}(),function(){function e(e){var t;r.console?t=r.console:"undefined"!=typeof console&&(t=console);var n="object"==typeof t?t[e]:null;return n?n.apply?function(){n.apply(t,arguments)}:function(){var e=Array.prototype.join.call(arguments,", ");n(e)}:void 0}function t(e,t){if(!e)try{throw new Error("assertion failed: "+t)}catch(r){setTimeout(function(){throw r},0)}}"undefined"==typeof Ember&&(Ember={});var r=Ember.imports=Ember.imports||this,n=Ember.exports=Ember.exports||this;Ember.lookup=Ember.lookup||this,n.Em=n.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.8","undefined"==typeof ENV&&(n.ENV={}),"undefined"==typeof ENV.DISABLE_RANGE_API&&(ENV.DISABLE_RANGE_API=!0),Ember.ENV=Ember.ENV||ENV,Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,"undefined"==typeof Ember.EXTEND_PROTOTYPES&&(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:e("log")||Ember.K,warn:e("warn")||Ember.K,error:e("error")||Ember.K,info:e("info")||Ember.K,debug:e("debug")||e("info")||Ember.K,assert:e("assert")||t},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.call(t||this);try{return e.call(t||this)}catch(r){Ember.onerror(r)}},Ember.merge=function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},Ember.isNone=function(e){return null===e||void 0===e},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return Ember.isNone(e)||0===e.length&&"function"!=typeof e||"object"==typeof e&&0===Ember.get(e,"length")},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty)}(),function(){var e=Ember.platform={};if(Ember.create=Object.create,Ember.create&&2!==Ember.create({a:1},{a:{value:2}}).a&&(Ember.create=null),!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,r){if(t.prototype=e,e=new t,r){t.prototype=e;for(var n in r)t.prototype[n]=r[n].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var r,n,i=Object.defineProperty;if(i)try{i({},"a",{get:function(){}})}catch(o){i=null}i&&(r=function(){var e={};return i(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),i(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),n=function(){try{return i(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?n||(i=function(e,t,r){var n;return n="object"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName,n?e[t]=r.value:Object.defineProperty(e,t,r)}):i=null),e.defineProperty=i,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,r){r.get||(e[t]=r.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),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(void 0===this||null===this)throw new TypeError;var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var n=new Array(r),i=arguments[1],o=0;r>o;o++)o in t&&(n[o]=e.call(i,t[o],o,t));return n},r=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(void 0===this||null===this)throw new TypeError;var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var n=arguments[1],i=0;r>i;i++)i in t&&e.call(n,t[i],i,t)},n=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){null===t||void 0===t?t=0:0>t&&(t=Math.max(0,this.length+t));for(var r=t,n=this.length;n>r;r++)if(this[r]===e)return r;return-1};Ember.ArrayPolyfills={map:t,forEach:r,indexOf:n},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=r),Array.prototype.indexOf||(Array.prototype.indexOf=n))}(),function(){function e(e){this.descs={},this.watching={},this.cache={},this.source=e}function t(e,t){return!(!e||"function"!=typeof e[t])}var r=Ember.platform.defineProperty,n=Ember.create,i="__ember"+ +new Date,o=0,s=[],a={},u=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=i;var c={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(e,t){t||(t="ember");var n=t+o++;return e&&(c.value=n,r(e,i,c)),n},Ember.guidFor=function(e){if(void 0===e)return"(undefined)";if(null===e)return"(null)";var t,n=typeof e;switch(n){case"number":return t=s[e],t||(t=s[e]="nu"+e),t;case"string":return t=a[e],t||(t=a[e]="st"+o++),t;case"boolean":return e?"(true)":"(false)";default:return e[i]?e[i]:e===Object?"(Object)":e===Array?"(Array)":(t="ember"+o++,c.value=t,r(e,i,c),t)}};var h={writable:!0,configurable:!1,enumerable:!1,value:null},l=Ember.GUID_KEY+"_meta";Ember.META_KEY=l;var f={descs:{},watching:{}};u&&(f.values={}),Ember.EMPTY_META=f,Object.freeze&&Object.freeze(f);var m=Ember.platform.defineProperty.isSimulated;m&&(e.prototype.__preventPlainObject__=!0,e.prototype.toJSON=function(){}),Ember.meta=function(t,i){var o=t[l];return i===!1?o||f:(o?o.source!==t&&(m||r(t,l,h),o=n(o),o.descs=n(o.descs),o.watching=n(o.watching),o.cache={},o.source=t,u&&(o.values=n(o.values)),t[l]=o):(m||r(t,l,h),o=new e(t),u&&(o.values={}),t[l]=o,o.descs.constructor=null),o)},Ember.getMeta=function(e,t){var r=Ember.meta(e,!1);return r[t]},Ember.setMeta=function(e,t,r){var n=Ember.meta(e,!0);return n[t]=r,r},Ember.metaPath=function(e,t,r){for(var i,o,s=Ember.meta(e,r),a=0,u=t.length;u>a;a++){if(i=t[a],o=s[i]){if(o.__ember_source__!==e){if(!r)return void 0;o=s[i]=n(o),o.__ember_source__=e}}else{if(!r)return void 0;o=s[i]={__ember_source__:e}}s=o}return o},Ember.wrap=function(e,t){function r(){}function n(){var n,i=this._super;return this._super=t||r,n=e.apply(this,arguments),this._super=i,n}return n.wrappedFunction=e,n.__ember_observes__=e.__ember_observes__,n.__ember_observesBefore__=e.__ember_observesBefore__,n.__ember_listens__=e.__ember_listens__,n},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:void 0!==e.length&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return null===e||void 0===e?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=t,Ember.tryInvoke=function(e,r,n){return t(e,r)?e[r].apply(e,n||[]):void 0};var p=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return 1!==e}();Ember.tryFinally=p?function(e,t,r){var n,i,o;r=r||this;try{n=e.call(r)}finally{try{i=t.call(r)}catch(s){o=s}}if(o)throw o;return void 0===i?n:i}:function(e,t,r){var n,i;r=r||this;try{n=e.call(r)}finally{i=t.call(r)}return void 0===i?n:i},Ember.tryCatchFinally=p?function(e,t,r,n){var i,o,s;n=n||this;try{i=e.call(n)}catch(a){i=t.call(n,a)}finally{try{o=r.call(n)}catch(u){s=u}}if(s)throw s;return void 0===o?i:o}:function(e,t,r,n){var i,o;n=n||this;try{i=e.call(n)}catch(s){i=t.call(n,s)}finally{o=r.call(n)}return void 0===o?i:o};var b={},d="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(d,function(e){b["[object "+e+"]"]=e.toLowerCase()});var E=Object.prototype.toString;Ember.typeOf=function(e){var t;return t=null===e||void 0===e?String(e):b[E.call(e)]||"object","function"===t?Ember.Object&&Ember.Object.detect(e)&&(t="class"):"object"===t&&(t=e instanceof Error?"error":Ember.Object&&e instanceof Ember.Object?"instance":"object"),t}}(),function(){Ember.Instrumentation={};var e=[],t={},r=function(r){for(var n,i=[],o=0,s=e.length;s>o;o++)n=e[o],n.regex.test(r)&&i.push(n.object);return t[r]=i,i},n=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,o,s){function a(){for(p=0,b=f.length;b>p;p++)m=f[p],d[p]=m.before(e,n(),i);return o.call(s)}function u(e){i=i||{},i.exception=e}function c(){for(p=0,b=f.length;b>p;p++)m=f[p],m.after(e,n(),i,d[p]);Ember.STRUCTURED_PROFILE&&console.timeEnd(h)}var h,l,f=t[e];if(Ember.STRUCTURED_PROFILE&&(h=e+": "+i.object,console.time(h)),f||(f=r(e)),0===f.length)return l=o.call(s),Ember.STRUCTURED_PROFILE&&console.timeEnd(h),l;var m,p,b,d=[];return Ember.tryCatchFinally(a,u,c)},Ember.Instrumentation.subscribe=function(r,n){for(var i,o=r.split("."),s=[],a=0,u=o.length;u>a;a++)i=o[a],"*"===i?s.push("[^\\.]*"):s.push(i);s=s.join("\\."),s+="(\\..*)?";var c={pattern:r,regex:new RegExp("^"+s+"$"),object:n};return e.push(c),t={},c},Ember.Instrumentation.unsubscribe=function(r){for(var n,i=0,o=e.length;o>i;i++)e[i]===r&&(n=i);e.splice(n,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e,t,r,n;e=Array.prototype.map||Ember.ArrayPolyfills.map,t=Array.prototype.forEach||Ember.ArrayPolyfills.forEach,r=Array.prototype.indexOf||Ember.ArrayPolyfills.indexOf,n=Array.prototype.splice;var i=Ember.EnumerableUtils={map:function(t,r,n){return t.map?t.map.call(t,r,n):e.call(t,r,n)},forEach:function(e,r,n){return e.forEach?e.forEach.call(e,r,n):t.call(e,r,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):r.call(e,t,n)},indexesOf:function(e,t){return void 0===t?[]:i.map(t,function(t){return i.indexOf(e,t)})},addObject:function(e,t){var r=i.indexOf(e,t);-1===r&&e.push(t)},removeObject:function(e,t){var r=i.indexOf(e,t);-1!==r&&e.splice(r,1)},_replace:function(e,t,r,i){for(var o,s,a=[].concat(i),u=[],c=6e4,h=t,l=r;a.length;)s=l>c?c:l,0>=s&&(s=0),o=a.splice(0,c),o=[h,s].concat(o),h+=c,l-=s,u=u.concat(n.apply(e,o));return u},replace:function(e,t,r,n){return e.replace?e.replace(t,r,n):i._replace(e,t,r,n)},intersection:function(e,t){var r=[];return i.forEach(e,function(e){i.indexOf(t,e)>=0&&r.push(e)}),r}}}(),function(){var e,t=Ember.META_KEY,r=Ember.ENV.MANDATORY_SETTER,n=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,i=/^this[\.\*]/,o=/^([^\.\*]+)/;e=function(e,n){if(""===n)return e;if(n||"string"!=typeof e||(n=e,e=null),null===e||-1!==n.indexOf("."))return a(e,n);var i,o=e[t],s=o&&o.descs[n];return s?s.get(e,n):(i=r&&o&&o.watching[n]>0?o.values[n]:e[n],void 0!==i||"object"!=typeof e||n in e||"function"!=typeof e.unknownProperty?i:e.unknownProperty(n))},Ember.config.overrideAccessors&&(Ember.get=e,Ember.config.overrideAccessors(),e=Ember.get);var s=Ember.normalizeTuple=function(t,r){var s,a=i.test(r),u=!a&&n.test(r);if((!t||u)&&(t=Ember.lookup),a&&(r=r.slice(5)),t===Ember.lookup&&(s=r.match(o)[0],t=e(t,s),r=r.slice(s.length+1)),!r||0===r.length)throw new Error("Invalid Path");return[t,r]},a=Ember._getPath=function(t,r){var n,o,a,u,c;if(null===t&&-1===r.indexOf("."))return e(Ember.lookup,r);for(n=i.test(r),(!t||n)&&(a=s(t,r),t=a[0],r=a[1],a.length=0),o=r.split("."),c=o.length,u=0;null!=t&&c>u;u++)if(t=e(t,o[u],!0),t&&t.isDestroyed)return void 0;return t};Ember.getWithDefault=function(t,r,n){var i=e(t,r);return void 0===i?n:i},Ember.get=e,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get)}(),function(){function e(e,t,r){for(var n=-1,i=0,o=e.length;o>i;i+=3)if(t===e[i]&&r===e[i+1]){n=i;break}return n}function t(e,t){var r,n=m(e,!0);return n.listeners||(n.listeners={}),n.hasOwnProperty("listeners")||(n.listeners=f(n.listeners)),r=n.listeners[t],r&&!n.listeners.hasOwnProperty(t)?r=n.listeners[t]=n.listeners[t].slice():r||(r=n.listeners[t]=[]),r}function r(t,r,n){var i=t[p],o=i&&i.listeners&&i.listeners[r];if(o)for(var s=o.length-3;s>=0;s-=3){var a=o[s],u=o[s+1],c=o[s+2],h=e(n,a,u);-1===h&&n.push(a,u,c)}}function n(t,r,n){var i=t[p],o=i&&i.listeners&&i.listeners[r],s=[];if(o){for(var a=o.length-3;a>=0;a-=3){var u=o[a],c=o[a+1],h=o[a+2],l=e(n,u,c);-1===l&&(n.push(u,c,h),s.push(u,c,h))}return s}}function i(r,n,i,o,s){o||"function"!=typeof i||(o=i,i=null);var a=t(r,n),u=e(a,i,o),c=0;s&&(c|=d),-1===u&&(a.push(i,o,c),"function"==typeof r.didAddListener&&r.didAddListener(n,i,o))}function o(r,n,i,o){function s(i,o){var s=t(r,n),a=e(s,i,o);-1!==a&&(s.splice(a,3),"function"==typeof r.didRemoveListener&&r.didRemoveListener(n,i,o))}if(o||"function"!=typeof i||(o=i,i=null),o)s(i,o);else{var a=r[p],u=a&&a.listeners&&a.listeners[n];if(!u)return;for(var c=u.length-3;c>=0;c-=3)s(u[c],u[c+1])}}function s(r,n,i,o,s){function a(){return s.call(i)}function u(){-1!==h&&(c[h+2]&=~E)}o||"function"!=typeof i||(o=i,i=null);var c=t(r,n),h=e(c,i,o);return-1!==h&&(c[h+2]|=E),Ember.tryFinally(a,u)}function a(r,n,i,o,s){function a(){return s.call(i)}function u(){for(var e=0,t=m.length;t>e;e++){var r=m[e];h[r+2]&=~E}}o||"function"!=typeof i||(o=i,i=null);var c,h,l,f,m=[];for(l=0,f=n.length;f>l;l++){c=n[l],h=t(r,c);var p=e(h,i,o);-1!==p&&(h[p+2]|=E,m.push(p))}return Ember.tryFinally(a,u)}function u(e){var t=e[p].listeners,r=[];if(t)for(var n in t)t[n]&&r.push(n);return r}function c(e,t,r,n){if(e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,r),!n){var i=e[p];n=i&&i.listeners&&i.listeners[t]}if(n){for(var s=n.length-3;s>=0;s-=3){var a=n[s],u=n[s+1],c=n[s+2];u&&(c&E||(c&d&&o(e,t,a,u),a||(a=e),"string"==typeof u&&(u=a[u]),r?u.apply(a,r):u.call(a)))}return!0}}function h(e,t){var r=e[p],n=r&&r.listeners&&r.listeners[t];return!(!n||!n.length)}function l(e,t){var r=[],n=e[p],i=n&&n.listeners&&n.listeners[t];if(!i)return r;for(var o=0,s=i.length;s>o;o+=3){var a=i[o],u=i[o+1];r.push([a,u])}return r}var f=Ember.create,m=Ember.meta,p=Ember.META_KEY,b=[].slice,d=1,E=2;Ember.on=function(){var e=b.call(arguments,-1)[0],t=b.call(arguments,0,-1);return e.__ember_listens__=t,e},Ember.addListener=i,Ember.removeListener=o,Ember._suspendListener=s,Ember._suspendListeners=a,Ember.sendEvent=c,Ember.hasListeners=h,Ember.watchedEvents=u,Ember.listenersFor=l,Ember.listenersDiff=n,Ember.listenersUnion=r}(),function(){var e=Ember.guidFor,t=Ember.sendEvent,r=Ember._ObserverSet=function(){this.clear()};r.prototype.add=function(t,r,n){var i,o=this.observerSet,s=this.observers,a=e(t),u=o[a];return u||(o[a]=u={}),i=u[r],void 0===i&&(i=s.push({sender:t,keyName:r,eventName:n,listeners:[]})-1,u[r]=i),s[i].listeners},r.prototype.flush=function(){var e,r,n,i,o=this.observers;for(this.clear(),e=0,r=o.length;r>e;++e)n=o[e],i=n.sender,i.isDestroying||i.isDestroyed||t(i,n.eventName,[i,n.keyName],n.listeners)},r.prototype.clear=function(){this.observerSet={},this.observers=[]}}(),function(){function e(e,t){var n=l(e,!1),i=n.watching[t]>0||"length"===t,s=n.proto,a=n.descs[t];i&&s!==e&&(a&&a.willChange&&a.willChange(e,t),r(e,t,n),o(e,t,n),c(e,t))}function t(e,t){var r=l(e,!1),i=r.watching[t]>0||"length"===t,o=r.proto,a=r.descs[t];o!==e&&(a&&a.didChange&&a.didChange(e,t),(i||"length"===t)&&(n(e,t,r),s(e,t,r,!1),h(e,t)))}function r(t,r,n){if(!t.isDestroying){var o=_,s=!o;s&&(o=_={}),i(e,t,r,o,n),s&&(_=null)}}function n(e,r,n){if(!e.isDestroying){var o=O,s=!o;s&&(o=O={}),i(t,e,r,o,n),s&&(O=null)}}function i(e,t,r,n,i){var o=f(t);if(n[o]||(n[o]={}),!n[o][r]){n[o][r]=!0;var s=i.deps;if(s=s&&s[r])for(var a in s){var u=i.descs[a];u&&u._suspended===t||e(t,a)}}}function o(t,r,n){if(n.hasOwnProperty("chainWatchers")&&n.chainWatchers[r]){var i,o,s=n.chainWatchers[r],a=[];for(i=0,o=s.length;o>i;i++)s[i].willChange(a);for(i=0,o=a.length;o>i;i+=2)e(a[i],a[i+1])}}function s(e,r,n,i){if(n.hasOwnProperty("chainWatchers")&&n.chainWatchers[r]){var o,s,a=n.chainWatchers[r],u=i?null:[];for(o=0,s=a.length;s>o;o++)a[o].didChange(u);if(!i)for(o=0,s=u.length;s>o;o+=2)t(u[o],u[o+1])}}function a(){g++}function u(){g--,0>=g&&(y.clear(),v.flush())}function c(e,t){if(!e.isDestroying){var r,n,i=t+":before";g?(r=y.add(e,t,i),n=d(e,i,r),p(e,i,[e,t],n)):p(e,i,[e,t])}}function h(e,t){if(!e.isDestroying){var r,n=t+":change";g?(r=v.add(e,t,n),b(e,n,r)):p(e,n,[e,t])}}var l=Ember.meta,f=Ember.guidFor,m=Ember.tryFinally,p=Ember.sendEvent,b=Ember.listenersUnion,d=Ember.listenersDiff,E=Ember._ObserverSet,y=new E,v=new E,g=0;Ember.propertyWillChange=e,Ember.propertyDidChange=t;var _,O;Ember.overrideChains=function(e,t,r){s(e,t,r,!0)},Ember.beginPropertyChanges=a,Ember.endPropertyChanges=u,Ember.changeProperties=function(e,t){a(),m(e,u,t)}}(),function(){function e(e,t,r,o){var s;if(s=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(s.length+1)),"this"!==t&&(e=n(e,t)),!s||0===s.length)throw new Error("You passed an empty path");if(!e){if(o)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return i(e,s,r)}var t=Ember.META_KEY,r=Ember.ENV.MANDATORY_SETTER,n=Ember._getPath,i=function(n,i,o,s){if("string"==typeof n&&(o=i,i=n,n=null),!n||-1!==i.indexOf("."))return e(n,i,o,s);var a,u,c=n[t],h=c&&c.descs[i];return h?h.set(n,i,o):(a="object"==typeof n&&!(i in n),a&&"function"==typeof n.setUnknownProperty?n.setUnknownProperty(i,o):c&&c.watching[i]>0?(u=r?c.values[i]:n[i],o!==u&&(Ember.propertyWillChange(n,i),r?void 0!==u||i in n?c.values[i]=o:Ember.defineProperty(n,i,null,o):n[i]=o,Ember.propertyDidChange(n,i))):n[i]=o),o};Ember.config.overrideAccessors&&(Ember.set=i,Ember.config.overrideAccessors(),i=Ember.set),Ember.set=i,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,r){return i(e,t,r,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet)}(),function(){var e=Ember.set,t=Ember.guidFor,r=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},i=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t.length=e.length,t},o=Ember.OrderedSet=function(){this.clear()};o.create=function(){return new o},o.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(e){var r=t(e),n=this.presenceSet,i=this.list;r in n||(n[r]=!0,i.push(e))},remove:function(e){var n=t(e),i=this.presenceSet,o=this.list;delete i[n];var s=r.call(o,e);s>-1&&o.splice(s,1)},isEmpty:function(){return 0===this.list.length},has:function(e){var r=t(e),n=this.presenceSet;return r in n},forEach:function(e,t){for(var r=this.toArray(),n=0,i=r.length;i>n;n++)e.call(t,r[n])},toArray:function(){return this.list.slice()},copy:function(){var e=new o;return e.presenceSet=n(this.presenceSet),e.list=this.toArray(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={length:0,get:function(e){var r=this.values,n=t(e);return r[n]},set:function(r,n){var i=this.keys,o=this.values,s=t(r);i.add(r),o[s]=n,e(this,"length",i.list.length)},remove:function(r){var n=this.keys,i=this.values,o=t(r);return i.hasOwnProperty(o)?(n.remove(r),delete i[o],e(this,"length",n.list.length),!0):!1},has:function(e){var r=this.values,n=t(e);return r.hasOwnProperty(n)},forEach:function(e,r){var n=this.keys,i=this.values;n.forEach(function(n){var o=t(n);e.call(r,n,i[o])})},copy:function(){return i(this,new s)}};var a=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};a.create=function(e){return e?new a(e):new s},a.prototype=Ember.create(s.prototype),a.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var r=this.defaultValue(e);return this.set(e,r),r},a.prototype.copy=function(){return i(this,new a({defaultValue:this.defaultValue}))}}(),function(){var e=Ember.META_KEY,t=Ember.meta,r=Ember.platform.defineProperty,n=Ember.ENV.MANDATORY_SETTER;Ember.Descriptor=function(){};var i=Ember.MANDATORY_SETTER_FUNCTION=function(){},o=Ember.DEFAULT_GETTER_FUNCTION=function(t){return function(){var r=this[e];return r&&r.values[t]}};Ember.defineProperty=function(e,s,a,u,c){var h,l,f,m;return c||(c=t(e)),h=c.descs,l=c.descs[s],f=c.watching[s]>0,l instanceof Ember.Descriptor&&l.teardown(e,s),a instanceof Ember.Descriptor?(m=a,h[s]=a,n&&f?r(e,s,{configurable:!0,enumerable:!0,writable:!0,value:void 0}):e[s]=void 0):(h[s]=void 0,null==a?(m=u,n&&f?(c.values[s]=u,r(e,s,{configurable:!0,enumerable:!0,set:i,get:o(s)})):e[s]=u):(m=a,r(e,s,a))),f&&Ember.overrideChains(e,s,c),e.didDefineProperty&&e.didDefineProperty(e,s,m),this}}(),function(){var e=Ember.get;Ember.getProperties=function(t){var r={},n=arguments,i=1;2===arguments.length&&"array"===Ember.typeOf(arguments[1])&&(i=0,n=arguments[1]);for(var o=n.length;o>i;i++)r[n[i]]=e(t,n[i]);return r}}(),function(){var e=Ember.changeProperties,t=Ember.set;Ember.setProperties=function(r,n){return e(function(){for(var e in n)n.hasOwnProperty(e)&&t(r,e,n[e])}),r}}(),function(){var e=Ember.meta,t=Ember.typeOf,r=Ember.ENV.MANDATORY_SETTER,n=Ember.platform.defineProperty;Ember.watchKey=function(i,o){if("length"!==o||"array"!==t(i)){var s=e(i),a=s.watching;a[o]?a[o]=(a[o]||0)+1:(a[o]=1,"function"==typeof i.willWatchProperty&&i.willWatchProperty(o),r&&o in i&&(s.values[o]=i[o],n(i,o,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(o)})))}},Ember.unwatchKey=function(t,i){var o=e(t),s=o.watching;1===s[i]?(s[i]=0,"function"==typeof t.didUnwatchProperty&&t.didUnwatchProperty(i),r&&i in t&&(n(t,i,{configurable:!0,enumerable:!0,writable:!0,value:o.values[i]}),delete o.values[i])):s[i]>1&&s[i]--}}(),function(){function e(e){return e.match(h)[0]}function t(e,t,r){if(e&&"object"==typeof e){var i=n(e),o=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(o=i.chainWatchers={}),o[t]||(o[t]=[]),o[t].push(r),u(e,t)}}function r(e,t){if(!e)return void 0;var r=n(e,!1);if(r.proto===e)return void 0;if("@each"===t)return i(e,t);var o=r.descs[t];return o&&o._cacheable?t in r.cache?r.cache[t]:void 0:i(e,t)}var n=Ember.meta,i=Ember.get,o=Ember.normalizeTuple,s=Ember.ArrayPolyfills.forEach,a=Ember.warn,u=Ember.watchKey,c=Ember.unwatchKey,h=/^([^\.\*]+)/,l=[];Ember.flushPendingChains=function(){if(0!==l.length){var e=l;l=[],s.call(e,function(e){e[0].add(e[1])}),a("Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos",0===l.length)}};var f=Ember.removeChainWatcher=function(e,t,r){if(e&&"object"==typeof e){var i=n(e,!1);if(i.hasOwnProperty("chainWatchers")){var o=i.chainWatchers;if(o[t]){o=o[t];for(var s=0,a=o.length;a>s;s++)o[s]===r&&o.splice(s,1)}c(e,t)}}},m=Ember._ChainNode=function(e,r,n){this._parent=e,this._key=r,this._watching=void 0===n,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&t(this._object,this._key,this)),this._parent&&"@each"===this._parent._key&&this.value()},p=m.prototype;p.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=r(e,this._key)}return this._value},p.destroy=function(){if(this._watching){var e=this._object;e&&f(e,this._key,this),this._watching=!1}},p.copy=function(e){var t,r=new m(null,null,e),n=this._paths;for(t in n)n[t]<=0||r.add(t);return r},p.add=function(t){var r,n,i,s,a;if(a=this._paths,a[t]=(a[t]||0)+1,r=this.value(),n=o(r,t),n[0]&&n[0]===r)t=n[1],i=e(t),t=t.slice(i.length+1);else{if(!n[0])return l.push([this,t]),n.length=0,void 0;s=n[0],i=t.slice(0,0-(n[1].length+1)),t=n[1]}n.length=0,this.chain(i,t,s)},p.remove=function(t){var r,n,i,s,a;a=this._paths,a[t]>0&&a[t]--,r=this.value(),n=o(r,t),n[0]===r?(t=n[1],i=e(t),t=t.slice(i.length+1)):(s=n[0],i=t.slice(0,0-(n[1].length+1)),t=n[1]),n.length=0,this.unchain(i,t)},p.count=0,p.chain=function(t,r,n){var i,o=this._chains;o||(o=this._chains={}),i=o[t],i||(i=o[t]=new m(this,t,n)),i.count++,r&&r.length>0&&(t=e(r),r=r.slice(t.length+1),i.chain(t,r))},p.unchain=function(t,r){var n=this._chains,i=n[t];r&&r.length>1&&(t=e(r),r=r.slice(t.length+1),i.unchain(t,r)),i.count--,i.count<=0&&(delete n[i._key],i.destroy())},p.willChange=function(e){var t=this._chains;if(t)for(var r in t)t.hasOwnProperty(r)&&t[r].willChange(e);this._parent&&this._parent.chainWillChange(this,this._key,1,e)},p.chainWillChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},p.chainDidChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},p.didChange=function(e){if(this._watching){var r=this._parent.value();r!==this._object&&(f(this._object,this._key,this),this._object=r,t(r,this._key,this)),this._value=void 0,this._parent&&"@each"===this._parent._key&&this.value()}var n=this._chains;if(n)for(var i in n)n.hasOwnProperty(i)&&n[i].didChange(e);null!==e&&this._parent&&this._parent.chainDidChange(this,this._key,1,e)},Ember.finishChains=function(e){var t=n(e,!1),r=t.chains;r&&(r.value()!==e&&(t.chains=r=r.copy(e)),r.didChange(null))}}(),function(){function e(e){var r=t(e),i=r.chains;return i?i.value()!==e&&(i=r.chains=i.copy(e)):i=r.chains=new n(null,null,e),i}var t=Ember.meta,r=Ember.typeOf,n=Ember._ChainNode;Ember.watchPath=function(n,i){if("length"!==i||"array"!==r(n)){var o=t(n),s=o.watching;s[i]?s[i]=(s[i]||0)+1:(s[i]=1,e(n).add(i))}},Ember.unwatchPath=function(r,n){var i=t(r),o=i.watching;1===o[n]?(o[n]=0,e(r).remove(n)):o[n]>1&&o[n]--}}(),function(){function e(e){return"*"===e||!l.test(e)}var t=Ember.meta,r=Ember.GUID_KEY,n=Ember.META_KEY,i=Ember.removeChainWatcher,o=Ember.watchKey,s=Ember.unwatchKey,a=Ember.watchPath,u=Ember.unwatchPath,c=Ember.typeOf,h=Ember.generateGuid,l=/[\.\*]/;Ember.watch=function(t,r){("length"!==r||"array"!==c(t))&&(e(r)?o(t,r):a(t,r))},Ember.isWatching=function(e,t){var r=e[n];return(r&&r.watching[t])>0},Ember.watch.flushPending=Ember.flushPendingChains,Ember.unwatch=function(t,r){("length"!==r||"array"!==c(t))&&(e(r)?s(t,r):u(t,r))},Ember.rewatch=function(e){var n=t(e,!1),i=n.chains;r in e&&!e.hasOwnProperty(r)&&h(e,"ember"),i&&i.value()!==e&&(n.chains=i.copy(e))};var f=[];Ember.destroy=function(e){var t,r,o,s,a=e[n];if(a&&(e[n]=null,t=a.chains))for(f.push(t);f.length>0;){if(t=f.pop(),r=t._chains)for(o in r)r.hasOwnProperty(o)&&f.push(r[o]);t._watching&&(s=t._object,s&&i(s,t._key,t))}}}(),function(){function e(e,t){var r=e[t];return r?e.hasOwnProperty(t)||(r=e[t]=m(r)):r=e[t]={},r}function t(t){return e(t,"deps")}function r(r,n,i,o){var s,a,u,c,h,l=r._dependentKeys;if(l)for(s=t(o),a=0,u=l.length;u>a;a++)c=l[a],h=e(s,c),h[i]=(h[i]||0)+1,p(n,c)}function n(r,n,i,o){var s,a,u,c,h,l=r._dependentKeys;if(l)for(s=t(o),a=0,u=l.length;u>a;a++)c=l[a],h=e(s,c),h[i]=(h[i]||0)-1,b(n,c)}function i(e,t){this.func=e,this._cacheable=t&&void 0!==t.cacheable?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(void 0!==t.readOnly||!!t.readOnly)}function o(e){for(var t=0,r=e.length;r>t;t++)e[t].didChange(null)}function s(e,t){for(var r={},n=0;n<t.length;n++)r[t[n]]=c(e,t[n]);return r}function a(e,t){Ember.computed[e]=function(e){var r=f.call(arguments);return Ember.computed(e,function(){return t.apply(this,r)})}}function u(e,t){Ember.computed[e]=function(){var e=f.call(arguments),r=Ember.computed(function(){return t.apply(this,[s(this,e)])});return r.property.apply(r,e)}}var c=Ember.get,h=Ember.set,l=Ember.meta,f=[].slice,m=Ember.create,p=(Ember.META_KEY,Ember.watch),b=Ember.unwatch;Ember.ComputedProperty=i,i.prototype=new Ember.Descriptor;var d=i.prototype;d.cacheable=function(e){return this._cacheable=e!==!1,this},d.volatile=function(){return this.cacheable(!1)},d.readOnly=function(e){return this._readOnly=void 0===e||!!e,this},d.property=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return this._dependentKeys=e,this},d.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},d.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=l(e);t in r.cache&&(delete r.cache[t],n(this,e,t,r))}},d.get=function(e,t){var n,i,s,a;if(this._cacheable){if(s=l(e),i=s.cache,t in i)return i[t];n=i[t]=this.func.call(e,t),a=s.chainWatchers&&s.chainWatchers[t],a&&o(a),r(this,e,t,s)}else n=this.func.call(e,t);return n},d.set=function(e,t,n){var i,o,s,a=this._cacheable,u=this.func,c=l(e,a),h=c.watching[t],f=this._suspended,m=!1,p=c.cache;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{if(a&&p.hasOwnProperty(t)&&(o=p[t],m=!0),i=u.wrappedFunction?u.wrappedFunction.length:u.length,3===i)s=u.call(e,t,n,o);else{if(2!==i)return Ember.defineProperty(e,t,null,o),Ember.set(e,t,n),void 0;s=u.call(e,t,n)}if(m&&o===s)return;h&&Ember.propertyWillChange(e,t),m&&delete p[t],a&&(m||r(this,e,t,c),p[t]=s),h&&Ember.propertyDidChange(e,t)}finally{this._suspended=f}return s},d.teardown=function(e,t){var r=l(e);return t in r.cache&&n(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;if(arguments.length>1&&(t=f.call(arguments,0,-1),e=f.call(arguments,-1)[0]),"function"!=typeof e)throw new Error("Computed Property declared without a property function");var r=new i(e);return t&&r.property.apply(r,t),r},Ember.cacheFor=function(e,t){var r=l(e,!1).cache;return r&&t in r?r[t]:void 0},a("empty",function(e){return Ember.isEmpty(c(this,e))}),a("notEmpty",function(e){return!Ember.isEmpty(c(this,e))}),a("none",function(e){return Ember.isNone(c(this,e))}),a("not",function(e){return!c(this,e)}),a("bool",function(e){return!!c(this,e)}),a("match",function(e,t){var r=c(this,e);return"string"==typeof r?!!r.match(t):!1}),a("equal",function(e,t){return c(this,e)===t}),a("gt",function(e,t){return c(this,e)>t}),a("gte",function(e,t){return c(this,e)>=t}),a("lt",function(e,t){return c(this,e)<t}),a("lte",function(e,t){return c(this,e)<=t}),u("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),u("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),u("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),u("collect",function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&(Ember.isNone(e[r])?t.push(null):t.push(e[r]));return t}),Ember.computed.alias=function(e){return Ember.computed(e,function(t,r){return arguments.length>1?(h(this,e,r),r):c(this,e)})},Ember.computed.oneWay=function(e){return Ember.computed(e,function(){return c(this,e)})},Ember.computed.defaultTo=function(e){return Ember.computed(function(t,r,n){return 1===arguments.length?null!=n?n:c(this,e):null!=r?r:c(this,e)})}}(),function(){function e(e){return e+r}function t(e){return e+n}var r=":change",n=":before";Ember.addObserver=function(t,r,n,i){return Ember.addListener(t,e(r),n,i),Ember.watch(t,r),this},Ember.observersFor=function(t,r){return Ember.listenersFor(t,e(r))},Ember.removeObserver=function(t,r,n,i){return Ember.unwatch(t,r),Ember.removeListener(t,e(r),n,i),this},Ember.addBeforeObserver=function(e,r,n,i){return Ember.addListener(e,t(r),n,i),Ember.watch(e,r),this},Ember._suspendBeforeObserver=function(e,r,n,i,o){return Ember._suspendListener(e,t(r),n,i,o)},Ember._suspendObserver=function(t,r,n,i,o){return Ember._suspendListener(t,e(r),n,i,o)};var i=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,r,n,o,s){var a=i.call(r,t);return Ember._suspendListeners(e,a,n,o,s)},Ember._suspendObservers=function(t,r,n,o,s){var a=i.call(r,e);return Ember._suspendListeners(t,a,n,o,s)},Ember.beforeObserversFor=function(e,r){return Ember.listenersFor(e,t(r))},Ember.removeBeforeObserver=function(e,r,n,i){return Ember.unwatch(e,r),Ember.removeListener(e,t(r),n,i),this}}(),function(){e("backburner/queue",["exports"],function(e){"use strict";function t(e,t,r){this.daq=e,this.name=t,this.options=r,this._queue=[]}t.prototype={daq:null,name:null,options:null,_queue:null,push:function(e,t,r,n){var i=this._queue;return i.push(e,t,r,n),{queue:this,target:e,method:t}},pushUnique:function(e,t,r,n){var i,o,s,a,u=this._queue;for(s=0,a=u.length;a>s;s+=4)if(i=u[s],o=u[s+1],i===e&&o===t)return u[s+2]=r,u[s+3]=n,{queue:this,target:e,method:t};
|
16
|
-
return this._queue.push(e,t,r,n),{queue:this,target:e,method:t}},flush:function(){var e,t,r,n,i,o=this._queue,s=this.options,a=s&&s.before,u=s&&s.after,c=o.length;for(c&&a&&a(),i=0;c>i;i+=4)e=o[i],t=o[i+1],r=o[i+2],n=o[i+3],r&&r.length>0?t.apply(e,r):t.call(e);c&&u&&u(),o.length>c?(this._queue=o.slice(c),this.flush()):this._queue.length=0},cancel:function(e){var t,r,n,i,o=this._queue;for(n=0,i=o.length;i>n;n+=4)if(t=o[n],r=o[n+1],t===e.target&&r===e.method)return o.splice(n,4),!0;if(o=this._queueBeingFlushed)for(n=0,i=o.length;i>n;n+=4)if(t=o[n],r=o[n+1],t===e.target&&r===e.method)return o[n+1]=null,!0}},e.Queue=t}),e("backburner/deferred_action_queues",["backburner/queue","exports"],function(e,t){"use strict";function r(e,t){var r=this.queues={};this.queueNames=e=e||[];for(var n,o=0,s=e.length;s>o;o++)n=e[o],r[n]=new i(this,n,t[n])}function n(e,t){for(var r,n,i=0,o=t;o>=i;i++)if(r=e.queueNames[i],n=e.queues[r],n._queue.length)return i;return-1}var i=e.Queue;r.prototype={queueNames:null,queues:null,schedule:function(e,t,r,n,i,o){var s=this.queues,a=s[e];if(!a)throw new Error("You attempted to schedule an action in a queue ("+e+") that doesn't exist");return i?a.pushUnique(t,r,n,o):a.push(t,r,n,o)},flush:function(){for(var e,t,r,i,o=this.queues,s=this.queueNames,a=0,u=s.length;u>a;){e=s[a],t=o[e],r=t._queueBeingFlushed=t._queue.slice(),t._queue=[];var c,h,l,f,m=t.options,p=m&&m.before,b=m&&m.after,d=0,E=r.length;for(E&&p&&p();E>d;)c=r[d],h=r[d+1],l=r[d+2],f=r[d+3],"string"==typeof h&&(h=c[h]),h&&(l&&l.length>0?h.apply(c,l):h.call(c)),d+=4;t._queueBeingFlushed=null,E&&b&&b(),-1===(i=n(this,a))?a++:a=i}}},t.DeferredActionQueues=r}),e("backburner",["backburner/deferred_action_queues","exports"],function(e,t){"use strict";function r(e,t){this.queueNames=e,this.options=t||{},this.options.defaultQueue||(this.options.defaultQueue=e[0]),this.instanceStack=[]}function n(e){e.begin(),s=b.setTimeout(function(){e.end(),s=null})}function i(e){var t,r,n,o,s=+new Date;e.run(function(){for(n=0,o=p.length;o>n&&(t=p[n],!(t>s));n+=2);for(r=p.splice(0,n),n=1,o=r.length;o>n;n+=2)e.schedule(e.options.defaultQueue,null,r[n])}),p.length&&(a=b.setTimeout(function(){i(e),a=null,u=null},p[0]-s),u=p[0])}function o(e,t){for(var r,n=-1,i=0,o=m.length;o>i;i++)if(r=m[i],r[0]===e&&r[1]===t){n=i;break}return n}var s,a,u,c=e.DeferredActionQueues,h=[].slice,l=[].pop,f=[],m=[],p=[],b=this;r.prototype={queueNames:null,options:null,currentInstance:null,instanceStack:null,begin:function(){var e=this.options&&this.options.onBegin,t=this.currentInstance;t&&this.instanceStack.push(t),this.currentInstance=new c(this.queueNames,this.options),e&&e(this.currentInstance,t)},end:function(){var e=this.options&&this.options.onEnd,t=this.currentInstance,r=null;try{t.flush()}finally{this.currentInstance=null,this.instanceStack.length&&(r=this.instanceStack.pop(),this.currentInstance=r),e&&e(t,r)}},run:function(e,t){var r;this.begin(),t||(t=e,e=null),"string"==typeof t&&(t=e[t]);var n=!1;try{r=arguments.length>2?t.apply(e,h.call(arguments,2)):t.call(e)}finally{n||(n=!0,this.end())}return r},defer:function(e,t,r){r||(r=t,t=null),"string"==typeof r&&(r=t[r]);var i=this.DEBUG?(new Error).stack:void 0,o=arguments.length>3?h.call(arguments,3):void 0;return this.currentInstance||n(this),this.currentInstance.schedule(e,t,r,o,!1,i)},deferOnce:function(e,t,r){r||(r=t,t=null),"string"==typeof r&&(r=t[r]);var i=this.DEBUG?(new Error).stack:void 0,o=arguments.length>3?h.call(arguments,3):void 0;return this.currentInstance||n(this),this.currentInstance.schedule(e,t,r,o,!0,i)},setTimeout:function(){var e=this,t=l.call(arguments),r=arguments[0],n=arguments[1],o=+new Date+t;n||(n=r,r=null),"string"==typeof n&&(n=r[n]);var s,c;arguments.length>2?(c=h.call(arguments,2),s=function(){n.apply(r,c)}):s=function(){n.call(r)};var f,m;for(f=0,m=p.length;m>f&&!(o<p[f]);f+=2);return p.splice(f,0,o,s),a&&o>u?s:(a&&(clearTimeout(a),a=null),a=b.setTimeout(function(){i(e),a=null,u=null},t),u=o,s)},throttle:function(e,t){for(var r,n=this,i=arguments,o=l.call(i),s=0,a=f.length;a>s;s++)if(r=f[s],r[0]===e&&r[1]===t)return;var u=b.setTimeout(function(){n.run.apply(n,i);for(var o=-1,s=0,a=f.length;a>s;s++)if(r=f[s],r[0]===e&&r[1]===t){o=s;break}o>-1&&f.splice(o,1)},o);f.push([e,t,u])},debounce:function(e,t){var r,n,i,s=this,a=arguments,u=l.call(a);"number"==typeof u?(r=u,u=!1):r=l.call(a),n=o(e,t),-1!==n&&(i=m[n],m.splice(n,1),clearTimeout(i[2]));var c=window.setTimeout(function(){u||s.run.apply(s,a),n=o(e,t),n&&m.splice(n,1)},r);u&&-1===n&&s.run.apply(s,a),m.push([e,t,c])},cancelTimers:function(){var e,t;for(e=0,t=f.length;t>e;e++)clearTimeout(f[e][2]);for(f=[],e=0,t=m.length;t>e;e++)clearTimeout(m[e][2]);m=[],a&&(clearTimeout(a),a=null),p=[],s&&(clearTimeout(s),s=null)},hasTimers:function(){return!!p.length||s},cancel:function(e){if(e&&"object"==typeof e&&e.queue&&e.method)return e.queue.cancel(e);if("function"==typeof e)for(var t=0,r=p.length;r>t;t+=2)if(p[t+1]===e)return p.splice(t,2),!0}},r.prototype.schedule=r.prototype.defer,r.prototype.scheduleOnce=r.prototype.deferOnce,r.prototype.later=r.prototype.setTimeout,t.Backburner=r})}(),function(){function e(){!Ember.run.currentRunLoop}var r=function(e){Ember.run.currentRunLoop=e},n=function(e,t){Ember.run.currentRunLoop=t},i=t("backburner").Backburner,o=new i(["sync","actions","destroy"],{sync:{before:Ember.beginPropertyChanges,after:Ember.endPropertyChanges},defaultQueue:"actions",onBegin:r,onEnd:n}),s=[].slice;Ember.run=function(){var e;if(Ember.onerror)try{e=o.run.apply(o,arguments)}catch(t){Ember.onerror(t)}else e=o.run.apply(o,arguments);return e},Ember.run.join=function(){if(!Ember.run.currentRunLoop)return Ember.run.apply(Ember.run,arguments);var e=s.call(arguments);e.unshift("actions"),Ember.run.schedule.apply(Ember.run,e)},Ember.run.backburner=o,Ember.run,Ember.run.currentRunLoop=null,Ember.run.queues=o.queueNames,Ember.run.begin=function(){o.begin()},Ember.run.end=function(){o.end()},Ember.run.schedule=function(){e(),o.schedule.apply(o,arguments)},Ember.run.hasScheduledTimers=function(){return o.hasTimers()},Ember.run.cancelTimers=function(){o.cancelTimers()},Ember.run.sync=function(){o.currentInstance&&o.currentInstance.queues.sync.flush()},Ember.run.later=function(){return o.later.apply(o,arguments)},Ember.run.once=function(){e();var t=s.call(arguments);return t.unshift("actions"),o.scheduleOnce.apply(o,t)},Ember.run.scheduleOnce=function(){return e(),o.scheduleOnce.apply(o,arguments)},Ember.run.next=function(){var e=s.call(arguments);return e.push(1),o.later.apply(o,e)},Ember.run.cancel=function(e){return o.cancel(e)},Ember.run.debounce=function(){return o.debounce.apply(o,arguments)},Ember.run.throttle=function(){return o.throttle.apply(o,arguments)}}(),function(){function e(e,t){return r(o(t)?Ember.lookup:e,t)}function t(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}Ember.LOG_BINDINGS=!1||!!Ember.ENV.LOG_BINDINGS;var r=Ember.get,n=(Ember.set,Ember.guidFor),i=/^([A-Z$]|([0-9][A-Z$]))/,o=Ember.isGlobalPath=function(e){return i.test(e)},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(t){var r=this._from,n=this._to;return Ember.trySet(t,n,e(t,r)),Ember.addObserver(t,r,this,this.fromDidChange),this._oneWay||Ember.addObserver(t,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 r=this._directionMap,n=r.get(e);n||(Ember.run.schedule("sync",this,this._sync,e),r.set(e,t)),"back"===n&&"fwd"===t&&r.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(!t.isDestroyed&&this._readyToSync){var i=this._directionMap,o=i.get(t),s=this._from,a=this._to;if(i.remove(t),"fwd"===o){var u=e(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",u,t),this._oneWay?Ember.trySet(t,a,u):Ember._suspendObserver(t,a,this,this.toDidChange,function(){Ember.trySet(t,a,u)})}else if("back"===o){var c=r(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",c,t),Ember._suspendObserver(t,s,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(s)?Ember.lookup:t,s,c)})}}}},t(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 r=this,n=new r(null,e);return n.oneWay(t)}}),Ember.Binding=s,Ember.bind=function(e,t,r){return new Ember.Binding(t,r).connect(e)},Ember.oneWay=function(e,t,r){return new Ember.Binding(t,r).oneWay().connect(e)}}(),function(){function e(e){var t=Ember.meta(e,!0),r=t.mixins;return r?t.hasOwnProperty("mixins")||(r=t.mixins=S(r)):r=t.mixins={},r}function t(e,t){return t&&t.length>0&&(e.mixins=C.call(t,function(e){if(e instanceof g)return e;var t=new g;return t.properties=e,t})),e}function r(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function n(e,t){var r;return t instanceof g?(r=x(t),e[r]?T:(e[r]=t,t.properties)):t}function i(e,t,r,n){var i;return i=r[e]||n[e],t[e]&&(i=i?i.concat(t[e]):t[e]),i}function o(e,t,r,n,i){var o;return void 0===n[t]&&(o=i[t]),o=o||e.descs[t],o&&o instanceof Ember.ComputedProperty?(r=S(r),r.func=Ember.wrap(r.func,o.func),r):r}function s(e,t,r,n,i){var o;return void 0===i[t]&&(o=n[t]),o=o||e[t],"function"!=typeof o?r:Ember.wrap(r,o)}function a(e,t,r,n){var i=n[t]||e[t];return i?"function"==typeof i.concat?i.concat(r):Ember.makeArray(i).concat(r):Ember.makeArray(r)}function u(e,t,n,i){var o=i[t]||e[t];if(!o)return n;var a=Ember.merge({},o);for(var u in n)if(n.hasOwnProperty(u)){var c=n[u];a[u]=r(c)?s(e,u,c,o,{}):c}return a}function c(e,t,n,i,c,h,l,f){if(n instanceof Ember.Descriptor){if(n===_&&c[t])return T;n.func&&(n=o(i,t,n,h,c)),c[t]=n,h[t]=void 0}else r(n)?n=s(e,t,n,h,c):l&&w.call(l,t)>=0||"concatenatedProperties"===t||"mergedProperties"===t?n=a(e,t,n,h):f&&w.call(f,t)>=0&&(n=u(e,t,n,h)),c[t]=void 0,h[t]=n}function h(e,t,r,o,s,a){function u(e){delete r[e],delete o[e]}for(var l,f,m,p,b,d,E=0,y=e.length;y>E;E++)if(l=e[E],f=n(t,l),f!==T)if(f){d=Ember.meta(s),s.willMergeMixin&&s.willMergeMixin(f),p=i("concatenatedProperties",f,o,s),b=i("mergedProperties",f,o,s);for(m in f)f.hasOwnProperty(m)&&(a.push(m),c(s,m,f[m],d,r,o,p,b));f.hasOwnProperty("toString")&&(s.toString=f.toString)}else l.mixins&&(h(l.mixins,t,r,o,s,a),l._without&&A.call(l._without,u))}function l(e,t,r,n){if(D.test(t)){var i=n.bindings;i?n.hasOwnProperty("bindings")||(i=n.bindings=S(n.bindings)):i=n.bindings={},i[t]=r}}function f(e,t){var r,n,i,o=t.bindings;if(o){for(r in o)n=o[r],n&&(i=r.slice(0,-7),n instanceof Ember.Binding?(n=n.copy(),n.to(i)):n=new Ember.Binding(i,n),n.connect(e),e[r]=n);t.bindings={}}}function m(e,t){return f(e,t||Ember.meta(e)),e}function p(e,t,r,n,i){var o,s=t.methodName;return n[s]||i[s]?(o=i[s],t=n[s]):r.descs[s]?(t=r.descs[s],o=void 0):(t=void 0,o=e[s]),{desc:t,value:o}}function b(e,t,r,n,i){var o=r[n];if(o)for(var s=0,a=o.length;a>s;s++)Ember[i](e,o[s],null,t)}function d(e,t,r){var n=e[t];"function"==typeof n&&(b(e,t,n,"__ember_observesBefore__","removeBeforeObserver"),b(e,t,n,"__ember_observes__","removeObserver"),b(e,t,n,"__ember_listens__","removeListener")),"function"==typeof r&&(b(e,t,r,"__ember_observesBefore__","addBeforeObserver"),b(e,t,r,"__ember_observes__","addObserver"),b(e,t,r,"__ember_listens__","addListener"))}function E(t,r,n){var i,o,s,a={},u={},c=Ember.meta(t),f=[];h(r,e(t),a,u,t,f);for(var b=0,E=f.length;E>b;b++)if(i=f[b],"constructor"!==i&&u.hasOwnProperty(i)&&(s=a[i],o=u[i],s!==_)){for(;s&&s instanceof O;){var y=p(t,s,c,a,u);s=y.desc,o=y.value}(void 0!==s||void 0!==o)&&(d(t,i,o),l(t,i,o,c),j(t,i,s,o,c))}return n||m(t,c),t}function y(e,t,r){var n=x(e);if(r[n])return!1;if(r[n]=!0,e===t)return!0;for(var i=e.mixins,o=i?i.length:0;--o>=0;)if(y(i[o],t,r))return!0;return!1}function v(e,t,r){if(!r[x(t)])if(r[x(t)]=!0,t.properties){var n=t.properties;for(var i in n)n.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&A.call(t.mixins,function(t){v(e,t,r)})}var g,_,O,C=Ember.ArrayPolyfills.map,w=Ember.ArrayPolyfills.indexOf,A=Ember.ArrayPolyfills.forEach,P=[].slice,S=Ember.create,j=Ember.defineProperty,x=Ember.guidFor,T={},D=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=P.call(arguments,1);return E(e,t,!1),e},Ember.Mixin=function(){return t(this,arguments)},g=Ember.Mixin,g.prototype={properties:null,mixins:null,ownerConstructor:null},g._apply=E,g.applyPartial=function(e){var t=P.call(arguments,1);return E(e,t,!0)},g.finishPartial=m,Ember.anyUnprocessedMixins=!1,g.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return t(new e,arguments)};var M=g.prototype;M.reopen=function(){var e,t;this.properties?(e=g.create(),e.properties=this.properties,delete this.properties,this.mixins=[e]):this.mixins||(this.mixins=[]);var r,n=arguments.length,i=this.mixins;for(r=0;n>r;r++)e=arguments[r],e instanceof g?i.push(e):(t=g.create(),t.properties=e,i.push(t));return this},M.apply=function(e){return E(e,[this],!1)},M.applyPartial=function(e){return E(e,[this],!0)},M.detect=function(e){if(!e)return!1;if(e instanceof g)return y(e,this,{});var t=Ember.meta(e,!1).mixins;return t?!!t[x(this)]:!1},M.without=function(){var e=new g(this);return e._without=P.call(arguments),e},M.keys=function(){var e={},t={},r=[];v(e,this,t);for(var n in e)e.hasOwnProperty(n)&&r.push(n);return r},g.mixins=function(e){var t=Ember.meta(e,!1).mixins,r=[];if(!t)return r;for(var n in t){var i=t[n];i.properties||r.push(i)}return r},_=new Ember.Descriptor,_.toString=function(){return"(Required Property)"},Ember.required=function(){return _},O=function(e){this.methodName=e},O.prototype=new Ember.Descriptor,Ember.alias=function(e){return new O(e)},Ember.alias=Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new O(e)},Ember.observer=function(e){var t=P.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;t>e;e++)arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=P.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){e("rsvp/all",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("You must pass an array to all.");return new n(function(t,r){function n(e){return function(t){i(e,t)}}function i(e,r){s[e]=r,0===--a&&t(s)}var o,s=[],a=e.length;0===a&&t([]);for(var u=0;u<e.length;u++)o=e[u],o&&"function"==typeof o.then?o.then(n(u),r):i(u,o)})}var n=e.Promise;t.all=r}),e("rsvp/async",["exports"],function(e){"use strict";function t(){return function(e,t){process.nextTick(function(){e(t)})}}function r(){return function(e,t){setImmediate(function(){e(t)})}}function n(){var e=[],t=new a(function(){var t=e.slice();e=[],t.forEach(function(e){var t=e[0],r=e[1];t(r)})}),r=document.createElement("div");return t.observe(r,{attributes:!0}),window.addEventListener("unload",function(){t.disconnect(),t=null},!1),function(t,n){e.push([t,n]),r.setAttribute("drainQueue","drainQueue")}}function i(){return function(e,t){global.setTimeout(function(){e(t)},1)}}var o,s="undefined"!=typeof window?window:{},a=s.MutationObserver||s.WebKitMutationObserver;o="function"==typeof setImmediate?r():"undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?t():a?n():i(),e.async=o}),e("rsvp/config",["rsvp/async","exports"],function(e,t){"use strict";var r=e.async,n={};n.async=r,t.config=n}),e("rsvp/defer",["rsvp/promise","exports"],function(e,t){"use strict";function r(){var e={resolve:void 0,reject:void 0,promise:void 0};return e.promise=new n(function(t,r){e.resolve=t,e.reject=r}),e}var n=e.Promise;t.defer=r}),e("rsvp/events",["exports"],function(e){"use strict";var t=function(e,t){this.type=e;for(var r in t)t.hasOwnProperty(r)&&(this[r]=t[r])},r=function(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r][0]===t)return r;return-1},n=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},i={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,i){var o,s,a=n(this);for(e=e.split(/\s+/),i=i||this;s=e.shift();)o=a[s],o||(o=a[s]=[]),-1===r(o,t)&&o.push([t,i])},off:function(e,t){var i,o,s,a=n(this);for(e=e.split(/\s+/);o=e.shift();)t?(i=a[o],s=r(i,t),-1!==s&&i.splice(s,1)):a[o]=[]},trigger:function(e,r){var i,o,s,a,u,c=n(this);if(i=c[e])for(var h=0;h<i.length;h++)o=i[h],s=o[0],a=o[1],"object"!=typeof r&&(r={detail:r}),u=new t(e,r),s.call(a,u)}};e.EventTarget=i}),e("rsvp/hash",["rsvp/defer","exports"],function(e,t){"use strict";function r(e){var t=0;for(var r in e)t++;return t}function n(e){var t={},n=i(),o=r(e);0===o&&n.resolve({});var s=function(e){return function(t){a(e,t)}},a=function(e,r){t[e]=r,0===--o&&n.resolve(t)},u=function(e){n.reject(e)};for(var c in e)e[c]&&"function"==typeof e[c].then?e[c].then(s(c),u):a(c,e[c]);return n.promise}var i=e.defer;t.hash=n}),e("rsvp/node",["rsvp/promise","rsvp/all","exports"],function(e,t,r){"use strict";function n(e,t){return function(r,n){r?t(r):arguments.length>2?e(Array.prototype.slice.call(arguments,1)):e(n)}}function i(e){return function(){var t,r,i=Array.prototype.slice.call(arguments),a=this,u=new o(function(e,n){t=e,r=n});return s(i).then(function(i){i.push(n(t,r));try{e.apply(a,i)}catch(o){r(o)}}),u}}var o=e.Promise,s=t.all;r.denodeify=i}),e("rsvp/promise",["rsvp/config","rsvp/events","exports"],function(e,t,r){"use strict";function n(e){return i(e)||"object"==typeof e&&null!==e}function i(e){return"function"==typeof e}function o(e){h.onerror&&h.onerror(e.detail)}function s(e,t){e===t?u(e,t):a(e,t)||u(e,t)}function a(e,t){var r,o=null;try{if(e===t)throw new TypeError("A promises callback cannot return that same promise.");if(n(t)&&(o=t.then,i(o)))return o.call(t,function(n){return r?!0:(r=!0,t!==n?s(e,n):u(e,n),void 0)},function(t){return r?!0:(r=!0,c(e,t),void 0)}),!0}catch(a){return c(e,a),!0}return!1}function u(e,t){h.async(function(){e.trigger("promise:resolved",{detail:t}),e.isFulfilled=!0,e.fulfillmentValue=t})}function c(e,t){h.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedReason=t})}var h=e.config,l=t.EventTarget,f=function(e){var t=this,r=!1;if("function"!=typeof e)throw new TypeError("You must pass a resolver function as the sole argument to the promise constructor");if(!(t instanceof f))return new f(e);var n=function(e){r||(r=!0,s(t,e))},i=function(e){r||(r=!0,c(t,e))};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),this.on("error",o);try{e(n,i)}catch(a){i(a)}},m=function(e,t,r,n){var o,u,h,l,f=i(r);if(f)try{o=r(n.detail),h=!0}catch(m){l=!0,u=m}else o=n.detail,h=!0;a(t,o)||(f&&h?s(t,o):l?c(t,u):"resolve"===e?s(t,o):"reject"===e&&c(t,o))};f.prototype={constructor:f,isRejected:void 0,isFulfilled:void 0,rejectedReason:void 0,fulfillmentValue:void 0,then:function(e,t){this.off("error",o);var r=new this.constructor(function(){});return this.isFulfilled&&h.async(function(t){m("resolve",r,e,{detail:t.fulfillmentValue})},this),this.isRejected&&h.async(function(e){m("reject",r,t,{detail:e.rejectedReason})},this),this.on("promise:resolved",function(t){m("resolve",r,e,t)}),this.on("promise:failed",function(e){m("reject",r,t,e)}),r},fail:function(e){return this.then(null,e)}},l.mixin(f.prototype),r.Promise=f}),e("rsvp/reject",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){return new n(function(t,r){r(e)})}var n=e.Promise;t.reject=r}),e("rsvp/resolve",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){return new n(function(t){t(e)})}var n=e.Promise;t.resolve=r}),e("rsvp/rethrow",["exports"],function(e){"use strict";function t(e){throw r.setTimeout(function(){throw e}),e}var r="undefined"==typeof global?this:global;e.rethrow=t}),e("rsvp",["rsvp/events","rsvp/promise","rsvp/node","rsvp/all","rsvp/hash","rsvp/rethrow","rsvp/defer","rsvp/config","rsvp/resolve","rsvp/reject","exports"],function(e,t,r,n,i,o,s,a,u,c,h){"use strict";function l(e,t){v[e]=t}var f=e.EventTarget,m=t.Promise,p=r.denodeify,b=n.all,d=i.hash,E=o.rethrow,y=s.defer,v=a.config,g=u.resolve,_=c.reject;h.Promise=m,h.EventTarget=f,h.all=b,h.hash=d,h.rethrow=E,h.defer=y,h.denodeify=p,h.configure=l,h.resolve=g,h.reject=_})}(),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.factoryCache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this.factoryTypeInjections=new e(t&&t.factoryTypeInjections),this.factoryInjections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function r(e){throw new Error(e+" is not currently supported on child containers")}function n(e,t){var r=o(e,t,"singleton");return r!==!1}function i(e,t){var r={};if(!t)return r;for(var n,i,o=0,s=t.length;s>o;o++){if(n=t[o],i=e.lookup(n.fullName),!i)throw new Error("Attempting to inject an unknown injection: `"+n.fullName+"`");r[n.property]=i}return r}function o(e,t,r){var n=e._options.get(t);if(n&&void 0!==n[r])return n[r];var i=t.split(":")[0];return n=e._typeOptions.get(i),n?n[r]:void 0}function s(e,t){var r,n=e.normalize(t),i=e.resolve(n),o=e.factoryCache;if(i){if(o.has(t))return o.get(t);if("function"!=typeof i.extend)return i;var s=a(e,t),c=u(e,t);return c._toString=e.makeToString(i,t),r=i.extend(s),r.reopenClass(c),o.set(t,r),r}}function a(e,t){var r=t.split(":"),n=r[0],o=[];return o=o.concat(e.typeInjections.get(n)||[]),o=o.concat(e.injections[t]||[]),o=i(e,o),o._debugContainerKey=t,o.container=e,o}function u(e,t){var r=t.split(":"),n=r[0],o=[];return o=o.concat(e.factoryTypeInjections.get(n)||[]),o=o.concat(e.factoryInjections[t]||[]),o=i(e,o),o._debugContainerKey=t,o}function c(e,t){var r=s(e,t);return o(e,t,"instantiate")===!1?r:r?"function"==typeof r.extend?r.create():r.create(a(e,t)):void 0}function h(e,t){e.cache.eachLocal(function(r,n){o(e,r,"instantiate")!==!1&&t(n)})}function l(e){e.cache.eachLocal(function(t,r){o(e,t,"instantiate")!==!1&&r.destroy()}),e.cache.dict={}}function f(e,t,r,n){var i=e.get(t);i||(i=[],e.set(t,i)),i.push({property:r,fullName:n})}function m(e,t,r,n){var i=e[t]=e[t]||[];i.push({property:r,fullName:n})}return e.prototype={parent:null,dict:null,get:function(e){var t=this.dict;return t.hasOwnProperty(e)?t[e]:this.parent?this.parent.get(e):void 0},set:function(e,t){this.dict[e]=t},remove:function(e){delete this.dict[e]},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var r=this.dict;for(var n in r)r.hasOwnProperty(n)&&e.call(t,n,r[n])}},t.prototype={parent:null,children:null,resolver:null,registry:null,cache:null,typeInjections:null,injections:null,_options:null,_typeOptions:null,child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,r){e[t]=r},register:function(e,t,r,n){var i;-1!==e.indexOf(":")?(n=r,r=t,i=e):i=e+":"+t;var o=this.normalize(i);this.registry.set(o,r),this._options.set(o,n||{})},unregister:function(e){var t=this.normalize(e);this.registry.remove(t),this.cache.remove(t),this.factoryCache.remove(t),this._options.remove(t)},resolve:function(e){return this.resolver(e)||this.registry.get(e)},describe:function(e){return e},normalize:function(e){return e},makeToString:function(e){return e.toString()},lookup:function(e,t){if(e=this.normalize(e),t=t||{},this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var r=c(this,e);return r?(n(this,e)&&t.singleton!==!1&&this.cache.set(e,r),r):void 0},lookupFactory:function(e){return s(this,e)},has:function(e){return this.cache.has(e)?!0:!!s(this,e)},optionsForType:function(e,t){this.parent&&r("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,n){this.parent&&r("typeInjection"),f(this.typeInjections,e,t,n)},injection:function(e,t,n){return this.parent&&r("injection"),-1===e.indexOf(":")?this.typeInjection(e,t,n):(m(this.injections,e,t,n),void 0)},factoryTypeInjection:function(e,t,n){this.parent&&r("factoryTypeInjection"),f(this.factoryTypeInjections,e,t,n)},factoryInjection:function(e,t,n){return this.parent&&r("injection"),-1===e.indexOf(":")?this.factoryTypeInjection(e,t,n):(m(this.factoryInjections,e,t,n),void 0)},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;t>e;e++)this.children[e].destroy();this.children=[],h(this,function(e){e.destroy()}),this.parent=void 0,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;t>e;e++)l(this.children[e]);l(this)}},t})}(),function(){function e(r,n,i,o){var s,a,u;if("object"!=typeof r||null===r)return r;if(n&&(a=t(i,r))>=0)return o[a];if("array"===Ember.typeOf(r)){if(s=r.slice(),n)for(a=s.length;--a>=0;)s[a]=e(s[a],n,i,o)}else if(Ember.Copyable&&Ember.Copyable.detect(r))s=r.copy(n,i,o);else{s={};for(u in r)r.hasOwnProperty(u)&&"__"!==u.substring(0,2)&&(s[u]=n?e(r[u],n,i,o):r[u])}return n&&(i.push(r),o.push(s)),s}var t=Ember.EnumerableUtils.indexOf;Ember.compare=function n(e,t){if(e===t)return 0;var r=Ember.typeOf(e),i=Ember.typeOf(t),o=Ember.Comparable;if(o){if("instance"===r&&o.detect(e.constructor))return e.constructor.compare(e,t);if("instance"===i&&o.detect(t.constructor))return 1-t.constructor.compare(t,e)}var s=Ember.ORDER_DEFINITION_MAPPING;if(!s){var a=Ember.ORDER_DEFINITION;s=Ember.ORDER_DEFINITION_MAPPING={};var u,c;for(u=0,c=a.length;c>u;++u)s[a[u]]=u;delete Ember.ORDER_DEFINITION}var h=s[r],l=s[i];if(l>h)return-1;if(h>l)return 1;switch(r){case"boolean":case"number":return t>e?-1:e>t?1:0;case"string":var f=e.localeCompare(t);return 0>f?-1:f>0?1:0;case"array":for(var m=e.length,p=t.length,b=Math.min(m,p),d=0,E=0;0===d&&b>E;)d=n(e[E],t[E]),E++;return 0!==d?d:p>m?-1:m>p?1:0;case"instance":return Ember.Comparable&&Ember.Comparable.detect(e)?e.compare(e,t):0;case"date":var y=e.getTime(),v=t.getTime();return v>y?-1:y>v?1:0;default:return 0}},Ember.copy=function(t,r){return"object"!=typeof t||null===t?t:Ember.Copyable&&Ember.Copyable.detect(t)?t.copy(r):e(t,r,r?[]:null,r?[]:null)},Ember.inspect=function(e){var t=Ember.typeOf(e);if("array"===t)return"["+e+"]";if("object"!==t)return e+"";var r,n=[];for(var i in e)if(e.hasOwnProperty(i)){if(r=e[i],"toString"===r)continue;"function"===Ember.typeOf(r)&&(r="function() { ... }"),n.push(i+": "+r)}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.create.isSimulated)&&(Ember.keys=function(e){var t=[];for(var r in e)"__"!==r.substring(0,2)&&"_super"!==r&&e.hasOwnProperty(r)&&t.push(r);return t});var r=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){for(var e=Error.apply(this,arguments),t=0;t<r.length;t++)this[r[t]]=e[r[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){function e(){return 0===a.length?{}:a.pop()}function t(e){return a.push(e),null}function r(e,t){function r(r){var o=n(r,e);return i?t===o:!!o}var i=2===arguments.length;return r}var n=Ember.get,i=Ember.set,o=Array.prototype.slice,s=Ember.EnumerableUtils.indexOf,a=[];Ember.Enumerable=Ember.Mixin.create({nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(0===n(this,"length"))return void 0;var r,i=e();return r=this.nextObject(0,null,i),t(i),r}).property("[]"),lastObject:Ember.computed(function(){var r=n(this,"length");if(0===r)return void 0;var i,o=e(),s=0,a=null;do a=i,i=this.nextObject(s++,a,o);while(void 0!==i);return t(o),a}).property("[]"),contains:function(e){return void 0!==this.find(function(t){return t===e})},forEach:function(r,i){if("function"!=typeof r)throw new TypeError;var o=n(this,"length"),s=null,a=e();void 0===i&&(i=null);for(var u=0;o>u;u++){var c=this.nextObject(u,s,a);r.call(i,c,u,this),s=c}return s=null,a=t(a),this},getEach:function(e){return this.mapBy(e)},setEach:function(e,t){return this.forEach(function(r){i(r,e,t)})},map:function(e,t){var r=Ember.A();return this.forEach(function(n,i,o){r[i]=e.call(t,n,i,o)}),r},mapBy:function(e){return this.map(function(t){return n(t,e)})},mapProperty:Ember.aliasMethod("mapBy"),filter:function(e,t){var r=Ember.A();return this.forEach(function(n,i,o){e.call(t,n,i,o)&&r.push(n)}),r},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterBy:function(){return this.filter(r.apply(this,arguments))},filterProperty:Ember.aliasMethod("filterBy"),rejectBy:function(e,t){var r=function(r){return n(r,e)===t},i=function(t){return!!n(t,e)},o=2===arguments.length?r:i;return this.reject(o)},rejectProperty:Ember.aliasMethod("rejectBy"),find:function(r,i){var o=n(this,"length");void 0===i&&(i=null);for(var s,a,u=null,c=!1,h=e(),l=0;o>l&&!c;l++)s=this.nextObject(l,u,h),(c=r.call(i,s,l,this))&&(a=s),u=s;return s=u=null,h=t(h),a},findBy:function(){return this.find(r.apply(this,arguments))},findProperty:Ember.aliasMethod("findBy"),every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},everyBy:function(){return this.every(r.apply(this,arguments))},everyProperty:Ember.aliasMethod("everyBy"),any:function(e,t){return!!this.find(function(r,n,i){return!!e.call(t,r,n,i)})},some:Ember.aliasMethod("any"),anyBy:function(){return this.any(r.apply(this,arguments))},someProperty:Ember.aliasMethod("anyBy"),reduce:function(e,t,r){if("function"!=typeof e)throw new TypeError;var n=t;return this.forEach(function(t,i){n=e.call(null,n,t,i,this,r)},this),n},invoke:function(e){var t,r=Ember.A();return arguments.length>1&&(t=o.call(arguments,1)),this.forEach(function(n,i){var o=n&&n[e];"function"==typeof o&&(r[i]=t?o.apply(n,t):o.call(n))},this),r},toArray:function(){var e=Ember.A();return this.forEach(function(t,r){e[r]=t}),e},compact:function(){return this.filter(function(e){return null!=e})},without:function(e){if(!this.contains(e))return this;var t=Ember.A();return this.forEach(function(r){r!==e&&(t[t.length]=r)}),t},uniq:function(){var e=Ember.A();return this.forEach(function(t){s(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(){return this}),addEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",i=t&&t.didChange||"enumerableDidChange",o=n(this,"hasEnumerableObservers");return o||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",e,r),Ember.addListener(this,"@enumerable:change",e,i),o||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",i=t&&t.didChange||"enumerableDidChange",o=n(this,"hasEnumerableObservers");return o&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",e,r),Ember.removeListener(this,"@enumerable:change",e,i),o&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(e,t){var r,i,o;return r="number"==typeof e?e:e?n(e,"length"):e=-1,i="number"==typeof t?t:t?n(t,"length"):t=-1,o=0>i||0>r||0!==i-r,-1===e&&(e=null),-1===t&&(t=null),Ember.propertyWillChange(this,"[]"),o&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,e,t]),this},enumerableContentDidChange:function(e,t){var r,i,o;return r="number"==typeof e?e:e?n(e,"length"):e=-1,i="number"==typeof t?t:t?n(t,"length"):t=-1,o=0>i||0>r||0!==i-r,-1===e&&(e=null),-1===t&&(t=null),Ember.sendEvent(this,"@enumerable:change",[this,e,t]),o&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this
|
17
|
-
}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.isNone),r=Ember.EnumerableUtils.map,n=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{length:Ember.required(),objectAt:function(t){return 0>t||t>=e(this,"length")?void 0: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,r){return void 0!==r&&this.replace(0,e(this,"length"),r),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(r,n){var i=Ember.A(),o=e(this,"length");for(t(r)&&(r=0),(t(n)||n>o)&&(n=o),0>r&&(r=o+r),0>n&&(n=o+n);n>r;)i[i.length]=this.objectAt(r++);return i},indexOf:function(t,r){var n,i=e(this,"length");for(void 0===r&&(r=0),0>r&&(r+=i),n=r;i>n;n++)if(this.objectAt(n)===t)return n;return-1},lastIndexOf:function(t,r){var n,i=e(this,"length");for((void 0===r||r>=i)&&(r=i-1),0>r&&(r+=i),n=r;n>=0;n--)if(this.objectAt(n)===t)return n;return-1},addArrayObserver:function(t,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=e(this,"hasArrayObservers");return o||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,n),Ember.addListener(this,"@array:change",t,i),o||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=e(this,"hasArrayObservers");return o&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,n),Ember.removeListener(this,"@array:change",t,i),o&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,r,n){void 0===t?(t=0,r=n=-1):(void 0===r&&(r=-1),void 0===n&&(n=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,r,n]);var i,o;if(t>=0&&r>=0&&e(this,"hasEnumerableObservers")){i=[],o=t+r;for(var s=t;o>s;s++)i.push(this.objectAt(s))}else i=r;return this.enumerableContentWillChange(i,n),this},arrayContentDidChange:function(t,r,i){void 0===t?(t=0,r=i=-1):(void 0===r&&(r=-1),void 0===i&&(i=-1));var o,s;if(t>=0&&i>=0&&e(this,"hasEnumerableObservers")){o=[],s=t+i;for(var a=t;s>a;a++)o.push(this.objectAt(a))}else o=i;this.enumerableContentDidChange(r,o),Ember.sendEvent(this,"@array:change",[this,t,r,i]);var u=e(this,"length"),c=n(this,"firstObject"),h=n(this,"lastObject");return this.objectAt(0)!==c&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(u-1)!==h&&(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(){function e(e,t,r){this.callbacks=e,this.cp=t,this.instanceMeta=r,this.dependentKeysByGuid={},this.trackedArraysByGuid={},this.changedItems={}}function t(e,t,r){this.dependentArray=e,this.index=t,this.item=e.objectAt(t),this.trackedArray=r,this.beforeObserver=null,this.observer=null}function r(e,t,r,n,i,o,s){var a={arrayChanged:e,index:r,item:t,propertyName:n,property:i,previousValue:s};return o&&(a.keyChanged=o),a}function n(e,t,n,i,o){y(e,function(s,a){o.setValue(t.addedItem.call(this,o.getValue(),s,r(e,s,a,i,n),o.sugarMeta))},this)}function i(e,t){var r;e._callbacks(),e._hasInstanceMeta(this,t)?(r=e._instanceMeta(this,t),r.setValue(e.resetValue(r.getValue()))):r=e._instanceMeta(this,t),e.options.initialize&&e.options.initialize.call(this,r.getValue(),{property:e,propertyName:t},r.sugarMeta)}function o(e,t,r){this.context=e,this.propertyName=t,this.cache=h(e).cache,this.dependentArrays={},this.sugarMeta={},this.initialValue=r}function s(e){var t=this;this.options=e,this._instanceMetas={},this._dependentKeys=null,this._itemPropertyKeys={},this._previousItemPropertyKeys={},this.readOnly(),this.cacheable(),this.recomputeOnce=function(e){Ember.run.once(this,r,e)};var r=function(e){var r=(t._dependentKeys,t._instanceMeta(this,e)),o=t._callbacks();i.call(this,t,e),y(t._dependentKeys,function(e){var n=u(this,e),i=r.dependentArrays[e];n===i?t._previousItemPropertyKeys[e]&&(delete t._previousItemPropertyKeys[e],r.dependentArraysObserver.setupPropertyObservers(e,t._itemPropertyKeys[e])):(r.dependentArrays[e]=n,i&&r.dependentArraysObserver.teardownObservers(i,e),n&&r.dependentArraysObserver.setupObservers(n,e))},this),y(t._dependentKeys,function(i){var s=u(this,i);n.call(this,s,o,t,e,r)},this)};this.func=function(e){return r.call(this,e),t._instanceMeta(this,e).getValue()}}function a(e){return e}var u=Ember.get,c=(Ember.set,Ember.guidFor),h=Ember.meta,l=Ember.addBeforeObserver,f=Ember.removeBeforeObserver,m=Ember.addObserver,p=Ember.removeObserver,b=Ember.ComputedProperty,d=[].slice,E=Ember.create,y=Ember.EnumerableUtils.forEach,v=/^(.*)\.@each\.(.*)/,g=/(.*\.@each){2,}/;e.prototype={setValue:function(e){this.instanceMeta.setValue(e)},getValue:function(){return this.instanceMeta.getValue()},setupObservers:function(e,t){this.dependentKeysByGuid[c(e)]=t,e.addArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"}),this.cp._itemPropertyKeys[t]&&this.setupPropertyObservers(t,this.cp._itemPropertyKeys[t])},teardownObservers:function(e,t){var r=this.cp._itemPropertyKeys[t]||[];delete this.dependentKeysByGuid[c(e)],this.teardownPropertyObservers(t,r),e.removeArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"})},setupPropertyObservers:function(e,t){var r=u(this.instanceMeta.context,e),n=u(r,"length"),i=new Array(n);this.resetTransformations(e,i),y(r,function(n,o){var s=this.createPropertyObserverContext(r,o,this.trackedArraysByGuid[e]);i[o]=s,y(t,function(e){l(n,e,this,s.beforeObserver),m(n,e,this,s.observer)},this)},this)},teardownPropertyObservers:function(e,t){var r,n,i,o=this,s=this.trackedArraysByGuid[e];s&&s.apply(function(e,s,a){a!==Ember.TrackedArray.DELETE&&y(e,function(e){r=e.beforeObserver,n=e.observer,i=e.item,y(t,function(e){f(i,e,o,r),p(i,e,o,n)})})})},createPropertyObserverContext:function(e,r,n){var i=new t(e,r,n);return this.createPropertyObserver(i),i},createPropertyObserver:function(e){var t=this;e.beforeObserver=function(r,n){return t.updateIndexes(e.trackedArray,e.dependentArray),t.itemPropertyWillChange(r,n,e.dependentArray,e.index)},e.observer=function(r,n){return t.itemPropertyDidChange(r,n,e.dependentArray,e.index)}},resetTransformations:function(e,t){this.trackedArraysByGuid[e]=new Ember.TrackedArray(t)},addTransformation:function(e,t,r){var n=this.trackedArraysByGuid[e];n&&n.addItems(t,r)},removeTransformation:function(e,t,r){var n=this.trackedArraysByGuid[e];return n?n.removeItems(t,r):[]},updateIndexes:function(e,t){var r=u(t,"length");e.apply(function(e,t,n){n!==Ember.TrackedArray.DELETE&&(n!==Ember.TrackedArray.RETAIN||e.length!==r||0!==t)&&y(e,function(e,r){e.index=r+t})})},dependentArrayWillChange:function(e,t,n){var i,o,s,a=this.callbacks.removedItem,u=c(e),h=this.dependentKeysByGuid[u],l=this.cp._itemPropertyKeys[h]||[];s=this.removeTransformation(h,t,n),y(e.slice(t,t+n),function(n,u){o=t+u,y(l,function(e){f(n,e,this,s[u].beforeObserver),p(n,e,this,s[u].observer)},this),i=r(e,n,o,this.instanceMeta.propertyName,this.cp),this.setValue(a.call(this.instanceMeta.context,this.getValue(),n,i,this.instanceMeta.sugarMeta))},this)},dependentArrayDidChange:function(e,t,n,i){var o,s,a=this.callbacks.addedItem,u=c(e),h=this.dependentKeysByGuid[u],f=new Array(i),p=this.cp._itemPropertyKeys[h];y(e.slice(t,t+i),function(n,i){p&&(s=f[i]=this.createPropertyObserverContext(e,t+i,this.trackedArraysByGuid[h]),y(p,function(e){l(n,e,this,s.beforeObserver),m(n,e,this,s.observer)},this)),o=r(e,n,t+i,this.instanceMeta.propertyName,this.cp),this.setValue(a.call(this.instanceMeta.context,this.getValue(),n,o,this.instanceMeta.sugarMeta))},this),this.addTransformation(h,t,f)},itemPropertyWillChange:function(e,t,r,n){var i=c(e)+":"+t;this.changedItems[i]||(this.changedItems[i]={array:r,index:n,obj:e,keyChanged:t,previousValue:u(e,t)})},itemPropertyDidChange:function(){Ember.run.once(this,"flushChanges")},flushChanges:function(){var e,t,n,i=this.changedItems;for(e in i)t=i[e],n=r(t.array,t.obj,t.index,this.instanceMeta.propertyName,this.cp,t.keyChanged,t.previousValue),this.setValue(this.callbacks.removedItem.call(this.instanceMeta.context,this.getValue(),t.obj,n,this.instanceMeta.sugarMeta)),this.setValue(this.callbacks.addedItem.call(this.instanceMeta.context,this.getValue(),t.obj,n,this.instanceMeta.sugarMeta));this.changedItems={}}},o.prototype={getValue:function(){return this.propertyName in this.cache?this.cache[this.propertyName]:this.initialValue},setValue:function(e){void 0!==e?this.cache[this.propertyName]=e:delete this.cache[this.propertyName]}},Ember.ReduceComputedProperty=s,s.prototype=E(b.prototype),s.prototype._callbacks=function(){if(!this.callbacks){var e=this.options;this.callbacks={removedItem:e.removedItem||a,addedItem:e.addedItem||a}}return this.callbacks},s.prototype._hasInstanceMeta=function(e,t){var r=c(e),n=r+":"+t;return!!this._instanceMetas[n]},s.prototype._instanceMeta=function(t,r){var n=c(t),i=n+":"+r,s=this._instanceMetas[i];return s||(s=this._instanceMetas[i]=new o(t,r,this.initialValue()),s.dependentArraysObserver=new e(this._callbacks(),this,s,t,r,s.sugarMeta)),s},s.prototype.initialValue=function(){switch(typeof this.options.initialValue){case"undefined":throw new Error("reduce computed properties require an initial value: did you forget to pass one to Ember.reduceComputed?");case"function":return this.options.initialValue();default:return this.options.initialValue}},s.prototype.resetValue=function(){return this.initialValue()},s.prototype.itemPropertyKey=function(e,t){this._itemPropertyKeys[e]=this._itemPropertyKeys[e]||[],this._itemPropertyKeys[e].push(t)},s.prototype.clearItemPropertyKeys=function(e){this._itemPropertyKeys[e]&&(this._previousItemPropertyKeys[e]=this._itemPropertyKeys[e],this._itemPropertyKeys[e]=[])},s.prototype.property=function(){var e,t,r,n=this,i=(d.call(arguments),[]);return y(d.call(arguments),function(o){if(g.test(o))throw new Error("Nested @each properties not supported: "+o);(e=v.exec(o))?(t=e[1],r=e[2],n.itemPropertyKey(t,r),i.push(t)):i.push(o)}),b.prototype.property.apply(this,i)},Ember.reduceComputed=function(e){var t;if(arguments.length>1&&(t=d.call(arguments,0,-1),e=d.call(arguments,-1)[0]),"object"!=typeof e)throw new Error("Reduce Computed Property declared without an options hash");if(!e.initialValue)throw new Error("Reduce Computed Property declared without an initial value");var r=new s(e);return t&&r.property.apply(r,t),r}}(),function(){function e(){var e=this;return t.apply(this,arguments),this.func=function(t){return function(r){return e._hasInstanceMeta(this,r)||i(e._dependentKeys,function(t){Ember.addObserver(this,t,function(){e.recomputeOnce.call(this,r)})},this),t.apply(this,arguments)}}(this.func),this}var t=Ember.ReduceComputedProperty,r=[].slice,n=Ember.create,i=Ember.EnumerableUtils.forEach;Ember.ArrayComputedProperty=e,e.prototype=n(t.prototype),e.prototype.initialValue=function(){return Ember.A()},e.prototype.resetValue=function(e){return e.clear(),e},Ember.arrayComputed=function(t){var n;if(arguments.length>1&&(n=r.call(arguments,0,-1),t=r.call(arguments,-1)[0]),"object"!=typeof t)throw new Error("Array Computed Property declared without an options hash");var i=new e(t);return n&&i.property.apply(i,n),i}}(),function(){function e(e,r,n,i){var o,s,a;return arguments.length<4&&(i=t(e,"length")),arguments.length<3&&(n=0),n===i?n:(o=n+Math.floor((i-n)/2),s=e.objectAt(o),a=this.order(s,r),0>a?this.binarySearch(e,r,o+1,i):a>0?this.binarySearch(e,r,n,o):o)}var t=Ember.get,r=(Ember.set,[].slice),n=Ember.EnumerableUtils.forEach,i=Ember.EnumerableUtils.map;Ember.computed.max=function(e){return Ember.reduceComputed.call(null,e,{initialValue:-1/0,addedItem:function(e,t){return Math.max(e,t)},removedItem:function(e,t){return e>t?e:void 0}})},Ember.computed.min=function(e){return Ember.reduceComputed.call(null,e,{initialValue:1/0,addedItem:function(e,t){return Math.min(e,t)},removedItem:function(e,t){return t>e?e:void 0}})},Ember.computed.map=function(e,t){var r={addedItem:function(e,r,n){var i=t(r);return e.insertAt(n.index,i),e},removedItem:function(e,t,r){return e.removeAt(r.index,1),e}};return Ember.arrayComputed(e,r)},Ember.computed.mapProperty=function(e,r){var n=function(e){return t(e,r)};return Ember.computed.map(e+".@each."+r,n)},Ember.computed.filter=function(e,t){var r={initialize:function(e,t,r){r.filteredArrayIndexes=new Ember.SubArray},addedItem:function(e,r,n,i){var o=!!t(r),s=i.filteredArrayIndexes.addItem(n.index,o);o&&e.insertAt(s,r)},removedItem:function(e,t,r,n){var i=n.filteredArrayIndexes.removeItem(r.index);i>-1&&e.removeAt(i)}};return Ember.arrayComputed(e,r)},Ember.computed.filterProperty=function(e,r,n){var i;return i=2===arguments.length?function(e){return t(e,r)}:function(e){return t(e,r)===n},Ember.computed.filter(e+".@each."+r,i)},Ember.computed.uniq=function(){var e=r.call(arguments);return e.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(e,t,r,n){var i=Ember.guidFor(t);return n.itemCounts[i]?++n.itemCounts[i]:n.itemCounts[i]=1,e.addObject(t),e},removedItem:function(e,t,r,n){var i=Ember.guidFor(t),o=n.itemCounts;return 0===--o[i]&&e.removeObject(t),e}}),Ember.arrayComputed.apply(null,e)},Ember.computed.union=Ember.computed.uniq,Ember.computed.intersect=function(){var e=function(e){return i(e.property._dependentKeys,function(e){return Ember.guidFor(e)})},t=r.call(arguments);return t.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(t,r,n,i){var o=Ember.guidFor(r),s=(e(n),Ember.guidFor(n.arrayChanged)),a=n.property._dependentKeys.length,u=i.itemCounts;return u[o]||(u[o]={}),void 0===u[o][s]&&(u[o][s]=0),1===++u[o][s]&&a===Ember.keys(u[o]).length&&t.addObject(r),t},removedItem:function(t,r,n,i){var o,s=Ember.guidFor(r),a=(e(n),Ember.guidFor(n.arrayChanged)),u=(n.property._dependentKeys.length,i.itemCounts);return void 0===u[s][a]&&(u[s][a]=0),0===--u[s][a]&&(delete u[s][a],o=Ember.keys(u[s]).length,0===o&&delete u[s],t.removeObject(r)),t}}),Ember.arrayComputed.apply(null,t)},Ember.computed.setDiff=function(e,r){if(2!==arguments.length)throw new Error("setDiff requires exactly two dependent arrays.");return Ember.arrayComputed.call(null,e,r,{addedItem:function(n,i,o){var s=t(this,e),a=t(this,r);return o.arrayChanged===s?a.contains(i)||n.addObject(i):n.removeObject(i),n},removedItem:function(n,i,o){var s=t(this,e),a=t(this,r);return o.arrayChanged===a?s.contains(i)&&n.addObject(i):n.removeObject(i),n}})},Ember.computed.sort=function(r,i){var o,s;return"function"==typeof i?o=function(t,r,n){n.order=i,n.binarySearch=e}:(s=i,o=function(i,o,a){function u(){var e,i,u,h=t(this,s),l=a.sortProperties=[],f=a.sortPropertyAscending={};o.property.clearItemPropertyKeys(r),n(h,function(t){-1!==(i=t.indexOf(":"))?(e=t.substring(0,i),u="desc"!==t.substring(i+1).toLowerCase()):(e=t,u=!0),l.push(e),f[e]=u,o.property.itemPropertyKey(r,e)}),h.addObserver("@each",this,c)}function c(){Ember.run.once(this,h,o.propertyName)}function h(e){u.call(this),o.property.recomputeOnce.call(this,e)}Ember.addObserver(this,s,c),u.call(this),a.order=function(e,r){for(var n,i,o,s=0;s<this.sortProperties.length;++s)if(n=this.sortProperties[s],i=Ember.compare(t(e,n),t(r,n)),0!==i)return o=this.sortPropertyAscending[n],o?i:-1*i;return 0},a.binarySearch=e}),Ember.arrayComputed.call(null,r,{initialize:o,addedItem:function(e,t,r,n){var i=n.binarySearch(e,t);return e.insertAt(i,t),e},removedItem:function(e,t,r,n){var i,o,s;return r.keyChanged?(i={content:t},i[r.keyChanged]=r.previousValue,s=Ember.ObjectProxy.create(i)):s=t,o=n.binarySearch(e,s),e.removeAt(o),e}})}}(),function(){Ember.RSVP=t("rsvp")}(),function(){var e=/[ _]/g,t={},r=/([a-z])([A-Z])/g,n=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,o=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var r=0;return e.replace(/%@([0-9]+)?/g,function(e,n){return n=n?parseInt(n,10)-1:r++,e=t[n],null===e?"(null)":void 0===e?"":Ember.inspect(e)})},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(r,"$1_$2").toLowerCase()},dasherize:function(r){var n,i=t,o=i.hasOwnProperty(r);return o?i[r]:(n=Ember.String.decamelize(r).replace(e,"-"),i[r]=n,n)},camelize:function(e){return e.replace(n,function(e,t,r){return r?r.toUpperCase():""}).replace(/^([A-Z])/,function(e){return e.toLowerCase()})},classify:function(e){for(var t=e.split("."),r=[],n=0,i=t.length;i>n;n++){var o=Ember.String.camelize(t[n]);r.push(o.charAt(0).toUpperCase()+o.substr(1))}return r.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(o,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,r=Ember.String.loc,n=Ember.String.camelize,i=Ember.String.decamelize,o=Ember.String.dasherize,s=Ember.String.underscore,a=Ember.String.capitalize,u=Ember.String.classify;(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 r(this,arguments)},String.prototype.camelize=function(){return n(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return o(this)},String.prototype.underscore=function(){return s(this)},String.prototype.classify=function(){return u(this)},String.prototype.capitalize=function(){return a(this)})}(),function(){var e=Array.prototype.slice;(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.prototype.on=function(){var t=e.call(arguments);return this.__ember_listens__=t,this})}(),function(){Ember.Comparable=Ember.Mixin.create({compare:Ember.required(Function)})}(),function(){var e=Ember.get;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=[],r=Ember.get;Ember.set,Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=r(this,"length");return 0===e?this:(this.replace(0,e,t),this)},insertAt:function(t,n){if(t>r(this,"length"))throw new Error(e);return this.replace(t,0,[n]),this},removeAt:function(n,i){if("number"==typeof n){if(0>n||n>=r(this,"length"))throw new Error(e);void 0===i&&(i=1),this.replace(n,i,t)}return this},pushObject:function(e){return this.insertAt(r(this,"length"),e),e},pushObjects:function(e){if(!Ember.Enumerable.detect(e)&&!Ember.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this.replace(r(this,"length"),0,e),this},popObject:function(){var e=r(this,"length");if(0===e)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(0===r(this,"length"))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=r(this,"length");if(0===e)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(0===e.length)return this.clear();var t=r(this,"length");return this.replace(0,t,e),this},removeObject:function(e){for(var t=r(this,"length")||0;--t>=0;){var n=this.objectAt(t);n===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,r=Array.prototype.slice,n=Ember.getProperties;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){return n.apply(null,[this].concat(r.call(arguments)))},set:function(e,r){return t(this,e,r),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,r){Ember.addBeforeObserver(this,e,t,r)},addObserver:function(e,t,r){Ember.addObserver(this,e,t,r)},removeObserver:function(e,t,r){Ember.removeObserver(this,e,t,r)},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(r,n){return Ember.isNone(n)&&(n=1),t(this,r,(e(this,r)||0)+n),e(this,r)},decrementProperty:function(r,n){return Ember.isNone(n)&&(n=1),t(this,r,(e(this,r)||0)-n),e(this,r)},toggleProperty:function(r){return t(this,r,!e(this,r)),e(this,r)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get;Ember.set,Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,actionContext:null,targetObject:Ember.computed(function(){var t=e(this,"target");if("string"===Ember.typeOf(t)){var r=e(this,t);return void 0===r&&(r=e(Ember.lookup,t)),r}return t}).property("target"),actionContextObject:Ember.computed(function(){var t=e(this,"actionContext");if("string"===Ember.typeOf(t)){var r=e(this,t);return void 0===r&&(r=e(Ember.lookup,t)),r}return t}).property("actionContext"),triggerAction:function(t){t=t||{};var r=t.action||e(this,"action"),n=t.target||e(this,"targetObject"),i=t.actionContext||e(this,"actionContextObject")||this;if(n&&r){var o;return o=n.send?n.send.apply(n,[r,i]):n[r].apply(n,[i]),o!==!1&&(o=!0),o}return!1}})}(),function(){Ember.Evented=Ember.Mixin.create({on:function(e,t,r){return Ember.addListener(this,e,t,r),this},one:function(e,t,r){return r||(r=t,t=null),Ember.addListener(this,e,t,r,!0),this},trigger:function(e){var t,r,n=[];for(t=1,r=arguments.length;r>t;t++)n.push(arguments[t]);Ember.sendEvent(this,e,n)},fire:function(){this.trigger.apply(this,arguments)},off:function(e,t,r){return Ember.removeListener(this,e,t,r),this},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.configure("async",function(e,t){Ember.run.schedule("actions",t,e,t)});var r=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){function n(t){return t===o?e(s):e(t)}var i,o,s;return s=this,i=r(this,"_deferred"),o=i.promise,o.then(e&&n,t)},resolve:function(e){var t,n;t=r(this,"_deferred"),n=t.promise,e===this?t.resolve(n):t.resolve(e)},reject:function(e){r(this,"_deferred").reject(e)},_deferred:Ember.computed(function(){return e.defer()})})}(),function(){var e=Ember.get;Ember.ActionHandler=Ember.Mixin.create({mergedProperties:["_actions"],willMergeMixin:function(e){e.actions&&!e._actions&&(e._actions=Ember.merge(e._actions||{},e.actions),delete e.actions)},send:function(t){var r,n=[].slice.call(arguments,1);if(this._actions&&this._actions[t]){if(this._actions[t].apply(this,n)!==!0)return}else if(this.deprecatedSend&&this.deprecatedSendHandles&&this.deprecatedSendHandles(t)&&this.deprecatedSend.apply(this,[].slice.call(arguments))!==!0)return;(r=e(this,"target"))&&r.send.apply(r,arguments)}})}(),function(){function e(e,t,r){this.operation=e,this.count=t,this.items=r}function t(e,t,r,n){this.operation=e,this.index=t,this.split=r,this.rangeStart=n}var r=Ember.get,n=Ember.EnumerableUtils.forEach,i="r",o="i",s="d";Ember.TrackedArray=function(t){arguments.length<1&&(t=[]);var n=r(t,"length");this._content=n?[new e(i,n,t)]:[]},Ember.TrackedArray.RETAIN=i,Ember.TrackedArray.INSERT=o,Ember.TrackedArray.DELETE=s,Ember.TrackedArray.prototype={addItems:function(t,n){var i,s,a=r(n,"length"),u=this._findArrayOperation(t),c=u.operation,h=u.index,l=u.rangeStart;s=new e(o,a,n),c?u.split?(this._split(h,t-l,s),i=h+1):(this._content.splice(h,0,s),i=h):(this._content.push(s),i=h),this._composeInsert(i)},removeItems:function(t,r){var n,i,o=this._findArrayOperation(t),a=(o.operation,o.index),u=o.rangeStart;return n=new e(s,r),o.split?(this._split(a,t-u,n),i=a+1):(this._content.splice(a,0,n),i=a),this._composeDelete(i)},apply:function(t){var r=[],o=0;n(this._content,function(e){t(e.items,o,e.operation),e.operation!==s&&(o+=e.count,r=r.concat(e.items))}),this._content=[new e(i,r.length,r)]},_findArrayOperation:function(e){var r,n,i,o,a,u=!1;for(r=o=0,n=this._content.length;n>r;++r)if(i=this._content[r],i.operation!==s){if(a=o+i.count-1,e===o)break;if(e>o&&a>=e){u=!0;break}o=a+1}return new t(i,r,u,o)},_split:function(t,r,n){var i=this._content[t],o=i.items.slice(r),s=new e(i.operation,o.length,o);i.count=r,i.items=i.items.slice(0,r),this._content.splice(t+1,0,n,s)},_composeInsert:function(e){var t=this._content[e],r=this._content[e-1],n=this._content[e+1],i=r&&r.operation,s=n&&n.operation;i===o?(r.count+=t.count,r.items=r.items.concat(t.items),s===o?(r.count+=n.count,r.items=r.items.concat(n.items),this._content.splice(e,2)):this._content.splice(e,1)):s===o&&(t.count+=n.count,t.items=t.items.concat(n.items),this._content.splice(e+1,1))},_composeDelete:function(e){var t,r,n,i=this._content[e],a=i.count,u=this._content[e-1],c=u&&u.operation,h=[];c===s&&(i=u,e-=1);for(var l=e+1;a>0;++l)t=this._content[l],r=t.operation,n=t.count,r!==s?(n>a?(h=h.concat(t.items.splice(0,a)),t.count-=a,l-=1,n=a,a=0):(h=h.concat(t.items),a-=n),r===o&&(i.count-=n)):i.count+=n;return i.count>0?this._content.splice(e+1,l-1-e):this._content.splice(e,1),h}}}(),function(){function e(e,t){this.type=e,this.count=t}var t=(Ember.get,Ember.EnumerableUtils.forEach,"r"),r="f";Ember.SubArray=function(r){arguments.length<1&&(r=0),this._operations=r>0?[new e(t,r)]:[]},Ember.SubArray.prototype={addItem:function(n,i){var o=-1,s=i?t:r,a=this;return this._findOperation(n,function(r,u,c,h,l){var f,m;s===r.type?++r.count:n===c?a._operations.splice(u,0,new e(s,1)):(f=new e(s,1),m=new e(r.type,h-n+1),r.count=n-c,a._operations.splice(u+1,0,f,m)),i&&(o=r.type===t?l+(n-c):l),a._composeAt(u)},function(t){a._operations.push(new e(s,1)),i&&(o=t),a._composeAt(a._operations.length-1)}),o},removeItem:function(e){var r=-1,n=this;return this._findOperation(e,function(i,o,s,a,u){i.type===t&&(r=u+(e-s)),i.count>1?--i.count:(n._operations.splice(o,1),n._composeAt(o))}),r},_findOperation:function(e,r,n){var i,o,s,a,u,c=0;for(i=a=0,o=this._operations.length;o>i;a=u+1,++i){if(s=this._operations[i],u=a+s.count-1,e>=a&&u>=e)return r(s,i,a,u,c),void 0;s.type===t&&(c+=s.count)}n(c)},_composeAt:function(e){var t,r=this._operations[e];r&&(e>0&&(t=this._operations[e-1],t.type===r.type&&(r.count+=t.count,this._operations.splice(e-1,1))),e<this._operations.length-1&&(t=this._operations[e+1],t.type===r.type&&(r.count+=t.count,this._operations.splice(e+1,1))))}}}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function e(){var e,t,o=!1,s=function(){o||s.proto(),n(this,i,v),n(this,"_super",v);var u=a(this),l=u.proto;if(u.proto=this,e){var f=e;e=null,this.reopen.apply(this,f)}if(t){var m=t;t=null;for(var p=this.concatenatedProperties,d=0,g=m.length;g>d;d++){var _=m[d];for(var O in _)if(_.hasOwnProperty(O)){var C=_[O],w=Ember.IS_BINDING;if(w.test(O)){var A=u.bindings;A?u.hasOwnProperty("bindings")||(A=u.bindings=r(u.bindings)):A=u.bindings={},A[O]=C}var P=u.descs[O];if(p&&y(p,O)>=0){var S=this[O];C=S?"function"==typeof S.concat?S.concat(C):Ember.makeArray(S).concat(C):Ember.makeArray(C)}P?P.set(this,O,C):"function"!=typeof this.setUnknownProperty||O in this?E?Ember.defineProperty(this,O,null,C):this[O]=C:this.setUnknownProperty(O,C)}}}b(this,u),this.init.apply(this,arguments),u.proto=l,c(this),h(this,"init")};return s.toString=m.prototype.toString,s.willReopen=function(){o&&(s.PrototypeMixin=m.create(s.PrototypeMixin)),o=!1},s._initMixins=function(t){e=t},s._initProperties=function(e){t=e},s.proto=function(){var e=s.superclass;return e&&e.proto(),o||(o=!0,s.PrototypeMixin.applyPartial(s.prototype),u(s.prototype)),this.prototype},s}function t(e){return function(){return e}}var r=(Ember.set,Ember.get,Ember.create),n=Ember.platform.defineProperty,i=Ember.GUID_KEY,o=Ember.guidFor,s=Ember.generateGuid,a=Ember.meta,u=Ember.rewatch,c=Ember.finishChains,h=Ember.sendEvent,l=Ember.destroy,f=Ember.run.schedule,m=Ember.Mixin,p=m._apply,b=m.finishPartial,d=m.prototype.reopen,E=Ember.ENV.MANDATORY_SETTER,y=Ember.EnumerableUtils.indexOf,v={configurable:!0,writable:!0,enumerable:!1,value:void 0},g=e();g.toString=function(){return"Ember.CoreObject"},g.PrototypeMixin=m.create({reopen:function(){return p(this,arguments,!0),this},init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){return this.isDestroying?void 0:(this.isDestroying=!0,f("actions",this,this.willDestroy),f("destroy",this,this._scheduledDestroy),this)},willDestroy:Ember.K,_scheduledDestroy:function(){this.isDestroyed||(l(this),this.isDestroyed=!0)},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function(){var e="function"==typeof this.toStringExtension,r=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+o(this)+r+">";return this.toString=t(n),n}}),g.PrototypeMixin.ownerConstructor=g,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(g.PrototypeMixin),g.__super__=null;var _=m.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var t,n=e();return n.ClassMixin=m.create(this.ClassMixin),n.PrototypeMixin=m.create(this.PrototypeMixin),n.ClassMixin.ownerConstructor=n,n.PrototypeMixin.ownerConstructor=n,d.apply(n.PrototypeMixin,arguments),n.superclass=this,n.__super__=this.prototype,t=n.prototype=r(this.prototype),t.constructor=n,s(t,"ember"),a(t).proto=t,n.ClassMixin.apply(n),n},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(),d.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return d.apply(this.ClassMixin,arguments),p(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;for(;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 r,n=this.proto(),i=a(n).descs,o={};for(var s in i)r=i[s],r instanceof Ember.ComputedProperty&&e.call(t||this,s,r._meta||o)}});_.ownerConstructor=g,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(_),g.ClassMixin=_,_.apply(g),Ember.CoreObject=g}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function e(t,r,i){var s=t.length;c[t.join(".")]=r;for(var a in r)if(h.call(r,a)){var u=r[a];
|
18
|
-
if(t[s]=a,u&&u.toString===n)u.toString=o(t.join(".")),u[f]=t.join(".");else if(u&&u.isNamespace){if(i[l(u)])continue;i[l(u)]=!0,e(t,u,i)}}t.length=s}function t(){var e,t,r=Ember.Namespace,n=Ember.lookup;if(!r.PROCESSED)for(var i in n)if("parent"!==i&&"top"!==i&&"frameElement"!==i&&"webkitStorageInfo"!==i&&!("globalStorage"===i&&n.StorageList&&n.globalStorage instanceof n.StorageList||n.hasOwnProperty&&!n.hasOwnProperty(i))){try{e=Ember.lookup[i],t=e&&e.isNamespace}catch(o){continue}t&&(e[f]=i)}}function r(e){var t=e.superclass;return t?t[f]?t[f]:r(t):void 0}function n(){Ember.BOOTED||this[f]||i();var e;if(this[f])e=this[f];else if(this._toString)e=this._toString;else{var t=r(this);e=t?"(subclass of "+t+")":"(unknown mixin)",this.toString=o(e)}return e}function i(){var r=!u.PROCESSED,n=Ember.anyUnprocessedMixins;if(r&&(t(),u.PROCESSED=!0),r||n){for(var i,o=u.NAMESPACES,s=0,a=o.length;a>s;s++)i=o[s],e([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function o(e){return function(){return e}}var s=Ember.get,a=Ember.ArrayPolyfills.indexOf,u=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var e=s(this,"name");return e?e:(t(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){e([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=void 0,e.splice(a.call(e,this),1),this._super()}});u.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:i,byName:function(e){return Ember.BOOTED||i(),c[e]}});var c=u.NAMESPACES_BY_ID,h={}.hasOwnProperty,l=Ember.guidFor,f=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=n}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e="Index out of range",t=[],r=Ember.get;Ember.set,Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(e){return r(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,n){r(this,"content").replace(e,t,n)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var e=r(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){r(this,"content"),this._setupContent()},"content"),_setupContent:function(){var e=r(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var e=r(this,"arrangedContent"),t=e?r(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,void 0),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var e=r(this,"arrangedContent"),t=e?r(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,void 0,t)},"arrangedContent"),_setupArrangedContent:function(){var e=r(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=r(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(e){return r(this,"content")&&this.objectAtContent(e)},length:Ember.computed(function(){var e=r(this,"arrangedContent");return e?r(e,"length"):0}),_replace:function(e,t,n){var i=r(this,"content");return i&&this.replaceContent(e,t,n),this},replace:function(){if(r(this,"arrangedContent")!==r(this,"content"))throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(t,n){if(t>r(this,"content.length"))throw new Error(e);return this._replace(t,0,[n]),this},insertAt:function(e,t){if(r(this,"arrangedContent")===r(this,"content"))return this._insertAt(e,t);throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(n,i){if("number"==typeof n){var o,s=r(this,"content"),a=r(this,"arrangedContent"),u=[];if(0>n||n>=r(this,"length"))throw new Error(e);for(void 0===i&&(i=1),o=n;n+i>o;o++)u.push(s.indexOf(a.objectAt(o)));for(u.sort(function(e,t){return t-e}),Ember.beginPropertyChanges(),o=0;o<u.length;o++)this._replace(u[o],1,t);Ember.endPropertyChanges()}return this},pushObject:function(e){return this._insertAt(r(this,"content.length"),e),e},pushObjects:function(e){if(!Ember.Enumerable.detect(e)&&!Ember.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this._replace(r(this,"length"),0,e),this},setObjects:function(e){if(0===e.length)return this.clear();var t=r(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,r,n){this.arrayContentWillChange(t,r,n)},arrangedContentArrayDidChange:function(e,t,r,n){this.arrayContentDidChange(t,r,n)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function e(e,t){var r=t.slice(8);r in this||u(this,r)}function t(e,t){var r=t.slice(8);r in this||c(this,r)}var r=Ember.get,n=Ember.set,i=(Ember.String.fmt,Ember.addBeforeObserver),o=Ember.addObserver,s=Ember.removeBeforeObserver,a=Ember.removeObserver,u=Ember.propertyWillChange,c=Ember.propertyDidChange;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(r){var n="content."+r;i(this,n,null,e),o(this,n,null,t)},didUnwatchProperty:function(r){var n="content."+r;s(this,n,null,e),a(this,n,null,t)},unknownProperty:function(e){var t=r(this,"content");return t?r(t,e):void 0},setUnknownProperty:function(e,t){var i=r(this,"content");return n(i,e,t)}}),Ember.ObjectProxy.reopenClass({create:function(){var e,t,r,n,i,o;if(arguments.length){for(t=this.proto(),r=0,n=arguments.length;n>r;r++){i=arguments[r];for(o in i)!i.hasOwnProperty(o)||o in t||(e||(e={}),e[o]=null)}e&&this._initMixins([e])}return this._super.apply(this,arguments)}})}(),function(){function e(e,t,r,i,o){var s,a=r._objects;for(a||(a=r._objects={});--o>=i;){var u=e.objectAt(o);u&&(Ember.addBeforeObserver(u,t,r,"contentKeyWillChange"),Ember.addObserver(u,t,r,"contentKeyDidChange"),s=n(u),a[s]||(a[s]=[]),a[s].push(o))}}function t(e,t,r,i,o){var s=r._objects;s||(s=r._objects={});for(var a,u;--o>=i;){var c=e.objectAt(o);c&&(Ember.removeBeforeObserver(c,t,r,"contentKeyWillChange"),Ember.removeObserver(c,t,r,"contentKeyDidChange"),u=n(c),a=s[u],a[a.indexOf(o)]=null)}}var r=(Ember.set,Ember.get),n=Ember.guidFor,i=Ember.EnumerableUtils.forEach,o=Ember.Object.extend(Ember.Array,{init:function(e,t,r){this._super(),this._keyName=t,this._owner=r,this._content=e},objectAt:function(e){var t=this._content.objectAt(e);return t&&r(t,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?r(e,"length"):0})}),s=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),i(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e){var t;return t=new o(this._content,e,this),Ember.defineProperty(this,e,null,t),this.beginObservingContentKey(e),t},arrayWillChange:function(e,r,n){var i,o,s=this._keys;o=n>0?r+n:-1,Ember.beginPropertyChanges(this);for(i in s)s.hasOwnProperty(i)&&(o>0&&t(e,i,this,r,o),Ember.propertyWillChange(this,i));Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(t,r,n,i){var o,s=this._keys;o=i>0?r+i:-1,Ember.changeProperties(function(){for(var n in s)s.hasOwnProperty(n)&&(o>0&&e(t,n,this,r,o),Ember.propertyDidChange(this,n));Ember.propertyDidChange(this._content,"@each")},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(t){var n=this._keys;if(n||(n=this._keys={}),n[t])n[t]++;else{n[t]=1;var i=this._content,o=r(i,"length");e(i,t,this,0,o)}},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var i=this._content,o=r(i,"length");t(i,e,this,0,o)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils._replace),r=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return"length"===e?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(r,n,i){if(this.isFrozen)throw Ember.FROZEN_ERROR;var o=i?e(i,"length"):0;return this.arrayContentWillChange(r,n,o),i&&0!==i.length?t(this,r,n,i):this.splice(r,n),this.arrayContentDidChange(r,n,o),this},unknownProperty:function(e,t){var r;return void 0!==t&&void 0===r&&(r=this[e]=t),r},indexOf:function(e,t){var r,n=this.length;for(t=void 0===t?0:0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n),r=t;n>r;r++)if(this[r]===e)return r;return-1},lastIndexOf:function(e,t){var r,n=this.length;for(t=void 0===t?n-1:0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n),r=t;r>=0;r--)if(this[r]===e)return r;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),n=["length"];Ember.EnumerableUtils.forEach(r.keys(),function(e){Array.prototype[e]&&n.push(e)}),n.length>0&&(r=r.without.apply(r,n)),Ember.NativeArray=r,Ember.A=function(e){return void 0===e&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){r.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,r=Ember.guidFor,n=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 n=e(this,"length");if(0===n)return this;var i;this.enumerableContentWillChange(n,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var o=0;n>o;o++)i=r(this[o]),delete this[i],delete this[o];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(n,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var r=e(this,"length");if(e(t,"length")!==r)return!1;for(;--r>=0;)if(!t.contains(this[r]))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]:void 0}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:void 0}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(n(i))return this;var o,s=r(i),a=this[s],u=e(this,"length");return a>=0&&u>a&&this[a]===i?this:(o=[i],this.enumerableContentWillChange(null,o),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,o),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(n(i))return this;var o,s,a=r(i),u=this[a],c=e(this,"length"),h=0===u,l=u===c-1;return u>=0&&c>u&&this[u]===i&&(s=[i],this.enumerableContentWillChange(s,null),h&&Ember.propertyWillChange(this,"firstObject"),l&&Ember.propertyWillChange(this,"lastObject"),c-1>u&&(o=this[c-1],this[u]=o,this[r(o)]=u),delete this[a],delete this[c-1],t(this,"length",c-1),h&&Ember.propertyDidChange(this,"firstObject"),l&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(s,null)),this},contains:function(e){return this[r(e)]>=0},copy:function(){var n=this.constructor,i=new n,o=e(this,"length");for(t(i,"length",o);--o>=0;)i[o]=this[o],i[r(this[o])]=o;return i},toString:function(){var e,t=this.length,r=[];for(e=0;t>e;e++)r[e]=this[e];return i("Ember.Set<%@>",[r.join(",")])}})}(),function(){var e=Ember.DeferredMixin;Ember.get;var t=Ember.Object.extend(e);t.reopenClass({promise:function(e,r){var n=t.create();return e.call(r,n),n}}),Ember.Deferred=t}(),function(){var e=Ember.ArrayPolyfills.forEach,t=Ember.ENV.EMBER_LOAD_HOOKS||{},r={};Ember.onLoad=function(e,n){var i;t[e]=t[e]||Ember.A(),t[e].pushObject(n),(i=r[e])&&n(i)},Ember.runLoadHooks=function(n,i){r[n]=i,t[n]&&e.call(t[n],function(e){e(i)})}}(),function(){Ember.get,Ember.ControllerMixin=Ember.Mixin.create(Ember.ActionHandler,{isController:!0,target:null,container:null,parentController:null,store:null,model:Ember.computed.alias("content"),deprecatedSendHandles:function(e){return!!this[e]},deprecatedSend:function(e){var t=[].slice.call(arguments,1);this[e].apply(this,t)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach);Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,sortFunction:Ember.compare,orderBy:function(r,n){var i=0,o=e(this,"sortProperties"),s=e(this,"sortAscending"),a=e(this,"sortFunction");return t(o,function(t){0===i&&(i=a(e(r,t),e(n,t)),0===i||s||(i=-1*i))}),i},destroy:function(){var r=e(this,"content"),n=e(this,"sortProperties");return r&&n&&t(r,function(e){t(n,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(){var r=e(this,"content"),n=e(this,"isSorted"),i=e(this,"sortProperties"),o=this;return r&&n?(r=r.slice(),r.sort(function(e,t){return o.orderBy(e,t)}),t(r,function(e){t(i,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(r)):r}),_contentWillChange:Ember.beforeObserver(function(){var r=e(this,"content"),n=e(this,"sortProperties");r&&n&&t(r,function(e){t(n,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(r,n,i,o){var s=e(this,"isSorted");if(s){var a=e(this,"arrangedContent"),u=r.slice(n,n+i),c=e(this,"sortProperties");t(u,function(e){a.removeObject(e),t(c,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(r,n,i,o)},contentArrayDidChange:function(r,n,i,o){var s=e(this,"isSorted"),a=e(this,"sortProperties");if(s){var u=r.slice(n,n+o);t(u,function(e){this.insertItemSorted(e),t(a,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(r,n,i,o)},insertItemSorted:function(t){var r=e(this,"arrangedContent"),n=e(r,"length"),i=this._binarySearch(t,0,n);r.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var r=e(this,"arrangedContent"),n=r.indexOf(t),i=r.objectAt(n-1),o=r.objectAt(n+1),s=i&&this.orderBy(t,i),a=o&&this.orderBy(t,o);(0>s||a>0)&&(r.removeObject(t),this.insertItemSorted(t))},_binarySearch:function(t,r,n){var i,o,s,a;return r===n?r:(a=e(this,"arrangedContent"),i=r+Math.floor((n-r)/2),o=a.objectAt(i),s=this.orderBy(o,t),0>s?this._binarySearch(t,i+1,n):s>0?this._binarySearch(t,r,i):i)}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach),r=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(){return e(this,"itemController")},objectAtContent:function(t){var r=e(this,"length"),n=e(this,"arrangedContent"),i=n&&n.objectAt(t);if(t>=0&&r>t){var o=this.lookupItemController(i);if(o)return this.controllerAt(t,i,o)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(n,i,o){var s=e(this,"_subControllers"),a=s.slice(n,n+i);t(a,function(e){e&&e.destroy()}),r(s,n,i,new Array(o)),this._super(n,i,o)},init:function(){this.get("content")||Ember.defineProperty(this,"content",void 0,Ember.A()),this._super(),this.set("_subControllers",Ember.A())},controllerAt:function(t,r,n){var i,o=e(this,"container"),s=e(this,"_subControllers"),a=s[t];if(a)return a;if(i="controller:"+n,!o.has(i))throw new Error('Could not resolve itemController: "'+n+'"');return a=o.lookupFactory(i).create({target:this,parentController:e(this,"parentController")||this,content:r}),s[t]=a,a},_subControllers:null,_resetSubControllers:function(){var r=e(this,"_subControllers");r&&t(r,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=Ember.set;Ember.State=Ember.Object.extend(Ember.Evented,{parentState:null,start:null,name:null,path:Ember.computed(function(){var t=e(this,"parentState.path"),r=e(this,"name");return t&&(r=t+"."+r),r}),trigger:function(e){this[e]&&this[e].apply(this,[].slice.call(arguments,1)),this._super.apply(this,arguments)},init:function(){var r=e(this,"states");t(this,"childStates",Ember.A()),t(this,"eventTransitions",e(this,"eventTransitions")||{});var n,i,o;if(r)for(n in r)this.setupChild(r,n,r[n]);else{r={};for(n in this)"constructor"!==n&&(i=this[n])&&((o=i.transitionTarget)&&(this.eventTransitions[n]=o),this.setupChild(r,n,i));t(this,"states",r)}t(this,"pathsCaches",{})},setPathsCache:function(t,r,n){var i=Ember.guidFor(t.constructor),o=e(this,"pathsCaches"),s=o[i]||{};s[r]=n,o[i]=s},getPathsCache:function(t,r){var n=Ember.guidFor(t.constructor),i=e(this,"pathsCaches"),o=i[n]||{};return o[r]},setupChild:function(r,n,i){if(!i)return!1;var o;return i instanceof Ember.State?(t(i,"name",n),o=i,o.container=this.container):Ember.State.detect(i)&&(o=i.create({name:n,container:this.container})),o instanceof Ember.State?(t(o,"parentState",this),e(this,"childStates").pushObject(o),r[n]=o,o):void 0},lookupEventTransition:function(e){for(var t,r=this;r&&!t;)t=r.eventTransitions[e],r=r.get("parentState");return t},isLeaf:Ember.computed(function(){return!e(this,"childStates").length}),hasContext:!0,setup:Ember.K,enter:Ember.K,exit:Ember.K}),Ember.State.reopenClass({transitionTo:function(e){var t=function(t,r){var n=[],i=Ember.$&&Ember.$.Event;r&&i&&r instanceof i?r.hasOwnProperty("contexts")&&(n=r.contexts.slice()):n=[].slice.call(arguments,1),n.unshift(e),t.transitionTo.apply(t,n)};return t.transitionTarget=e,t}})}(),function(){var e=Ember.get,t=Ember.set,r=Ember.String.fmt,n=Ember.ArrayPolyfills.forEach,i=function(e){this.enterStates=e.enterStates.slice(),this.exitStates=e.exitStates.slice(),this.resolveState=e.resolveState,this.finalState=e.enterStates[e.enterStates.length-1]||e.resolveState};i.prototype={normalize:function(e,t){return this.matchContextsToStates(t),this.addInitialStates(),this.removeUnchangedContexts(e),this},matchContextsToStates:function(t){for(var r,n,i=this.enterStates.length-1,o=[];t.length>0;){if(i>=0)r=this.enterStates[i--];else{if(this.enterStates.length){if(r=e(this.enterStates[0],"parentState"),!r)throw"Cannot match all contexts to states"}else r=this.resolveState;this.enterStates.unshift(r),this.exitStates.unshift(r)}n=e(r,"hasContext")?t.pop():null,o.unshift(n)}this.contexts=o},addInitialStates:function(){for(var t,r=this.finalState;;){if(t=e(r,"initialState")||"start",r=e(r,"states."+t),!r)break;this.finalState=r,this.enterStates.push(r),this.contexts.push(void 0)}},removeUnchangedContexts:function(e){for(;this.enterStates.length>0&&this.enterStates[0]===this.exitStates[0];){if(this.enterStates.length===this.contexts.length){if(e.getStateMeta(this.enterStates[0],"context")!==this.contexts[0])break;this.contexts.shift()}this.resolveState=this.enterStates.shift(),this.exitStates.shift()}}};var o=function(t,n,i){var a,u,c,h=this.enableLogging,l=i?"unhandledEvent":t,f=n[l];if(a=[].slice.call(arguments,3),"function"==typeof f)return h&&(i?Ember.Logger.log(r("STATEMANAGER: Unhandled event '%@' being sent to state %@.",[t,e(n,"path")])):Ember.Logger.log(r("STATEMANAGER: Sending event '%@' to state %@.",[t,e(n,"path")]))),c=a,i&&c.unshift(t),c.unshift(this),f.apply(n,c);var m=e(n,"parentState");return m?(u=a,u.unshift(t,m,i),o.apply(this,u)):i?void 0:s.call(this,t,a,!0)},s=function(t,r,n){return r.unshift(t,e(this,"currentState"),n),o.apply(this,r)};Ember.StateManager=Ember.State.extend({init:function(){this._super(),t(this,"stateMeta",Ember.Map.create());var r=e(this,"initialState");!r&&e(this,"states.start")&&(r="start"),r&&this.transitionTo(r)},stateMetaFor:function(t){var r=e(this,"stateMeta"),n=r.get(t);return n||(n={},r.set(t,n)),n},setStateMeta:function(e,r,n){return t(this.stateMetaFor(e),r,n)},getStateMeta:function(t,r){return e(this.stateMetaFor(t),r)},currentState:null,currentPath:Ember.computed.alias("currentState.path"),transitionEvent:"setup",errorOnUnhandledEvent:!0,send:function(e){var t=[].slice.call(arguments,1);return s.call(this,e,t,!1)},unhandledEvent:function(t,r){if(e(this,"errorOnUnhandledEvent"))throw new Ember.Error(this.toString()+" could not respond to event "+r+" in state "+e(this,"currentState.path")+".")},getStateByPath:function(t,r){for(var n=r.split("."),i=t,o=0,s=n.length;s>o&&(i=e(e(i,"states"),n[o]),i);o++);return i},findStateByPath:function(t,r){for(var n;!n&&t;)n=this.getStateByPath(t,r),t=e(t,"parentState");return n},getStatesInPath:function(t,r){if(!r||""===r)return void 0;for(var n,i,o=r.split("."),s=[],a=0,u=o.length;u>a;a++){if(n=e(t,"states"),!n)return void 0;if(i=e(n,o[a]),!i)return void 0;t=i,s.push(i)}return s},goToState:function(){return this.transitionTo.apply(this,arguments)},transitionTo:function(t,r){if(!Ember.isEmpty(t)){var n=r?Array.prototype.slice.call(arguments,1):[],o=e(this,"currentState")||this,s=this.contextFreeTransition(o,t),a=new i(s).normalize(this,n);this.enterState(a),this.triggerSetupContext(a)}},contextFreeTransition:function(t,r){var n=t.getPathsCache(this,r);if(n)return n;for(var i=this.getStatesInPath(t,r),o=[],s=t;s&&!i;){if(o.unshift(s),s=e(s,"parentState"),!s&&(i=this.getStatesInPath(this,r),!i))return;i=this.getStatesInPath(s,r)}for(;i.length>0&&i[0]===o[0];)s=i.shift(),o.shift();var a={exitStates:o,enterStates:i,resolveState:s};return t.setPathsCache(this,r,a),a},triggerSetupContext:function(t){var r=t.contexts,i=t.enterStates.length-r.length,o=t.enterStates,s=e(this,"transitionEvent");n.call(o,function(e,t){e.trigger(s,this,r[t-i])},this)},getState:function(t){var r=e(this,t),n=e(this,"parentState");return r?r:n?n.getState(t):void 0},enterState:function(r){var i=this.enableLogging,o=r.exitStates.slice(0).reverse();n.call(o,function(e){e.trigger("exit",this)},this),n.call(r.enterStates,function(t){i&&Ember.Logger.log("STATEMANAGER: Entering "+e(t,"path")),t.trigger("enter",this)},this),t(this,"currentState",r.finalState)}})}()}(),"undefined"==typeof location||"localhost"!==location.hostname&&"127.0.0.1"!==location.hostname||Ember.Logger.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 r={},n={};e=function(e,t,n){r[e]={deps:t,callback:n}},t=function(e){if(n[e])return n[e];n[e]={};var i,o,s,a,u;if(i=r[e],!i)throw new Error("Module '"+e+"' not found.");o=i.deps,s=i.callback,a=[];for(var c=0,h=o.length;h>c;c++)"exports"===o[c]?a.push(u={}):a.push(t(o[c]));var l=s.apply(this,a);return n[e]=u||l}}(),function(){function e(e){var t;r.console?t=r.console:"undefined"!=typeof console&&(t=console);var n="object"==typeof t?t[e]:null;return n?n.apply?function(){n.apply(t,arguments)}:function(){var e=Array.prototype.join.call(arguments,", ");n(e)}:void 0}function t(e,t){if(!e)try{throw new Error("assertion failed: "+t)}catch(r){setTimeout(function(){throw r},0)}}"undefined"==typeof Ember&&(Ember={});var r=Ember.imports=Ember.imports||this,n=Ember.exports=Ember.exports||this;Ember.lookup=Ember.lookup||this,n.Em=n.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0","undefined"==typeof ENV&&(n.ENV={}),"undefined"==typeof ENV.DISABLE_RANGE_API&&(ENV.DISABLE_RANGE_API=!0),Ember.ENV=Ember.ENV||ENV,Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,"undefined"==typeof Ember.EXTEND_PROTOTYPES&&(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:e("log")||Ember.K,warn:e("warn")||Ember.K,error:e("error")||Ember.K,info:e("info")||Ember.K,debug:e("debug")||e("info")||Ember.K,assert:e("assert")||t},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.call(t||this);try{return e.call(t||this)}catch(r){Ember.onerror(r)}},Ember.merge=function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e},Ember.isNone=function(e){return null===e||void 0===e},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return Ember.isNone(e)||0===e.length&&"function"!=typeof e||"object"==typeof e&&0===Ember.get(e,"length")},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty)}(),function(){var e=Ember.platform={};if(Ember.create=Object.create,Ember.create&&2!==Ember.create({a:1},{a:{value:2}}).a&&(Ember.create=null),!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,r){if(t.prototype=e,e=new t,r){t.prototype=e;for(var n in r)t.prototype[n]=r[n].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var r,n,i=Object.defineProperty;if(i)try{i({},"a",{get:function(){}})}catch(o){i=null}i&&(r=function(){var e={};return i(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),i(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),n=function(){try{return i(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?n||(i=function(e,t,r){var n;return n="object"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName,n?e[t]=r.value:Object.defineProperty(e,t,r)}):i=null),e.defineProperty=i,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,r){r.get||(e[t]=r.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),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(void 0===this||null===this)throw new TypeError;var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var n=new Array(r),i=arguments[1],o=0;r>o;o++)o in t&&(n[o]=e.call(i,t[o],o,t));return n},r=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(void 0===this||null===this)throw new TypeError;var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var n=arguments[1],i=0;r>i;i++)i in t&&e.call(n,t[i],i,t)},n=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){null===t||void 0===t?t=0:0>t&&(t=Math.max(0,this.length+t));for(var r=t,n=this.length;n>r;r++)if(this[r]===e)return r;return-1};Ember.ArrayPolyfills={map:t,forEach:r,indexOf:n},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=r),Array.prototype.indexOf||(Array.prototype.indexOf=n))}(),function(){function e(e){this.descs={},this.watching={},this.cache={},this.source=e}function t(e,t){return!(!e||"function"!=typeof e[t])}var r=Ember.platform.defineProperty,n=Ember.create,i="__ember"+ +new Date,o=0,s=[],a={},u=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=i;var c={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(e,t){t||(t="ember");var n=t+o++;return e&&(c.value=n,r(e,i,c)),n},Ember.guidFor=function(e){if(void 0===e)return"(undefined)";if(null===e)return"(null)";var t,n=typeof e;switch(n){case"number":return t=s[e],t||(t=s[e]="nu"+e),t;case"string":return t=a[e],t||(t=a[e]="st"+o++),t;case"boolean":return e?"(true)":"(false)";default:return e[i]?e[i]:e===Object?"(Object)":e===Array?"(Array)":(t="ember"+o++,c.value=t,r(e,i,c),t)}};var h={writable:!0,configurable:!1,enumerable:!1,value:null},l=Ember.GUID_KEY+"_meta";Ember.META_KEY=l;var f={descs:{},watching:{}};u&&(f.values={}),Ember.EMPTY_META=f,Object.freeze&&Object.freeze(f);var m=Ember.platform.defineProperty.isSimulated;m&&(e.prototype.__preventPlainObject__=!0,e.prototype.toJSON=function(){}),Ember.meta=function(t,i){var o=t[l];return i===!1?o||f:(o?o.source!==t&&(m||r(t,l,h),o=n(o),o.descs=n(o.descs),o.watching=n(o.watching),o.cache={},o.source=t,u&&(o.values=n(o.values)),t[l]=o):(m||r(t,l,h),o=new e(t),u&&(o.values={}),t[l]=o,o.descs.constructor=null),o)},Ember.getMeta=function(e,t){var r=Ember.meta(e,!1);return r[t]},Ember.setMeta=function(e,t,r){var n=Ember.meta(e,!0);return n[t]=r,r},Ember.metaPath=function(e,t,r){for(var i,o,s=Ember.meta(e,r),a=0,u=t.length;u>a;a++){if(i=t[a],o=s[i]){if(o.__ember_source__!==e){if(!r)return void 0;o=s[i]=n(o),o.__ember_source__=e}}else{if(!r)return void 0;o=s[i]={__ember_source__:e}}s=o}return o},Ember.wrap=function(e,t){function r(){}function n(){var n,i=this._super;return this._super=t||r,n=e.apply(this,arguments),this._super=i,n}return n.wrappedFunction=e,n.__ember_observes__=e.__ember_observes__,n.__ember_observesBefore__=e.__ember_observesBefore__,n.__ember_listens__=e.__ember_listens__,n},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:void 0!==e.length&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return null===e||void 0===e?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=t,Ember.tryInvoke=function(e,r,n){return t(e,r)?e[r].apply(e,n||[]):void 0};var p=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return 1!==e}();Ember.tryFinally=p?function(e,t,r){var n,i,o;r=r||this;try{n=e.call(r)}finally{try{i=t.call(r)}catch(s){o=s}}if(o)throw o;return void 0===i?n:i}:function(e,t,r){var n,i;r=r||this;try{n=e.call(r)}finally{i=t.call(r)}return void 0===i?n:i},Ember.tryCatchFinally=p?function(e,t,r,n){var i,o,s;n=n||this;try{i=e.call(n)}catch(a){i=t.call(n,a)}finally{try{o=r.call(n)}catch(u){s=u}}if(s)throw s;return void 0===o?i:o}:function(e,t,r,n){var i,o;n=n||this;try{i=e.call(n)}catch(s){i=t.call(n,s)}finally{o=r.call(n)}return void 0===o?i:o};var b={},d="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(d,function(e){b["[object "+e+"]"]=e.toLowerCase()});var E=Object.prototype.toString;Ember.typeOf=function(e){var t;return t=null===e||void 0===e?String(e):b[E.call(e)]||"object","function"===t?Ember.Object&&Ember.Object.detect(e)&&(t="class"):"object"===t&&(t=e instanceof Error?"error":Ember.Object&&e instanceof Ember.Object?"instance":"object"),t}}(),function(){Ember.Instrumentation={};var e=[],t={},r=function(r){for(var n,i=[],o=0,s=e.length;s>o;o++)n=e[o],n.regex.test(r)&&i.push(n.object);return t[r]=i,i},n=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,o,s){function a(){for(p=0,b=f.length;b>p;p++)m=f[p],d[p]=m.before(e,n(),i);return o.call(s)}function u(e){i=i||{},i.exception=e}function c(){for(p=0,b=f.length;b>p;p++)m=f[p],m.after(e,n(),i,d[p]);Ember.STRUCTURED_PROFILE&&console.timeEnd(h)}var h,l,f=t[e];if(Ember.STRUCTURED_PROFILE&&(h=e+": "+i.object,console.time(h)),f||(f=r(e)),0===f.length)return l=o.call(s),Ember.STRUCTURED_PROFILE&&console.timeEnd(h),l;var m,p,b,d=[];return Ember.tryCatchFinally(a,u,c)},Ember.Instrumentation.subscribe=function(r,n){for(var i,o=r.split("."),s=[],a=0,u=o.length;u>a;a++)i=o[a],"*"===i?s.push("[^\\.]*"):s.push(i);s=s.join("\\."),s+="(\\..*)?";var c={pattern:r,regex:new RegExp("^"+s+"$"),object:n};return e.push(c),t={},c},Ember.Instrumentation.unsubscribe=function(r){for(var n,i=0,o=e.length;o>i;i++)e[i]===r&&(n=i);e.splice(n,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e,t,r,n;e=Array.prototype.map||Ember.ArrayPolyfills.map,t=Array.prototype.forEach||Ember.ArrayPolyfills.forEach,r=Array.prototype.indexOf||Ember.ArrayPolyfills.indexOf,n=Array.prototype.splice;var i=Ember.EnumerableUtils={map:function(t,r,n){return t.map?t.map.call(t,r,n):e.call(t,r,n)},forEach:function(e,r,n){return e.forEach?e.forEach.call(e,r,n):t.call(e,r,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):r.call(e,t,n)},indexesOf:function(e,t){return void 0===t?[]:i.map(t,function(t){return i.indexOf(e,t)})},addObject:function(e,t){var r=i.indexOf(e,t);-1===r&&e.push(t)},removeObject:function(e,t){var r=i.indexOf(e,t);-1!==r&&e.splice(r,1)},_replace:function(e,t,r,i){for(var o,s,a=[].concat(i),u=[],c=6e4,h=t,l=r;a.length;)s=l>c?c:l,0>=s&&(s=0),o=a.splice(0,c),o=[h,s].concat(o),h+=c,l-=s,u=u.concat(n.apply(e,o));return u},replace:function(e,t,r,n){return e.replace?e.replace(t,r,n):i._replace(e,t,r,n)},intersection:function(e,t){var r=[];return i.forEach(e,function(e){i.indexOf(t,e)>=0&&r.push(e)}),r}}}(),function(){var e,t=Ember.META_KEY,r=Ember.ENV.MANDATORY_SETTER,n=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,i=/^this[\.\*]/,o=/^([^\.\*]+)/;e=function(e,n){if(""===n)return e;if(n||"string"!=typeof e||(n=e,e=null),null===e||-1!==n.indexOf("."))return a(e,n);var i,o=e[t],s=o&&o.descs[n];return s?s.get(e,n):(i=r&&o&&o.watching[n]>0?o.values[n]:e[n],void 0!==i||"object"!=typeof e||n in e||"function"!=typeof e.unknownProperty?i:e.unknownProperty(n))},Ember.config.overrideAccessors&&(Ember.get=e,Ember.config.overrideAccessors(),e=Ember.get);var s=Ember.normalizeTuple=function(t,r){var s,a=i.test(r),u=!a&&n.test(r);if((!t||u)&&(t=Ember.lookup),a&&(r=r.slice(5)),t===Ember.lookup&&(s=r.match(o)[0],t=e(t,s),r=r.slice(s.length+1)),!r||0===r.length)throw new Error("Invalid Path");return[t,r]},a=Ember._getPath=function(t,r){var n,o,a,u,c;if(null===t&&-1===r.indexOf("."))return e(Ember.lookup,r);for(n=i.test(r),(!t||n)&&(a=s(t,r),t=a[0],r=a[1],a.length=0),o=r.split("."),c=o.length,u=0;null!=t&&c>u;u++)if(t=e(t,o[u],!0),t&&t.isDestroyed)return void 0;return t};Ember.getWithDefault=function(t,r,n){var i=e(t,r);return void 0===i?n:i},Ember.get=e,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get)}(),function(){function e(e,t,r){for(var n=-1,i=0,o=e.length;o>i;i+=3)if(t===e[i]&&r===e[i+1]){n=i;break}return n}function t(e,t){var r,n=m(e,!0);return n.listeners||(n.listeners={}),n.hasOwnProperty("listeners")||(n.listeners=f(n.listeners)),r=n.listeners[t],r&&!n.listeners.hasOwnProperty(t)?r=n.listeners[t]=n.listeners[t].slice():r||(r=n.listeners[t]=[]),r}function r(t,r,n){var i=t[p],o=i&&i.listeners&&i.listeners[r];if(o)for(var s=o.length-3;s>=0;s-=3){var a=o[s],u=o[s+1],c=o[s+2],h=e(n,a,u);-1===h&&n.push(a,u,c)}}function n(t,r,n){var i=t[p],o=i&&i.listeners&&i.listeners[r],s=[];if(o){for(var a=o.length-3;a>=0;a-=3){var u=o[a],c=o[a+1],h=o[a+2],l=e(n,u,c);-1===l&&(n.push(u,c,h),s.push(u,c,h))}return s}}function i(r,n,i,o,s){o||"function"!=typeof i||(o=i,i=null);var a=t(r,n),u=e(a,i,o),c=0;s&&(c|=d),-1===u&&(a.push(i,o,c),"function"==typeof r.didAddListener&&r.didAddListener(n,i,o))}function o(r,n,i,o){function s(i,o){var s=t(r,n),a=e(s,i,o);-1!==a&&(s.splice(a,3),"function"==typeof r.didRemoveListener&&r.didRemoveListener(n,i,o))}if(o||"function"!=typeof i||(o=i,i=null),o)s(i,o);else{var a=r[p],u=a&&a.listeners&&a.listeners[n];if(!u)return;for(var c=u.length-3;c>=0;c-=3)s(u[c],u[c+1])}}function s(r,n,i,o,s){function a(){return s.call(i)}function u(){-1!==h&&(c[h+2]&=~E)}o||"function"!=typeof i||(o=i,i=null);var c=t(r,n),h=e(c,i,o);return-1!==h&&(c[h+2]|=E),Ember.tryFinally(a,u)}function a(r,n,i,o,s){function a(){return s.call(i)}function u(){for(var e=0,t=m.length;t>e;e++){var r=m[e];h[r+2]&=~E}}o||"function"!=typeof i||(o=i,i=null);var c,h,l,f,m=[];for(l=0,f=n.length;f>l;l++){c=n[l],h=t(r,c);var p=e(h,i,o);-1!==p&&(h[p+2]|=E,m.push(p))}return Ember.tryFinally(a,u)}function u(e){var t=e[p].listeners,r=[];if(t)for(var n in t)t[n]&&r.push(n);return r}function c(e,t,r,n){if(e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,r),!n){var i=e[p];n=i&&i.listeners&&i.listeners[t]}if(n){for(var s=n.length-3;s>=0;s-=3){var a=n[s],u=n[s+1],c=n[s+2];u&&(c&E||(c&d&&o(e,t,a,u),a||(a=e),"string"==typeof u&&(u=a[u]),r?u.apply(a,r):u.call(a)))}return!0}}function h(e,t){var r=e[p],n=r&&r.listeners&&r.listeners[t];return!(!n||!n.length)}function l(e,t){var r=[],n=e[p],i=n&&n.listeners&&n.listeners[t];if(!i)return r;for(var o=0,s=i.length;s>o;o+=3){var a=i[o],u=i[o+1];r.push([a,u])}return r}var f=Ember.create,m=Ember.meta,p=Ember.META_KEY,b=[].slice,d=1,E=2;Ember.on=function(){var e=b.call(arguments,-1)[0],t=b.call(arguments,0,-1);return e.__ember_listens__=t,e},Ember.addListener=i,Ember.removeListener=o,Ember._suspendListener=s,Ember._suspendListeners=a,Ember.sendEvent=c,Ember.hasListeners=h,Ember.watchedEvents=u,Ember.listenersFor=l,Ember.listenersDiff=n,Ember.listenersUnion=r}(),function(){var e=Ember.guidFor,t=Ember.sendEvent,r=Ember._ObserverSet=function(){this.clear()};r.prototype.add=function(t,r,n){var i,o=this.observerSet,s=this.observers,a=e(t),u=o[a];return u||(o[a]=u={}),i=u[r],void 0===i&&(i=s.push({sender:t,keyName:r,eventName:n,listeners:[]})-1,u[r]=i),s[i].listeners},r.prototype.flush=function(){var e,r,n,i,o=this.observers;for(this.clear(),e=0,r=o.length;r>e;++e)n=o[e],i=n.sender,i.isDestroying||i.isDestroyed||t(i,n.eventName,[i,n.keyName],n.listeners)},r.prototype.clear=function(){this.observerSet={},this.observers=[]}}(),function(){function e(e,t){var n=l(e,!1),i=n.watching[t]>0||"length"===t,s=n.proto,a=n.descs[t];i&&s!==e&&(a&&a.willChange&&a.willChange(e,t),r(e,t,n),o(e,t,n),c(e,t))}function t(e,t){var r=l(e,!1),i=r.watching[t]>0||"length"===t,o=r.proto,a=r.descs[t];o!==e&&(a&&a.didChange&&a.didChange(e,t),(i||"length"===t)&&(n(e,t,r),s(e,t,r,!1),h(e,t)))}function r(t,r,n){if(!t.isDestroying){var o=_,s=!o;s&&(o=_={}),i(e,t,r,o,n),s&&(_=null)}}function n(e,r,n){if(!e.isDestroying){var o=O,s=!o;s&&(o=O={}),i(t,e,r,o,n),s&&(O=null)}}function i(e,t,r,n,i){var o=f(t);if(n[o]||(n[o]={}),!n[o][r]){n[o][r]=!0;var s=i.deps;if(s=s&&s[r])for(var a in s){var u=i.descs[a];u&&u._suspended===t||e(t,a)}}}function o(t,r,n){if(n.hasOwnProperty("chainWatchers")&&n.chainWatchers[r]){var i,o,s=n.chainWatchers[r],a=[];for(i=0,o=s.length;o>i;i++)s[i].willChange(a);for(i=0,o=a.length;o>i;i+=2)e(a[i],a[i+1])}}function s(e,r,n,i){if(n.hasOwnProperty("chainWatchers")&&n.chainWatchers[r]){var o,s,a=n.chainWatchers[r],u=i?null:[];for(o=0,s=a.length;s>o;o++)a[o].didChange(u);if(!i)for(o=0,s=u.length;s>o;o+=2)t(u[o],u[o+1])}}function a(){g++}function u(){g--,0>=g&&(y.clear(),v.flush())}function c(e,t){if(!e.isDestroying){var r,n,i=t+":before";g?(r=y.add(e,t,i),n=d(e,i,r),p(e,i,[e,t],n)):p(e,i,[e,t])}}function h(e,t){if(!e.isDestroying){var r,n=t+":change";g?(r=v.add(e,t,n),b(e,n,r)):p(e,n,[e,t])}}var l=Ember.meta,f=Ember.guidFor,m=Ember.tryFinally,p=Ember.sendEvent,b=Ember.listenersUnion,d=Ember.listenersDiff,E=Ember._ObserverSet,y=new E,v=new E,g=0;Ember.propertyWillChange=e,Ember.propertyDidChange=t;var _,O;Ember.overrideChains=function(e,t,r){s(e,t,r,!0)},Ember.beginPropertyChanges=a,Ember.endPropertyChanges=u,Ember.changeProperties=function(e,t){a(),m(e,u,t)}}(),function(){function e(e,t,r,o){var s;if(s=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(s.length+1)),"this"!==t&&(e=n(e,t)),!s||0===s.length)throw new Error("You passed an empty path");if(!e){if(o)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return i(e,s,r)}var t=Ember.META_KEY,r=Ember.ENV.MANDATORY_SETTER,n=Ember._getPath,i=function(n,i,o,s){if("string"==typeof n&&(o=i,i=n,n=null),!n||-1!==i.indexOf("."))return e(n,i,o,s);var a,u,c=n[t],h=c&&c.descs[i];return h?h.set(n,i,o):(a="object"==typeof n&&!(i in n),a&&"function"==typeof n.setUnknownProperty?n.setUnknownProperty(i,o):c&&c.watching[i]>0?(u=r?c.values[i]:n[i],o!==u&&(Ember.propertyWillChange(n,i),r?void 0!==u||i in n?c.values[i]=o:Ember.defineProperty(n,i,null,o):n[i]=o,Ember.propertyDidChange(n,i))):n[i]=o),o};Ember.config.overrideAccessors&&(Ember.set=i,Ember.config.overrideAccessors(),i=Ember.set),Ember.set=i,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,r){return i(e,t,r,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet)}(),function(){var e=Ember.set,t=Ember.guidFor,r=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},i=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t.length=e.length,t},o=Ember.OrderedSet=function(){this.clear()};o.create=function(){return new o},o.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(e){var r=t(e),n=this.presenceSet,i=this.list;r in n||(n[r]=!0,i.push(e))},remove:function(e){var n=t(e),i=this.presenceSet,o=this.list;delete i[n];var s=r.call(o,e);s>-1&&o.splice(s,1)},isEmpty:function(){return 0===this.list.length},has:function(e){var r=t(e),n=this.presenceSet;return r in n},forEach:function(e,t){for(var r=this.toArray(),n=0,i=r.length;i>n;n++)e.call(t,r[n])},toArray:function(){return this.list.slice()},copy:function(){var e=new o;return e.presenceSet=n(this.presenceSet),e.list=this.toArray(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={length:0,get:function(e){var r=this.values,n=t(e);return r[n]},set:function(r,n){var i=this.keys,o=this.values,s=t(r);i.add(r),o[s]=n,e(this,"length",i.list.length)},remove:function(r){var n=this.keys,i=this.values,o=t(r);return i.hasOwnProperty(o)?(n.remove(r),delete i[o],e(this,"length",n.list.length),!0):!1},has:function(e){var r=this.values,n=t(e);return r.hasOwnProperty(n)},forEach:function(e,r){var n=this.keys,i=this.values;n.forEach(function(n){var o=t(n);e.call(r,n,i[o])})},copy:function(){return i(this,new s)}};var a=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};a.create=function(e){return e?new a(e):new s},a.prototype=Ember.create(s.prototype),a.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var r=this.defaultValue(e);return this.set(e,r),r},a.prototype.copy=function(){return i(this,new a({defaultValue:this.defaultValue}))}}(),function(){var e=Ember.META_KEY,t=Ember.meta,r=Ember.platform.defineProperty,n=Ember.ENV.MANDATORY_SETTER;Ember.Descriptor=function(){};var i=Ember.MANDATORY_SETTER_FUNCTION=function(){},o=Ember.DEFAULT_GETTER_FUNCTION=function(t){return function(){var r=this[e];return r&&r.values[t]}};Ember.defineProperty=function(e,s,a,u,c){var h,l,f,m;return c||(c=t(e)),h=c.descs,l=c.descs[s],f=c.watching[s]>0,l instanceof Ember.Descriptor&&l.teardown(e,s),a instanceof Ember.Descriptor?(m=a,h[s]=a,n&&f?r(e,s,{configurable:!0,enumerable:!0,writable:!0,value:void 0}):e[s]=void 0):(h[s]=void 0,null==a?(m=u,n&&f?(c.values[s]=u,r(e,s,{configurable:!0,enumerable:!0,set:i,get:o(s)})):e[s]=u):(m=a,r(e,s,a))),f&&Ember.overrideChains(e,s,c),e.didDefineProperty&&e.didDefineProperty(e,s,m),this}}(),function(){var e=Ember.get;Ember.getProperties=function(t){var r={},n=arguments,i=1;2===arguments.length&&"array"===Ember.typeOf(arguments[1])&&(i=0,n=arguments[1]);for(var o=n.length;o>i;i++)r[n[i]]=e(t,n[i]);return r}}(),function(){var e=Ember.changeProperties,t=Ember.set;Ember.setProperties=function(r,n){return e(function(){for(var e in n)n.hasOwnProperty(e)&&t(r,e,n[e])}),r}}(),function(){var e=Ember.meta,t=Ember.typeOf,r=Ember.ENV.MANDATORY_SETTER,n=Ember.platform.defineProperty;Ember.watchKey=function(i,o){if("length"!==o||"array"!==t(i)){var s=e(i),a=s.watching;a[o]?a[o]=(a[o]||0)+1:(a[o]=1,"function"==typeof i.willWatchProperty&&i.willWatchProperty(o),r&&o in i&&(s.values[o]=i[o],n(i,o,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(o)})))}},Ember.unwatchKey=function(t,i){var o=e(t),s=o.watching;1===s[i]?(s[i]=0,"function"==typeof t.didUnwatchProperty&&t.didUnwatchProperty(i),r&&i in t&&(n(t,i,{configurable:!0,enumerable:!0,writable:!0,value:o.values[i]}),delete o.values[i])):s[i]>1&&s[i]--}}(),function(){function e(e){return e.match(h)[0]}function t(e,t,r){if(e&&"object"==typeof e){var i=n(e),o=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(o=i.chainWatchers={}),o[t]||(o[t]=[]),o[t].push(r),u(e,t)}}function r(e,t){if(!e)return void 0;var r=n(e,!1);if(r.proto===e)return void 0;if("@each"===t)return i(e,t);var o=r.descs[t];return o&&o._cacheable?t in r.cache?r.cache[t]:void 0:i(e,t)}var n=Ember.meta,i=Ember.get,o=Ember.normalizeTuple,s=Ember.ArrayPolyfills.forEach,a=Ember.warn,u=Ember.watchKey,c=Ember.unwatchKey,h=/^([^\.\*]+)/,l=[];Ember.flushPendingChains=function(){if(0!==l.length){var e=l;l=[],s.call(e,function(e){e[0].add(e[1])}),a("Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos",0===l.length)}};var f=Ember.removeChainWatcher=function(e,t,r){if(e&&"object"==typeof e){var i=n(e,!1);if(i.hasOwnProperty("chainWatchers")){var o=i.chainWatchers;if(o[t]){o=o[t];for(var s=0,a=o.length;a>s;s++)o[s]===r&&o.splice(s,1)}c(e,t)}}},m=Ember._ChainNode=function(e,r,n){this._parent=e,this._key=r,this._watching=void 0===n,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&t(this._object,this._key,this)),this._parent&&"@each"===this._parent._key&&this.value()},p=m.prototype;p.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=r(e,this._key)}return this._value},p.destroy=function(){if(this._watching){var e=this._object;e&&f(e,this._key,this),this._watching=!1}},p.copy=function(e){var t,r=new m(null,null,e),n=this._paths;for(t in n)n[t]<=0||r.add(t);return r},p.add=function(t){var r,n,i,s,a;if(a=this._paths,a[t]=(a[t]||0)+1,r=this.value(),n=o(r,t),n[0]&&n[0]===r)t=n[1],i=e(t),t=t.slice(i.length+1);else{if(!n[0])return l.push([this,t]),n.length=0,void 0;s=n[0],i=t.slice(0,0-(n[1].length+1)),t=n[1]}n.length=0,this.chain(i,t,s)},p.remove=function(t){var r,n,i,s,a;a=this._paths,a[t]>0&&a[t]--,r=this.value(),n=o(r,t),n[0]===r?(t=n[1],i=e(t),t=t.slice(i.length+1)):(s=n[0],i=t.slice(0,0-(n[1].length+1)),t=n[1]),n.length=0,this.unchain(i,t)},p.count=0,p.chain=function(t,r,n){var i,o=this._chains;o||(o=this._chains={}),i=o[t],i||(i=o[t]=new m(this,t,n)),i.count++,r&&r.length>0&&(t=e(r),r=r.slice(t.length+1),i.chain(t,r))},p.unchain=function(t,r){var n=this._chains,i=n[t];r&&r.length>1&&(t=e(r),r=r.slice(t.length+1),i.unchain(t,r)),i.count--,i.count<=0&&(delete n[i._key],i.destroy())},p.willChange=function(e){var t=this._chains;if(t)for(var r in t)t.hasOwnProperty(r)&&t[r].willChange(e);this._parent&&this._parent.chainWillChange(this,this._key,1,e)},p.chainWillChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},p.chainDidChange=function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))},p.didChange=function(e){if(this._watching){var r=this._parent.value();r!==this._object&&(f(this._object,this._key,this),this._object=r,t(r,this._key,this)),this._value=void 0,this._parent&&"@each"===this._parent._key&&this.value()}var n=this._chains;if(n)for(var i in n)n.hasOwnProperty(i)&&n[i].didChange(e);null!==e&&this._parent&&this._parent.chainDidChange(this,this._key,1,e)},Ember.finishChains=function(e){var t=n(e,!1),r=t.chains;r&&(r.value()!==e&&(t.chains=r=r.copy(e)),r.didChange(null))}}(),function(){function e(e){var r=t(e),i=r.chains;return i?i.value()!==e&&(i=r.chains=i.copy(e)):i=r.chains=new n(null,null,e),i}var t=Ember.meta,r=Ember.typeOf,n=Ember._ChainNode;Ember.watchPath=function(n,i){if("length"!==i||"array"!==r(n)){var o=t(n),s=o.watching;s[i]?s[i]=(s[i]||0)+1:(s[i]=1,e(n).add(i))}},Ember.unwatchPath=function(r,n){var i=t(r),o=i.watching;1===o[n]?(o[n]=0,e(r).remove(n)):o[n]>1&&o[n]--}}(),function(){function e(e){return"*"===e||!l.test(e)}var t=Ember.meta,r=Ember.GUID_KEY,n=Ember.META_KEY,i=Ember.removeChainWatcher,o=Ember.watchKey,s=Ember.unwatchKey,a=Ember.watchPath,u=Ember.unwatchPath,c=Ember.typeOf,h=Ember.generateGuid,l=/[\.\*]/;Ember.watch=function(t,r){("length"!==r||"array"!==c(t))&&(e(r)?o(t,r):a(t,r))},Ember.isWatching=function(e,t){var r=e[n];return(r&&r.watching[t])>0},Ember.watch.flushPending=Ember.flushPendingChains,Ember.unwatch=function(t,r){("length"!==r||"array"!==c(t))&&(e(r)?s(t,r):u(t,r))},Ember.rewatch=function(e){var n=t(e,!1),i=n.chains;r in e&&!e.hasOwnProperty(r)&&h(e,"ember"),i&&i.value()!==e&&(n.chains=i.copy(e))};var f=[];Ember.destroy=function(e){var t,r,o,s,a=e[n];if(a&&(e[n]=null,t=a.chains))for(f.push(t);f.length>0;){if(t=f.pop(),r=t._chains)for(o in r)r.hasOwnProperty(o)&&f.push(r[o]);t._watching&&(s=t._object,s&&i(s,t._key,t))}}}(),function(){function e(e,t){var r=e[t];return r?e.hasOwnProperty(t)||(r=e[t]=m(r)):r=e[t]={},r}function t(t){return e(t,"deps")}function r(r,n,i,o){var s,a,u,c,h,l=r._dependentKeys;if(l)for(s=t(o),a=0,u=l.length;u>a;a++)c=l[a],h=e(s,c),h[i]=(h[i]||0)+1,p(n,c)}function n(r,n,i,o){var s,a,u,c,h,l=r._dependentKeys;if(l)for(s=t(o),a=0,u=l.length;u>a;a++)c=l[a],h=e(s,c),h[i]=(h[i]||0)-1,b(n,c)}function i(e,t){this.func=e,this._cacheable=t&&void 0!==t.cacheable?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(void 0!==t.readOnly||!!t.readOnly)}function o(e){for(var t=0,r=e.length;r>t;t++)e[t].didChange(null)}function s(e,t){for(var r={},n=0;n<t.length;n++)r[t[n]]=c(e,t[n]);return r}function a(e,t){Ember.computed[e]=function(e){var r=f.call(arguments);return Ember.computed(e,function(){return t.apply(this,r)})}}function u(e,t){Ember.computed[e]=function(){var e=f.call(arguments),r=Ember.computed(function(){return t.apply(this,[s(this,e)])});return r.property.apply(r,e)}}var c=Ember.get,h=Ember.set,l=Ember.meta,f=[].slice,m=Ember.create,p=(Ember.META_KEY,Ember.watch),b=Ember.unwatch;Ember.ComputedProperty=i,i.prototype=new Ember.Descriptor;var d=i.prototype;d.cacheable=function(e){return this._cacheable=e!==!1,this},d.volatile=function(){return this.cacheable(!1)},d.readOnly=function(e){return this._readOnly=void 0===e||!!e,this},d.property=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return this._dependentKeys=e,this},d.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},d.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=l(e);t in r.cache&&(delete r.cache[t],n(this,e,t,r))}},d.get=function(e,t){var n,i,s,a;if(this._cacheable){if(s=l(e),i=s.cache,t in i)return i[t];n=i[t]=this.func.call(e,t),a=s.chainWatchers&&s.chainWatchers[t],a&&o(a),r(this,e,t,s)}else n=this.func.call(e,t);return n},d.set=function(e,t,n){var i,o,s,a=this._cacheable,u=this.func,c=l(e,a),h=c.watching[t],f=this._suspended,m=!1,p=c.cache;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{if(a&&p.hasOwnProperty(t)&&(o=p[t],m=!0),i=u.wrappedFunction?u.wrappedFunction.length:u.length,3===i)s=u.call(e,t,n,o);else{if(2!==i)return Ember.defineProperty(e,t,null,o),Ember.set(e,t,n),void 0;s=u.call(e,t,n)}if(m&&o===s)return;h&&Ember.propertyWillChange(e,t),m&&delete p[t],a&&(m||r(this,e,t,c),p[t]=s),h&&Ember.propertyDidChange(e,t)}finally{this._suspended=f}return s},d.teardown=function(e,t){var r=l(e);return t in r.cache&&n(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;if(arguments.length>1&&(t=f.call(arguments,0,-1),e=f.call(arguments,-1)[0]),"function"!=typeof e)throw new Error("Computed Property declared without a property function");var r=new i(e);return t&&r.property.apply(r,t),r},Ember.cacheFor=function(e,t){var r=l(e,!1).cache;return r&&t in r?r[t]:void 0},a("empty",function(e){return Ember.isEmpty(c(this,e))}),a("notEmpty",function(e){return!Ember.isEmpty(c(this,e))}),a("none",function(e){return Ember.isNone(c(this,e))}),a("not",function(e){return!c(this,e)}),a("bool",function(e){return!!c(this,e)}),a("match",function(e,t){var r=c(this,e);return"string"==typeof r?!!r.match(t):!1}),a("equal",function(e,t){return c(this,e)===t}),a("gt",function(e,t){return c(this,e)>t}),a("gte",function(e,t){return c(this,e)>=t}),a("lt",function(e,t){return c(this,e)<t}),a("lte",function(e,t){return c(this,e)<=t}),u("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),u("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),u("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),u("collect",function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&(Ember.isNone(e[r])?t.push(null):t.push(e[r]));return t}),Ember.computed.alias=function(e){return Ember.computed(e,function(t,r){return arguments.length>1?(h(this,e,r),r):c(this,e)})},Ember.computed.oneWay=function(e){return Ember.computed(e,function(){return c(this,e)})},Ember.computed.defaultTo=function(e){return Ember.computed(function(t,r,n){return 1===arguments.length?null!=n?n:c(this,e):null!=r?r:c(this,e)})}}(),function(){function e(e){return e+r}function t(e){return e+n}var r=":change",n=":before";Ember.addObserver=function(t,r,n,i){return Ember.addListener(t,e(r),n,i),Ember.watch(t,r),this},Ember.observersFor=function(t,r){return Ember.listenersFor(t,e(r))},Ember.removeObserver=function(t,r,n,i){return Ember.unwatch(t,r),Ember.removeListener(t,e(r),n,i),this},Ember.addBeforeObserver=function(e,r,n,i){return Ember.addListener(e,t(r),n,i),Ember.watch(e,r),this},Ember._suspendBeforeObserver=function(e,r,n,i,o){return Ember._suspendListener(e,t(r),n,i,o)},Ember._suspendObserver=function(t,r,n,i,o){return Ember._suspendListener(t,e(r),n,i,o)};var i=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,r,n,o,s){var a=i.call(r,t);return Ember._suspendListeners(e,a,n,o,s)},Ember._suspendObservers=function(t,r,n,o,s){var a=i.call(r,e);return Ember._suspendListeners(t,a,n,o,s)},Ember.beforeObserversFor=function(e,r){return Ember.listenersFor(e,t(r))},Ember.removeBeforeObserver=function(e,r,n,i){return Ember.unwatch(e,r),Ember.removeListener(e,t(r),n,i),this}}(),function(){e("backburner/queue",["exports"],function(e){"use strict";function t(e,t,r){this.daq=e,this.name=t,this.options=r,this._queue=[]}t.prototype={daq:null,name:null,options:null,_queue:null,push:function(e,t,r,n){var i=this._queue;return i.push(e,t,r,n),{queue:this,target:e,method:t}},pushUnique:function(e,t,r,n){var i,o,s,a,u=this._queue;for(s=0,a=u.length;a>s;s+=4)if(i=u[s],o=u[s+1],i===e&&o===t)return u[s+2]=r,u[s+3]=n,{queue:this,target:e,method:t};
|
16
|
+
return this._queue.push(e,t,r,n),{queue:this,target:e,method:t}},flush:function(){var e,t,r,n,i,o=this._queue,s=this.options,a=s&&s.before,u=s&&s.after,c=o.length;for(c&&a&&a(),i=0;c>i;i+=4)e=o[i],t=o[i+1],r=o[i+2],n=o[i+3],r&&r.length>0?t.apply(e,r):t.call(e);c&&u&&u(),o.length>c?(this._queue=o.slice(c),this.flush()):this._queue.length=0},cancel:function(e){var t,r,n,i,o=this._queue;for(n=0,i=o.length;i>n;n+=4)if(t=o[n],r=o[n+1],t===e.target&&r===e.method)return o.splice(n,4),!0;if(o=this._queueBeingFlushed)for(n=0,i=o.length;i>n;n+=4)if(t=o[n],r=o[n+1],t===e.target&&r===e.method)return o[n+1]=null,!0}},e.Queue=t}),e("backburner/deferred_action_queues",["backburner/queue","exports"],function(e,t){"use strict";function r(e,t){var r=this.queues={};this.queueNames=e=e||[];for(var n,o=0,s=e.length;s>o;o++)n=e[o],r[n]=new i(this,n,t[n])}function n(e,t){for(var r,n,i=0,o=t;o>=i;i++)if(r=e.queueNames[i],n=e.queues[r],n._queue.length)return i;return-1}var i=e.Queue;r.prototype={queueNames:null,queues:null,schedule:function(e,t,r,n,i,o){var s=this.queues,a=s[e];if(!a)throw new Error("You attempted to schedule an action in a queue ("+e+") that doesn't exist");return i?a.pushUnique(t,r,n,o):a.push(t,r,n,o)},flush:function(){for(var e,t,r,i,o=this.queues,s=this.queueNames,a=0,u=s.length;u>a;){e=s[a],t=o[e],r=t._queueBeingFlushed=t._queue.slice(),t._queue=[];var c,h,l,f,m=t.options,p=m&&m.before,b=m&&m.after,d=0,E=r.length;for(E&&p&&p();E>d;)c=r[d],h=r[d+1],l=r[d+2],f=r[d+3],"string"==typeof h&&(h=c[h]),h&&(l&&l.length>0?h.apply(c,l):h.call(c)),d+=4;t._queueBeingFlushed=null,E&&b&&b(),-1===(i=n(this,a))?a++:a=i}}},t.DeferredActionQueues=r}),e("backburner",["backburner/deferred_action_queues","exports"],function(e,t){"use strict";function r(e,t){this.queueNames=e,this.options=t||{},this.options.defaultQueue||(this.options.defaultQueue=e[0]),this.instanceStack=[]}function n(e){e.begin(),s=b.setTimeout(function(){s=null,e.end()})}function i(e){var t,r,n,o,s=+new Date;e.run(function(){for(n=0,o=p.length;o>n&&(t=p[n],!(t>s));n+=2);for(r=p.splice(0,n),n=1,o=r.length;o>n;n+=2)e.schedule(e.options.defaultQueue,null,r[n])}),p.length&&(a=b.setTimeout(function(){i(e),a=null,u=null},p[0]-s),u=p[0])}function o(e,t){for(var r,n=-1,i=0,o=m.length;o>i;i++)if(r=m[i],r[0]===e&&r[1]===t){n=i;break}return n}var s,a,u,c=e.DeferredActionQueues,h=[].slice,l=[].pop,f=[],m=[],p=[],b=this;r.prototype={queueNames:null,options:null,currentInstance:null,instanceStack:null,begin:function(){var e=this.options&&this.options.onBegin,t=this.currentInstance;t&&this.instanceStack.push(t),this.currentInstance=new c(this.queueNames,this.options),e&&e(this.currentInstance,t)},end:function(){var e=this.options&&this.options.onEnd,t=this.currentInstance,r=null;try{t.flush()}finally{this.currentInstance=null,this.instanceStack.length&&(r=this.instanceStack.pop(),this.currentInstance=r),e&&e(t,r)}},run:function(e,t){var r;this.begin(),t||(t=e,e=null),"string"==typeof t&&(t=e[t]);var n=!1;try{r=arguments.length>2?t.apply(e,h.call(arguments,2)):t.call(e)}finally{n||(n=!0,this.end())}return r},defer:function(e,t,r){r||(r=t,t=null),"string"==typeof r&&(r=t[r]);var i=this.DEBUG?(new Error).stack:void 0,o=arguments.length>3?h.call(arguments,3):void 0;return this.currentInstance||n(this),this.currentInstance.schedule(e,t,r,o,!1,i)},deferOnce:function(e,t,r){r||(r=t,t=null),"string"==typeof r&&(r=t[r]);var i=this.DEBUG?(new Error).stack:void 0,o=arguments.length>3?h.call(arguments,3):void 0;return this.currentInstance||n(this),this.currentInstance.schedule(e,t,r,o,!0,i)},setTimeout:function(){var e=this,t=l.call(arguments),r=arguments[0],n=arguments[1],o=+new Date+t;n||(n=r,r=null),"string"==typeof n&&(n=r[n]);var s,c;arguments.length>2?(c=h.call(arguments,2),s=function(){n.apply(r,c)}):s=function(){n.call(r)};var f,m;for(f=0,m=p.length;m>f&&!(o<p[f]);f+=2);return p.splice(f,0,o,s),a&&o>u?s:(a&&(clearTimeout(a),a=null),a=b.setTimeout(function(){i(e),a=null,u=null},t),u=o,s)},throttle:function(e,t){for(var r,n=this,i=arguments,o=l.call(i),s=0,a=f.length;a>s;s++)if(r=f[s],r[0]===e&&r[1]===t)return;var u=b.setTimeout(function(){n.run.apply(n,i);for(var o=-1,s=0,a=f.length;a>s;s++)if(r=f[s],r[0]===e&&r[1]===t){o=s;break}o>-1&&f.splice(o,1)},o);f.push([e,t,u])},debounce:function(e,t){var r,n,i,s=this,a=arguments,u=l.call(a);"number"==typeof u?(r=u,u=!1):r=l.call(a),n=o(e,t),-1!==n&&(i=m[n],m.splice(n,1),clearTimeout(i[2]));var c=b.setTimeout(function(){u||s.run.apply(s,a),n=o(e,t),n&&m.splice(n,1)},r);u&&-1===n&&s.run.apply(s,a),m.push([e,t,c])},cancelTimers:function(){var e,t;for(e=0,t=f.length;t>e;e++)clearTimeout(f[e][2]);for(f=[],e=0,t=m.length;t>e;e++)clearTimeout(m[e][2]);m=[],a&&(clearTimeout(a),a=null),p=[],s&&(clearTimeout(s),s=null)},hasTimers:function(){return!!p.length||s},cancel:function(e){if(e&&"object"==typeof e&&e.queue&&e.method)return e.queue.cancel(e);if("function"==typeof e)for(var t=0,r=p.length;r>t;t+=2)if(p[t+1]===e)return p.splice(t,2),!0}},r.prototype.schedule=r.prototype.defer,r.prototype.scheduleOnce=r.prototype.deferOnce,r.prototype.later=r.prototype.setTimeout,t.Backburner=r})}(),function(){function e(){!Ember.run.currentRunLoop}var r=function(e){Ember.run.currentRunLoop=e},n=function(e,t){Ember.run.currentRunLoop=t},i=t("backburner").Backburner,o=new i(["sync","actions","destroy"],{sync:{before:Ember.beginPropertyChanges,after:Ember.endPropertyChanges},defaultQueue:"actions",onBegin:r,onEnd:n}),s=[].slice;Ember.run=function(){var e;if(Ember.onerror)try{e=o.run.apply(o,arguments)}catch(t){Ember.onerror(t)}else e=o.run.apply(o,arguments);return e},Ember.run.join=function(){if(!Ember.run.currentRunLoop)return Ember.run.apply(Ember.run,arguments);var e=s.call(arguments);e.unshift("actions"),Ember.run.schedule.apply(Ember.run,e)},Ember.run.backburner=o,Ember.run,Ember.run.currentRunLoop=null,Ember.run.queues=o.queueNames,Ember.run.begin=function(){o.begin()},Ember.run.end=function(){o.end()},Ember.run.schedule=function(){e(),o.schedule.apply(o,arguments)},Ember.run.hasScheduledTimers=function(){return o.hasTimers()},Ember.run.cancelTimers=function(){o.cancelTimers()},Ember.run.sync=function(){o.currentInstance&&o.currentInstance.queues.sync.flush()},Ember.run.later=function(){return o.later.apply(o,arguments)},Ember.run.once=function(){e();var t=s.call(arguments);return t.unshift("actions"),o.scheduleOnce.apply(o,t)},Ember.run.scheduleOnce=function(){return e(),o.scheduleOnce.apply(o,arguments)},Ember.run.next=function(){var e=s.call(arguments);return e.push(1),o.later.apply(o,e)},Ember.run.cancel=function(e){return o.cancel(e)},Ember.run.debounce=function(){return o.debounce.apply(o,arguments)},Ember.run.throttle=function(){return o.throttle.apply(o,arguments)}}(),function(){function e(e,t){return r(o(t)?Ember.lookup:e,t)}function t(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}Ember.LOG_BINDINGS=!1||!!Ember.ENV.LOG_BINDINGS;var r=Ember.get,n=(Ember.set,Ember.guidFor),i=/^([A-Z$]|([0-9][A-Z$]))/,o=Ember.isGlobalPath=function(e){return i.test(e)},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(t){var r=this._from,n=this._to;return Ember.trySet(t,n,e(t,r)),Ember.addObserver(t,r,this,this.fromDidChange),this._oneWay||Ember.addObserver(t,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 r=this._directionMap,n=r.get(e);n||(Ember.run.schedule("sync",this,this._sync,e),r.set(e,t)),"back"===n&&"fwd"===t&&r.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(!t.isDestroyed&&this._readyToSync){var i=this._directionMap,o=i.get(t),s=this._from,a=this._to;if(i.remove(t),"fwd"===o){var u=e(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",u,t),this._oneWay?Ember.trySet(t,a,u):Ember._suspendObserver(t,a,this,this.toDidChange,function(){Ember.trySet(t,a,u)})}else if("back"===o){var c=r(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",c,t),Ember._suspendObserver(t,s,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(s)?Ember.lookup:t,s,c)})}}}},t(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 r=this,n=new r(null,e);return n.oneWay(t)}}),Ember.Binding=s,Ember.bind=function(e,t,r){return new Ember.Binding(t,r).connect(e)},Ember.oneWay=function(e,t,r){return new Ember.Binding(t,r).oneWay().connect(e)}}(),function(){function e(e){var t=Ember.meta(e,!0),r=t.mixins;return r?t.hasOwnProperty("mixins")||(r=t.mixins=j(r)):r=t.mixins={},r}function t(e,t){return t&&t.length>0&&(e.mixins=C.call(t,function(e){if(e instanceof g)return e;var t=new g;return t.properties=e,t})),e}function r(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function n(e,t){var r;return t instanceof g?(r=x(t),e[r]?D:(e[r]=t,t.properties)):t}function i(e,t,r,n){var i;return i=r[e]||n[e],t[e]&&(i=i?i.concat(t[e]):t[e]),i}function o(e,t,r,n,i){var o;return void 0===n[t]&&(o=i[t]),o=o||e.descs[t],o&&o instanceof Ember.ComputedProperty?(r=j(r),r.func=Ember.wrap(r.func,o.func),r):r}function s(e,t,r,n,i){var o;return void 0===i[t]&&(o=n[t]),o=o||e[t],"function"!=typeof o?r:Ember.wrap(r,o)}function a(e,t,r,n){var i=n[t]||e[t];return i?"function"==typeof i.concat?i.concat(r):Ember.makeArray(i).concat(r):Ember.makeArray(r)}function u(e,t,n,i){var o=i[t]||e[t];if(!o)return n;var a=Ember.merge({},o);for(var u in n)if(n.hasOwnProperty(u)){var c=n[u];a[u]=r(c)?s(e,u,c,o,{}):c}return a}function c(e,t,n,i,c,h,l,f){if(n instanceof Ember.Descriptor){if(n===_&&c[t])return D;n.func&&(n=o(i,t,n,h,c)),c[t]=n,h[t]=void 0}else r(n)?n=s(e,t,n,h,c):l&&w.call(l,t)>=0||"concatenatedProperties"===t||"mergedProperties"===t?n=a(e,t,n,h):f&&w.call(f,t)>=0&&(n=u(e,t,n,h)),c[t]=void 0,h[t]=n}function h(e,t,r,o,s,a){function u(e){delete r[e],delete o[e]}for(var l,f,m,p,b,d,E=0,y=e.length;y>E;E++)if(l=e[E],f=n(t,l),f!==D)if(f){d=Ember.meta(s),s.willMergeMixin&&s.willMergeMixin(f),p=i("concatenatedProperties",f,o,s),b=i("mergedProperties",f,o,s);for(m in f)f.hasOwnProperty(m)&&(a.push(m),c(s,m,f[m],d,r,o,p,b));f.hasOwnProperty("toString")&&(s.toString=f.toString)}else l.mixins&&(h(l.mixins,t,r,o,s,a),l._without&&A.call(l._without,u))}function l(e,t,r,n){if(T.test(t)){var i=n.bindings;i?n.hasOwnProperty("bindings")||(i=n.bindings=j(n.bindings)):i=n.bindings={},i[t]=r}}function f(e,t){var r,n,i,o=t.bindings;if(o){for(r in o)n=o[r],n&&(i=r.slice(0,-7),n instanceof Ember.Binding?(n=n.copy(),n.to(i)):n=new Ember.Binding(i,n),n.connect(e),e[r]=n);t.bindings={}}}function m(e,t){return f(e,t||Ember.meta(e)),e}function p(e,t,r,n,i){var o,s=t.methodName;return n[s]||i[s]?(o=i[s],t=n[s]):r.descs[s]?(t=r.descs[s],o=void 0):(t=void 0,o=e[s]),{desc:t,value:o}}function b(e,t,r,n,i){var o=r[n];if(o)for(var s=0,a=o.length;a>s;s++)Ember[i](e,o[s],null,t)}function d(e,t,r){var n=e[t];"function"==typeof n&&(b(e,t,n,"__ember_observesBefore__","removeBeforeObserver"),b(e,t,n,"__ember_observes__","removeObserver"),b(e,t,n,"__ember_listens__","removeListener")),"function"==typeof r&&(b(e,t,r,"__ember_observesBefore__","addBeforeObserver"),b(e,t,r,"__ember_observes__","addObserver"),b(e,t,r,"__ember_listens__","addListener"))}function E(t,r,n){var i,o,s,a={},u={},c=Ember.meta(t),f=[];h(r,e(t),a,u,t,f);for(var b=0,E=f.length;E>b;b++)if(i=f[b],"constructor"!==i&&u.hasOwnProperty(i)&&(s=a[i],o=u[i],s!==_)){for(;s&&s instanceof O;){var y=p(t,s,c,a,u);s=y.desc,o=y.value}(void 0!==s||void 0!==o)&&(d(t,i,o),l(t,i,o,c),S(t,i,s,o,c))}return n||m(t,c),t}function y(e,t,r){var n=x(e);if(r[n])return!1;if(r[n]=!0,e===t)return!0;for(var i=e.mixins,o=i?i.length:0;--o>=0;)if(y(i[o],t,r))return!0;return!1}function v(e,t,r){if(!r[x(t)])if(r[x(t)]=!0,t.properties){var n=t.properties;for(var i in n)n.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&A.call(t.mixins,function(t){v(e,t,r)})}var g,_,O,C=Ember.ArrayPolyfills.map,w=Ember.ArrayPolyfills.indexOf,A=Ember.ArrayPolyfills.forEach,P=[].slice,j=Ember.create,S=Ember.defineProperty,x=Ember.guidFor,D={},T=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=P.call(arguments,1);return E(e,t,!1),e},Ember.Mixin=function(){return t(this,arguments)},g=Ember.Mixin,g.prototype={properties:null,mixins:null,ownerConstructor:null},g._apply=E,g.applyPartial=function(e){var t=P.call(arguments,1);return E(e,t,!0)},g.finishPartial=m,Ember.anyUnprocessedMixins=!1,g.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return t(new e,arguments)};var I=g.prototype;I.reopen=function(){var e,t;this.properties?(e=g.create(),e.properties=this.properties,delete this.properties,this.mixins=[e]):this.mixins||(this.mixins=[]);var r,n=arguments.length,i=this.mixins;for(r=0;n>r;r++)e=arguments[r],e instanceof g?i.push(e):(t=g.create(),t.properties=e,i.push(t));return this},I.apply=function(e){return E(e,[this],!1)},I.applyPartial=function(e){return E(e,[this],!0)},I.detect=function(e){if(!e)return!1;if(e instanceof g)return y(e,this,{});var t=Ember.meta(e,!1).mixins;return t?!!t[x(this)]:!1},I.without=function(){var e=new g(this);return e._without=P.call(arguments),e},I.keys=function(){var e={},t={},r=[];v(e,this,t);for(var n in e)e.hasOwnProperty(n)&&r.push(n);return r},g.mixins=function(e){var t=Ember.meta(e,!1).mixins,r=[];if(!t)return r;for(var n in t){var i=t[n];i.properties||r.push(i)}return r},_=new Ember.Descriptor,_.toString=function(){return"(Required Property)"},Ember.required=function(){return _},O=function(e){this.methodName=e},O.prototype=new Ember.Descriptor,Ember.alias=function(e){return new O(e)},Ember.alias=Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new O(e)},Ember.observer=function(e){var t=P.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;t>e;e++)arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=P.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){e("rsvp/all",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("You must pass an array to all.");return new n(function(t,r){function n(e){return function(t){i(e,t)}}function i(e,r){s[e]=r,0===--a&&t(s)}var o,s=[],a=e.length;0===a&&t([]);for(var u=0;u<e.length;u++)o=e[u],o&&"function"==typeof o.then?o.then(n(u),r):i(u,o)})}var n=e.Promise;t.all=r}),e("rsvp/async",["exports"],function(e){"use strict";function t(){return function(e,t){process.nextTick(function(){e(t)})}}function r(){return function(e,t){setImmediate(function(){e(t)})}}function n(){var e=[],t=new a(function(){var t=e.slice();e=[],t.forEach(function(e){var t=e[0],r=e[1];t(r)})}),r=document.createElement("div");return t.observe(r,{attributes:!0}),window.addEventListener("unload",function(){t.disconnect(),t=null},!1),function(t,n){e.push([t,n]),r.setAttribute("drainQueue","drainQueue")}}function i(){return function(e,t){u.setTimeout(function(){e(t)},1)}}var o,s="undefined"!=typeof window?window:{},a=s.MutationObserver||s.WebKitMutationObserver,u="undefined"!=typeof global?global:this;o="function"==typeof setImmediate?r():"undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?t():a?n():i(),e.async=o}),e("rsvp/config",["rsvp/async","exports"],function(e,t){"use strict";var r=e.async,n={};n.async=r,t.config=n}),e("rsvp/defer",["rsvp/promise","exports"],function(e,t){"use strict";function r(){var e={resolve:void 0,reject:void 0,promise:void 0};return e.promise=new n(function(t,r){e.resolve=t,e.reject=r}),e}var n=e.Promise;t.defer=r}),e("rsvp/events",["exports"],function(e){"use strict";var t=function(e,t){this.type=e;for(var r in t)t.hasOwnProperty(r)&&(this[r]=t[r])},r=function(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r][0]===t)return r;return-1},n=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},i={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,i){var o,s,a=n(this);for(e=e.split(/\s+/),i=i||this;s=e.shift();)o=a[s],o||(o=a[s]=[]),-1===r(o,t)&&o.push([t,i])},off:function(e,t){var i,o,s,a=n(this);for(e=e.split(/\s+/);o=e.shift();)t?(i=a[o],s=r(i,t),-1!==s&&i.splice(s,1)):a[o]=[]},trigger:function(e,r){var i,o,s,a,u,c=n(this);if(i=c[e])for(var h=0;h<i.length;h++)o=i[h],s=o[0],a=o[1],"object"!=typeof r&&(r={detail:r}),u=new t(e,r),s.call(a,u)}};e.EventTarget=i}),e("rsvp/hash",["rsvp/defer","exports"],function(e,t){"use strict";function r(e){var t=0;for(var r in e)t++;return t}function n(e){var t={},n=i(),o=r(e);0===o&&n.resolve({});var s=function(e){return function(t){a(e,t)}},a=function(e,r){t[e]=r,0===--o&&n.resolve(t)},u=function(e){n.reject(e)};for(var c in e)e[c]&&"function"==typeof e[c].then?e[c].then(s(c),u):a(c,e[c]);return n.promise}var i=e.defer;t.hash=n}),e("rsvp/node",["rsvp/promise","rsvp/all","exports"],function(e,t,r){"use strict";function n(e,t){return function(r,n){r?t(r):arguments.length>2?e(Array.prototype.slice.call(arguments,1)):e(n)}}function i(e){return function(){var t,r,i=Array.prototype.slice.call(arguments),a=this,u=new o(function(e,n){t=e,r=n});return s(i).then(function(i){i.push(n(t,r));try{e.apply(a,i)}catch(o){r(o)}}),u}}var o=e.Promise,s=t.all;r.denodeify=i}),e("rsvp/promise",["rsvp/config","rsvp/events","exports"],function(e,t,r){"use strict";function n(e){return i(e)||"object"==typeof e&&null!==e}function i(e){return"function"==typeof e}function o(e){h.onerror&&h.onerror(e.detail)}function s(e,t){e===t?u(e,t):a(e,t)||u(e,t)}function a(e,t){var r,o=null;try{if(e===t)throw new TypeError("A promises callback cannot return that same promise.");if(n(t)&&(o=t.then,i(o)))return o.call(t,function(n){return r?!0:(r=!0,t!==n?s(e,n):u(e,n),void 0)},function(t){return r?!0:(r=!0,c(e,t),void 0)}),!0}catch(a){return c(e,a),!0}return!1}function u(e,t){h.async(function(){e.trigger("promise:resolved",{detail:t}),e.isFulfilled=!0,e.fulfillmentValue=t})}function c(e,t){h.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedReason=t})}var h=e.config,l=t.EventTarget,f=function(e){var t=this,r=!1;if("function"!=typeof e)throw new TypeError("You must pass a resolver function as the sole argument to the promise constructor");if(!(t instanceof f))return new f(e);var n=function(e){r||(r=!0,s(t,e))},i=function(e){r||(r=!0,c(t,e))};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),this.on("error",o);try{e(n,i)}catch(a){i(a)}},m=function(e,t,r,n){var o,u,h,l,f=i(r);if(f)try{o=r(n.detail),h=!0}catch(m){l=!0,u=m}else o=n.detail,h=!0;a(t,o)||(f&&h?s(t,o):l?c(t,u):"resolve"===e?s(t,o):"reject"===e&&c(t,o))};f.prototype={constructor:f,isRejected:void 0,isFulfilled:void 0,rejectedReason:void 0,fulfillmentValue:void 0,then:function(e,t){this.off("error",o);var r=new this.constructor(function(){});return this.isFulfilled&&h.async(function(t){m("resolve",r,e,{detail:t.fulfillmentValue})},this),this.isRejected&&h.async(function(e){m("reject",r,t,{detail:e.rejectedReason})},this),this.on("promise:resolved",function(t){m("resolve",r,e,t)}),this.on("promise:failed",function(e){m("reject",r,t,e)}),r},fail:function(e){return this.then(null,e)}},l.mixin(f.prototype),r.Promise=f}),e("rsvp/reject",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){return new n(function(t,r){r(e)})}var n=e.Promise;t.reject=r}),e("rsvp/resolve",["rsvp/promise","exports"],function(e,t){"use strict";function r(e){return new n(function(t){t(e)})}var n=e.Promise;t.resolve=r}),e("rsvp/rethrow",["exports"],function(e){"use strict";function t(e){throw r.setTimeout(function(){throw e}),e}var r="undefined"==typeof global?this:global;e.rethrow=t}),e("rsvp",["rsvp/events","rsvp/promise","rsvp/node","rsvp/all","rsvp/hash","rsvp/rethrow","rsvp/defer","rsvp/config","rsvp/resolve","rsvp/reject","exports"],function(e,t,r,n,i,o,s,a,u,c,h){"use strict";function l(e,t){v[e]=t}var f=e.EventTarget,m=t.Promise,p=r.denodeify,b=n.all,d=i.hash,E=o.rethrow,y=s.defer,v=a.config,g=u.resolve,_=c.reject;h.Promise=m,h.EventTarget=f,h.all=b,h.hash=d,h.rethrow=E,h.defer=y,h.denodeify=p,h.configure=l,h.resolve=g,h.reject=_})}(),function(){Ember.MODEL_FACTORY_INJECTIONS=!1||!!Ember.ENV.MODEL_FACTORY_INJECTIONS,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.factoryCache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this.factoryTypeInjections=new e(t&&t.factoryTypeInjections),this.factoryInjections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function r(e){throw new Error(e+" is not currently supported on child containers")}function n(e,t){var r=o(e,t,"singleton");return r!==!1}function i(e,t){var r={};if(!t)return r;for(var n,i,o=0,s=t.length;s>o;o++){if(n=t[o],i=e.lookup(n.fullName),!i)throw new Error("Attempting to inject an unknown injection: `"+n.fullName+"`");r[n.property]=i}return r}function o(e,t,r){var n=e._options.get(t);if(n&&void 0!==n[r])return n[r];var i=t.split(":")[0];return n=e._typeOptions.get(i),n?n[r]:void 0}function s(e,t){var r,n=e.normalize(t),i=e.resolve(n),o=e.factoryCache,s=t.split(":")[0];if(i){if(o.has(t))return o.get(t);if("function"!=typeof i.extend||!Ember.MODEL_FACTORY_INJECTIONS&&"model"===s)return i;var c=a(e,t),h=u(e,t);return h._toString=e.makeToString(i,t),r=i.extend(c),r.reopenClass(h),o.set(t,r),r}}function a(e,t){var r=t.split(":"),n=r[0],o=[];return o=o.concat(e.typeInjections.get(n)||[]),o=o.concat(e.injections[t]||[]),o=i(e,o),o._debugContainerKey=t,o.container=e,o}function u(e,t){var r=t.split(":"),n=r[0],o=[];return o=o.concat(e.factoryTypeInjections.get(n)||[]),o=o.concat(e.factoryInjections[t]||[]),o=i(e,o),o._debugContainerKey=t,o}function c(e,t){var r=s(e,t);return o(e,t,"instantiate")===!1?r:r?"function"==typeof r.extend?r.create():r.create(a(e,t)):void 0}function h(e,t){e.cache.eachLocal(function(r,n){o(e,r,"instantiate")!==!1&&t(n)})}function l(e){e.cache.eachLocal(function(t,r){o(e,t,"instantiate")!==!1&&r.destroy()}),e.cache.dict={}}function f(e,t,r,n){var i=e.get(t);i||(i=[],e.set(t,i)),i.push({property:r,fullName:n})}function m(e,t,r,n){var i=e[t]=e[t]||[];i.push({property:r,fullName:n})}return e.prototype={parent:null,dict:null,get:function(e){var t=this.dict;return t.hasOwnProperty(e)?t[e]:this.parent?this.parent.get(e):void 0},set:function(e,t){this.dict[e]=t},remove:function(e){delete this.dict[e]},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var r=this.dict;for(var n in r)r.hasOwnProperty(n)&&e.call(t,n,r[n])}},t.prototype={parent:null,children:null,resolver:null,registry:null,cache:null,typeInjections:null,injections:null,_options:null,_typeOptions:null,child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,r){e[t]=r},register:function(e,t,r,n){var i;-1!==e.indexOf(":")?(n=r,r=t,i=e):i=e+":"+t;var o=this.normalize(i);this.registry.set(o,r),this._options.set(o,n||{})},unregister:function(e){var t=this.normalize(e);this.registry.remove(t),this.cache.remove(t),this.factoryCache.remove(t),this._options.remove(t)},resolve:function(e){return this.resolver(e)||this.registry.get(e)},describe:function(e){return e},normalize:function(e){return e},makeToString:function(e){return e.toString()},lookup:function(e,t){if(e=this.normalize(e),t=t||{},this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var r=c(this,e);return r?(n(this,e)&&t.singleton!==!1&&this.cache.set(e,r),r):void 0},lookupFactory:function(e){return s(this,e)},has:function(e){return this.cache.has(e)?!0:!!s(this,e)},optionsForType:function(e,t){this.parent&&r("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,n){this.parent&&r("typeInjection"),f(this.typeInjections,e,t,n)},injection:function(e,t,n){return this.parent&&r("injection"),-1===e.indexOf(":")?this.typeInjection(e,t,n):(m(this.injections,e,t,n),void 0)},factoryTypeInjection:function(e,t,n){this.parent&&r("factoryTypeInjection"),f(this.factoryTypeInjections,e,t,n)},factoryInjection:function(e,t,n){return this.parent&&r("injection"),-1===e.indexOf(":")?this.factoryTypeInjection(e,t,n):(m(this.factoryInjections,e,t,n),void 0)},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;t>e;e++)this.children[e].destroy();this.children=[],h(this,function(e){e.destroy()}),this.parent=void 0,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;t>e;e++)l(this.children[e]);l(this)}},t})}(),function(){function e(r,n,i,o){var s,a,u;if("object"!=typeof r||null===r)return r;if(n&&(a=t(i,r))>=0)return o[a];if("array"===Ember.typeOf(r)){if(s=r.slice(),n)for(a=s.length;--a>=0;)s[a]=e(s[a],n,i,o)}else if(Ember.Copyable&&Ember.Copyable.detect(r))s=r.copy(n,i,o);else{s={};for(u in r)r.hasOwnProperty(u)&&"__"!==u.substring(0,2)&&(s[u]=n?e(r[u],n,i,o):r[u])}return n&&(i.push(r),o.push(s)),s}var t=Ember.EnumerableUtils.indexOf;Ember.compare=function n(e,t){if(e===t)return 0;var r=Ember.typeOf(e),i=Ember.typeOf(t),o=Ember.Comparable;if(o){if("instance"===r&&o.detect(e.constructor))return e.constructor.compare(e,t);if("instance"===i&&o.detect(t.constructor))return 1-t.constructor.compare(t,e)}var s=Ember.ORDER_DEFINITION_MAPPING;if(!s){var a=Ember.ORDER_DEFINITION;s=Ember.ORDER_DEFINITION_MAPPING={};var u,c;for(u=0,c=a.length;c>u;++u)s[a[u]]=u;delete Ember.ORDER_DEFINITION}var h=s[r],l=s[i];if(l>h)return-1;if(h>l)return 1;switch(r){case"boolean":case"number":return t>e?-1:e>t?1:0;case"string":var f=e.localeCompare(t);return 0>f?-1:f>0?1:0;case"array":for(var m=e.length,p=t.length,b=Math.min(m,p),d=0,E=0;0===d&&b>E;)d=n(e[E],t[E]),E++;return 0!==d?d:p>m?-1:m>p?1:0;case"instance":return Ember.Comparable&&Ember.Comparable.detect(e)?e.compare(e,t):0;case"date":var y=e.getTime(),v=t.getTime();return v>y?-1:y>v?1:0;default:return 0}},Ember.copy=function(t,r){return"object"!=typeof t||null===t?t:Ember.Copyable&&Ember.Copyable.detect(t)?t.copy(r):e(t,r,r?[]:null,r?[]:null)},Ember.inspect=function(e){var t=Ember.typeOf(e);if("array"===t)return"["+e+"]";if("object"!==t)return e+"";var r,n=[];for(var i in e)if(e.hasOwnProperty(i)){if(r=e[i],"toString"===r)continue;"function"===Ember.typeOf(r)&&(r="function() { ... }"),n.push(i+": "+r)}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.create.isSimulated)&&(Ember.keys=function(e){var t=[];for(var r in e)"__"!==r.substring(0,2)&&"_super"!==r&&e.hasOwnProperty(r)&&t.push(r);return t});var r=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){for(var e=Error.apply(this,arguments),t=0;t<r.length;t++)this[r[t]]=e[r[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){function e(){return 0===a.length?{}:a.pop()}function t(e){return a.push(e),null}function r(e,t){function r(r){var o=n(r,e);return i?t===o:!!o}var i=2===arguments.length;return r}var n=Ember.get,i=Ember.set,o=Array.prototype.slice,s=Ember.EnumerableUtils.indexOf,a=[];Ember.Enumerable=Ember.Mixin.create({nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(0===n(this,"length"))return void 0;var r,i=e();return r=this.nextObject(0,null,i),t(i),r}).property("[]"),lastObject:Ember.computed(function(){var r=n(this,"length");if(0===r)return void 0;var i,o=e(),s=0,a=null;do a=i,i=this.nextObject(s++,a,o);while(void 0!==i);return t(o),a}).property("[]"),contains:function(e){return void 0!==this.find(function(t){return t===e})},forEach:function(r,i){if("function"!=typeof r)throw new TypeError;var o=n(this,"length"),s=null,a=e();void 0===i&&(i=null);for(var u=0;o>u;u++){var c=this.nextObject(u,s,a);r.call(i,c,u,this),s=c}return s=null,a=t(a),this},getEach:function(e){return this.mapBy(e)},setEach:function(e,t){return this.forEach(function(r){i(r,e,t)})},map:function(e,t){var r=Ember.A();return this.forEach(function(n,i,o){r[i]=e.call(t,n,i,o)}),r},mapBy:function(e){return this.map(function(t){return n(t,e)})},mapProperty:Ember.aliasMethod("mapBy"),filter:function(e,t){var r=Ember.A();return this.forEach(function(n,i,o){e.call(t,n,i,o)&&r.push(n)}),r},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterBy:function(){return this.filter(r.apply(this,arguments))},filterProperty:Ember.aliasMethod("filterBy"),rejectBy:function(e,t){var r=function(r){return n(r,e)===t},i=function(t){return!!n(t,e)},o=2===arguments.length?r:i;return this.reject(o)},rejectProperty:Ember.aliasMethod("rejectBy"),find:function(r,i){var o=n(this,"length");void 0===i&&(i=null);for(var s,a,u=null,c=!1,h=e(),l=0;o>l&&!c;l++)s=this.nextObject(l,u,h),(c=r.call(i,s,l,this))&&(a=s),u=s;return s=u=null,h=t(h),a},findBy:function(){return this.find(r.apply(this,arguments))},findProperty:Ember.aliasMethod("findBy"),every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},everyBy:function(){return this.every(r.apply(this,arguments))},everyProperty:Ember.aliasMethod("everyBy"),any:function(e,t){return!!this.find(function(r,n,i){return!!e.call(t,r,n,i)})},some:Ember.aliasMethod("any"),anyBy:function(){return this.any(r.apply(this,arguments))},someProperty:Ember.aliasMethod("anyBy"),reduce:function(e,t,r){if("function"!=typeof e)throw new TypeError;var n=t;return this.forEach(function(t,i){n=e.call(null,n,t,i,this,r)},this),n},invoke:function(e){var t,r=Ember.A();return arguments.length>1&&(t=o.call(arguments,1)),this.forEach(function(n,i){var o=n&&n[e];"function"==typeof o&&(r[i]=t?o.apply(n,t):o.call(n))},this),r},toArray:function(){var e=Ember.A();return this.forEach(function(t,r){e[r]=t}),e},compact:function(){return this.filter(function(e){return null!=e})},without:function(e){if(!this.contains(e))return this;var t=Ember.A();return this.forEach(function(r){r!==e&&(t[t.length]=r)}),t},uniq:function(){var e=Ember.A();return this.forEach(function(t){s(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(){return this}),addEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",i=t&&t.didChange||"enumerableDidChange",o=n(this,"hasEnumerableObservers");return o||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",e,r),Ember.addListener(this,"@enumerable:change",e,i),o||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(e,t){var r=t&&t.willChange||"enumerableWillChange",i=t&&t.didChange||"enumerableDidChange",o=n(this,"hasEnumerableObservers");return o&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",e,r),Ember.removeListener(this,"@enumerable:change",e,i),o&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(e,t){var r,i,o;return r="number"==typeof e?e:e?n(e,"length"):e=-1,i="number"==typeof t?t:t?n(t,"length"):t=-1,o=0>i||0>r||0!==i-r,-1===e&&(e=null),-1===t&&(t=null),Ember.propertyWillChange(this,"[]"),o&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,e,t]),this},enumerableContentDidChange:function(e,t){var r,i,o;return r="number"==typeof e?e:e?n(e,"length"):e=-1,i="number"==typeof t?t:t?n(t,"length"):t=-1,o=0>i||0>r||0!==i-r,-1===e&&(e=null),-1===t&&(t=null),Ember.sendEvent(this,"@enumerable:change",[this,e,t]),o&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this
|
17
|
+
}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.isNone),r=Ember.EnumerableUtils.map,n=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{length:Ember.required(),objectAt:function(t){return 0>t||t>=e(this,"length")?void 0: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,r){return void 0!==r&&this.replace(0,e(this,"length"),r),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(r,n){var i=Ember.A(),o=e(this,"length");for(t(r)&&(r=0),(t(n)||n>o)&&(n=o),0>r&&(r=o+r),0>n&&(n=o+n);n>r;)i[i.length]=this.objectAt(r++);return i},indexOf:function(t,r){var n,i=e(this,"length");for(void 0===r&&(r=0),0>r&&(r+=i),n=r;i>n;n++)if(this.objectAt(n)===t)return n;return-1},lastIndexOf:function(t,r){var n,i=e(this,"length");for((void 0===r||r>=i)&&(r=i-1),0>r&&(r+=i),n=r;n>=0;n--)if(this.objectAt(n)===t)return n;return-1},addArrayObserver:function(t,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=e(this,"hasArrayObservers");return o||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,n),Ember.addListener(this,"@array:change",t,i),o||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=e(this,"hasArrayObservers");return o&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,n),Ember.removeListener(this,"@array:change",t,i),o&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,r,n){void 0===t?(t=0,r=n=-1):(void 0===r&&(r=-1),void 0===n&&(n=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,r,n]);var i,o;if(t>=0&&r>=0&&e(this,"hasEnumerableObservers")){i=[],o=t+r;for(var s=t;o>s;s++)i.push(this.objectAt(s))}else i=r;return this.enumerableContentWillChange(i,n),this},arrayContentDidChange:function(t,r,i){void 0===t?(t=0,r=i=-1):(void 0===r&&(r=-1),void 0===i&&(i=-1));var o,s;if(t>=0&&i>=0&&e(this,"hasEnumerableObservers")){o=[],s=t+i;for(var a=t;s>a;a++)o.push(this.objectAt(a))}else o=i;this.enumerableContentDidChange(r,o),Ember.sendEvent(this,"@array:change",[this,t,r,i]);var u=e(this,"length"),c=n(this,"firstObject"),h=n(this,"lastObject");return this.objectAt(0)!==c&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(u-1)!==h&&(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(){function e(e,t,r){this.callbacks=e,this.cp=t,this.instanceMeta=r,this.dependentKeysByGuid={},this.trackedArraysByGuid={},this.changedItems={}}function t(e,t,r){this.dependentArray=e,this.index=t,this.item=e.objectAt(t),this.trackedArray=r,this.beforeObserver=null,this.observer=null}function r(e,t,r,n,i,o){var s={arrayChanged:e,index:r,item:t,propertyName:n,property:i};return o&&(s.previousValues=o),s}function n(e,t,n,i,o){y(e,function(s,a){o.setValue(t.addedItem.call(this,o.getValue(),s,r(e,s,a,i,n),o.sugarMeta))},this)}function i(e,t){var r;e._callbacks(),e._hasInstanceMeta(this,t)?(r=e._instanceMeta(this,t),r.setValue(e.resetValue(r.getValue()))):r=e._instanceMeta(this,t),e.options.initialize&&e.options.initialize.call(this,r.getValue(),{property:e,propertyName:t},r.sugarMeta)}function o(e,t,r){this.context=e,this.propertyName=t,this.cache=h(e).cache,this.dependentArrays={},this.sugarMeta={},this.initialValue=r}function s(e){var t=this;this.options=e,this._instanceMetas={},this._dependentKeys=null,this._itemPropertyKeys={},this._previousItemPropertyKeys={},this.readOnly(),this.cacheable(),this.recomputeOnce=function(e){Ember.run.once(this,r,e)};var r=function(e){var r=(t._dependentKeys,t._instanceMeta(this,e)),o=t._callbacks();i.call(this,t,e),y(t._dependentKeys,function(e){var n=u(this,e),i=r.dependentArrays[e];n===i?t._previousItemPropertyKeys[e]&&(delete t._previousItemPropertyKeys[e],r.dependentArraysObserver.setupPropertyObservers(e,t._itemPropertyKeys[e])):(r.dependentArrays[e]=n,i&&r.dependentArraysObserver.teardownObservers(i,e),n&&r.dependentArraysObserver.setupObservers(n,e))},this),y(t._dependentKeys,function(i){var s=u(this,i);s&&n.call(this,s,o,t,e,r)},this)};this.func=function(e){return r.call(this,e),t._instanceMeta(this,e).getValue()}}function a(e){return e}var u=Ember.get,c=(Ember.set,Ember.guidFor),h=Ember.meta,l=Ember.addBeforeObserver,f=Ember.removeBeforeObserver,m=Ember.addObserver,p=Ember.removeObserver,b=Ember.ComputedProperty,d=[].slice,E=Ember.create,y=Ember.EnumerableUtils.forEach,v=/^(.*)\.@each\.(.*)/,g=/(.*\.@each){2,}/;e.prototype={setValue:function(e){this.instanceMeta.setValue(e)},getValue:function(){return this.instanceMeta.getValue()},setupObservers:function(e,t){this.dependentKeysByGuid[c(e)]=t,e.addArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"}),this.cp._itemPropertyKeys[t]&&this.setupPropertyObservers(t,this.cp._itemPropertyKeys[t])},teardownObservers:function(e,t){var r=this.cp._itemPropertyKeys[t]||[];delete this.dependentKeysByGuid[c(e)],this.teardownPropertyObservers(t,r),e.removeArrayObserver(this,{willChange:"dependentArrayWillChange",didChange:"dependentArrayDidChange"})},setupPropertyObservers:function(e,t){var r=u(this.instanceMeta.context,e),n=u(r,"length"),i=new Array(n);this.resetTransformations(e,i),y(r,function(n,o){var s=this.createPropertyObserverContext(r,o,this.trackedArraysByGuid[e]);i[o]=s,y(t,function(e){l(n,e,this,s.beforeObserver),m(n,e,this,s.observer)},this)},this)},teardownPropertyObservers:function(e,t){var r,n,i,o=this,s=this.trackedArraysByGuid[e];s&&s.apply(function(e,s,a){a!==Ember.TrackedArray.DELETE&&y(e,function(e){r=e.beforeObserver,n=e.observer,i=e.item,y(t,function(e){f(i,e,o,r),p(i,e,o,n)})})})},createPropertyObserverContext:function(e,r,n){var i=new t(e,r,n);return this.createPropertyObserver(i),i},createPropertyObserver:function(e){var t=this;e.beforeObserver=function(r,n){return t.updateIndexes(e.trackedArray,e.dependentArray),t.itemPropertyWillChange(r,n,e.dependentArray,e.index)},e.observer=function(r,n){return t.itemPropertyDidChange(r,n,e.dependentArray,e.index)}},resetTransformations:function(e,t){this.trackedArraysByGuid[e]=new Ember.TrackedArray(t)},addTransformation:function(e,t,r){var n=this.trackedArraysByGuid[e];n&&n.addItems(t,r)},removeTransformation:function(e,t,r){var n=this.trackedArraysByGuid[e];return n?n.removeItems(t,r):[]},updateIndexes:function(e,t){var r=u(t,"length");e.apply(function(e,t,n){n!==Ember.TrackedArray.DELETE&&(n!==Ember.TrackedArray.RETAIN||e.length!==r||0!==t)&&y(e,function(e,r){e.index=r+t})})},dependentArrayWillChange:function(e,t,n){function i(e){f(s,e,this,h[u].beforeObserver),p(s,e,this,h[u].observer)}var o,s,a,u,h,l=this.callbacks.removedItem,m=c(e),b=this.dependentKeysByGuid[m],d=this.cp._itemPropertyKeys[b]||[];for(h=this.removeTransformation(b,t,n),u=n-1;u>=0;--u)a=t+u,s=e.objectAt(a),y(d,i,this),o=r(e,s,a,this.instanceMeta.propertyName,this.cp),this.setValue(l.call(this.instanceMeta.context,this.getValue(),s,o,this.instanceMeta.sugarMeta))},dependentArrayDidChange:function(e,t,n,i){var o,s,a=this.callbacks.addedItem,u=c(e),h=this.dependentKeysByGuid[u],f=new Array(i),p=this.cp._itemPropertyKeys[h];y(e.slice(t,t+i),function(n,i){p&&(s=f[i]=this.createPropertyObserverContext(e,t+i,this.trackedArraysByGuid[h]),y(p,function(e){l(n,e,this,s.beforeObserver),m(n,e,this,s.observer)},this)),o=r(e,n,t+i,this.instanceMeta.propertyName,this.cp),this.setValue(a.call(this.instanceMeta.context,this.getValue(),n,o,this.instanceMeta.sugarMeta))},this),this.addTransformation(h,t,f)},itemPropertyWillChange:function(e,t,r,n){var i=c(e);this.changedItems[i]||(this.changedItems[i]={array:r,index:n,obj:e,previousValues:{}}),this.changedItems[i].previousValues[t]=u(e,t)},itemPropertyDidChange:function(){Ember.run.once(this,"flushChanges")},flushChanges:function(){var e,t,n,i=this.changedItems;for(e in i)t=i[e],n=r(t.array,t.obj,t.index,this.instanceMeta.propertyName,this.cp,t.previousValues),this.setValue(this.callbacks.removedItem.call(this.instanceMeta.context,this.getValue(),t.obj,n,this.instanceMeta.sugarMeta)),this.setValue(this.callbacks.addedItem.call(this.instanceMeta.context,this.getValue(),t.obj,n,this.instanceMeta.sugarMeta));this.changedItems={}}},o.prototype={getValue:function(){return this.propertyName in this.cache?this.cache[this.propertyName]:this.initialValue},setValue:function(e){void 0!==e?this.cache[this.propertyName]=e:delete this.cache[this.propertyName]}},Ember.ReduceComputedProperty=s,s.prototype=E(b.prototype),s.prototype._callbacks=function(){if(!this.callbacks){var e=this.options;this.callbacks={removedItem:e.removedItem||a,addedItem:e.addedItem||a}}return this.callbacks},s.prototype._hasInstanceMeta=function(e,t){var r=c(e),n=r+":"+t;return!!this._instanceMetas[n]},s.prototype._instanceMeta=function(t,r){var n=c(t),i=n+":"+r,s=this._instanceMetas[i];return s||(s=this._instanceMetas[i]=new o(t,r,this.initialValue()),s.dependentArraysObserver=new e(this._callbacks(),this,s,t,r,s.sugarMeta)),s},s.prototype.initialValue=function(){switch(typeof this.options.initialValue){case"undefined":throw new Error("reduce computed properties require an initial value: did you forget to pass one to Ember.reduceComputed?");case"function":return this.options.initialValue();default:return this.options.initialValue}},s.prototype.resetValue=function(){return this.initialValue()},s.prototype.itemPropertyKey=function(e,t){this._itemPropertyKeys[e]=this._itemPropertyKeys[e]||[],this._itemPropertyKeys[e].push(t)},s.prototype.clearItemPropertyKeys=function(e){this._itemPropertyKeys[e]&&(this._previousItemPropertyKeys[e]=this._itemPropertyKeys[e],this._itemPropertyKeys[e]=[])},s.prototype.property=function(){var e,t,r,n=this,i=(d.call(arguments),[]);return y(d.call(arguments),function(o){if(g.test(o))throw new Error("Nested @each properties not supported: "+o);(e=v.exec(o))?(t=e[1],r=e[2],n.itemPropertyKey(t,r),i.push(t)):i.push(o)}),b.prototype.property.apply(this,i)},Ember.reduceComputed=function(e){var t;if(arguments.length>1&&(t=d.call(arguments,0,-1),e=d.call(arguments,-1)[0]),"object"!=typeof e)throw new Error("Reduce Computed Property declared without an options hash");if(!e.initialValue)throw new Error("Reduce Computed Property declared without an initial value");var r=new s(e);return t&&r.property.apply(r,t),r}}(),function(){function e(){var e=this;return t.apply(this,arguments),this.func=function(t){return function(r){return e._hasInstanceMeta(this,r)||i(e._dependentKeys,function(t){Ember.addObserver(this,t,function(){e.recomputeOnce.call(this,r)})},this),t.apply(this,arguments)}}(this.func),this}var t=Ember.ReduceComputedProperty,r=[].slice,n=Ember.create,i=Ember.EnumerableUtils.forEach;Ember.ArrayComputedProperty=e,e.prototype=n(t.prototype),e.prototype.initialValue=function(){return Ember.A()},e.prototype.resetValue=function(e){return e.clear(),e},Ember.arrayComputed=function(t){var n;if(arguments.length>1&&(n=r.call(arguments,0,-1),t=r.call(arguments,-1)[0]),"object"!=typeof t)throw new Error("Array Computed Property declared without an options hash");var i=new e(t);return n&&i.property.apply(i,n),i}}(),function(){function e(e,n,i,o){function s(e){return Ember.ObjectProxy.detectInstance(e)?r(t(e,"content")):r(e)}var a,u,c,h,l;return arguments.length<4&&(o=t(e,"length")),arguments.length<3&&(i=0),i===o?i:(a=i+Math.floor((o-i)/2),u=e.objectAt(a),h=s(u),l=s(n),h===l?a:(c=this.order(u,n),0===c&&(c=l>h?-1:1),0>c?this.binarySearch(e,n,a+1,o):c>0?this.binarySearch(e,n,i,a):a))}var t=Ember.get,r=(Ember.set,Ember.guidFor),n=Ember.merge,i=[].slice,o=Ember.EnumerableUtils.forEach,s=Ember.EnumerableUtils.map;Ember.computed.max=function(e){return Ember.reduceComputed.call(null,e,{initialValue:-1/0,addedItem:function(e,t){return Math.max(e,t)},removedItem:function(e,t){return e>t?e:void 0}})},Ember.computed.min=function(e){return Ember.reduceComputed.call(null,e,{initialValue:1/0,addedItem:function(e,t){return Math.min(e,t)},removedItem:function(e,t){return t>e?e:void 0}})},Ember.computed.map=function(e,t){var r={addedItem:function(e,r,n){var i=t(r);return e.insertAt(n.index,i),e},removedItem:function(e,t,r){return e.removeAt(r.index,1),e}};return Ember.arrayComputed(e,r)},Ember.computed.mapBy=function(e,r){var n=function(e){return t(e,r)};return Ember.computed.map(e+".@each."+r,n)},Ember.computed.mapProperty=Ember.computed.mapBy,Ember.computed.filter=function(e,t){var r={initialize:function(e,t,r){r.filteredArrayIndexes=new Ember.SubArray},addedItem:function(e,r,n,i){var o=!!t(r),s=i.filteredArrayIndexes.addItem(n.index,o);return o&&e.insertAt(s,r),e},removedItem:function(e,t,r,n){var i=n.filteredArrayIndexes.removeItem(r.index);return i>-1&&e.removeAt(i),e}};return Ember.arrayComputed(e,r)},Ember.computed.filterBy=function(e,r,n){var i;return i=2===arguments.length?function(e){return t(e,r)}:function(e){return t(e,r)===n},Ember.computed.filter(e+".@each."+r,i)},Ember.computed.filterProperty=Ember.computed.filterBy,Ember.computed.uniq=function(){var e=i.call(arguments);return e.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(e,t,n,i){var o=r(t);return i.itemCounts[o]?++i.itemCounts[o]:i.itemCounts[o]=1,e.addObject(t),e},removedItem:function(e,t,n,i){var o=r(t),s=i.itemCounts;return 0===--s[o]&&e.removeObject(t),e}}),Ember.arrayComputed.apply(null,e)},Ember.computed.union=Ember.computed.uniq,Ember.computed.intersect=function(){var e=function(e){return s(e.property._dependentKeys,function(e){return r(e)})},t=i.call(arguments);return t.push({initialize:function(e,t,r){r.itemCounts={}},addedItem:function(t,n,i,o){var s=r(n),a=(e(i),r(i.arrayChanged)),u=i.property._dependentKeys.length,c=o.itemCounts;return c[s]||(c[s]={}),void 0===c[s][a]&&(c[s][a]=0),1===++c[s][a]&&u===Ember.keys(c[s]).length&&t.addObject(n),t},removedItem:function(t,n,i,o){var s,a=r(n),u=(e(i),r(i.arrayChanged)),c=(i.property._dependentKeys.length,o.itemCounts);return void 0===c[a][u]&&(c[a][u]=0),0===--c[a][u]&&(delete c[a][u],s=Ember.keys(c[a]).length,0===s&&delete c[a],t.removeObject(n)),t}}),Ember.arrayComputed.apply(null,t)},Ember.computed.setDiff=function(e,r){if(2!==arguments.length)throw new Error("setDiff requires exactly two dependent arrays.");return Ember.arrayComputed.call(null,e,r,{addedItem:function(n,i,o){var s=t(this,e),a=t(this,r);return o.arrayChanged===s?a.contains(i)||n.addObject(i):n.removeObject(i),n},removedItem:function(n,i,o){var s=t(this,e),a=t(this,r);return o.arrayChanged===a?s.contains(i)&&n.addObject(i):n.removeObject(i),n}})},Ember.computed.sort=function(r,i){var s,a;return"function"==typeof i?s=function(t,r,n){n.order=i,n.binarySearch=e}:(a=i,s=function(n,i,s){function u(){var e,n,u,h=t(this,a),l=s.sortProperties=[],f=s.sortPropertyAscending={};i.property.clearItemPropertyKeys(r),o(h,function(t){-1!==(n=t.indexOf(":"))?(e=t.substring(0,n),u="desc"!==t.substring(n+1).toLowerCase()):(e=t,u=!0),l.push(e),f[e]=u,i.property.itemPropertyKey(r,e)}),h.addObserver("@each",this,c)}function c(){Ember.run.once(this,h,i.propertyName)}function h(e){u.call(this),i.property.recomputeOnce.call(this,e)}Ember.addObserver(this,a,c),u.call(this),s.order=function(e,r){for(var n,i,o,s=0;s<this.sortProperties.length;++s)if(n=this.sortProperties[s],i=Ember.compare(t(e,n),t(r,n)),0!==i)return o=this.sortPropertyAscending[n],o?i:-1*i;return 0},s.binarySearch=e}),Ember.arrayComputed.call(null,r,{initialize:s,addedItem:function(e,t,r,n){var i=n.binarySearch(e,t);return e.insertAt(i,t),e},removedItem:function(e,t,r,i){var o,s,a;return r.previousValues?(o=n({content:t},r.previousValues),a=Ember.ObjectProxy.create(o)):a=t,s=i.binarySearch(e,a),e.removeAt(s),e}})}}(),function(){Ember.RSVP=t("rsvp")}(),function(){var e=/[ _]/g,t={},r=/([a-z])([A-Z])/g,n=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,o=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var r=0;return e.replace(/%@([0-9]+)?/g,function(e,n){return n=n?parseInt(n,10)-1:r++,e=t[n],null===e?"(null)":void 0===e?"":Ember.inspect(e)})},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(r,"$1_$2").toLowerCase()},dasherize:function(r){var n,i=t,o=i.hasOwnProperty(r);return o?i[r]:(n=Ember.String.decamelize(r).replace(e,"-"),i[r]=n,n)},camelize:function(e){return e.replace(n,function(e,t,r){return r?r.toUpperCase():""}).replace(/^([A-Z])/,function(e){return e.toLowerCase()})},classify:function(e){for(var t=e.split("."),r=[],n=0,i=t.length;i>n;n++){var o=Ember.String.camelize(t[n]);r.push(o.charAt(0).toUpperCase()+o.substr(1))}return r.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(o,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,r=Ember.String.loc,n=Ember.String.camelize,i=Ember.String.decamelize,o=Ember.String.dasherize,s=Ember.String.underscore,a=Ember.String.capitalize,u=Ember.String.classify;(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 r(this,arguments)},String.prototype.camelize=function(){return n(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return o(this)},String.prototype.underscore=function(){return s(this)},String.prototype.classify=function(){return u(this)},String.prototype.capitalize=function(){return a(this)})}(),function(){var e=Array.prototype.slice;(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.observesImmediately=function(){for(var e=0,t=arguments.length;t>e;e++)arguments[e];return this.observes.apply(this,arguments)},Function.prototype.observesBefore=function(){return this.__ember_observesBefore__=e.call(arguments),this},Function.prototype.on=function(){var t=e.call(arguments);return this.__ember_listens__=t,this})}(),function(){Ember.Comparable=Ember.Mixin.create({compare:Ember.required(Function)})}(),function(){var e=Ember.get;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=[],r=Ember.get;Ember.set,Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=r(this,"length");return 0===e?this:(this.replace(0,e,t),this)},insertAt:function(t,n){if(t>r(this,"length"))throw new Error(e);return this.replace(t,0,[n]),this},removeAt:function(n,i){if("number"==typeof n){if(0>n||n>=r(this,"length"))throw new Error(e);void 0===i&&(i=1),this.replace(n,i,t)}return this},pushObject:function(e){return this.insertAt(r(this,"length"),e),e},pushObjects:function(e){if(!Ember.Enumerable.detect(e)&&!Ember.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this.replace(r(this,"length"),0,e),this},popObject:function(){var e=r(this,"length");if(0===e)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(0===r(this,"length"))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=r(this,"length");if(0===e)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(0===e.length)return this.clear();var t=r(this,"length");return this.replace(0,t,e),this},removeObject:function(e){for(var t=r(this,"length")||0;--t>=0;){var n=this.objectAt(t);n===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,r=Array.prototype.slice,n=Ember.getProperties;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){return n.apply(null,[this].concat(r.call(arguments)))},set:function(e,r){return t(this,e,r),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,r){Ember.addBeforeObserver(this,e,t,r)},addObserver:function(e,t,r){Ember.addObserver(this,e,t,r)},removeObserver:function(e,t,r){Ember.removeObserver(this,e,t,r)},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(r,n){return Ember.isNone(n)&&(n=1),t(this,r,(e(this,r)||0)+n),e(this,r)},decrementProperty:function(r,n){return Ember.isNone(n)&&(n=1),t(this,r,(e(this,r)||0)-n),e(this,r)},toggleProperty:function(r){return t(this,r,!e(this,r)),e(this,r)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get;Ember.set,Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,actionContext:null,targetObject:Ember.computed(function(){var t=e(this,"target");if("string"===Ember.typeOf(t)){var r=e(this,t);return void 0===r&&(r=e(Ember.lookup,t)),r}return t}).property("target"),actionContextObject:Ember.computed(function(){var t=e(this,"actionContext");if("string"===Ember.typeOf(t)){var r=e(this,t);return void 0===r&&(r=e(Ember.lookup,t)),r}return t}).property("actionContext"),triggerAction:function(t){t=t||{};var r=t.action||e(this,"action"),n=t.target||e(this,"targetObject"),i=t.actionContext||e(this,"actionContextObject")||this;if(n&&r){var o;return o=n.send?n.send.apply(n,[r,i]):n[r].apply(n,[i]),o!==!1&&(o=!0),o}return!1}})}(),function(){Ember.Evented=Ember.Mixin.create({on:function(e,t,r){return Ember.addListener(this,e,t,r),this},one:function(e,t,r){return r||(r=t,t=null),Ember.addListener(this,e,t,r,!0),this},trigger:function(e){var t,r,n=[];for(t=1,r=arguments.length;r>t;t++)n.push(arguments[t]);Ember.sendEvent(this,e,n)},off:function(e,t,r){return Ember.removeListener(this,e,t,r),this},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.configure("async",function(e,t){Ember.run.schedule("actions",t,e,t)});var r=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){function n(t){return t===o?e(s):e(t)}var i,o,s;return s=this,i=r(this,"_deferred"),o=i.promise,o.then(e&&n,t)},resolve:function(e){var t,n;t=r(this,"_deferred"),n=t.promise,e===this?t.resolve(n):t.resolve(e)},reject:function(e){r(this,"_deferred").reject(e)},_deferred:Ember.computed(function(){return e.defer()})})}(),function(){var e=Ember.get;Ember.ActionHandler=Ember.Mixin.create({mergedProperties:["_actions"],willMergeMixin:function(e){e.actions&&!e._actions&&(e._actions=Ember.merge(e._actions||{},e.actions),delete e.actions)},send:function(t){var r,n=[].slice.call(arguments,1);if(this._actions&&this._actions[t]){if(this._actions[t].apply(this,n)!==!0)return}else if(this.deprecatedSend&&this.deprecatedSendHandles&&this.deprecatedSendHandles(t)&&this.deprecatedSend.apply(this,[].slice.call(arguments))!==!0)return;(r=e(this,"target"))&&r.send.apply(r,arguments)}})}(),function(){function e(e,r){r.then(function(r){return t(e,"isFulfilled",!0),t(e,"content",r),r},function(r){t(e,"isRejected",!0),t(e,"reason",r)}).fail(i)}var t=Ember.set,r=Ember.get,n=Ember.RSVP.resolve,i=Ember.RSVP.rethrow,o=Ember.computed.not,s=Ember.computed.or;Ember.PromiseProxyMixin=Ember.Mixin.create({reason:null,isPending:o("isSettled").readOnly(),isSettled:s("isRejected","isFulfilled").readOnly(),isRejected:!1,isFulfilled:!1,promise:Ember.computed(function(t,r){if(2===arguments.length)return r=n(r),e(this,r),r;throw new Error("PromiseProxy's promise must be set")}),then:function(e,t){return r(this,"promise").then(e,t)}})}(),function(){function e(e,t,r){this.operation=e,this.count=t,this.items=r}function t(e,t,r,n){this.operation=e,this.index=t,this.split=r,this.rangeStart=n}var r=Ember.get,n=Ember.EnumerableUtils.forEach,i="r",o="i",s="d";Ember.TrackedArray=function(t){arguments.length<1&&(t=[]);var n=r(t,"length");this._content=n?[new e(i,n,t)]:[]},Ember.TrackedArray.RETAIN=i,Ember.TrackedArray.INSERT=o,Ember.TrackedArray.DELETE=s,Ember.TrackedArray.prototype={addItems:function(t,n){var i,s,a=r(n,"length"),u=this._findArrayOperation(t),c=u.operation,h=u.index,l=u.rangeStart;s=new e(o,a,n),c?u.split?(this._split(h,t-l,s),i=h+1):(this._content.splice(h,0,s),i=h):(this._content.push(s),i=h),this._composeInsert(i)},removeItems:function(t,r){var n,i,o=this._findArrayOperation(t),a=(o.operation,o.index),u=o.rangeStart;return n=new e(s,r),o.split?(this._split(a,t-u,n),i=a+1):(this._content.splice(a,0,n),i=a),this._composeDelete(i)},apply:function(t){var r=[],o=0;n(this._content,function(e){t(e.items,o,e.operation),e.operation!==s&&(o+=e.count,r=r.concat(e.items))}),this._content=[new e(i,r.length,r)]},_findArrayOperation:function(e){var r,n,i,o,a,u=!1;for(r=o=0,n=this._content.length;n>r;++r)if(i=this._content[r],i.operation!==s){if(a=o+i.count-1,e===o)break;if(e>o&&a>=e){u=!0;break}o=a+1}return new t(i,r,u,o)},_split:function(t,r,n){var i=this._content[t],o=i.items.slice(r),s=new e(i.operation,o.length,o);i.count=r,i.items=i.items.slice(0,r),this._content.splice(t+1,0,n,s)},_composeInsert:function(e){var t=this._content[e],r=this._content[e-1],n=this._content[e+1],i=r&&r.operation,s=n&&n.operation;i===o?(r.count+=t.count,r.items=r.items.concat(t.items),s===o?(r.count+=n.count,r.items=r.items.concat(n.items),this._content.splice(e,2)):this._content.splice(e,1)):s===o&&(t.count+=n.count,t.items=t.items.concat(n.items),this._content.splice(e+1,1))},_composeDelete:function(e){var t,r,n,i=this._content[e],a=i.count,u=this._content[e-1],c=u&&u.operation,h=[];c===s&&(i=u,e-=1);for(var l=e+1;a>0;++l)t=this._content[l],r=t.operation,n=t.count,r!==s?(n>a?(h=h.concat(t.items.splice(0,a)),t.count-=a,l-=1,n=a,a=0):(h=h.concat(t.items),a-=n),r===o&&(i.count-=n)):i.count+=n;return i.count>0?this._content.splice(e+1,l-1-e):this._content.splice(e,1),h}}}(),function(){function e(e,t){this.type=e,this.count=t}var t=(Ember.get,Ember.EnumerableUtils.forEach,"r"),r="f";Ember.SubArray=function(r){arguments.length<1&&(r=0),this._operations=r>0?[new e(t,r)]:[]},Ember.SubArray.prototype={addItem:function(n,i){var o=-1,s=i?t:r,a=this;return this._findOperation(n,function(r,u,c,h,l){var f,m;s===r.type?++r.count:n===c?a._operations.splice(u,0,new e(s,1)):(f=new e(s,1),m=new e(r.type,h-n+1),r.count=n-c,a._operations.splice(u+1,0,f,m)),i&&(o=r.type===t?l+(n-c):l),a._composeAt(u)},function(t){a._operations.push(new e(s,1)),i&&(o=t),a._composeAt(a._operations.length-1)}),o},removeItem:function(e){var r=-1,n=this;return this._findOperation(e,function(i,o,s,a,u){i.type===t&&(r=u+(e-s)),i.count>1?--i.count:(n._operations.splice(o,1),n._composeAt(o))}),r},_findOperation:function(e,r,n){var i,o,s,a,u,c=0;for(i=a=0,o=this._operations.length;o>i;a=u+1,++i){if(s=this._operations[i],u=a+s.count-1,e>=a&&u>=e)return r(s,i,a,u,c),void 0;s.type===t&&(c+=s.count)}n(c)},_composeAt:function(e){var t,r=this._operations[e];r&&(e>0&&(t=this._operations[e-1],t.type===r.type&&(r.count+=t.count,this._operations.splice(e-1,1))),e<this._operations.length-1&&(t=this._operations[e+1],t.type===r.type&&(r.count+=t.count,this._operations.splice(e+1,1))))}}}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function e(){var e,t,o=!1,s=function(){o||s.proto(),n(this,i,v),n(this,"_super",v);var u=a(this),l=u.proto;if(u.proto=this,e){var f=e;e=null,this.reopen.apply(this,f)}if(t){var m=t;t=null;for(var p=this.concatenatedProperties,d=0,g=m.length;g>d;d++){var _=m[d];for(var O in _)if(_.hasOwnProperty(O)){var C=_[O],w=Ember.IS_BINDING;if(w.test(O)){var A=u.bindings;A?u.hasOwnProperty("bindings")||(A=u.bindings=r(u.bindings)):A=u.bindings={},A[O]=C}var P=u.descs[O];if(p&&y(p,O)>=0){var j=this[O];C=j?"function"==typeof j.concat?j.concat(C):Ember.makeArray(j).concat(C):Ember.makeArray(C)}P?P.set(this,O,C):"function"!=typeof this.setUnknownProperty||O in this?E?Ember.defineProperty(this,O,null,C):this[O]=C:this.setUnknownProperty(O,C)}}}b(this,u),this.init.apply(this,arguments),u.proto=l,c(this),h(this,"init")};return s.toString=m.prototype.toString,s.willReopen=function(){o&&(s.PrototypeMixin=m.create(s.PrototypeMixin)),o=!1},s._initMixins=function(t){e=t},s._initProperties=function(e){t=e},s.proto=function(){var e=s.superclass;return e&&e.proto(),o||(o=!0,s.PrototypeMixin.applyPartial(s.prototype),u(s.prototype)),this.prototype},s}function t(e){return function(){return e}}var r=(Ember.set,Ember.get,Ember.create),n=Ember.platform.defineProperty,i=Ember.GUID_KEY,o=Ember.guidFor,s=Ember.generateGuid,a=Ember.meta,u=Ember.rewatch,c=Ember.finishChains,h=Ember.sendEvent,l=Ember.destroy,f=Ember.run.schedule,m=Ember.Mixin,p=m._apply,b=m.finishPartial,d=m.prototype.reopen,E=Ember.ENV.MANDATORY_SETTER,y=Ember.EnumerableUtils.indexOf,v={configurable:!0,writable:!0,enumerable:!1,value:void 0},g=e();g.toString=function(){return"Ember.CoreObject"},g.PrototypeMixin=m.create({reopen:function(){return p(this,arguments,!0),this},init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){return this.isDestroying?void 0:(this.isDestroying=!0,f("actions",this,this.willDestroy),f("destroy",this,this._scheduledDestroy),this)},willDestroy:Ember.K,_scheduledDestroy:function(){this.isDestroyed||(l(this),this.isDestroyed=!0)},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function(){var e="function"==typeof this.toStringExtension,r=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+o(this)+r+">";return this.toString=t(n),n}}),g.PrototypeMixin.ownerConstructor=g,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(g.PrototypeMixin),g.__super__=null;var _=m.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var t,n=e();return n.ClassMixin=m.create(this.ClassMixin),n.PrototypeMixin=m.create(this.PrototypeMixin),n.ClassMixin.ownerConstructor=n,n.PrototypeMixin.ownerConstructor=n,d.apply(n.PrototypeMixin,arguments),n.superclass=this,n.__super__=this.prototype,t=n.prototype=r(this.prototype),t.constructor=n,s(t,"ember"),a(t).proto=t,n.ClassMixin.apply(n),n},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(),d.apply(this.PrototypeMixin,arguments),this
|
18
|
+
},reopenClass:function(){return d.apply(this.ClassMixin,arguments),p(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;for(;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 r,n=this.proto(),i=a(n).descs,o={};for(var s in i)r=i[s],r instanceof Ember.ComputedProperty&&e.call(t||this,s,r._meta||o)}});_.ownerConstructor=g,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(_),g.ClassMixin=_,_.apply(g),Ember.CoreObject=g}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function e(t,r,i){var s=t.length;c[t.join(".")]=r;for(var a in r)if(h.call(r,a)){var u=r[a];if(t[s]=a,u&&u.toString===n)u.toString=o(t.join(".")),u[f]=t.join(".");else if(u&&u.isNamespace){if(i[l(u)])continue;i[l(u)]=!0,e(t,u,i)}}t.length=s}function t(){var e,t,r=Ember.Namespace,n=Ember.lookup;if(!r.PROCESSED)for(var i in n)if("parent"!==i&&"top"!==i&&"frameElement"!==i&&"webkitStorageInfo"!==i&&!("globalStorage"===i&&n.StorageList&&n.globalStorage instanceof n.StorageList||n.hasOwnProperty&&!n.hasOwnProperty(i))){try{e=Ember.lookup[i],t=e&&e.isNamespace}catch(o){continue}t&&(e[f]=i)}}function r(e){var t=e.superclass;return t?t[f]?t[f]:r(t):void 0}function n(){Ember.BOOTED||this[f]||i();var e;if(this[f])e=this[f];else if(this._toString)e=this._toString;else{var t=r(this);e=t?"(subclass of "+t+")":"(unknown mixin)",this.toString=o(e)}return e}function i(){var r=!u.PROCESSED,n=Ember.anyUnprocessedMixins;if(r&&(t(),u.PROCESSED=!0),r||n){for(var i,o=u.NAMESPACES,s=0,a=o.length;a>s;s++)i=o[s],e([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function o(e){return function(){return e}}var s=Ember.get,a=Ember.ArrayPolyfills.indexOf,u=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var e=s(this,"name");return e?e:(t(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){e([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=void 0,e.splice(a.call(e,this),1),this._super()}});u.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:i,byName:function(e){return Ember.BOOTED||i(),c[e]}});var c=u.NAMESPACES_BY_ID,h={}.hasOwnProperty,l=Ember.guidFor,f=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=n}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e="Index out of range",t=[],r=Ember.get;Ember.set,Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(e){return r(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,n){r(this,"content").replace(e,t,n)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var e=r(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){r(this,"content"),this._setupContent()},"content"),_setupContent:function(){var e=r(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var e=r(this,"arrangedContent"),t=e?r(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,void 0),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var e=r(this,"arrangedContent"),t=e?r(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,void 0,t)},"arrangedContent"),_setupArrangedContent:function(){var e=r(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=r(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(e){return r(this,"content")&&this.objectAtContent(e)},length:Ember.computed(function(){var e=r(this,"arrangedContent");return e?r(e,"length"):0}),_replace:function(e,t,n){var i=r(this,"content");return i&&this.replaceContent(e,t,n),this},replace:function(){if(r(this,"arrangedContent")!==r(this,"content"))throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(t,n){if(t>r(this,"content.length"))throw new Error(e);return this._replace(t,0,[n]),this},insertAt:function(e,t){if(r(this,"arrangedContent")===r(this,"content"))return this._insertAt(e,t);throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(n,i){if("number"==typeof n){var o,s=r(this,"content"),a=r(this,"arrangedContent"),u=[];if(0>n||n>=r(this,"length"))throw new Error(e);for(void 0===i&&(i=1),o=n;n+i>o;o++)u.push(s.indexOf(a.objectAt(o)));for(u.sort(function(e,t){return t-e}),Ember.beginPropertyChanges(),o=0;o<u.length;o++)this._replace(u[o],1,t);Ember.endPropertyChanges()}return this},pushObject:function(e){return this._insertAt(r(this,"content.length"),e),e},pushObjects:function(e){if(!Ember.Enumerable.detect(e)&&!Ember.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this._replace(r(this,"length"),0,e),this},setObjects:function(e){if(0===e.length)return this.clear();var t=r(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,r,n){this.arrayContentWillChange(t,r,n)},arrangedContentArrayDidChange:function(e,t,r,n){this.arrayContentDidChange(t,r,n)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function e(e,t){var r=t.slice(8);r in this||u(this,r)}function t(e,t){var r=t.slice(8);r in this||c(this,r)}var r=Ember.get,n=Ember.set,i=(Ember.String.fmt,Ember.addBeforeObserver),o=Ember.addObserver,s=Ember.removeBeforeObserver,a=Ember.removeObserver,u=Ember.propertyWillChange,c=Ember.propertyDidChange,h=Ember.meta,l=Ember.defineProperty;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(r){var n="content."+r;i(this,n,null,e),o(this,n,null,t)},didUnwatchProperty:function(r){var n="content."+r;s(this,n,null,e),a(this,n,null,t)},unknownProperty:function(e){var t=r(this,"content");return t?r(t,e):void 0},setUnknownProperty:function(e,t){var i=h(this);if(i.proto===this)return l(this,e,null,t),t;var o=r(this,"content");return n(o,e,t)}})}(),function(){function e(e,t,r,i,o){var s,a=r._objects;for(a||(a=r._objects={});--o>=i;){var u=e.objectAt(o);u&&(Ember.addBeforeObserver(u,t,r,"contentKeyWillChange"),Ember.addObserver(u,t,r,"contentKeyDidChange"),s=n(u),a[s]||(a[s]=[]),a[s].push(o))}}function t(e,t,r,i,s){var a=r._objects;a||(a=r._objects={});for(var u,c;--s>=i;){var h=e.objectAt(s);h&&(Ember.removeBeforeObserver(h,t,r,"contentKeyWillChange"),Ember.removeObserver(h,t,r,"contentKeyDidChange"),c=n(h),u=a[c],u[o.call(u,s)]=null)}}var r=(Ember.set,Ember.get),n=Ember.guidFor,i=Ember.EnumerableUtils.forEach,o=Ember.ArrayPolyfills.indexOf,s=Ember.Object.extend(Ember.Array,{init:function(e,t,r){this._super(),this._keyName=t,this._owner=r,this._content=e},objectAt:function(e){var t=this._content.objectAt(e);return t&&r(t,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?r(e,"length"):0})}),a=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),i(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e){var t;return t=new s(this._content,e,this),Ember.defineProperty(this,e,null,t),this.beginObservingContentKey(e),t},arrayWillChange:function(e,r,n){var i,o,s=this._keys;o=n>0?r+n:-1,Ember.beginPropertyChanges(this);for(i in s)s.hasOwnProperty(i)&&(o>0&&t(e,i,this,r,o),Ember.propertyWillChange(this,i));Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(t,r,n,i){var o,s=this._keys;o=i>0?r+i:-1,Ember.changeProperties(function(){for(var n in s)s.hasOwnProperty(n)&&(o>0&&e(t,n,this,r,o),Ember.propertyDidChange(this,n));Ember.propertyDidChange(this._content,"@each")},this)},didAddListener:function(e){a.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){a.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(t){var n=this._keys;if(n||(n=this._keys={}),n[t])n[t]++;else{n[t]=1;var i=this._content,o=r(i,"length");e(i,t,this,0,o)}},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var i=this._content,o=r(i,"length");t(i,e,this,0,o)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils._replace),r=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return"length"===e?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(r,n,i){if(this.isFrozen)throw Ember.FROZEN_ERROR;var o=i?e(i,"length"):0;return this.arrayContentWillChange(r,n,o),i&&0!==i.length?t(this,r,n,i):this.splice(r,n),this.arrayContentDidChange(r,n,o),this},unknownProperty:function(e,t){var r;return void 0!==t&&void 0===r&&(r=this[e]=t),r},indexOf:function(e,t){var r,n=this.length;for(t=void 0===t?0:0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n),r=t;n>r;r++)if(this[r]===e)return r;return-1},lastIndexOf:function(e,t){var r,n=this.length;for(t=void 0===t?n-1:0>t?Math.ceil(t):Math.floor(t),0>t&&(t+=n),r=t;r>=0;r--)if(this[r]===e)return r;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),n=["length"];Ember.EnumerableUtils.forEach(r.keys(),function(e){Array.prototype[e]&&n.push(e)}),n.length>0&&(r=r.without.apply(r,n)),Ember.NativeArray=r,Ember.A=function(e){return void 0===e&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){r.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,r=Ember.guidFor,n=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 n=e(this,"length");if(0===n)return this;var i;this.enumerableContentWillChange(n,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var o=0;n>o;o++)i=r(this[o]),delete this[i],delete this[o];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(n,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var r=e(this,"length");if(e(t,"length")!==r)return!1;for(;--r>=0;)if(!t.contains(this[r]))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]:void 0}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:void 0}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(n(i))return this;var o,s=r(i),a=this[s],u=e(this,"length");return a>=0&&u>a&&this[a]===i?this:(o=[i],this.enumerableContentWillChange(null,o),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,o),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(n(i))return this;var o,s,a=r(i),u=this[a],c=e(this,"length"),h=0===u,l=u===c-1;return u>=0&&c>u&&this[u]===i&&(s=[i],this.enumerableContentWillChange(s,null),h&&Ember.propertyWillChange(this,"firstObject"),l&&Ember.propertyWillChange(this,"lastObject"),c-1>u&&(o=this[c-1],this[u]=o,this[r(o)]=u),delete this[a],delete this[c-1],t(this,"length",c-1),h&&Ember.propertyDidChange(this,"firstObject"),l&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(s,null)),this},contains:function(e){return this[r(e)]>=0},copy:function(){var n=this.constructor,i=new n,o=e(this,"length");for(t(i,"length",o);--o>=0;)i[o]=this[o],i[r(this[o])]=o;return i},toString:function(){var e,t=this.length,r=[];for(e=0;t>e;e++)r[e]=this[e];return i("Ember.Set<%@>",[r.join(",")])}})}(),function(){var e=Ember.DeferredMixin;Ember.get;var t=Ember.Object.extend(e);t.reopenClass({promise:function(e,r){var n=t.create();return e.call(r,n),n}}),Ember.Deferred=t}(),function(){var e=Ember.ArrayPolyfills.forEach,t=Ember.ENV.EMBER_LOAD_HOOKS||{},r={};Ember.onLoad=function(e,n){var i;t[e]=t[e]||Ember.A(),t[e].pushObject(n),(i=r[e])&&n(i)},Ember.runLoadHooks=function(n,i){r[n]=i,t[n]&&e.call(t[n],function(e){e(i)})}}(),function(){Ember.get,Ember.ControllerMixin=Ember.Mixin.create(Ember.ActionHandler,{isController:!0,target:null,container:null,parentController:null,store:null,model:Ember.computed.alias("content"),deprecatedSendHandles:function(e){return!!this[e]},deprecatedSend:function(e){var t=[].slice.call(arguments,1);this[e].apply(this,t)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach);Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,sortFunction:Ember.compare,orderBy:function(r,n){var i=0,o=e(this,"sortProperties"),s=e(this,"sortAscending"),a=e(this,"sortFunction");return t(o,function(t){0===i&&(i=a(e(r,t),e(n,t)),0===i||s||(i=-1*i))}),i},destroy:function(){var r=e(this,"content"),n=e(this,"sortProperties");return r&&n&&t(r,function(e){t(n,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(){var r=e(this,"content"),n=e(this,"isSorted"),i=e(this,"sortProperties"),o=this;return r&&n?(r=r.slice(),r.sort(function(e,t){return o.orderBy(e,t)}),t(r,function(e){t(i,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(r)):r}),_contentWillChange:Ember.beforeObserver(function(){var r=e(this,"content"),n=e(this,"sortProperties");r&&n&&t(r,function(e){t(n,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(r,n,i,o){var s=e(this,"isSorted");if(s){var a=e(this,"arrangedContent"),u=r.slice(n,n+i),c=e(this,"sortProperties");t(u,function(e){a.removeObject(e),t(c,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(r,n,i,o)},contentArrayDidChange:function(r,n,i,o){var s=e(this,"isSorted"),a=e(this,"sortProperties");if(s){var u=r.slice(n,n+o);t(u,function(e){this.insertItemSorted(e),t(a,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(r,n,i,o)},insertItemSorted:function(t){var r=e(this,"arrangedContent"),n=e(r,"length"),i=this._binarySearch(t,0,n);r.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var r=e(this,"arrangedContent"),n=r.indexOf(t),i=r.objectAt(n-1),o=r.objectAt(n+1),s=i&&this.orderBy(t,i),a=o&&this.orderBy(t,o);(0>s||a>0)&&(r.removeObject(t),this.insertItemSorted(t))},_binarySearch:function(t,r,n){var i,o,s,a;return r===n?r:(a=e(this,"arrangedContent"),i=r+Math.floor((n-r)/2),o=a.objectAt(i),s=this.orderBy(o,t),0>s?this._binarySearch(t,i+1,n):s>0?this._binarySearch(t,r,i):i)}})}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach),r=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(){return e(this,"itemController")},objectAtContent:function(t){var r=e(this,"length"),n=e(this,"arrangedContent"),i=n&&n.objectAt(t);if(t>=0&&r>t){var o=this.lookupItemController(i);if(o)return this.controllerAt(t,i,o)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(n,i,o){var s=e(this,"_subControllers"),a=s.slice(n,n+i);t(a,function(e){e&&e.destroy()}),r(s,n,i,new Array(o)),this._super(n,i,o)},init:function(){this._super(),this.set("_subControllers",Ember.A())},content:Ember.computed(function(){return Ember.A()}),controllerAt:function(t,r,n){var i,o=e(this,"container"),s=e(this,"_subControllers"),a=s[t];if(a)return a;if(i="controller:"+n,!o.has(i))throw new Error('Could not resolve itemController: "'+n+'"');return a=o.lookupFactory(i).create({target:this,parentController:e(this,"parentController")||this,content:r}),s[t]=a,a},_subControllers:null,_resetSubControllers:function(){var r=e(this,"_subControllers");r&&t(r,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}()}(),"undefined"==typeof location||"localhost"!==location.hostname&&"127.0.0.1"!==location.hostname||Ember.Logger.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.");
|
@@ -61,7 +61,7 @@ var define, requireModule;
|
|
61
61
|
|
62
62
|
@class Ember
|
63
63
|
@static
|
64
|
-
@version 1.0.0
|
64
|
+
@version 1.0.0
|
65
65
|
*/
|
66
66
|
|
67
67
|
if ('undefined' === typeof Ember) {
|
@@ -88,10 +88,10 @@ Ember.toString = function() { return "Ember"; };
|
|
88
88
|
/**
|
89
89
|
@property VERSION
|
90
90
|
@type String
|
91
|
-
@default '1.0.0
|
91
|
+
@default '1.0.0'
|
92
92
|
@final
|
93
93
|
*/
|
94
|
-
Ember.VERSION = '1.0.0
|
94
|
+
Ember.VERSION = '1.0.0';
|
95
95
|
|
96
96
|
/**
|
97
97
|
Standard environmental variables. You can define these in a global `ENV`
|
@@ -4433,8 +4433,8 @@ function registerComputedWithProperties(name, macro) {
|
|
4433
4433
|
property is null, an empty string, empty array, or empty function.
|
4434
4434
|
|
4435
4435
|
Note: When using `Ember.computed.empty` to watch an array make sure to
|
4436
|
-
use the `array.length`
|
4437
|
-
|
4436
|
+
use the `array.length` syntax so the computed can subscribe to transitions
|
4437
|
+
from empty to non-empty states.
|
4438
4438
|
|
4439
4439
|
Example
|
4440
4440
|
|
@@ -4442,9 +4442,9 @@ function registerComputedWithProperties(name, macro) {
|
|
4442
4442
|
var ToDoList = Ember.Object.extend({
|
4443
4443
|
done: Ember.computed.empty('todos.length')
|
4444
4444
|
});
|
4445
|
-
var todoList = ToDoList.create({
|
4445
|
+
var todoList = ToDoList.create({todos: ['Unit Test', 'Documentation', 'Release']});
|
4446
4446
|
todoList.get('done'); // false
|
4447
|
-
todoList.get('
|
4447
|
+
todoList.get('todos').clear(); // []
|
4448
4448
|
todoList.get('done'); // true
|
4449
4449
|
```
|
4450
4450
|
|
@@ -5546,7 +5546,7 @@ define("backburner",
|
|
5546
5546
|
clearTimeout(debouncee[2]);
|
5547
5547
|
}
|
5548
5548
|
|
5549
|
-
var timer =
|
5549
|
+
var timer = global.setTimeout(function() {
|
5550
5550
|
if (!immediate) {
|
5551
5551
|
self.run.apply(self, args);
|
5552
5552
|
}
|
@@ -5615,8 +5615,8 @@ define("backburner",
|
|
5615
5615
|
function createAutorun(backburner) {
|
5616
5616
|
backburner.begin();
|
5617
5617
|
autorun = global.setTimeout(function() {
|
5618
|
-
backburner.end();
|
5619
5618
|
autorun = null;
|
5619
|
+
backburner.end();
|
5620
5620
|
});
|
5621
5621
|
}
|
5622
5622
|
|
@@ -7057,19 +7057,19 @@ Ember.mixin = function(obj) {
|
|
7057
7057
|
`Ember.Mixin.extend`.
|
7058
7058
|
|
7059
7059
|
Note that mixins extend a constructor's prototype so arrays and object literals
|
7060
|
-
defined as properties will be shared amongst objects that implement the mixin.
|
7060
|
+
defined as properties will be shared amongst objects that implement the mixin.
|
7061
7061
|
If you want to define an property in a mixin that is not shared, you can define
|
7062
7062
|
it either as a computed property or have it be created on initialization of the object.
|
7063
|
-
|
7063
|
+
|
7064
7064
|
```javascript
|
7065
7065
|
//filters array will be shared amongst any object implementing mixin
|
7066
7066
|
App.Filterable = Ember.Mixin.create({
|
7067
|
-
filters: Ember.A()
|
7067
|
+
filters: Ember.A()
|
7068
7068
|
});
|
7069
7069
|
|
7070
7070
|
//filters will be a separate array for every object implementing the mixin
|
7071
7071
|
App.Filterable = Ember.Mixin.create({
|
7072
|
-
filters: Ember.computed(function(){return Ember.A();})
|
7072
|
+
filters: Ember.computed(function(){return Ember.A();})
|
7073
7073
|
});
|
7074
7074
|
|
7075
7075
|
//filters will be created as a separate array during the object's initialization
|
@@ -7316,6 +7316,22 @@ Ember.aliasMethod = function(methodName) {
|
|
7316
7316
|
//
|
7317
7317
|
|
7318
7318
|
/**
|
7319
|
+
Specify a method that observes property changes.
|
7320
|
+
|
7321
|
+
```javascript
|
7322
|
+
Ember.Object.extend({
|
7323
|
+
valueObserver: Ember.observer(function() {
|
7324
|
+
// Executes whenever the "value" property changes
|
7325
|
+
}, 'value')
|
7326
|
+
});
|
7327
|
+
```
|
7328
|
+
|
7329
|
+
In the future this method may become asynchronous. If you want to ensure
|
7330
|
+
synchronous behavior, use `immediateObserver`.
|
7331
|
+
|
7332
|
+
Also available as `Function.prototype.observes` if prototype extensions are
|
7333
|
+
enabled.
|
7334
|
+
|
7319
7335
|
@method observer
|
7320
7336
|
@for Ember
|
7321
7337
|
@param {Function} func
|
@@ -7328,9 +7344,23 @@ Ember.observer = function(func) {
|
|
7328
7344
|
return func;
|
7329
7345
|
};
|
7330
7346
|
|
7331
|
-
// If observers ever become asynchronous, Ember.immediateObserver
|
7332
|
-
// must remain synchronous.
|
7333
7347
|
/**
|
7348
|
+
Specify a method that observes property changes.
|
7349
|
+
|
7350
|
+
```javascript
|
7351
|
+
Ember.Object.extend({
|
7352
|
+
valueObserver: Ember.immediateObserver(function() {
|
7353
|
+
// Executes whenever the "value" property changes
|
7354
|
+
}, 'value')
|
7355
|
+
});
|
7356
|
+
```
|
7357
|
+
|
7358
|
+
In the future, `Ember.observer` may become asynchronous. In this event,
|
7359
|
+
`Ember.immediateObserver` will maintain the synchronous behavior.
|
7360
|
+
|
7361
|
+
Also available as `Function.prototype.observesImmediately` if prototype extensions are
|
7362
|
+
enabled.
|
7363
|
+
|
7334
7364
|
@method immediateObserver
|
7335
7365
|
@for Ember
|
7336
7366
|
@param {Function} func
|
@@ -7358,24 +7388,31 @@ Ember.immediateObserver = function() {
|
|
7358
7388
|
|
7359
7389
|
```javascript
|
7360
7390
|
App.PersonView = Ember.View.extend({
|
7391
|
+
|
7361
7392
|
friends: [{ name: 'Tom' }, { name: 'Stefan' }, { name: 'Kris' }],
|
7362
|
-
|
7393
|
+
|
7394
|
+
valueWillChange: Ember.beforeObserver(function(obj, keyName) {
|
7363
7395
|
this.changingFrom = obj.get(keyName);
|
7364
|
-
}
|
7365
|
-
|
7396
|
+
}, 'content.value'),
|
7397
|
+
|
7398
|
+
valueDidChange: Ember.observer(function(obj, keyName) {
|
7366
7399
|
// only run if updating a value already in the DOM
|
7367
7400
|
if (this.get('state') === 'inDOM') {
|
7368
|
-
|
7369
|
-
|
7401
|
+
var color = obj.get(keyName) > this.changingFrom ? 'green' : 'red';
|
7402
|
+
// logic
|
7370
7403
|
}
|
7371
|
-
}
|
7372
|
-
|
7404
|
+
}, 'content.value'),
|
7405
|
+
|
7406
|
+
friendsDidChange: Ember.observer(function(obj, keyName) {
|
7373
7407
|
// some logic
|
7374
7408
|
// obj.get(keyName) returns friends array
|
7375
|
-
}
|
7409
|
+
}, 'friends.@each.name')
|
7376
7410
|
});
|
7377
7411
|
```
|
7378
7412
|
|
7413
|
+
Also available as `Function.prototype.observesBefore` if prototype extensions are
|
7414
|
+
enabled.
|
7415
|
+
|
7379
7416
|
@method beforeObserver
|
7380
7417
|
@for Ember
|
7381
7418
|
@param {Function} func
|
@@ -7459,6 +7496,7 @@ define("rsvp/async",
|
|
7459
7496
|
var browserGlobal = (typeof window !== 'undefined') ? window : {};
|
7460
7497
|
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
|
7461
7498
|
var async;
|
7499
|
+
var local = (typeof global !== 'undefined') ? global : this;
|
7462
7500
|
|
7463
7501
|
// old node
|
7464
7502
|
function useNextTick() {
|
@@ -7509,7 +7547,7 @@ define("rsvp/async",
|
|
7509
7547
|
|
7510
7548
|
function useSetTimeout() {
|
7511
7549
|
return function(callback, arg) {
|
7512
|
-
|
7550
|
+
local.setTimeout(function() {
|
7513
7551
|
callback(arg);
|
7514
7552
|
}, 1);
|
7515
7553
|
};
|
@@ -8048,6 +8086,13 @@ define("rsvp",
|
|
8048
8086
|
})();
|
8049
8087
|
|
8050
8088
|
(function() {
|
8089
|
+
/**
|
8090
|
+
Flag to enable/disable model factory injections (disabled by default)
|
8091
|
+
If model factory injections are enabled, models should not be
|
8092
|
+
accessed globally (only through `container.lookupFactory('model:modelName'))`);
|
8093
|
+
*/
|
8094
|
+
Ember.MODEL_FACTORY_INJECTIONS = false || !!Ember.ENV.MODEL_FACTORY_INJECTIONS;
|
8095
|
+
|
8051
8096
|
define("container",
|
8052
8097
|
[],
|
8053
8098
|
function() {
|
@@ -8326,6 +8371,7 @@ define("container",
|
|
8326
8371
|
|
8327
8372
|
container.unregister('model:user')
|
8328
8373
|
container.lookup('model:user') === undefined //=> true
|
8374
|
+
```
|
8329
8375
|
|
8330
8376
|
@method unregister
|
8331
8377
|
@param {String} fullName
|
@@ -8409,7 +8455,7 @@ define("container",
|
|
8409
8455
|
*/
|
8410
8456
|
makeToString: function(factory, fullName) {
|
8411
8457
|
return factory.toString();
|
8412
|
-
},
|
8458
|
+
},
|
8413
8459
|
|
8414
8460
|
/**
|
8415
8461
|
Given a fullName return a corresponding instance.
|
@@ -8817,6 +8863,7 @@ define("container",
|
|
8817
8863
|
var factory = container.resolve(name);
|
8818
8864
|
var injectedFactory;
|
8819
8865
|
var cache = container.factoryCache;
|
8866
|
+
var type = fullName.split(":")[0];
|
8820
8867
|
|
8821
8868
|
if (!factory) { return; }
|
8822
8869
|
|
@@ -8824,7 +8871,7 @@ define("container",
|
|
8824
8871
|
return cache.get(fullName);
|
8825
8872
|
}
|
8826
8873
|
|
8827
|
-
if (typeof factory.extend !== 'function') {
|
8874
|
+
if (typeof factory.extend !== 'function' || (!Ember.MODEL_FACTORY_INJECTIONS && type === 'model')) {
|
8828
8875
|
// TODO: think about a 'safe' merge style extension
|
8829
8876
|
// for now just fallback to create time injection
|
8830
8877
|
return factory;
|
@@ -10627,6 +10674,9 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
10627
10674
|
return an enumerable that maps automatically to the named key on the
|
10628
10675
|
member objects.
|
10629
10676
|
|
10677
|
+
If you merely want to watch for any items being added or removed to the array,
|
10678
|
+
use the `[]` property instead of `@each`.
|
10679
|
+
|
10630
10680
|
@property @each
|
10631
10681
|
*/
|
10632
10682
|
'@each': Ember.computed(function() {
|
@@ -10658,7 +10708,7 @@ var get = Ember.get,
|
|
10658
10708
|
eachPropertyPattern = /^(.*)\.@each\.(.*)/,
|
10659
10709
|
doubleEachPropertyPattern = /(.*\.@each){2,}/;
|
10660
10710
|
|
10661
|
-
|
10711
|
+
/*
|
10662
10712
|
Tracks changes to dependent arrays, as well as to properties of items in
|
10663
10713
|
dependent arrays.
|
10664
10714
|
|
@@ -10847,22 +10897,29 @@ DependentArraysObserver.prototype = {
|
|
10847
10897
|
guid = guidFor(dependentArray),
|
10848
10898
|
dependentKey = this.dependentKeysByGuid[guid],
|
10849
10899
|
itemPropertyKeys = this.cp._itemPropertyKeys[dependentKey] || [],
|
10900
|
+
item,
|
10850
10901
|
itemIndex,
|
10902
|
+
sliceIndex,
|
10851
10903
|
observerContexts;
|
10852
10904
|
|
10853
10905
|
observerContexts = this.removeTransformation(dependentKey, index, removedCount);
|
10854
|
-
|
10906
|
+
|
10907
|
+
|
10908
|
+
function removeObservers(propertyKey) {
|
10909
|
+
removeBeforeObserver(item, propertyKey, this, observerContexts[sliceIndex].beforeObserver);
|
10910
|
+
removeObserver(item, propertyKey, this, observerContexts[sliceIndex].observer);
|
10911
|
+
}
|
10912
|
+
|
10913
|
+
for (sliceIndex = removedCount - 1; sliceIndex >= 0; --sliceIndex) {
|
10855
10914
|
itemIndex = index + sliceIndex;
|
10915
|
+
item = dependentArray.objectAt(itemIndex);
|
10856
10916
|
|
10857
|
-
forEach(itemPropertyKeys,
|
10858
|
-
removeBeforeObserver(item, propertyKey, this, observerContexts[sliceIndex].beforeObserver);
|
10859
|
-
removeObserver(item, propertyKey, this, observerContexts[sliceIndex].observer);
|
10860
|
-
}, this);
|
10917
|
+
forEach(itemPropertyKeys, removeObservers, this);
|
10861
10918
|
|
10862
10919
|
changeMeta = createChangeMeta(dependentArray, item, itemIndex, this.instanceMeta.propertyName, this.cp);
|
10863
10920
|
this.setValue( removedItem.call(
|
10864
10921
|
this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
|
10865
|
-
}
|
10922
|
+
}
|
10866
10923
|
},
|
10867
10924
|
|
10868
10925
|
dependentArrayDidChange: function (dependentArray, index, removedCount, addedCount) {
|
@@ -10876,8 +10933,8 @@ DependentArraysObserver.prototype = {
|
|
10876
10933
|
|
10877
10934
|
forEach(dependentArray.slice(index, index + addedCount), function (item, sliceIndex) {
|
10878
10935
|
if (itemPropertyKeys) {
|
10879
|
-
observerContext =
|
10880
|
-
observerContexts[sliceIndex] =
|
10936
|
+
observerContext =
|
10937
|
+
observerContexts[sliceIndex] =
|
10881
10938
|
this.createPropertyObserverContext(dependentArray, index + sliceIndex, this.trackedArraysByGuid[dependentKey]);
|
10882
10939
|
forEach(itemPropertyKeys, function (propertyKey) {
|
10883
10940
|
addBeforeObserver(item, propertyKey, this, observerContext.beforeObserver);
|
@@ -10894,30 +10951,29 @@ DependentArraysObserver.prototype = {
|
|
10894
10951
|
},
|
10895
10952
|
|
10896
10953
|
itemPropertyWillChange: function (obj, keyName, array, index) {
|
10897
|
-
var
|
10954
|
+
var guid = guidFor(obj);
|
10898
10955
|
|
10899
|
-
if (!this.changedItems[
|
10900
|
-
this.changedItems[
|
10901
|
-
array: array,
|
10956
|
+
if (!this.changedItems[guid]) {
|
10957
|
+
this.changedItems[guid] = {
|
10958
|
+
array: array,
|
10902
10959
|
index: index,
|
10903
10960
|
obj: obj,
|
10904
|
-
|
10905
|
-
previousValue: get(obj, keyName)
|
10961
|
+
previousValues: {}
|
10906
10962
|
};
|
10907
10963
|
}
|
10964
|
+
|
10965
|
+
this.changedItems[guid].previousValues[keyName] = get(obj, keyName);
|
10908
10966
|
},
|
10909
10967
|
|
10910
10968
|
itemPropertyDidChange: function(obj, keyName, array, index) {
|
10911
10969
|
Ember.run.once(this, 'flushChanges');
|
10912
10970
|
},
|
10913
10971
|
|
10914
|
-
// TODO: it probably makes more sense to remove the item during `willChange`
|
10915
|
-
// and add it back (with the new value) during `didChange`
|
10916
10972
|
flushChanges: function() {
|
10917
10973
|
var changedItems = this.changedItems, key, c, changeMeta;
|
10918
10974
|
for (key in changedItems) {
|
10919
10975
|
c = changedItems[key];
|
10920
|
-
changeMeta = createChangeMeta(c.array, c.obj, c.index, this.instanceMeta.propertyName, this.cp, c.
|
10976
|
+
changeMeta = createChangeMeta(c.array, c.obj, c.index, this.instanceMeta.propertyName, this.cp, c.previousValues);
|
10921
10977
|
this.setValue(
|
10922
10978
|
this.callbacks.removedItem.call(this.instanceMeta.context, this.getValue(), c.obj, changeMeta, this.instanceMeta.sugarMeta));
|
10923
10979
|
this.setValue(
|
@@ -10927,18 +10983,19 @@ DependentArraysObserver.prototype = {
|
|
10927
10983
|
}
|
10928
10984
|
};
|
10929
10985
|
|
10930
|
-
function createChangeMeta(dependentArray, item, index, propertyName, property,
|
10986
|
+
function createChangeMeta(dependentArray, item, index, propertyName, property, previousValues) {
|
10931
10987
|
var meta = {
|
10932
10988
|
arrayChanged: dependentArray,
|
10933
10989
|
index: index,
|
10934
10990
|
item: item,
|
10935
10991
|
propertyName: propertyName,
|
10936
|
-
property: property
|
10937
|
-
// previous value is only available for item property changes!
|
10938
|
-
previousValue: previousValue
|
10992
|
+
property: property
|
10939
10993
|
};
|
10940
10994
|
|
10941
|
-
if (
|
10995
|
+
if (previousValues) {
|
10996
|
+
// previous values only available for item property changes
|
10997
|
+
meta.previousValues = previousValues;
|
10998
|
+
}
|
10942
10999
|
|
10943
11000
|
return meta;
|
10944
11001
|
}
|
@@ -11062,7 +11119,9 @@ function ReduceComputedProperty(options) {
|
|
11062
11119
|
|
11063
11120
|
forEach(cp._dependentKeys, function(dependentKey) {
|
11064
11121
|
var dependentArray = get(this, dependentKey);
|
11065
|
-
|
11122
|
+
if (dependentArray) {
|
11123
|
+
addItems.call(this, dependentArray, callbacks, cp, propertyName, meta);
|
11124
|
+
}
|
11066
11125
|
}, this);
|
11067
11126
|
};
|
11068
11127
|
|
@@ -11164,7 +11223,122 @@ ReduceComputedProperty.prototype.property = function () {
|
|
11164
11223
|
return ComputedProperty.prototype.property.apply(this, propertyArgs);
|
11165
11224
|
};
|
11166
11225
|
|
11226
|
+
/**
|
11227
|
+
Creates a computed property which operates on dependent arrays and
|
11228
|
+
is updated with "one at a time" semantics. When items are added or
|
11229
|
+
removed from the dependent array(s) a reduce computed only operates
|
11230
|
+
on the change instead of re-evaluating the entire array.
|
11231
|
+
|
11232
|
+
If there are more than one arguments the first arguments are
|
11233
|
+
considered to be dependent property keys. The last argument is
|
11234
|
+
required to be an options object. The options object can have the
|
11235
|
+
following four properties.
|
11236
|
+
|
11237
|
+
`initialValue` - A value or function that will be used as the initial
|
11238
|
+
value for the computed. If this property is a function the result of calling
|
11239
|
+
the function will be used as the initial value. This property is required.
|
11240
|
+
|
11241
|
+
`initialize` - An optional initialize function. Typically this will be used
|
11242
|
+
to set up state on the instanceMeta object.
|
11243
|
+
|
11244
|
+
`removedItem` - A function that is called each time an element is removed
|
11245
|
+
from the array.
|
11246
|
+
|
11247
|
+
`addedItem` - A function that is called each time an element is added to
|
11248
|
+
the array.
|
11249
|
+
|
11250
|
+
|
11251
|
+
The `initialize` function has the following signature:
|
11252
|
+
|
11253
|
+
```javascript
|
11254
|
+
function (initialValue, changeMeta, instanceMeta)
|
11255
|
+
```
|
11256
|
+
|
11257
|
+
`initialValue` - The value of the `initialValue` property from the
|
11258
|
+
options object.
|
11259
|
+
|
11260
|
+
`changeMeta` - An object which contains meta information about the
|
11261
|
+
computed. It contains the following properties:
|
11262
|
+
|
11263
|
+
- `property` the computed property
|
11264
|
+
- `propertyName` the name of the property on the object
|
11265
|
+
|
11266
|
+
`instanceMeta` - An object that can be used to store meta
|
11267
|
+
information needed for calculating your computed. For example a
|
11268
|
+
unique computed might use this to store the number of times a given
|
11269
|
+
element is found in the dependent array.
|
11270
|
+
|
11167
11271
|
|
11272
|
+
The `removedItem` and `addedItem` functions both have the following signature:
|
11273
|
+
|
11274
|
+
```javascript
|
11275
|
+
function (accumulatedValue, item, changeMeta, instanceMeta)
|
11276
|
+
```
|
11277
|
+
|
11278
|
+
`accumulatedValue` - The value returned from the last time
|
11279
|
+
`removedItem` or `addedItem` was called or `initialValue`.
|
11280
|
+
|
11281
|
+
`item` - the element added or removed from the array
|
11282
|
+
|
11283
|
+
`changeMeta` - An object which contains meta information about the
|
11284
|
+
change. It contains the following properties:
|
11285
|
+
|
11286
|
+
- `property` the computed property
|
11287
|
+
- `propertyName` the name of the property on the object
|
11288
|
+
- `index` the index of the added or removed item
|
11289
|
+
- `item` the added or removed item: this is exactly the same as
|
11290
|
+
the second arg
|
11291
|
+
- `arrayChanged` the array that triggered the change. Can be
|
11292
|
+
useful when depending on multiple arrays.
|
11293
|
+
|
11294
|
+
For property changes triggered on an item property change (when
|
11295
|
+
depKey is something like `someArray.@each.someProperty`),
|
11296
|
+
`changeMeta` will also contain the following property:
|
11297
|
+
|
11298
|
+
- `previousValues` an object whose keys are the properties that changed on
|
11299
|
+
the item, and whose values are the item's previous values.
|
11300
|
+
|
11301
|
+
`previousValues` is important Ember coalesces item property changes via
|
11302
|
+
Ember.run.once. This means that by the time removedItem gets called, item has
|
11303
|
+
the new values, but you may need the previous value (eg for sorting &
|
11304
|
+
filtering).
|
11305
|
+
|
11306
|
+
`instanceMeta` - An object that can be used to store meta
|
11307
|
+
information needed for calculating your computed. For example a
|
11308
|
+
unique computed might use this to store the number of times a given
|
11309
|
+
element is found in the dependent array.
|
11310
|
+
|
11311
|
+
The `removedItem` and `addedItem` functions should return the accumulated
|
11312
|
+
value. It is acceptable to not return anything (ie return undefined)
|
11313
|
+
to invalidate the computation. This is generally not a good idea for
|
11314
|
+
arrayComputed but it's used in eg max and min.
|
11315
|
+
|
11316
|
+
Example
|
11317
|
+
|
11318
|
+
```javascript
|
11319
|
+
Ember.computed.max = function (dependentKey) {
|
11320
|
+
return Ember.reduceComputed.call(null, dependentKey, {
|
11321
|
+
initialValue: -Infinity,
|
11322
|
+
|
11323
|
+
addedItem: function (accumulatedValue, item, changeMeta, instanceMeta) {
|
11324
|
+
return Math.max(accumulatedValue, item);
|
11325
|
+
},
|
11326
|
+
|
11327
|
+
removedItem: function (accumulatedValue, item, changeMeta, instanceMeta) {
|
11328
|
+
if (item < accumulatedValue) {
|
11329
|
+
return accumulatedValue;
|
11330
|
+
}
|
11331
|
+
}
|
11332
|
+
});
|
11333
|
+
};
|
11334
|
+
```
|
11335
|
+
|
11336
|
+
@method reduceComputed
|
11337
|
+
@for Ember
|
11338
|
+
@param {String} [dependentKeys*]
|
11339
|
+
@param {Object} options
|
11340
|
+
@returns {Ember.ComputedProperty}
|
11341
|
+
*/
|
11168
11342
|
Ember.reduceComputed = function (options) {
|
11169
11343
|
var args;
|
11170
11344
|
|
@@ -11190,7 +11364,6 @@ Ember.reduceComputed = function (options) {
|
|
11190
11364
|
return cp;
|
11191
11365
|
};
|
11192
11366
|
|
11193
|
-
|
11194
11367
|
})();
|
11195
11368
|
|
11196
11369
|
|
@@ -11235,7 +11408,120 @@ ArrayComputedProperty.prototype.resetValue = function (array) {
|
|
11235
11408
|
return array;
|
11236
11409
|
};
|
11237
11410
|
|
11411
|
+
/**
|
11412
|
+
Creates a computed property which operates on dependent arrays and
|
11413
|
+
is updated with "one at a time" semantics. When items are added or
|
11414
|
+
removed from the dependent array(s) an array computed only operates
|
11415
|
+
on the change instead of re-evaluating the entire array. This should
|
11416
|
+
return an array, if you'd like to use "one at a time" semantics and
|
11417
|
+
compute some value other then an array look at
|
11418
|
+
`Ember.reduceComputed`.
|
11419
|
+
|
11420
|
+
If there are more than one arguments the first arguments are
|
11421
|
+
considered to be dependent property keys. The last argument is
|
11422
|
+
required to be an options object. The options object can have the
|
11423
|
+
following three properties.
|
11424
|
+
|
11425
|
+
`initialize` - An optional initialize function. Typically this will be used
|
11426
|
+
to set up state on the instanceMeta object.
|
11427
|
+
|
11428
|
+
`removedItem` - A function that is called each time an element is
|
11429
|
+
removed from the array.
|
11430
|
+
|
11431
|
+
`addedItem` - A function that is called each time an element is
|
11432
|
+
added to the array.
|
11433
|
+
|
11434
|
+
|
11435
|
+
The `initialize` function has the following signature:
|
11436
|
+
|
11437
|
+
```javascript
|
11438
|
+
function (array, changeMeta, instanceMeta)
|
11439
|
+
```
|
11440
|
+
|
11441
|
+
`array` - The initial value of the arrayComputed, an empty array.
|
11442
|
+
|
11443
|
+
`changeMeta` - An object which contains meta information about the
|
11444
|
+
computed. It contains the following properties:
|
11445
|
+
|
11446
|
+
- `property` the computed property
|
11447
|
+
- `propertyName` the name of the property on the object
|
11448
|
+
|
11449
|
+
`instanceMeta` - An object that can be used to store meta
|
11450
|
+
information needed for calculating your computed. For example a
|
11451
|
+
unique computed might use this to store the number of times a given
|
11452
|
+
element is found in the dependent array.
|
11453
|
+
|
11454
|
+
|
11455
|
+
The `removedItem` and `addedItem` functions both have the following signature:
|
11456
|
+
|
11457
|
+
```javascript
|
11458
|
+
function (accumulatedValue, item, changeMeta, instanceMeta)
|
11459
|
+
```
|
11460
|
+
|
11461
|
+
`accumulatedValue` - The value returned from the last time
|
11462
|
+
`removedItem` or `addedItem` was called or an empty array.
|
11463
|
+
|
11464
|
+
`item` - the element added or removed from the array
|
11465
|
+
|
11466
|
+
`changeMeta` - An object which contains meta information about the
|
11467
|
+
change. It contains the following properties:
|
11468
|
+
|
11469
|
+
- `property` the computed property
|
11470
|
+
- `propertyName` the name of the property on the object
|
11471
|
+
- `index` the index of the added or removed item
|
11472
|
+
- `item` the added or removed item: this is exactly the same as
|
11473
|
+
the second arg
|
11474
|
+
- `arrayChanged` the array that triggered the change. Can be
|
11475
|
+
useful when depending on multiple arrays.
|
11476
|
+
|
11477
|
+
For property changes triggered on an item property change (when
|
11478
|
+
depKey is something like `someArray.@each.someProperty`),
|
11479
|
+
`changeMeta` will also contain the following property:
|
11480
|
+
|
11481
|
+
- `previousValues` an object whose keys are the properties that changed on
|
11482
|
+
the item, and whose values are the item's previous values.
|
11483
|
+
|
11484
|
+
`previousValues` is important Ember coalesces item property changes via
|
11485
|
+
Ember.run.once. This means that by the time removedItem gets called, item has
|
11486
|
+
the new values, but you may need the previous value (eg for sorting &
|
11487
|
+
filtering).
|
11488
|
+
|
11489
|
+
`instanceMeta` - An object that can be used to store meta
|
11490
|
+
information needed for calculating your computed. For example a
|
11491
|
+
unique computed might use this to store the number of times a given
|
11492
|
+
element is found in the dependent array.
|
11493
|
+
|
11494
|
+
The `removedItem` and `addedItem` functions should return the accumulated
|
11495
|
+
value. It is acceptable to not return anything (ie return undefined)
|
11496
|
+
to invalidate the computation. This is generally not a good idea for
|
11497
|
+
arrayComputed but it's used in eg max and min.
|
11498
|
+
|
11499
|
+
Example
|
11500
|
+
|
11501
|
+
```javascript
|
11502
|
+
Ember.computed.map = function(dependentKey, callback) {
|
11503
|
+
var options = {
|
11504
|
+
addedItem: function(array, item, changeMeta, instanceMeta) {
|
11505
|
+
var mapped = callback(item);
|
11506
|
+
array.insertAt(changeMeta.index, mapped);
|
11507
|
+
return array;
|
11508
|
+
},
|
11509
|
+
removedItem: function(array, item, changeMeta, instanceMeta) {
|
11510
|
+
array.removeAt(changeMeta.index, 1);
|
11511
|
+
return array;
|
11512
|
+
}
|
11513
|
+
};
|
11514
|
+
|
11515
|
+
return Ember.arrayComputed(dependentKey, options);
|
11516
|
+
};
|
11517
|
+
```
|
11238
11518
|
|
11519
|
+
@method arrayComputed
|
11520
|
+
@for Ember
|
11521
|
+
@param {String} [dependentKeys*]
|
11522
|
+
@param {Object} options
|
11523
|
+
@returns {Ember.ComputedProperty}
|
11524
|
+
*/
|
11239
11525
|
Ember.arrayComputed = function (options) {
|
11240
11526
|
var args;
|
11241
11527
|
|
@@ -11262,12 +11548,45 @@ Ember.arrayComputed = function (options) {
|
|
11262
11548
|
|
11263
11549
|
|
11264
11550
|
(function() {
|
11551
|
+
/**
|
11552
|
+
@module ember
|
11553
|
+
@submodule ember-runtime
|
11554
|
+
*/
|
11555
|
+
|
11265
11556
|
var get = Ember.get,
|
11266
11557
|
set = Ember.set,
|
11558
|
+
guidFor = Ember.guidFor,
|
11559
|
+
merge = Ember.merge,
|
11267
11560
|
a_slice = [].slice,
|
11268
11561
|
forEach = Ember.EnumerableUtils.forEach,
|
11269
11562
|
map = Ember.EnumerableUtils.map;
|
11270
11563
|
|
11564
|
+
/**
|
11565
|
+
A computed property that calculates the maximum value in the
|
11566
|
+
dependent array. This will return `-Infinity` when the dependent
|
11567
|
+
array is empty.
|
11568
|
+
|
11569
|
+
Example
|
11570
|
+
|
11571
|
+
```javascript
|
11572
|
+
App.Person = Ember.Object.extend({
|
11573
|
+
childAges: Ember.computed.mapBy('children', 'age'),
|
11574
|
+
maxChildAge: Ember.computed.max('childAges')
|
11575
|
+
});
|
11576
|
+
|
11577
|
+
var lordByron = App.Person.create({children: []});
|
11578
|
+
lordByron.get('maxChildAge'); // -Infinity
|
11579
|
+
lordByron.get('children').pushObject({name: 'Augusta Ada Byron', age: 7});
|
11580
|
+
lordByron.get('maxChildAge'); // 7
|
11581
|
+
lordByron.get('children').pushObjects([{name: 'Allegra Byron', age: 5}, {name: 'Elizabeth Medora Leigh', age: 8}]);
|
11582
|
+
lordByron.get('maxChildAge'); // 8
|
11583
|
+
```
|
11584
|
+
|
11585
|
+
@method computed.max
|
11586
|
+
@for Ember
|
11587
|
+
@param {String} dependentKey
|
11588
|
+
@return {Ember.ComputedProperty} computes the largest value in the dependentKey's array
|
11589
|
+
*/
|
11271
11590
|
Ember.computed.max = function (dependentKey) {
|
11272
11591
|
return Ember.reduceComputed.call(null, dependentKey, {
|
11273
11592
|
initialValue: -Infinity,
|
@@ -11284,6 +11603,32 @@ Ember.computed.max = function (dependentKey) {
|
|
11284
11603
|
});
|
11285
11604
|
};
|
11286
11605
|
|
11606
|
+
/**
|
11607
|
+
A computed property that calculates the minimum value in the
|
11608
|
+
dependent array. This will return `Infinity` when the dependent
|
11609
|
+
array is empty.
|
11610
|
+
|
11611
|
+
Example
|
11612
|
+
|
11613
|
+
```javascript
|
11614
|
+
App.Person = Ember.Object.extend({
|
11615
|
+
childAges: Ember.computed.mapBy('children', 'age'),
|
11616
|
+
minChildAge: Ember.computed.min('childAges')
|
11617
|
+
});
|
11618
|
+
|
11619
|
+
var lordByron = App.Person.create({children: []});
|
11620
|
+
lordByron.get('minChildAge'); // Infinity
|
11621
|
+
lordByron.get('children').pushObject({name: 'Augusta Ada Byron', age: 7});
|
11622
|
+
lordByron.get('minChildAge'); // 7
|
11623
|
+
lordByron.get('children').pushObjects([{name: 'Allegra Byron', age: 5}, {name: 'Elizabeth Medora Leigh', age: 8}]);
|
11624
|
+
lordByron.get('minChildAge'); // 5
|
11625
|
+
```
|
11626
|
+
|
11627
|
+
@method computed.min
|
11628
|
+
@for Ember
|
11629
|
+
@param {String} dependentKey
|
11630
|
+
@return {Ember.ComputedProperty} computes the smallest value in the dependentKey's array
|
11631
|
+
*/
|
11287
11632
|
Ember.computed.min = function (dependentKey) {
|
11288
11633
|
return Ember.reduceComputed.call(null, dependentKey, {
|
11289
11634
|
initialValue: Infinity,
|
@@ -11300,6 +11645,36 @@ Ember.computed.min = function (dependentKey) {
|
|
11300
11645
|
});
|
11301
11646
|
};
|
11302
11647
|
|
11648
|
+
/**
|
11649
|
+
Returns an array mapped via the callback
|
11650
|
+
|
11651
|
+
The callback method you provide should have the following signature:
|
11652
|
+
|
11653
|
+
```javascript
|
11654
|
+
function(item);
|
11655
|
+
```
|
11656
|
+
|
11657
|
+
- `item` is the current item in the iteration.
|
11658
|
+
|
11659
|
+
Example
|
11660
|
+
|
11661
|
+
```javascript
|
11662
|
+
App.Hampster = Ember.Object.extend({
|
11663
|
+
excitingChores: Ember.computed.map('chores', function(chore) {
|
11664
|
+
return chore.toUpperCase() + '!';
|
11665
|
+
})
|
11666
|
+
});
|
11667
|
+
|
11668
|
+
var hampster = App.Hampster.create({chores: ['cook', 'clean', 'write more unit tests']});
|
11669
|
+
hampster.get('excitingChores'); // ['COOK!', 'CLEAN!', 'WRITE MORE UNIT TESTS!']
|
11670
|
+
```
|
11671
|
+
|
11672
|
+
@method computed.map
|
11673
|
+
@for Ember
|
11674
|
+
@param {String} dependentKey
|
11675
|
+
@param {Function} callback
|
11676
|
+
@return {Ember.ComputedProperty} an array mapped via the callback
|
11677
|
+
*/
|
11303
11678
|
Ember.computed.map = function(dependentKey, callback) {
|
11304
11679
|
var options = {
|
11305
11680
|
addedItem: function(array, item, changeMeta, instanceMeta) {
|
@@ -11316,11 +11691,79 @@ Ember.computed.map = function(dependentKey, callback) {
|
|
11316
11691
|
return Ember.arrayComputed(dependentKey, options);
|
11317
11692
|
};
|
11318
11693
|
|
11319
|
-
|
11694
|
+
/**
|
11695
|
+
Returns an array mapped to the specified key.
|
11696
|
+
|
11697
|
+
Example
|
11698
|
+
|
11699
|
+
```javascript
|
11700
|
+
App.Person = Ember.Object.extend({
|
11701
|
+
childAges: Ember.computed.mapBy('children', 'age'),
|
11702
|
+
minChildAge: Ember.computed.min('childAges')
|
11703
|
+
});
|
11704
|
+
|
11705
|
+
var lordByron = App.Person.create({children: []});
|
11706
|
+
lordByron.get('childAge'); // []
|
11707
|
+
lordByron.get('children').pushObject({name: 'Augusta Ada Byron', age: 7});
|
11708
|
+
lordByron.get('childAge'); // [7]
|
11709
|
+
lordByron.get('children').pushObjects([{name: 'Allegra Byron', age: 5}, {name: 'Elizabeth Medora Leigh', age: 8}]);
|
11710
|
+
lordByron.get('childAge'); // [7, 5, 8]
|
11711
|
+
```
|
11712
|
+
|
11713
|
+
@method computed.mapBy
|
11714
|
+
@for Ember
|
11715
|
+
@param {String} dependentKey
|
11716
|
+
@param {String} propertyKey
|
11717
|
+
@return {Ember.ComputedProperty} an array mapped to the specified key
|
11718
|
+
*/
|
11719
|
+
Ember.computed.mapBy = function(dependentKey, propertyKey) {
|
11320
11720
|
var callback = function(item) { return get(item, propertyKey); };
|
11321
11721
|
return Ember.computed.map(dependentKey + '.@each.' + propertyKey, callback);
|
11322
11722
|
};
|
11323
11723
|
|
11724
|
+
/**
|
11725
|
+
@method computed.mapProperty
|
11726
|
+
@for Ember
|
11727
|
+
@deprecated Use `Ember.computed.mapBy` instead
|
11728
|
+
@param dependentKey
|
11729
|
+
@param propertyKey
|
11730
|
+
*/
|
11731
|
+
Ember.computed.mapProperty = Ember.computed.mapBy;
|
11732
|
+
|
11733
|
+
/**
|
11734
|
+
Filters the array by the callback.
|
11735
|
+
|
11736
|
+
The callback method you provide should have the following signature:
|
11737
|
+
|
11738
|
+
```javascript
|
11739
|
+
function(item);
|
11740
|
+
```
|
11741
|
+
|
11742
|
+
- `item` is the current item in the iteration.
|
11743
|
+
|
11744
|
+
Example
|
11745
|
+
|
11746
|
+
```javascript
|
11747
|
+
App.Hampster = Ember.Object.extend({
|
11748
|
+
remainingChores: Ember.computed.filter('chores', function(chore) {
|
11749
|
+
return !chore.done;
|
11750
|
+
})
|
11751
|
+
});
|
11752
|
+
|
11753
|
+
var hampster = App.Hampster.create({chores: [
|
11754
|
+
{name: 'cook', done: true},
|
11755
|
+
{name: 'clean', done: true},
|
11756
|
+
{name: 'write more unit tests', done: false}
|
11757
|
+
]});
|
11758
|
+
hampster.get('remainingChores'); // [{name: 'write more unit tests', done: false}]
|
11759
|
+
```
|
11760
|
+
|
11761
|
+
@method computed.filter
|
11762
|
+
@for Ember
|
11763
|
+
@param {String} dependentKey
|
11764
|
+
@param {Function} callback
|
11765
|
+
@return {Ember.ComputedProperty} the filtered array
|
11766
|
+
*/
|
11324
11767
|
Ember.computed.filter = function(dependentKey, callback) {
|
11325
11768
|
var options = {
|
11326
11769
|
initialize: function (array, changeMeta, instanceMeta) {
|
@@ -11334,6 +11777,8 @@ Ember.computed.filter = function(dependentKey, callback) {
|
|
11334
11777
|
if (match) {
|
11335
11778
|
array.insertAt(filterIndex, item);
|
11336
11779
|
}
|
11780
|
+
|
11781
|
+
return array;
|
11337
11782
|
},
|
11338
11783
|
|
11339
11784
|
removedItem: function(array, item, changeMeta, instanceMeta) {
|
@@ -11342,13 +11787,40 @@ Ember.computed.filter = function(dependentKey, callback) {
|
|
11342
11787
|
if (filterIndex > -1) {
|
11343
11788
|
array.removeAt(filterIndex);
|
11344
11789
|
}
|
11790
|
+
|
11791
|
+
return array;
|
11345
11792
|
}
|
11346
11793
|
};
|
11347
11794
|
|
11348
11795
|
return Ember.arrayComputed(dependentKey, options);
|
11349
11796
|
};
|
11350
11797
|
|
11351
|
-
|
11798
|
+
/**
|
11799
|
+
Filters the array by the property and value
|
11800
|
+
|
11801
|
+
Example
|
11802
|
+
|
11803
|
+
```javascript
|
11804
|
+
App.Hampster = Ember.Object.extend({
|
11805
|
+
remainingChores: Ember.computed.filterBy('chores', 'done', false)
|
11806
|
+
});
|
11807
|
+
|
11808
|
+
var hampster = App.Hampster.create({chores: [
|
11809
|
+
{name: 'cook', done: true},
|
11810
|
+
{name: 'clean', done: true},
|
11811
|
+
{name: 'write more unit tests', done: false}
|
11812
|
+
]});
|
11813
|
+
hampster.get('remainingChores'); // [{name: 'write more unit tests', done: false}]
|
11814
|
+
```
|
11815
|
+
|
11816
|
+
@method computed.filterBy
|
11817
|
+
@for Ember
|
11818
|
+
@param {String} dependentKey
|
11819
|
+
@param {String} propertyKey
|
11820
|
+
@param {String} value
|
11821
|
+
@return {Ember.ComputedProperty} the filtered array
|
11822
|
+
*/
|
11823
|
+
Ember.computed.filterBy = function(dependentKey, propertyKey, value) {
|
11352
11824
|
var callback;
|
11353
11825
|
|
11354
11826
|
if (arguments.length === 2) {
|
@@ -11364,6 +11836,42 @@ Ember.computed.filterProperty = function(dependentKey, propertyKey, value) {
|
|
11364
11836
|
return Ember.computed.filter(dependentKey + '.@each.' + propertyKey, callback);
|
11365
11837
|
};
|
11366
11838
|
|
11839
|
+
/**
|
11840
|
+
@method computed.filterProperty
|
11841
|
+
@for Ember
|
11842
|
+
@param dependentKey
|
11843
|
+
@param propertyKey
|
11844
|
+
@param value
|
11845
|
+
@deprecated Use `Ember.computed.filterBy` instead
|
11846
|
+
*/
|
11847
|
+
Ember.computed.filterProperty = Ember.computed.filterBy;
|
11848
|
+
|
11849
|
+
/**
|
11850
|
+
A computed property which returns a new array with all the unique
|
11851
|
+
elements from one or more dependent arrays.
|
11852
|
+
|
11853
|
+
Example
|
11854
|
+
|
11855
|
+
```javascript
|
11856
|
+
App.Hampster = Ember.Object.extend({
|
11857
|
+
uniqueFruits: Ember.computed.uniq('fruits')
|
11858
|
+
});
|
11859
|
+
|
11860
|
+
var hampster = App.Hampster.create({fruits: [
|
11861
|
+
'banana',
|
11862
|
+
'grape',
|
11863
|
+
'kale',
|
11864
|
+
'banana'
|
11865
|
+
]});
|
11866
|
+
hampster.get('uniqueFruits'); // ['banana', 'grape', 'kale']
|
11867
|
+
```
|
11868
|
+
|
11869
|
+
@method computed.uniq
|
11870
|
+
@for Ember
|
11871
|
+
@param {String} propertyKey*
|
11872
|
+
@return {Ember.ComputedProperty} computes a new array with all the
|
11873
|
+
unique elements from the dependent array
|
11874
|
+
*/
|
11367
11875
|
Ember.computed.uniq = function() {
|
11368
11876
|
var args = a_slice.call(arguments);
|
11369
11877
|
args.push({
|
@@ -11372,7 +11880,7 @@ Ember.computed.uniq = function() {
|
|
11372
11880
|
},
|
11373
11881
|
|
11374
11882
|
addedItem: function(array, item, changeMeta, instanceMeta) {
|
11375
|
-
var guid =
|
11883
|
+
var guid = guidFor(item);
|
11376
11884
|
|
11377
11885
|
if (!instanceMeta.itemCounts[guid]) {
|
11378
11886
|
instanceMeta.itemCounts[guid] = 1;
|
@@ -11383,7 +11891,7 @@ Ember.computed.uniq = function() {
|
|
11383
11891
|
return array;
|
11384
11892
|
},
|
11385
11893
|
removedItem: function(array, item, _, instanceMeta) {
|
11386
|
-
var guid =
|
11894
|
+
var guid = guidFor(item),
|
11387
11895
|
itemCounts = instanceMeta.itemCounts;
|
11388
11896
|
|
11389
11897
|
if (--itemCounts[guid] === 0) {
|
@@ -11394,12 +11902,44 @@ Ember.computed.uniq = function() {
|
|
11394
11902
|
});
|
11395
11903
|
return Ember.arrayComputed.apply(null, args);
|
11396
11904
|
};
|
11905
|
+
|
11906
|
+
/**
|
11907
|
+
Alias for [Ember.computed.uniq](/api/#method_computed_uniq).
|
11908
|
+
|
11909
|
+
@method computed.union
|
11910
|
+
@for Ember
|
11911
|
+
@param {String} propertyKey*
|
11912
|
+
@return {Ember.ComputedProperty} computes a new array with all the
|
11913
|
+
unique elements from the dependent array
|
11914
|
+
*/
|
11397
11915
|
Ember.computed.union = Ember.computed.uniq;
|
11398
11916
|
|
11917
|
+
/**
|
11918
|
+
A computed property which returns a new array with all the duplicated
|
11919
|
+
elements from two or more dependeny arrays.
|
11920
|
+
|
11921
|
+
Example
|
11922
|
+
|
11923
|
+
```javascript
|
11924
|
+
var obj = Ember.Object.createWithMixins({
|
11925
|
+
adaFriends: ['Charles Babbage', 'John Hobhouse', 'William King', 'Mary Somerville'],
|
11926
|
+
charlesFriends: ['William King', 'Mary Somerville', 'Ada Lovelace', 'George Peacock'],
|
11927
|
+
friendsInCommon: Ember.computed.intersect('adaFriends', 'charlesFriends')
|
11928
|
+
});
|
11929
|
+
|
11930
|
+
obj.get('friendsInCommon'); // ['William King', 'Mary Somerville']
|
11931
|
+
```
|
11932
|
+
|
11933
|
+
@method computed.intersect
|
11934
|
+
@for Ember
|
11935
|
+
@param {String} propertyKey*
|
11936
|
+
@return {Ember.ComputedProperty} computes a new array with all the
|
11937
|
+
duplicated elements from the dependent arrays
|
11938
|
+
*/
|
11399
11939
|
Ember.computed.intersect = function () {
|
11400
11940
|
var getDependentKeyGuids = function (changeMeta) {
|
11401
11941
|
return map(changeMeta.property._dependentKeys, function (dependentKey) {
|
11402
|
-
return
|
11942
|
+
return guidFor(dependentKey);
|
11403
11943
|
});
|
11404
11944
|
};
|
11405
11945
|
|
@@ -11410,9 +11950,9 @@ Ember.computed.intersect = function () {
|
|
11410
11950
|
},
|
11411
11951
|
|
11412
11952
|
addedItem: function(array, item, changeMeta, instanceMeta) {
|
11413
|
-
var itemGuid =
|
11953
|
+
var itemGuid = guidFor(item),
|
11414
11954
|
dependentGuids = getDependentKeyGuids(changeMeta),
|
11415
|
-
dependentGuid =
|
11955
|
+
dependentGuid = guidFor(changeMeta.arrayChanged),
|
11416
11956
|
numberOfDependentArrays = changeMeta.property._dependentKeys.length,
|
11417
11957
|
itemCounts = instanceMeta.itemCounts;
|
11418
11958
|
|
@@ -11421,15 +11961,15 @@ Ember.computed.intersect = function () {
|
|
11421
11961
|
|
11422
11962
|
if (++itemCounts[itemGuid][dependentGuid] === 1 &&
|
11423
11963
|
numberOfDependentArrays === Ember.keys(itemCounts[itemGuid]).length) {
|
11424
|
-
|
11964
|
+
|
11425
11965
|
array.addObject(item);
|
11426
11966
|
}
|
11427
11967
|
return array;
|
11428
11968
|
},
|
11429
11969
|
removedItem: function(array, item, changeMeta, instanceMeta) {
|
11430
|
-
var itemGuid =
|
11970
|
+
var itemGuid = guidFor(item),
|
11431
11971
|
dependentGuids = getDependentKeyGuids(changeMeta),
|
11432
|
-
dependentGuid =
|
11972
|
+
dependentGuid = guidFor(changeMeta.arrayChanged),
|
11433
11973
|
numberOfDependentArrays = changeMeta.property._dependentKeys.length,
|
11434
11974
|
numberOfArraysItemAppearsIn,
|
11435
11975
|
itemCounts = instanceMeta.itemCounts;
|
@@ -11450,6 +11990,34 @@ Ember.computed.intersect = function () {
|
|
11450
11990
|
return Ember.arrayComputed.apply(null, args);
|
11451
11991
|
};
|
11452
11992
|
|
11993
|
+
/**
|
11994
|
+
A computed property which returns a new array with all the
|
11995
|
+
properties from the first dependent array that are not in the second
|
11996
|
+
dependent array.
|
11997
|
+
|
11998
|
+
Example
|
11999
|
+
|
12000
|
+
```javascript
|
12001
|
+
App.Hampster = Ember.Object.extend({
|
12002
|
+
likes: ['banana', 'grape', 'kale'],
|
12003
|
+
wants: Ember.computed.setDiff('likes', 'fruits')
|
12004
|
+
});
|
12005
|
+
|
12006
|
+
var hampster = App.Hampster.create({fruits: [
|
12007
|
+
'grape',
|
12008
|
+
'kale',
|
12009
|
+
]});
|
12010
|
+
hampster.get('wants'); // ['banana']
|
12011
|
+
```
|
12012
|
+
|
12013
|
+
@method computed.setDiff
|
12014
|
+
@for Ember
|
12015
|
+
@param {String} setAProperty
|
12016
|
+
@param {String} setBProperty
|
12017
|
+
@return {Ember.ComputedProperty} computes a new array with all the
|
12018
|
+
items from the first dependent array that are not in the second
|
12019
|
+
dependent array
|
12020
|
+
*/
|
11453
12021
|
Ember.computed.setDiff = function (setAProperty, setBProperty) {
|
11454
12022
|
if (arguments.length !== 2) {
|
11455
12023
|
throw new Error("setDiff requires exactly two dependent arrays.");
|
@@ -11458,7 +12026,7 @@ Ember.computed.setDiff = function (setAProperty, setBProperty) {
|
|
11458
12026
|
addedItem: function (array, item, changeMeta, instanceMeta) {
|
11459
12027
|
var setA = get(this, setAProperty),
|
11460
12028
|
setB = get(this, setBProperty);
|
11461
|
-
|
12029
|
+
|
11462
12030
|
if (changeMeta.arrayChanged === setA) {
|
11463
12031
|
if (!setB.contains(item)) {
|
11464
12032
|
array.addObject(item);
|
@@ -11472,7 +12040,7 @@ Ember.computed.setDiff = function (setAProperty, setBProperty) {
|
|
11472
12040
|
removedItem: function (array, item, changeMeta, instanceMeta) {
|
11473
12041
|
var setA = get(this, setAProperty),
|
11474
12042
|
setB = get(this, setBProperty);
|
11475
|
-
|
12043
|
+
|
11476
12044
|
if (changeMeta.arrayChanged === setB) {
|
11477
12045
|
if (setA.contains(item)) {
|
11478
12046
|
array.addObject(item);
|
@@ -11486,7 +12054,7 @@ Ember.computed.setDiff = function (setAProperty, setBProperty) {
|
|
11486
12054
|
};
|
11487
12055
|
|
11488
12056
|
function binarySearch(array, item, low, high) {
|
11489
|
-
var mid, midItem, res;
|
12057
|
+
var mid, midItem, res, guidMid, guidItem;
|
11490
12058
|
|
11491
12059
|
if (arguments.length < 4) { high = get(array, 'length'); }
|
11492
12060
|
if (arguments.length < 3) { low = 0; }
|
@@ -11498,7 +12066,18 @@ function binarySearch(array, item, low, high) {
|
|
11498
12066
|
mid = low + Math.floor((high - low) / 2);
|
11499
12067
|
midItem = array.objectAt(mid);
|
11500
12068
|
|
12069
|
+
guidMid = _guidFor(midItem);
|
12070
|
+
guidItem = _guidFor(item);
|
12071
|
+
|
12072
|
+
if (guidMid === guidItem) {
|
12073
|
+
return mid;
|
12074
|
+
}
|
12075
|
+
|
11501
12076
|
res = this.order(midItem, item);
|
12077
|
+
if (res === 0) {
|
12078
|
+
res = guidMid < guidItem ? -1 : 1;
|
12079
|
+
}
|
12080
|
+
|
11502
12081
|
|
11503
12082
|
if (res < 0) {
|
11504
12083
|
return this.binarySearch(array, item, mid+1, high);
|
@@ -11507,8 +12086,66 @@ function binarySearch(array, item, low, high) {
|
|
11507
12086
|
}
|
11508
12087
|
|
11509
12088
|
return mid;
|
12089
|
+
|
12090
|
+
function _guidFor(item) {
|
12091
|
+
if (Ember.ObjectProxy.detectInstance(item)) {
|
12092
|
+
return guidFor(get(item, 'content'));
|
12093
|
+
}
|
12094
|
+
return guidFor(item);
|
12095
|
+
}
|
11510
12096
|
}
|
11511
12097
|
|
12098
|
+
/**
|
12099
|
+
A computed property which returns a new array with all the
|
12100
|
+
properties from the first dependent array sorted based on a property
|
12101
|
+
or sort function.
|
12102
|
+
|
12103
|
+
The callback method you provide should have the following signature:
|
12104
|
+
|
12105
|
+
```javascript
|
12106
|
+
function(itemA, itemB);
|
12107
|
+
```
|
12108
|
+
|
12109
|
+
- `itemA` the first item to compare.
|
12110
|
+
- `itemB` the second item to compare.
|
12111
|
+
|
12112
|
+
This function should return `-1` when `itemA` should come before
|
12113
|
+
`itemB`. It should return `1` when `itemA` should come after
|
12114
|
+
`itemB`. If the `itemA` and `itemB` are equal this function should return `0`.
|
12115
|
+
|
12116
|
+
Example
|
12117
|
+
|
12118
|
+
```javascript
|
12119
|
+
var ToDoList = Ember.Object.extend({
|
12120
|
+
todosSorting: ['name'],
|
12121
|
+
sortedTodos: Ember.computed.sort('todos', 'todosSorting'),
|
12122
|
+
priorityTodos: Ember.computed.sort('todos', function(a, b){
|
12123
|
+
if (a.priority > b.priority) {
|
12124
|
+
return 1;
|
12125
|
+
} else if (a.priority < b.priority) {
|
12126
|
+
return -1;
|
12127
|
+
}
|
12128
|
+
return 0;
|
12129
|
+
}),
|
12130
|
+
});
|
12131
|
+
var todoList = ToDoList.create({todos: [
|
12132
|
+
{name: 'Unit Test', priority: 2},
|
12133
|
+
{name: 'Documentation', priority: 3},
|
12134
|
+
{name: 'Release', priority: 1}
|
12135
|
+
]});
|
12136
|
+
|
12137
|
+
todoList.get('sortedTodos'); // [{name:'Documentation', priority:3}, {name:'Release', priority:1}, {name:'Unit Test', priority:2}]
|
12138
|
+
todoList.get('priroityTodos'); // [{name:'Release', priority:1}, {name:'Unit Test', priority:2}, {name:'Documentation', priority:3}]
|
12139
|
+
```
|
12140
|
+
|
12141
|
+
@method computed.sort
|
12142
|
+
@for Ember
|
12143
|
+
@param {String} dependentKey
|
12144
|
+
@param {String or Function} sortDefinition a dependent key to an
|
12145
|
+
array of sort properties or a function to use when sorting
|
12146
|
+
@return {Ember.ComputedProperty} computes a new sorted array based
|
12147
|
+
on the sort property array or callback function
|
12148
|
+
*/
|
11512
12149
|
Ember.computed.sort = function (itemsKey, sortDefinition) {
|
11513
12150
|
|
11514
12151
|
|
@@ -11595,9 +12232,8 @@ Ember.computed.sort = function (itemsKey, sortDefinition) {
|
|
11595
12232
|
removedItem: function (array, item, changeMeta, instanceMeta) {
|
11596
12233
|
var proxyProperties, index, searchItem;
|
11597
12234
|
|
11598
|
-
if (changeMeta.
|
11599
|
-
proxyProperties = { content: item };
|
11600
|
-
proxyProperties[changeMeta.keyChanged] = changeMeta.previousValue;
|
12235
|
+
if (changeMeta.previousValues) {
|
12236
|
+
proxyProperties = merge({ content: item }, changeMeta.previousValues);
|
11601
12237
|
|
11602
12238
|
searchItem = Ember.ObjectProxy.create(proxyProperties);
|
11603
12239
|
} else {
|
@@ -12021,9 +12657,9 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
12021
12657
|
Computed properties allow you to treat a function like a property:
|
12022
12658
|
|
12023
12659
|
```javascript
|
12024
|
-
MyApp.
|
12025
|
-
firstName:
|
12026
|
-
lastName:
|
12660
|
+
MyApp.President = Ember.Object.extend({
|
12661
|
+
firstName: '',
|
12662
|
+
lastName: '',
|
12027
12663
|
|
12028
12664
|
fullName: function() {
|
12029
12665
|
return this.get('firstName') + ' ' + this.get('lastName');
|
@@ -12032,7 +12668,12 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
12032
12668
|
}.property()
|
12033
12669
|
});
|
12034
12670
|
|
12035
|
-
MyApp.
|
12671
|
+
var president = MyApp.President.create({
|
12672
|
+
firstName: "Barack",
|
12673
|
+
lastName: "Obama"
|
12674
|
+
});
|
12675
|
+
|
12676
|
+
president.get('fullName'); // "Barack Obama"
|
12036
12677
|
```
|
12037
12678
|
|
12038
12679
|
Treating a function like a property is useful because they can work with
|
@@ -12044,9 +12685,9 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
12044
12685
|
about these dependencies like this:
|
12045
12686
|
|
12046
12687
|
```javascript
|
12047
|
-
MyApp.
|
12048
|
-
firstName:
|
12049
|
-
lastName:
|
12688
|
+
MyApp.President = Ember.Object.extend({
|
12689
|
+
firstName: '',
|
12690
|
+
lastName: '',
|
12050
12691
|
|
12051
12692
|
fullName: function() {
|
12052
12693
|
return this.get('firstName') + ' ' + this.get('lastName');
|
@@ -12083,15 +12724,18 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
12083
12724
|
For example:
|
12084
12725
|
|
12085
12726
|
```javascript
|
12086
|
-
Ember.Object.
|
12727
|
+
Ember.Object.extend({
|
12087
12728
|
valueObserver: function() {
|
12088
12729
|
// Executes whenever the "value" property changes
|
12089
12730
|
}.observes('value')
|
12090
12731
|
});
|
12091
12732
|
```
|
12092
12733
|
|
12093
|
-
|
12094
|
-
|
12734
|
+
In the future this method may become asynchronous. If you want to ensure
|
12735
|
+
synchronous behavior, use `observesImmediately`.
|
12736
|
+
|
12737
|
+
See `Ember.observer`.
|
12738
|
+
|
12095
12739
|
@method observes
|
12096
12740
|
@for Function
|
12097
12741
|
*/
|
@@ -12100,24 +12744,58 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
12100
12744
|
return this;
|
12101
12745
|
};
|
12102
12746
|
|
12747
|
+
/**
|
12748
|
+
The `observesImmediately` extension of Javascript's Function prototype is
|
12749
|
+
available when `Ember.EXTEND_PROTOTYPES` or
|
12750
|
+
`Ember.EXTEND_PROTOTYPES.Function` is true, which is the default.
|
12751
|
+
|
12752
|
+
You can observe property changes simply by adding the `observesImmediately`
|
12753
|
+
call to the end of your method declarations in classes that you write.
|
12754
|
+
For example:
|
12755
|
+
|
12756
|
+
```javascript
|
12757
|
+
Ember.Object.extend({
|
12758
|
+
valueObserver: function() {
|
12759
|
+
// Executes immediately after the "value" property changes
|
12760
|
+
}.observesImmediately('value')
|
12761
|
+
});
|
12762
|
+
```
|
12763
|
+
|
12764
|
+
In the future, `observes` may become asynchronous. In this event,
|
12765
|
+
`observesImmediately` will maintain the synchronous behavior.
|
12766
|
+
|
12767
|
+
See `Ember.immediateObserver`.
|
12768
|
+
|
12769
|
+
@method observesImmediately
|
12770
|
+
@for Function
|
12771
|
+
*/
|
12772
|
+
Function.prototype.observesImmediately = function() {
|
12773
|
+
for (var i=0, l=arguments.length; i<l; i++) {
|
12774
|
+
var arg = arguments[i];
|
12775
|
+
|
12776
|
+
}
|
12777
|
+
|
12778
|
+
return this.observes.apply(this, arguments);
|
12779
|
+
};
|
12780
|
+
|
12103
12781
|
/**
|
12104
12782
|
The `observesBefore` extension of Javascript's Function prototype is
|
12105
12783
|
available when `Ember.EXTEND_PROTOTYPES` or
|
12106
12784
|
`Ember.EXTEND_PROTOTYPES.Function` is true, which is the default.
|
12107
12785
|
|
12108
|
-
You can get notified when a property
|
12786
|
+
You can get notified when a property change is about to happen by
|
12109
12787
|
by adding the `observesBefore` call to the end of your method
|
12110
12788
|
declarations in classes that you write. For example:
|
12111
12789
|
|
12112
12790
|
```javascript
|
12113
|
-
Ember.Object.
|
12791
|
+
Ember.Object.extend({
|
12114
12792
|
valueObserver: function() {
|
12115
12793
|
// Executes whenever the "value" property is about to change
|
12116
12794
|
}.observesBefore('value')
|
12117
12795
|
});
|
12118
12796
|
```
|
12119
12797
|
|
12120
|
-
See `Ember.
|
12798
|
+
See `Ember.beforeObserver`.
|
12121
12799
|
|
12122
12800
|
@method observesBefore
|
12123
12801
|
@for Function
|
@@ -13560,11 +14238,6 @@ Ember.Evented = Ember.Mixin.create({
|
|
13560
14238
|
Ember.sendEvent(this, name, args);
|
13561
14239
|
},
|
13562
14240
|
|
13563
|
-
fire: function(name) {
|
13564
|
-
|
13565
|
-
this.trigger.apply(this, arguments);
|
13566
|
-
},
|
13567
|
-
|
13568
14241
|
/**
|
13569
14242
|
Cancels subscription for given name, target, and method.
|
13570
14243
|
|
@@ -13743,6 +14416,121 @@ Ember.ActionHandler = Ember.Mixin.create({
|
|
13743
14416
|
|
13744
14417
|
|
13745
14418
|
|
14419
|
+
(function() {
|
14420
|
+
var set = Ember.set, get = Ember.get,
|
14421
|
+
resolve = Ember.RSVP.resolve,
|
14422
|
+
rethrow = Ember.RSVP.rethrow,
|
14423
|
+
not = Ember.computed.not,
|
14424
|
+
or = Ember.computed.or;
|
14425
|
+
|
14426
|
+
/**
|
14427
|
+
@module ember
|
14428
|
+
@submodule ember-runtime
|
14429
|
+
*/
|
14430
|
+
|
14431
|
+
function installPromise(proxy, promise) {
|
14432
|
+
promise.then(function(value) {
|
14433
|
+
set(proxy, 'isFulfilled', true);
|
14434
|
+
set(proxy, 'content', value);
|
14435
|
+
|
14436
|
+
return value;
|
14437
|
+
}, function(reason) {
|
14438
|
+
set(proxy, 'isRejected', true);
|
14439
|
+
set(proxy, 'reason', reason);
|
14440
|
+
}).fail(rethrow);
|
14441
|
+
}
|
14442
|
+
|
14443
|
+
/**
|
14444
|
+
A low level mixin making ObjectProxy, ObjectController or ArrayController's promise aware.
|
14445
|
+
|
14446
|
+
```javascript
|
14447
|
+
var ObjectPromiseController = Ember.ObjectController.extend(Ember.PromiseProxyMixin);
|
14448
|
+
|
14449
|
+
var controller = ObjectPromiseController.create({
|
14450
|
+
promise: $.getJSON('/some/remote/data.json')
|
14451
|
+
});
|
14452
|
+
|
14453
|
+
controller.then(function(json){
|
14454
|
+
// the json
|
14455
|
+
}, function(reason) {
|
14456
|
+
// the reason why you have no json
|
14457
|
+
});
|
14458
|
+
```
|
14459
|
+
|
14460
|
+
the controller has bindable attributes which
|
14461
|
+
track the promises life cycle
|
14462
|
+
|
14463
|
+
```javascript
|
14464
|
+
controller.get('isPending') //=> true
|
14465
|
+
controller.get('isSettled') //=> false
|
14466
|
+
controller.get('isRejected') //=> false
|
14467
|
+
controller.get('isFulfilled') //=> false
|
14468
|
+
```
|
14469
|
+
|
14470
|
+
When the the $.getJSON completes, and the promise is fulfilled
|
14471
|
+
with json, the life cycle attributes will update accordingly.
|
14472
|
+
|
14473
|
+
```javascript
|
14474
|
+
controller.get('isPending') //=> false
|
14475
|
+
controller.get('isSettled') //=> true
|
14476
|
+
controller.get('isRejected') //=> false
|
14477
|
+
controller.get('isFulfilled') //=> true
|
14478
|
+
```
|
14479
|
+
|
14480
|
+
As the controller is an ObjectController, and the json now its content,
|
14481
|
+
all the json properties will be available directly from the controller.
|
14482
|
+
|
14483
|
+
```javascript
|
14484
|
+
// Assuming the following json:
|
14485
|
+
{
|
14486
|
+
firstName: 'Stefan',
|
14487
|
+
lastName: 'Penner'
|
14488
|
+
}
|
14489
|
+
|
14490
|
+
// both properties will accessible on the controller
|
14491
|
+
controller.get('firstName') //=> 'Stefan'
|
14492
|
+
controller.get('lastName') //=> 'Penner'
|
14493
|
+
```
|
14494
|
+
|
14495
|
+
If the controller is backing a template, the attributes are
|
14496
|
+
bindable from within that template
|
14497
|
+
```handlebars
|
14498
|
+
{{#if isPending}}
|
14499
|
+
loading...
|
14500
|
+
{{else}}
|
14501
|
+
firstName: {{firstName}}
|
14502
|
+
lastName: {{lastName}}
|
14503
|
+
{{/if}}
|
14504
|
+
```
|
14505
|
+
@class Ember.PromiseProxyMixin
|
14506
|
+
*/
|
14507
|
+
Ember.PromiseProxyMixin = Ember.Mixin.create({
|
14508
|
+
reason: null,
|
14509
|
+
isPending: not('isSettled').readOnly(),
|
14510
|
+
isSettled: or('isRejected', 'isFulfilled').readOnly(),
|
14511
|
+
isRejected: false,
|
14512
|
+
isFulfilled: false,
|
14513
|
+
|
14514
|
+
promise: Ember.computed(function(key, promise) {
|
14515
|
+
if (arguments.length === 2) {
|
14516
|
+
promise = resolve(promise);
|
14517
|
+
installPromise(this, promise);
|
14518
|
+
return promise;
|
14519
|
+
} else {
|
14520
|
+
throw new Error("PromiseProxy's promise must be set");
|
14521
|
+
}
|
14522
|
+
}),
|
14523
|
+
|
14524
|
+
then: function(fulfill, reject) {
|
14525
|
+
return get(this, 'promise').then(fulfill, reject);
|
14526
|
+
}
|
14527
|
+
});
|
14528
|
+
|
14529
|
+
|
14530
|
+
})();
|
14531
|
+
|
14532
|
+
|
14533
|
+
|
13746
14534
|
(function() {
|
13747
14535
|
|
13748
14536
|
})();
|
@@ -15438,7 +16226,9 @@ var get = Ember.get,
|
|
15438
16226
|
removeBeforeObserver = Ember.removeBeforeObserver,
|
15439
16227
|
removeObserver = Ember.removeObserver,
|
15440
16228
|
propertyWillChange = Ember.propertyWillChange,
|
15441
|
-
propertyDidChange = Ember.propertyDidChange
|
16229
|
+
propertyDidChange = Ember.propertyDidChange,
|
16230
|
+
meta = Ember.meta,
|
16231
|
+
defineProperty = Ember.defineProperty;
|
15442
16232
|
|
15443
16233
|
function contentPropertyWillChange(content, contentKey) {
|
15444
16234
|
var key = contentKey.slice(8); // remove "content."
|
@@ -15556,6 +16346,14 @@ Ember.ObjectProxy = Ember.Object.extend(/** @scope Ember.ObjectProxy.prototype *
|
|
15556
16346
|
},
|
15557
16347
|
|
15558
16348
|
setUnknownProperty: function (key, value) {
|
16349
|
+
var m = meta(this);
|
16350
|
+
if (m.proto === this) {
|
16351
|
+
// if marked as prototype then just defineProperty
|
16352
|
+
// rather than delegate
|
16353
|
+
defineProperty(this, key, null, value);
|
16354
|
+
return value;
|
16355
|
+
}
|
16356
|
+
|
15559
16357
|
var content = get(this, 'content');
|
15560
16358
|
|
15561
16359
|
return set(content, key, value);
|
@@ -15563,25 +16361,6 @@ Ember.ObjectProxy = Ember.Object.extend(/** @scope Ember.ObjectProxy.prototype *
|
|
15563
16361
|
|
15564
16362
|
});
|
15565
16363
|
|
15566
|
-
Ember.ObjectProxy.reopenClass({
|
15567
|
-
create: function () {
|
15568
|
-
var mixin, prototype, i, l, properties, keyName;
|
15569
|
-
if (arguments.length) {
|
15570
|
-
prototype = this.proto();
|
15571
|
-
for (i = 0, l = arguments.length; i < l; i++) {
|
15572
|
-
properties = arguments[i];
|
15573
|
-
for (keyName in properties) {
|
15574
|
-
if (!properties.hasOwnProperty(keyName) || keyName in prototype) { continue; }
|
15575
|
-
if (!mixin) mixin = {};
|
15576
|
-
mixin[keyName] = null;
|
15577
|
-
}
|
15578
|
-
}
|
15579
|
-
if (mixin) this._initMixins([mixin]);
|
15580
|
-
}
|
15581
|
-
return this._super.apply(this, arguments);
|
15582
|
-
}
|
15583
|
-
});
|
15584
|
-
|
15585
16364
|
})();
|
15586
16365
|
|
15587
16366
|
|
@@ -15594,7 +16373,8 @@ Ember.ObjectProxy.reopenClass({
|
|
15594
16373
|
|
15595
16374
|
|
15596
16375
|
var set = Ember.set, get = Ember.get, guidFor = Ember.guidFor;
|
15597
|
-
var forEach = Ember.EnumerableUtils.forEach
|
16376
|
+
var forEach = Ember.EnumerableUtils.forEach,
|
16377
|
+
indexOf = Ember.ArrayPolyfills.indexOf;
|
15598
16378
|
|
15599
16379
|
var EachArray = Ember.Object.extend(Ember.Array, {
|
15600
16380
|
|
@@ -15652,7 +16432,7 @@ function removeObserverForContentKey(content, keyName, proxy, idx, loc) {
|
|
15652
16432
|
|
15653
16433
|
guid = guidFor(item);
|
15654
16434
|
indicies = objects[guid];
|
15655
|
-
indicies[
|
16435
|
+
indicies[indexOf.call(indicies, loc)] = null;
|
15656
16436
|
}
|
15657
16437
|
}
|
15658
16438
|
}
|
@@ -17056,11 +17836,15 @@ Ember.ArrayController = Ember.ArrayProxy.extend(Ember.ControllerMixin,
|
|
17056
17836
|
},
|
17057
17837
|
|
17058
17838
|
init: function() {
|
17059
|
-
if (!this.get('content')) { Ember.defineProperty(this, 'content', undefined, Ember.A()); }
|
17060
17839
|
this._super();
|
17840
|
+
|
17061
17841
|
this.set('_subControllers', Ember.A());
|
17062
17842
|
},
|
17063
17843
|
|
17844
|
+
content: Ember.computed(function () {
|
17845
|
+
return Ember.A();
|
17846
|
+
}),
|
17847
|
+
|
17064
17848
|
controllerAt: function(idx, object, controllerClass) {
|
17065
17849
|
var container = get(this, 'container'),
|
17066
17850
|
subControllers = get(this, '_subControllers'),
|
@@ -17146,1489 +17930,6 @@ Ember Runtime
|
|
17146
17930
|
|
17147
17931
|
})();
|
17148
17932
|
|
17149
|
-
(function() {
|
17150
|
-
var get = Ember.get, set = Ember.set;
|
17151
|
-
|
17152
|
-
/**
|
17153
|
-
@module ember
|
17154
|
-
@submodule ember-states
|
17155
|
-
*/
|
17156
|
-
|
17157
|
-
/**
|
17158
|
-
The State class allows you to define individual states within a finite state machine
|
17159
|
-
inside your Ember application.
|
17160
|
-
|
17161
|
-
### How States Work
|
17162
|
-
|
17163
|
-
When you setup a finite state machine this means you are setting up a mechanism to precisely
|
17164
|
-
manage the change within a system. You can control the various states or modes that your
|
17165
|
-
application can be in at any given time. Additionally, you can manage what specific states
|
17166
|
-
are allowed to transition to other states.
|
17167
|
-
|
17168
|
-
The state machine is in only one state at a time. This state is known as the current state.
|
17169
|
-
It is possible to change from one state to another by a triggering event or condition.
|
17170
|
-
This is called a transition.
|
17171
|
-
|
17172
|
-
Finite state machines are important because they allow the application developer to be
|
17173
|
-
deterministic about the the sequence of events that can happen within a system. Some states
|
17174
|
-
cannot be entered when the application is a given state.
|
17175
|
-
|
17176
|
-
For example:
|
17177
|
-
|
17178
|
-
A door that is in the `locked` state cannot be `opened` (you must transition to the `unlocked`
|
17179
|
-
state first).
|
17180
|
-
|
17181
|
-
A door that is in the `open` state cannot be `locked` (you must transition to the `closed`
|
17182
|
-
state first).
|
17183
|
-
|
17184
|
-
|
17185
|
-
Each state instance has the following characteristics:
|
17186
|
-
|
17187
|
-
- Zero or more parent states
|
17188
|
-
- A start state
|
17189
|
-
- A name
|
17190
|
-
- A path (a computed value that prefixes parent states and the complete hierarchy to itself )
|
17191
|
-
|
17192
|
-
A state is known as a "leafState" when it is the last item on the path and has no children
|
17193
|
-
beneath it.
|
17194
|
-
|
17195
|
-
The isLeaf property returns a boolean.
|
17196
|
-
|
17197
|
-
Each state can emit the following transition events
|
17198
|
-
|
17199
|
-
- setup
|
17200
|
-
- enter
|
17201
|
-
- exit
|
17202
|
-
|
17203
|
-
A state object is ususally created in the context of a state manager.
|
17204
|
-
|
17205
|
-
```javascript
|
17206
|
-
doorStateManager = Ember.StateManager.create({
|
17207
|
-
locked: Ember.State.create(),
|
17208
|
-
closed: Ember.State.create(),
|
17209
|
-
unlocked: Ember.State.create(),
|
17210
|
-
open: Ember.State.create()
|
17211
|
-
});
|
17212
|
-
```
|
17213
|
-
|
17214
|
-
@class State
|
17215
|
-
@namespace Ember
|
17216
|
-
@extends Ember.Object
|
17217
|
-
@uses Ember.Evented
|
17218
|
-
*/
|
17219
|
-
Ember.State = Ember.Object.extend(Ember.Evented,
|
17220
|
-
/** @scope Ember.State.prototype */{
|
17221
|
-
/**
|
17222
|
-
A reference to the parent state.
|
17223
|
-
|
17224
|
-
@property parentState
|
17225
|
-
@type Ember.State
|
17226
|
-
*/
|
17227
|
-
parentState: null,
|
17228
|
-
start: null,
|
17229
|
-
|
17230
|
-
/**
|
17231
|
-
The name of this state.
|
17232
|
-
|
17233
|
-
@property name
|
17234
|
-
@type String
|
17235
|
-
*/
|
17236
|
-
name: null,
|
17237
|
-
|
17238
|
-
/**
|
17239
|
-
The full path to this state.
|
17240
|
-
|
17241
|
-
@property path
|
17242
|
-
@type String
|
17243
|
-
*/
|
17244
|
-
path: Ember.computed(function() {
|
17245
|
-
var parentPath = get(this, 'parentState.path'),
|
17246
|
-
path = get(this, 'name');
|
17247
|
-
|
17248
|
-
if (parentPath) {
|
17249
|
-
path = parentPath + '.' + path;
|
17250
|
-
}
|
17251
|
-
|
17252
|
-
return path;
|
17253
|
-
}),
|
17254
|
-
|
17255
|
-
/**
|
17256
|
-
@private
|
17257
|
-
|
17258
|
-
Override the default event firing from `Ember.Evented` to
|
17259
|
-
also call methods with the given name.
|
17260
|
-
|
17261
|
-
@method trigger
|
17262
|
-
@param name
|
17263
|
-
*/
|
17264
|
-
trigger: function(name) {
|
17265
|
-
if (this[name]) {
|
17266
|
-
this[name].apply(this, [].slice.call(arguments, 1));
|
17267
|
-
}
|
17268
|
-
this._super.apply(this, arguments);
|
17269
|
-
},
|
17270
|
-
|
17271
|
-
/**
|
17272
|
-
Initialize Ember.State object
|
17273
|
-
Sets childStates to Ember.NativeArray
|
17274
|
-
Sets eventTransitions to empty object unless already defined.
|
17275
|
-
Loops over properties of this state and ensures that any property that
|
17276
|
-
is an instance of Ember.State is moved to `states` hash.
|
17277
|
-
|
17278
|
-
|
17279
|
-
@method init
|
17280
|
-
*/
|
17281
|
-
init: function() {
|
17282
|
-
var states = get(this, 'states');
|
17283
|
-
set(this, 'childStates', Ember.A());
|
17284
|
-
set(this, 'eventTransitions', get(this, 'eventTransitions') || {});
|
17285
|
-
|
17286
|
-
var name, value, transitionTarget;
|
17287
|
-
|
17288
|
-
// As a convenience, loop over the properties
|
17289
|
-
// of this state and look for any that are other
|
17290
|
-
// Ember.State instances or classes, and move them
|
17291
|
-
// to the `states` hash. This avoids having to
|
17292
|
-
// create an explicit separate hash.
|
17293
|
-
|
17294
|
-
if (!states) {
|
17295
|
-
states = {};
|
17296
|
-
|
17297
|
-
for (name in this) {
|
17298
|
-
if (name === "constructor") { continue; }
|
17299
|
-
|
17300
|
-
if (value = this[name]) {
|
17301
|
-
if (transitionTarget = value.transitionTarget) {
|
17302
|
-
this.eventTransitions[name] = transitionTarget;
|
17303
|
-
}
|
17304
|
-
|
17305
|
-
this.setupChild(states, name, value);
|
17306
|
-
}
|
17307
|
-
}
|
17308
|
-
|
17309
|
-
set(this, 'states', states);
|
17310
|
-
} else {
|
17311
|
-
for (name in states) {
|
17312
|
-
this.setupChild(states, name, states[name]);
|
17313
|
-
}
|
17314
|
-
}
|
17315
|
-
|
17316
|
-
// pathsCaches is a nested hash of the form:
|
17317
|
-
// pathsCaches[stateManagerTypeGuid][path] == transitions_hash
|
17318
|
-
set(this, 'pathsCaches', {});
|
17319
|
-
},
|
17320
|
-
|
17321
|
-
/**
|
17322
|
-
Sets a cached instance of the state. Ember.guidFor is used
|
17323
|
-
to find the guid of the associated state manager. If a cache can be found
|
17324
|
-
the state path is added to that cache, otherwise an empty JavaScript object
|
17325
|
-
is created. And the state path is appended to that instead.
|
17326
|
-
|
17327
|
-
@method setPathsCache
|
17328
|
-
@param stateManager
|
17329
|
-
@param path
|
17330
|
-
@param transitions
|
17331
|
-
*/
|
17332
|
-
setPathsCache: function(stateManager, path, transitions) {
|
17333
|
-
var stateManagerTypeGuid = Ember.guidFor(stateManager.constructor),
|
17334
|
-
pathsCaches = get(this, 'pathsCaches'),
|
17335
|
-
pathsCacheForManager = pathsCaches[stateManagerTypeGuid] || {};
|
17336
|
-
|
17337
|
-
pathsCacheForManager[path] = transitions;
|
17338
|
-
pathsCaches[stateManagerTypeGuid] = pathsCacheForManager;
|
17339
|
-
},
|
17340
|
-
|
17341
|
-
/**
|
17342
|
-
Returns a cached path for the state instance. Each state manager
|
17343
|
-
has a GUID and this is used to look up a cached path if it has already
|
17344
|
-
been created. If a cached path is not found an empty JavaScript object
|
17345
|
-
is returned instead.
|
17346
|
-
|
17347
|
-
@method getPathsCache
|
17348
|
-
@param stateManager
|
17349
|
-
@param path
|
17350
|
-
*/
|
17351
|
-
getPathsCache: function(stateManager, path) {
|
17352
|
-
var stateManagerTypeGuid = Ember.guidFor(stateManager.constructor),
|
17353
|
-
pathsCaches = get(this, 'pathsCaches'),
|
17354
|
-
pathsCacheForManager = pathsCaches[stateManagerTypeGuid] || {};
|
17355
|
-
|
17356
|
-
return pathsCacheForManager[path];
|
17357
|
-
},
|
17358
|
-
|
17359
|
-
/**
|
17360
|
-
@private
|
17361
|
-
|
17362
|
-
Create the child instance and ensure that it is an instance of Ember.State
|
17363
|
-
|
17364
|
-
@method setupChild
|
17365
|
-
@param states
|
17366
|
-
@param name
|
17367
|
-
@param value
|
17368
|
-
*/
|
17369
|
-
setupChild: function(states, name, value) {
|
17370
|
-
if (!value) { return false; }
|
17371
|
-
var instance;
|
17372
|
-
|
17373
|
-
if (value instanceof Ember.State) {
|
17374
|
-
set(value, 'name', name);
|
17375
|
-
instance = value;
|
17376
|
-
instance.container = this.container;
|
17377
|
-
} else if (Ember.State.detect(value)) {
|
17378
|
-
instance = value.create({
|
17379
|
-
name: name,
|
17380
|
-
container: this.container
|
17381
|
-
});
|
17382
|
-
}
|
17383
|
-
|
17384
|
-
if (instance instanceof Ember.State) {
|
17385
|
-
set(instance, 'parentState', this);
|
17386
|
-
get(this, 'childStates').pushObject(instance);
|
17387
|
-
states[name] = instance;
|
17388
|
-
return instance;
|
17389
|
-
}
|
17390
|
-
},
|
17391
|
-
|
17392
|
-
/**
|
17393
|
-
@private
|
17394
|
-
|
17395
|
-
@method lookupEventTransition
|
17396
|
-
@param name
|
17397
|
-
*/
|
17398
|
-
lookupEventTransition: function(name) {
|
17399
|
-
var path, state = this;
|
17400
|
-
|
17401
|
-
while(state && !path) {
|
17402
|
-
path = state.eventTransitions[name];
|
17403
|
-
state = state.get('parentState');
|
17404
|
-
}
|
17405
|
-
|
17406
|
-
return path;
|
17407
|
-
},
|
17408
|
-
|
17409
|
-
/**
|
17410
|
-
A Boolean value indicating whether the state is a leaf state
|
17411
|
-
in the state hierarchy. This is `false` if the state has child
|
17412
|
-
states; otherwise it is true.
|
17413
|
-
|
17414
|
-
@property isLeaf
|
17415
|
-
@type Boolean
|
17416
|
-
*/
|
17417
|
-
isLeaf: Ember.computed(function() {
|
17418
|
-
return !get(this, 'childStates').length;
|
17419
|
-
}),
|
17420
|
-
|
17421
|
-
/**
|
17422
|
-
A boolean value indicating whether the state takes a context.
|
17423
|
-
By default we assume all states take contexts.
|
17424
|
-
|
17425
|
-
@property hasContext
|
17426
|
-
@default true
|
17427
|
-
*/
|
17428
|
-
hasContext: true,
|
17429
|
-
|
17430
|
-
/**
|
17431
|
-
This is the default transition event.
|
17432
|
-
|
17433
|
-
@event setup
|
17434
|
-
@param {Ember.StateManager} manager
|
17435
|
-
@param context
|
17436
|
-
@see Ember.StateManager#transitionEvent
|
17437
|
-
*/
|
17438
|
-
setup: Ember.K,
|
17439
|
-
|
17440
|
-
/**
|
17441
|
-
This event fires when the state is entered.
|
17442
|
-
|
17443
|
-
@event enter
|
17444
|
-
@param {Ember.StateManager} manager
|
17445
|
-
*/
|
17446
|
-
enter: Ember.K,
|
17447
|
-
|
17448
|
-
/**
|
17449
|
-
This event fires when the state is exited.
|
17450
|
-
|
17451
|
-
@event exit
|
17452
|
-
@param {Ember.StateManager} manager
|
17453
|
-
*/
|
17454
|
-
exit: Ember.K
|
17455
|
-
});
|
17456
|
-
|
17457
|
-
Ember.State.reopenClass({
|
17458
|
-
|
17459
|
-
/**
|
17460
|
-
Creates an action function for transitioning to the named state while
|
17461
|
-
preserving context.
|
17462
|
-
|
17463
|
-
The following example StateManagers are equivalent:
|
17464
|
-
|
17465
|
-
```javascript
|
17466
|
-
aManager = Ember.StateManager.create({
|
17467
|
-
stateOne: Ember.State.create({
|
17468
|
-
changeToStateTwo: Ember.State.transitionTo('stateTwo')
|
17469
|
-
}),
|
17470
|
-
stateTwo: Ember.State.create({})
|
17471
|
-
})
|
17472
|
-
|
17473
|
-
bManager = Ember.StateManager.create({
|
17474
|
-
stateOne: Ember.State.create({
|
17475
|
-
changeToStateTwo: function(manager, context) {
|
17476
|
-
manager.transitionTo('stateTwo', context)
|
17477
|
-
}
|
17478
|
-
}),
|
17479
|
-
stateTwo: Ember.State.create({})
|
17480
|
-
})
|
17481
|
-
```
|
17482
|
-
|
17483
|
-
@method transitionTo
|
17484
|
-
@static
|
17485
|
-
@param {String} target
|
17486
|
-
*/
|
17487
|
-
|
17488
|
-
transitionTo: function(target) {
|
17489
|
-
|
17490
|
-
var transitionFunction = function(stateManager, contextOrEvent) {
|
17491
|
-
var contexts = [],
|
17492
|
-
Event = Ember.$ && Ember.$.Event;
|
17493
|
-
|
17494
|
-
if (contextOrEvent && (Event && contextOrEvent instanceof Event)) {
|
17495
|
-
if (contextOrEvent.hasOwnProperty('contexts')) {
|
17496
|
-
contexts = contextOrEvent.contexts.slice();
|
17497
|
-
}
|
17498
|
-
}
|
17499
|
-
else {
|
17500
|
-
contexts = [].slice.call(arguments, 1);
|
17501
|
-
}
|
17502
|
-
|
17503
|
-
contexts.unshift(target);
|
17504
|
-
stateManager.transitionTo.apply(stateManager, contexts);
|
17505
|
-
};
|
17506
|
-
|
17507
|
-
transitionFunction.transitionTarget = target;
|
17508
|
-
|
17509
|
-
return transitionFunction;
|
17510
|
-
}
|
17511
|
-
|
17512
|
-
});
|
17513
|
-
|
17514
|
-
})();
|
17515
|
-
|
17516
|
-
|
17517
|
-
|
17518
|
-
(function() {
|
17519
|
-
/**
|
17520
|
-
@module ember
|
17521
|
-
@submodule ember-states
|
17522
|
-
*/
|
17523
|
-
|
17524
|
-
var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt;
|
17525
|
-
var arrayForEach = Ember.ArrayPolyfills.forEach;
|
17526
|
-
/**
|
17527
|
-
A Transition takes the enter, exit and resolve states and normalizes
|
17528
|
-
them:
|
17529
|
-
|
17530
|
-
* takes any passed in contexts into consideration
|
17531
|
-
* adds in `initialState`s
|
17532
|
-
|
17533
|
-
@class Transition
|
17534
|
-
@private
|
17535
|
-
*/
|
17536
|
-
var Transition = function(raw) {
|
17537
|
-
this.enterStates = raw.enterStates.slice();
|
17538
|
-
this.exitStates = raw.exitStates.slice();
|
17539
|
-
this.resolveState = raw.resolveState;
|
17540
|
-
|
17541
|
-
this.finalState = raw.enterStates[raw.enterStates.length - 1] || raw.resolveState;
|
17542
|
-
};
|
17543
|
-
|
17544
|
-
Transition.prototype = {
|
17545
|
-
/**
|
17546
|
-
Normalize the passed in enter, exit and resolve states.
|
17547
|
-
|
17548
|
-
This process also adds `finalState` and `contexts` to the Transition object.
|
17549
|
-
|
17550
|
-
@method normalize
|
17551
|
-
@param {Ember.StateManager} manager the state manager running the transition
|
17552
|
-
@param {Array} contexts a list of contexts passed into `transitionTo`
|
17553
|
-
*/
|
17554
|
-
normalize: function(manager, contexts) {
|
17555
|
-
this.matchContextsToStates(contexts);
|
17556
|
-
this.addInitialStates();
|
17557
|
-
this.removeUnchangedContexts(manager);
|
17558
|
-
return this;
|
17559
|
-
},
|
17560
|
-
|
17561
|
-
/**
|
17562
|
-
Match each of the contexts passed to `transitionTo` to a state.
|
17563
|
-
This process may also require adding additional enter and exit
|
17564
|
-
states if there are more contexts than enter states.
|
17565
|
-
|
17566
|
-
@method matchContextsToStates
|
17567
|
-
@param {Array} contexts a list of contexts passed into `transitionTo`
|
17568
|
-
*/
|
17569
|
-
matchContextsToStates: function(contexts) {
|
17570
|
-
var stateIdx = this.enterStates.length - 1,
|
17571
|
-
matchedContexts = [],
|
17572
|
-
state,
|
17573
|
-
context;
|
17574
|
-
|
17575
|
-
// Next, we will match the passed in contexts to the states they
|
17576
|
-
// represent.
|
17577
|
-
//
|
17578
|
-
// First, assign a context to each enter state in reverse order. If
|
17579
|
-
// any contexts are left, add a parent state to the list of states
|
17580
|
-
// to enter and exit, and assign a context to the parent state.
|
17581
|
-
//
|
17582
|
-
// If there are still contexts left when the state manager is
|
17583
|
-
// reached, raise an exception.
|
17584
|
-
//
|
17585
|
-
// This allows the following:
|
17586
|
-
//
|
17587
|
-
// |- root
|
17588
|
-
// | |- post
|
17589
|
-
// | | |- comments
|
17590
|
-
// | |- about (* current state)
|
17591
|
-
//
|
17592
|
-
// For `transitionTo('post.comments', post, post.get('comments')`,
|
17593
|
-
// the first context (`post`) will be assigned to `root.post`, and
|
17594
|
-
// the second context (`post.get('comments')`) will be assigned
|
17595
|
-
// to `root.post.comments`.
|
17596
|
-
//
|
17597
|
-
// For the following:
|
17598
|
-
//
|
17599
|
-
// |- root
|
17600
|
-
// | |- post
|
17601
|
-
// | | |- index (* current state)
|
17602
|
-
// | | |- comments
|
17603
|
-
//
|
17604
|
-
// For `transitionTo('post.comments', otherPost, otherPost.get('comments')`,
|
17605
|
-
// the `<root.post>` state will be added to the list of enter and exit
|
17606
|
-
// states because its context has changed.
|
17607
|
-
|
17608
|
-
while (contexts.length > 0) {
|
17609
|
-
if (stateIdx >= 0) {
|
17610
|
-
state = this.enterStates[stateIdx--];
|
17611
|
-
} else {
|
17612
|
-
if (this.enterStates.length) {
|
17613
|
-
state = get(this.enterStates[0], 'parentState');
|
17614
|
-
if (!state) { throw "Cannot match all contexts to states"; }
|
17615
|
-
} else {
|
17616
|
-
// If re-entering the current state with a context, the resolve
|
17617
|
-
// state will be the current state.
|
17618
|
-
state = this.resolveState;
|
17619
|
-
}
|
17620
|
-
|
17621
|
-
this.enterStates.unshift(state);
|
17622
|
-
this.exitStates.unshift(state);
|
17623
|
-
}
|
17624
|
-
|
17625
|
-
// in routers, only states with dynamic segments have a context
|
17626
|
-
if (get(state, 'hasContext')) {
|
17627
|
-
context = contexts.pop();
|
17628
|
-
} else {
|
17629
|
-
context = null;
|
17630
|
-
}
|
17631
|
-
|
17632
|
-
matchedContexts.unshift(context);
|
17633
|
-
}
|
17634
|
-
|
17635
|
-
this.contexts = matchedContexts;
|
17636
|
-
},
|
17637
|
-
|
17638
|
-
/**
|
17639
|
-
Add any `initialState`s to the list of enter states.
|
17640
|
-
|
17641
|
-
@method addInitialStates
|
17642
|
-
*/
|
17643
|
-
addInitialStates: function() {
|
17644
|
-
var finalState = this.finalState, initialState;
|
17645
|
-
|
17646
|
-
while(true) {
|
17647
|
-
initialState = get(finalState, 'initialState') || 'start';
|
17648
|
-
finalState = get(finalState, 'states.' + initialState);
|
17649
|
-
|
17650
|
-
if (!finalState) { break; }
|
17651
|
-
|
17652
|
-
this.finalState = finalState;
|
17653
|
-
this.enterStates.push(finalState);
|
17654
|
-
this.contexts.push(undefined);
|
17655
|
-
}
|
17656
|
-
},
|
17657
|
-
|
17658
|
-
/**
|
17659
|
-
Remove any states that were added because the number of contexts
|
17660
|
-
exceeded the number of explicit enter states, but the context has
|
17661
|
-
not changed since the last time the state was entered.
|
17662
|
-
|
17663
|
-
@method removeUnchangedContexts
|
17664
|
-
@param {Ember.StateManager} manager passed in to look up the last
|
17665
|
-
context for a state
|
17666
|
-
*/
|
17667
|
-
removeUnchangedContexts: function(manager) {
|
17668
|
-
// Start from the beginning of the enter states. If the state was added
|
17669
|
-
// to the list during the context matching phase, make sure the context
|
17670
|
-
// has actually changed since the last time the state was entered.
|
17671
|
-
while (this.enterStates.length > 0) {
|
17672
|
-
if (this.enterStates[0] !== this.exitStates[0]) { break; }
|
17673
|
-
|
17674
|
-
if (this.enterStates.length === this.contexts.length) {
|
17675
|
-
if (manager.getStateMeta(this.enterStates[0], 'context') !== this.contexts[0]) { break; }
|
17676
|
-
this.contexts.shift();
|
17677
|
-
}
|
17678
|
-
|
17679
|
-
this.resolveState = this.enterStates.shift();
|
17680
|
-
this.exitStates.shift();
|
17681
|
-
}
|
17682
|
-
}
|
17683
|
-
};
|
17684
|
-
|
17685
|
-
|
17686
|
-
/**
|
17687
|
-
Sends the event to the currentState, if the event is not handled this method
|
17688
|
-
will proceed to call the parentState recursively until it encounters an
|
17689
|
-
event handler or reaches the top or root of the state path hierarchy.
|
17690
|
-
|
17691
|
-
@method sendRecursively
|
17692
|
-
@param event
|
17693
|
-
@param currentState
|
17694
|
-
@param isUnhandledPass
|
17695
|
-
*/
|
17696
|
-
var sendRecursively = function(event, currentState, isUnhandledPass) {
|
17697
|
-
var log = this.enableLogging,
|
17698
|
-
eventName = isUnhandledPass ? 'unhandledEvent' : event,
|
17699
|
-
action = currentState[eventName],
|
17700
|
-
contexts, sendRecursiveArguments, actionArguments;
|
17701
|
-
|
17702
|
-
contexts = [].slice.call(arguments, 3);
|
17703
|
-
|
17704
|
-
// Test to see if the action is a method that
|
17705
|
-
// can be invoked. Don't blindly check just for
|
17706
|
-
// existence, because it is possible the state
|
17707
|
-
// manager has a child state of the given name,
|
17708
|
-
// and we should still raise an exception in that
|
17709
|
-
// case.
|
17710
|
-
if (typeof action === 'function') {
|
17711
|
-
if (log) {
|
17712
|
-
if (isUnhandledPass) {
|
17713
|
-
Ember.Logger.log(fmt("STATEMANAGER: Unhandled event '%@' being sent to state %@.", [event, get(currentState, 'path')]));
|
17714
|
-
} else {
|
17715
|
-
Ember.Logger.log(fmt("STATEMANAGER: Sending event '%@' to state %@.", [event, get(currentState, 'path')]));
|
17716
|
-
}
|
17717
|
-
}
|
17718
|
-
|
17719
|
-
actionArguments = contexts;
|
17720
|
-
if (isUnhandledPass) {
|
17721
|
-
actionArguments.unshift(event);
|
17722
|
-
}
|
17723
|
-
actionArguments.unshift(this);
|
17724
|
-
|
17725
|
-
return action.apply(currentState, actionArguments);
|
17726
|
-
} else {
|
17727
|
-
var parentState = get(currentState, 'parentState');
|
17728
|
-
if (parentState) {
|
17729
|
-
|
17730
|
-
sendRecursiveArguments = contexts;
|
17731
|
-
sendRecursiveArguments.unshift(event, parentState, isUnhandledPass);
|
17732
|
-
|
17733
|
-
return sendRecursively.apply(this, sendRecursiveArguments);
|
17734
|
-
} else if (!isUnhandledPass) {
|
17735
|
-
return sendEvent.call(this, event, contexts, true);
|
17736
|
-
}
|
17737
|
-
}
|
17738
|
-
};
|
17739
|
-
|
17740
|
-
/**
|
17741
|
-
Send an event to the currentState.
|
17742
|
-
|
17743
|
-
@method sendEvent
|
17744
|
-
@param eventName
|
17745
|
-
@param sendRecursiveArguments
|
17746
|
-
@param isUnhandledPass
|
17747
|
-
*/
|
17748
|
-
var sendEvent = function(eventName, sendRecursiveArguments, isUnhandledPass) {
|
17749
|
-
sendRecursiveArguments.unshift(eventName, get(this, 'currentState'), isUnhandledPass);
|
17750
|
-
return sendRecursively.apply(this, sendRecursiveArguments);
|
17751
|
-
};
|
17752
|
-
|
17753
|
-
/**
|
17754
|
-
StateManager is part of Ember's implementation of a finite state machine. A
|
17755
|
-
StateManager instance manages a number of properties that are instances of
|
17756
|
-
`Ember.State`,
|
17757
|
-
tracks the current active state, and triggers callbacks when states have changed.
|
17758
|
-
|
17759
|
-
## Defining States
|
17760
|
-
|
17761
|
-
The states of StateManager can be declared in one of two ways. First, you can
|
17762
|
-
define a `states` property that contains all the states:
|
17763
|
-
|
17764
|
-
```javascript
|
17765
|
-
var managerA = Ember.StateManager.create({
|
17766
|
-
states: {
|
17767
|
-
stateOne: Ember.State.create(),
|
17768
|
-
stateTwo: Ember.State.create()
|
17769
|
-
}
|
17770
|
-
});
|
17771
|
-
|
17772
|
-
managerA.get('states');
|
17773
|
-
// {
|
17774
|
-
// stateOne: Ember.State.create(),
|
17775
|
-
// stateTwo: Ember.State.create()
|
17776
|
-
// }
|
17777
|
-
```
|
17778
|
-
|
17779
|
-
You can also add instances of `Ember.State` (or an `Ember.State` subclass)
|
17780
|
-
directly as properties of a StateManager. These states will be collected into
|
17781
|
-
the `states` property for you.
|
17782
|
-
|
17783
|
-
```javascript
|
17784
|
-
var managerA = Ember.StateManager.create({
|
17785
|
-
stateOne: Ember.State.create(),
|
17786
|
-
stateTwo: Ember.State.create()
|
17787
|
-
});
|
17788
|
-
|
17789
|
-
managerA.get('states');
|
17790
|
-
// {
|
17791
|
-
// stateOne: Ember.State.create(),
|
17792
|
-
// stateTwo: Ember.State.create()
|
17793
|
-
// }
|
17794
|
-
```
|
17795
|
-
|
17796
|
-
## The Initial State
|
17797
|
-
|
17798
|
-
When created, a StateManager instance will immediately enter into the state
|
17799
|
-
defined as its `start` property or the state referenced by name in its
|
17800
|
-
`initialState` property:
|
17801
|
-
|
17802
|
-
```javascript
|
17803
|
-
var managerA = Ember.StateManager.create({
|
17804
|
-
start: Ember.State.create({})
|
17805
|
-
});
|
17806
|
-
|
17807
|
-
managerA.get('currentState.name'); // 'start'
|
17808
|
-
|
17809
|
-
var managerB = Ember.StateManager.create({
|
17810
|
-
initialState: 'beginHere',
|
17811
|
-
beginHere: Ember.State.create({})
|
17812
|
-
});
|
17813
|
-
|
17814
|
-
managerB.get('currentState.name'); // 'beginHere'
|
17815
|
-
```
|
17816
|
-
|
17817
|
-
Because it is a property you may also provide a computed function if you wish
|
17818
|
-
to derive an `initialState` programmatically:
|
17819
|
-
|
17820
|
-
```javascript
|
17821
|
-
var managerC = Ember.StateManager.create({
|
17822
|
-
initialState: function() {
|
17823
|
-
if (someLogic) {
|
17824
|
-
return 'active';
|
17825
|
-
} else {
|
17826
|
-
return 'passive';
|
17827
|
-
}
|
17828
|
-
}.property(),
|
17829
|
-
active: Ember.State.create({}),
|
17830
|
-
passive: Ember.State.create({})
|
17831
|
-
});
|
17832
|
-
```
|
17833
|
-
|
17834
|
-
## Moving Between States
|
17835
|
-
|
17836
|
-
A StateManager can have any number of `Ember.State` objects as properties
|
17837
|
-
and can have a single one of these states as its current state.
|
17838
|
-
|
17839
|
-
Calling `transitionTo` transitions between states:
|
17840
|
-
|
17841
|
-
```javascript
|
17842
|
-
var robotManager = Ember.StateManager.create({
|
17843
|
-
initialState: 'poweredDown',
|
17844
|
-
poweredDown: Ember.State.create({}),
|
17845
|
-
poweredUp: Ember.State.create({})
|
17846
|
-
});
|
17847
|
-
|
17848
|
-
robotManager.get('currentState.name'); // 'poweredDown'
|
17849
|
-
robotManager.transitionTo('poweredUp');
|
17850
|
-
robotManager.get('currentState.name'); // 'poweredUp'
|
17851
|
-
```
|
17852
|
-
|
17853
|
-
Before transitioning into a new state the existing `currentState` will have
|
17854
|
-
its `exit` method called with the StateManager instance as its first argument
|
17855
|
-
and an object representing the transition as its second argument.
|
17856
|
-
|
17857
|
-
After transitioning into a new state the new `currentState` will have its
|
17858
|
-
`enter` method called with the StateManager instance as its first argument
|
17859
|
-
and an object representing the transition as its second argument.
|
17860
|
-
|
17861
|
-
```javascript
|
17862
|
-
var robotManager = Ember.StateManager.create({
|
17863
|
-
initialState: 'poweredDown',
|
17864
|
-
poweredDown: Ember.State.create({
|
17865
|
-
exit: function(stateManager) {
|
17866
|
-
console.log("exiting the poweredDown state")
|
17867
|
-
}
|
17868
|
-
}),
|
17869
|
-
poweredUp: Ember.State.create({
|
17870
|
-
enter: function(stateManager) {
|
17871
|
-
console.log("entering the poweredUp state. Destroy all humans.")
|
17872
|
-
}
|
17873
|
-
})
|
17874
|
-
});
|
17875
|
-
|
17876
|
-
robotManager.get('currentState.name'); // 'poweredDown'
|
17877
|
-
robotManager.transitionTo('poweredUp');
|
17878
|
-
|
17879
|
-
// will log
|
17880
|
-
// 'exiting the poweredDown state'
|
17881
|
-
// 'entering the poweredUp state. Destroy all humans.'
|
17882
|
-
```
|
17883
|
-
|
17884
|
-
Once a StateManager is already in a state, subsequent attempts to enter that
|
17885
|
-
state will not trigger enter or exit method calls. Attempts to transition
|
17886
|
-
into a state that the manager does not have will result in no changes in the
|
17887
|
-
StateManager's current state:
|
17888
|
-
|
17889
|
-
```javascript
|
17890
|
-
var robotManager = Ember.StateManager.create({
|
17891
|
-
initialState: 'poweredDown',
|
17892
|
-
poweredDown: Ember.State.create({
|
17893
|
-
exit: function(stateManager) {
|
17894
|
-
console.log("exiting the poweredDown state")
|
17895
|
-
}
|
17896
|
-
}),
|
17897
|
-
poweredUp: Ember.State.create({
|
17898
|
-
enter: function(stateManager) {
|
17899
|
-
console.log("entering the poweredUp state. Destroy all humans.")
|
17900
|
-
}
|
17901
|
-
})
|
17902
|
-
});
|
17903
|
-
|
17904
|
-
robotManager.get('currentState.name'); // 'poweredDown'
|
17905
|
-
robotManager.transitionTo('poweredUp');
|
17906
|
-
// will log
|
17907
|
-
// 'exiting the poweredDown state'
|
17908
|
-
// 'entering the poweredUp state. Destroy all humans.'
|
17909
|
-
robotManager.transitionTo('poweredUp'); // no logging, no state change
|
17910
|
-
|
17911
|
-
robotManager.transitionTo('someUnknownState'); // silently fails
|
17912
|
-
robotManager.get('currentState.name'); // 'poweredUp'
|
17913
|
-
```
|
17914
|
-
|
17915
|
-
Each state property may itself contain properties that are instances of
|
17916
|
-
`Ember.State`. The StateManager can transition to specific sub-states in a
|
17917
|
-
series of transitionTo method calls or via a single transitionTo with the
|
17918
|
-
full path to the specific state. The StateManager will also keep track of the
|
17919
|
-
full path to its currentState
|
17920
|
-
|
17921
|
-
```javascript
|
17922
|
-
var robotManager = Ember.StateManager.create({
|
17923
|
-
initialState: 'poweredDown',
|
17924
|
-
poweredDown: Ember.State.create({
|
17925
|
-
charging: Ember.State.create(),
|
17926
|
-
charged: Ember.State.create()
|
17927
|
-
}),
|
17928
|
-
poweredUp: Ember.State.create({
|
17929
|
-
mobile: Ember.State.create(),
|
17930
|
-
stationary: Ember.State.create()
|
17931
|
-
})
|
17932
|
-
});
|
17933
|
-
|
17934
|
-
robotManager.get('currentState.name'); // 'poweredDown'
|
17935
|
-
|
17936
|
-
robotManager.transitionTo('poweredUp');
|
17937
|
-
robotManager.get('currentState.name'); // 'poweredUp'
|
17938
|
-
|
17939
|
-
robotManager.transitionTo('mobile');
|
17940
|
-
robotManager.get('currentState.name'); // 'mobile'
|
17941
|
-
|
17942
|
-
// transition via a state path
|
17943
|
-
robotManager.transitionTo('poweredDown.charging');
|
17944
|
-
robotManager.get('currentState.name'); // 'charging'
|
17945
|
-
|
17946
|
-
robotManager.get('currentState.path'); // 'poweredDown.charging'
|
17947
|
-
```
|
17948
|
-
|
17949
|
-
Enter transition methods will be called for each state and nested child state
|
17950
|
-
in their hierarchical order. Exit methods will be called for each state and
|
17951
|
-
its nested states in reverse hierarchical order.
|
17952
|
-
|
17953
|
-
Exit transitions for a parent state are not called when entering into one of
|
17954
|
-
its child states, only when transitioning to a new section of possible states
|
17955
|
-
in the hierarchy.
|
17956
|
-
|
17957
|
-
```javascript
|
17958
|
-
var robotManager = Ember.StateManager.create({
|
17959
|
-
initialState: 'poweredDown',
|
17960
|
-
poweredDown: Ember.State.create({
|
17961
|
-
enter: function() {},
|
17962
|
-
exit: function() {
|
17963
|
-
console.log("exited poweredDown state")
|
17964
|
-
},
|
17965
|
-
charging: Ember.State.create({
|
17966
|
-
enter: function() {},
|
17967
|
-
exit: function() {}
|
17968
|
-
}),
|
17969
|
-
charged: Ember.State.create({
|
17970
|
-
enter: function() {
|
17971
|
-
console.log("entered charged state")
|
17972
|
-
},
|
17973
|
-
exit: function() {
|
17974
|
-
console.log("exited charged state")
|
17975
|
-
}
|
17976
|
-
})
|
17977
|
-
}),
|
17978
|
-
poweredUp: Ember.State.create({
|
17979
|
-
enter: function() {
|
17980
|
-
console.log("entered poweredUp state")
|
17981
|
-
},
|
17982
|
-
exit: function() {},
|
17983
|
-
mobile: Ember.State.create({
|
17984
|
-
enter: function() {
|
17985
|
-
console.log("entered mobile state")
|
17986
|
-
},
|
17987
|
-
exit: function() {}
|
17988
|
-
}),
|
17989
|
-
stationary: Ember.State.create({
|
17990
|
-
enter: function() {},
|
17991
|
-
exit: function() {}
|
17992
|
-
})
|
17993
|
-
})
|
17994
|
-
});
|
17995
|
-
|
17996
|
-
|
17997
|
-
robotManager.get('currentState.path'); // 'poweredDown'
|
17998
|
-
robotManager.transitionTo('charged');
|
17999
|
-
// logs 'entered charged state'
|
18000
|
-
// but does *not* log 'exited poweredDown state'
|
18001
|
-
robotManager.get('currentState.name'); // 'charged
|
18002
|
-
|
18003
|
-
robotManager.transitionTo('poweredUp.mobile');
|
18004
|
-
// logs
|
18005
|
-
// 'exited charged state'
|
18006
|
-
// 'exited poweredDown state'
|
18007
|
-
// 'entered poweredUp state'
|
18008
|
-
// 'entered mobile state'
|
18009
|
-
```
|
18010
|
-
|
18011
|
-
During development you can set a StateManager's `enableLogging` property to
|
18012
|
-
`true` to receive console messages of state transitions.
|
18013
|
-
|
18014
|
-
```javascript
|
18015
|
-
var robotManager = Ember.StateManager.create({
|
18016
|
-
enableLogging: true
|
18017
|
-
});
|
18018
|
-
```
|
18019
|
-
|
18020
|
-
## Managing currentState with Actions
|
18021
|
-
|
18022
|
-
To control which transitions are possible for a given state, and
|
18023
|
-
appropriately handle external events, the StateManager can receive and
|
18024
|
-
route action messages to its states via the `send` method. Calling to
|
18025
|
-
`send` with an action name will begin searching for a method with the same
|
18026
|
-
name starting at the current state and moving up through the parent states
|
18027
|
-
in a state hierarchy until an appropriate method is found or the StateManager
|
18028
|
-
instance itself is reached.
|
18029
|
-
|
18030
|
-
If an appropriately named method is found it will be called with the state
|
18031
|
-
manager as the first argument and an optional `context` object as the second
|
18032
|
-
argument.
|
18033
|
-
|
18034
|
-
```javascript
|
18035
|
-
var managerA = Ember.StateManager.create({
|
18036
|
-
initialState: 'stateOne.substateOne.subsubstateOne',
|
18037
|
-
stateOne: Ember.State.create({
|
18038
|
-
substateOne: Ember.State.create({
|
18039
|
-
anAction: function(manager, context) {
|
18040
|
-
console.log("an action was called")
|
18041
|
-
},
|
18042
|
-
subsubstateOne: Ember.State.create({})
|
18043
|
-
})
|
18044
|
-
})
|
18045
|
-
});
|
18046
|
-
|
18047
|
-
managerA.get('currentState.name'); // 'subsubstateOne'
|
18048
|
-
managerA.send('anAction');
|
18049
|
-
// 'stateOne.substateOne.subsubstateOne' has no anAction method
|
18050
|
-
// so the 'anAction' method of 'stateOne.substateOne' is called
|
18051
|
-
// and logs "an action was called"
|
18052
|
-
// with managerA as the first argument
|
18053
|
-
// and no second argument
|
18054
|
-
|
18055
|
-
var someObject = {};
|
18056
|
-
managerA.send('anAction', someObject);
|
18057
|
-
// the 'anAction' method of 'stateOne.substateOne' is called again
|
18058
|
-
// with managerA as the first argument and
|
18059
|
-
// someObject as the second argument.
|
18060
|
-
```
|
18061
|
-
|
18062
|
-
If the StateManager attempts to send an action but does not find an appropriately named
|
18063
|
-
method in the current state or while moving upwards through the state hierarchy, it will
|
18064
|
-
repeat the process looking for a `unhandledEvent` method. If an `unhandledEvent` method is
|
18065
|
-
found, it will be called with the original event name as the second argument. If an
|
18066
|
-
`unhandledEvent` method is not found, the StateManager will throw a new Ember.Error.
|
18067
|
-
|
18068
|
-
```javascript
|
18069
|
-
var managerB = Ember.StateManager.create({
|
18070
|
-
initialState: 'stateOne.substateOne.subsubstateOne',
|
18071
|
-
stateOne: Ember.State.create({
|
18072
|
-
substateOne: Ember.State.create({
|
18073
|
-
subsubstateOne: Ember.State.create({}),
|
18074
|
-
unhandledEvent: function(manager, eventName, context) {
|
18075
|
-
console.log("got an unhandledEvent with name " + eventName);
|
18076
|
-
}
|
18077
|
-
})
|
18078
|
-
})
|
18079
|
-
});
|
18080
|
-
|
18081
|
-
managerB.get('currentState.name'); // 'subsubstateOne'
|
18082
|
-
managerB.send('anAction');
|
18083
|
-
// neither `stateOne.substateOne.subsubstateOne` nor any of it's
|
18084
|
-
// parent states have a handler for `anAction`. `subsubstateOne`
|
18085
|
-
// also does not have a `unhandledEvent` method, but its parent
|
18086
|
-
// state, `substateOne`, does, and it gets fired. It will log
|
18087
|
-
// "got an unhandledEvent with name anAction"
|
18088
|
-
```
|
18089
|
-
|
18090
|
-
Action detection only moves upwards through the state hierarchy from the current state.
|
18091
|
-
It does not search in other portions of the hierarchy.
|
18092
|
-
|
18093
|
-
```javascript
|
18094
|
-
var managerC = Ember.StateManager.create({
|
18095
|
-
initialState: 'stateOne.substateOne.subsubstateOne',
|
18096
|
-
stateOne: Ember.State.create({
|
18097
|
-
substateOne: Ember.State.create({
|
18098
|
-
subsubstateOne: Ember.State.create({})
|
18099
|
-
})
|
18100
|
-
}),
|
18101
|
-
stateTwo: Ember.State.create({
|
18102
|
-
anAction: function(manager, context) {
|
18103
|
-
// will not be called below because it is
|
18104
|
-
// not a parent of the current state
|
18105
|
-
}
|
18106
|
-
})
|
18107
|
-
});
|
18108
|
-
|
18109
|
-
managerC.get('currentState.name'); // 'subsubstateOne'
|
18110
|
-
managerC.send('anAction');
|
18111
|
-
// Error: <Ember.StateManager:ember132> could not
|
18112
|
-
// respond to event anAction in state stateOne.substateOne.subsubstateOne.
|
18113
|
-
```
|
18114
|
-
|
18115
|
-
Inside of an action method the given state should delegate `transitionTo` calls on its
|
18116
|
-
StateManager.
|
18117
|
-
|
18118
|
-
```javascript
|
18119
|
-
var robotManager = Ember.StateManager.create({
|
18120
|
-
initialState: 'poweredDown.charging',
|
18121
|
-
poweredDown: Ember.State.create({
|
18122
|
-
charging: Ember.State.create({
|
18123
|
-
chargeComplete: function(manager, context) {
|
18124
|
-
manager.transitionTo('charged')
|
18125
|
-
}
|
18126
|
-
}),
|
18127
|
-
charged: Ember.State.create({
|
18128
|
-
boot: function(manager, context) {
|
18129
|
-
manager.transitionTo('poweredUp')
|
18130
|
-
}
|
18131
|
-
})
|
18132
|
-
}),
|
18133
|
-
poweredUp: Ember.State.create({
|
18134
|
-
beginExtermination: function(manager, context) {
|
18135
|
-
manager.transitionTo('rampaging')
|
18136
|
-
},
|
18137
|
-
rampaging: Ember.State.create()
|
18138
|
-
})
|
18139
|
-
});
|
18140
|
-
|
18141
|
-
robotManager.get('currentState.name'); // 'charging'
|
18142
|
-
robotManager.send('boot'); // throws error, no boot action
|
18143
|
-
// in current hierarchy
|
18144
|
-
robotManager.get('currentState.name'); // remains 'charging'
|
18145
|
-
|
18146
|
-
robotManager.send('beginExtermination'); // throws error, no beginExtermination
|
18147
|
-
// action in current hierarchy
|
18148
|
-
robotManager.get('currentState.name'); // remains 'charging'
|
18149
|
-
|
18150
|
-
robotManager.send('chargeComplete');
|
18151
|
-
robotManager.get('currentState.name'); // 'charged'
|
18152
|
-
|
18153
|
-
robotManager.send('boot');
|
18154
|
-
robotManager.get('currentState.name'); // 'poweredUp'
|
18155
|
-
|
18156
|
-
robotManager.send('beginExtermination', allHumans);
|
18157
|
-
robotManager.get('currentState.name'); // 'rampaging'
|
18158
|
-
```
|
18159
|
-
|
18160
|
-
Transition actions can also be created using the `transitionTo` method of the `Ember.State` class. The
|
18161
|
-
following example StateManagers are equivalent:
|
18162
|
-
|
18163
|
-
```javascript
|
18164
|
-
var aManager = Ember.StateManager.create({
|
18165
|
-
stateOne: Ember.State.create({
|
18166
|
-
changeToStateTwo: Ember.State.transitionTo('stateTwo')
|
18167
|
-
}),
|
18168
|
-
stateTwo: Ember.State.create({})
|
18169
|
-
});
|
18170
|
-
|
18171
|
-
var bManager = Ember.StateManager.create({
|
18172
|
-
stateOne: Ember.State.create({
|
18173
|
-
changeToStateTwo: function(manager, context) {
|
18174
|
-
manager.transitionTo('stateTwo', context)
|
18175
|
-
}
|
18176
|
-
}),
|
18177
|
-
stateTwo: Ember.State.create({})
|
18178
|
-
});
|
18179
|
-
```
|
18180
|
-
|
18181
|
-
@class StateManager
|
18182
|
-
@namespace Ember
|
18183
|
-
@extends Ember.State
|
18184
|
-
**/
|
18185
|
-
Ember.StateManager = Ember.State.extend({
|
18186
|
-
/**
|
18187
|
-
@private
|
18188
|
-
|
18189
|
-
When creating a new statemanager, look for a default state to transition
|
18190
|
-
into. This state can either be named `start`, or can be specified using the
|
18191
|
-
`initialState` property.
|
18192
|
-
|
18193
|
-
@method init
|
18194
|
-
*/
|
18195
|
-
init: function() {
|
18196
|
-
this._super();
|
18197
|
-
|
18198
|
-
set(this, 'stateMeta', Ember.Map.create());
|
18199
|
-
|
18200
|
-
var initialState = get(this, 'initialState');
|
18201
|
-
|
18202
|
-
if (!initialState && get(this, 'states.start')) {
|
18203
|
-
initialState = 'start';
|
18204
|
-
}
|
18205
|
-
|
18206
|
-
if (initialState) {
|
18207
|
-
this.transitionTo(initialState);
|
18208
|
-
|
18209
|
-
}
|
18210
|
-
},
|
18211
|
-
|
18212
|
-
/**
|
18213
|
-
Return the stateMeta, a hash of possible states. If no items exist in the stateMeta hash
|
18214
|
-
this method sets the stateMeta to an empty JavaScript object and returns that instead.
|
18215
|
-
|
18216
|
-
@method stateMetaFor
|
18217
|
-
@param state
|
18218
|
-
*/
|
18219
|
-
stateMetaFor: function(state) {
|
18220
|
-
var meta = get(this, 'stateMeta'),
|
18221
|
-
stateMeta = meta.get(state);
|
18222
|
-
|
18223
|
-
if (!stateMeta) {
|
18224
|
-
stateMeta = {};
|
18225
|
-
meta.set(state, stateMeta);
|
18226
|
-
}
|
18227
|
-
|
18228
|
-
return stateMeta;
|
18229
|
-
},
|
18230
|
-
|
18231
|
-
/**
|
18232
|
-
Sets a key value pair on the stateMeta hash.
|
18233
|
-
|
18234
|
-
@method setStateMeta
|
18235
|
-
@param state
|
18236
|
-
@param key
|
18237
|
-
@param value
|
18238
|
-
*/
|
18239
|
-
setStateMeta: function(state, key, value) {
|
18240
|
-
return set(this.stateMetaFor(state), key, value);
|
18241
|
-
},
|
18242
|
-
|
18243
|
-
/**
|
18244
|
-
Returns the value of an item in the stateMeta hash at the given key.
|
18245
|
-
|
18246
|
-
@method getStateMeta
|
18247
|
-
@param state
|
18248
|
-
@param key
|
18249
|
-
*/
|
18250
|
-
getStateMeta: function(state, key) {
|
18251
|
-
return get(this.stateMetaFor(state), key);
|
18252
|
-
},
|
18253
|
-
|
18254
|
-
/**
|
18255
|
-
The current state from among the manager's possible states. This property should
|
18256
|
-
not be set directly. Use `transitionTo` to move between states by name.
|
18257
|
-
|
18258
|
-
@property currentState
|
18259
|
-
@type Ember.State
|
18260
|
-
*/
|
18261
|
-
currentState: null,
|
18262
|
-
|
18263
|
-
/**
|
18264
|
-
The path of the current state. Returns a string representation of the current
|
18265
|
-
state.
|
18266
|
-
|
18267
|
-
@property currentPath
|
18268
|
-
@type String
|
18269
|
-
*/
|
18270
|
-
currentPath: Ember.computed.alias('currentState.path'),
|
18271
|
-
|
18272
|
-
/**
|
18273
|
-
The name of transitionEvent that this stateManager will dispatch
|
18274
|
-
|
18275
|
-
@property transitionEvent
|
18276
|
-
@type String
|
18277
|
-
@default 'setup'
|
18278
|
-
*/
|
18279
|
-
transitionEvent: 'setup',
|
18280
|
-
|
18281
|
-
/**
|
18282
|
-
If set to true, `errorOnUnhandledEvents` will cause an exception to be
|
18283
|
-
raised if you attempt to send an event to a state manager that is not
|
18284
|
-
handled by the current state or any of its parent states.
|
18285
|
-
|
18286
|
-
@property errorOnUnhandledEvents
|
18287
|
-
@type Boolean
|
18288
|
-
@default true
|
18289
|
-
*/
|
18290
|
-
errorOnUnhandledEvent: true,
|
18291
|
-
|
18292
|
-
/**
|
18293
|
-
An alias to sendEvent method
|
18294
|
-
|
18295
|
-
@method send
|
18296
|
-
@param event
|
18297
|
-
*/
|
18298
|
-
send: function(event) {
|
18299
|
-
var contexts = [].slice.call(arguments, 1);
|
18300
|
-
|
18301
|
-
return sendEvent.call(this, event, contexts, false);
|
18302
|
-
},
|
18303
|
-
|
18304
|
-
/**
|
18305
|
-
If errorOnUnhandledEvent is true this event with throw an Ember.Error
|
18306
|
-
indicating that the no state could respond to the event passed through the
|
18307
|
-
state machine.
|
18308
|
-
|
18309
|
-
@method unhandledEvent
|
18310
|
-
@param manager
|
18311
|
-
@param event
|
18312
|
-
*/
|
18313
|
-
unhandledEvent: function(manager, event) {
|
18314
|
-
if (get(this, 'errorOnUnhandledEvent')) {
|
18315
|
-
throw new Ember.Error(this.toString() + " could not respond to event " + event + " in state " + get(this, 'currentState.path') + ".");
|
18316
|
-
}
|
18317
|
-
},
|
18318
|
-
|
18319
|
-
/**
|
18320
|
-
Finds a state by its state path.
|
18321
|
-
|
18322
|
-
Example:
|
18323
|
-
|
18324
|
-
```javascript
|
18325
|
-
var manager = Ember.StateManager.create({
|
18326
|
-
root: Ember.State.create({
|
18327
|
-
dashboard: Ember.State.create()
|
18328
|
-
})
|
18329
|
-
});
|
18330
|
-
|
18331
|
-
manager.getStateByPath(manager, "root.dashboard");
|
18332
|
-
// returns the dashboard state
|
18333
|
-
|
18334
|
-
var aState = manager.getStateByPath(manager, "root.dashboard");
|
18335
|
-
|
18336
|
-
var path = aState.get('path');
|
18337
|
-
// path is 'root.dashboard'
|
18338
|
-
|
18339
|
-
var name = aState.get('name');
|
18340
|
-
// name is 'dashboard'
|
18341
|
-
```
|
18342
|
-
|
18343
|
-
@method getStateByPath
|
18344
|
-
@param {Ember.State} root the state to start searching from
|
18345
|
-
@param {String} path the state path to follow
|
18346
|
-
@return {Ember.State} the state at the end of the path
|
18347
|
-
*/
|
18348
|
-
getStateByPath: function(root, path) {
|
18349
|
-
var parts = path.split('.'),
|
18350
|
-
state = root;
|
18351
|
-
|
18352
|
-
for (var i=0, len=parts.length; i<len; i++) {
|
18353
|
-
state = get(get(state, 'states'), parts[i]);
|
18354
|
-
if (!state) { break; }
|
18355
|
-
}
|
18356
|
-
|
18357
|
-
return state;
|
18358
|
-
},
|
18359
|
-
|
18360
|
-
findStateByPath: function(state, path) {
|
18361
|
-
var possible;
|
18362
|
-
|
18363
|
-
while (!possible && state) {
|
18364
|
-
possible = this.getStateByPath(state, path);
|
18365
|
-
state = get(state, 'parentState');
|
18366
|
-
}
|
18367
|
-
|
18368
|
-
return possible;
|
18369
|
-
},
|
18370
|
-
|
18371
|
-
/**
|
18372
|
-
A state stores its child states in its `states` hash.
|
18373
|
-
This code takes a path like `posts.show` and looks
|
18374
|
-
up `root.states.posts.states.show`.
|
18375
|
-
|
18376
|
-
It returns a list of all of the states from the
|
18377
|
-
root, which is the list of states to call `enter`
|
18378
|
-
on.
|
18379
|
-
|
18380
|
-
@method getStatesInPath
|
18381
|
-
@param root
|
18382
|
-
@param path
|
18383
|
-
*/
|
18384
|
-
getStatesInPath: function(root, path) {
|
18385
|
-
if (!path || path === "") { return undefined; }
|
18386
|
-
var parts = path.split('.'),
|
18387
|
-
result = [],
|
18388
|
-
states,
|
18389
|
-
state;
|
18390
|
-
|
18391
|
-
for (var i=0, len=parts.length; i<len; i++) {
|
18392
|
-
states = get(root, 'states');
|
18393
|
-
if (!states) { return undefined; }
|
18394
|
-
state = get(states, parts[i]);
|
18395
|
-
if (state) { root = state; result.push(state); }
|
18396
|
-
else { return undefined; }
|
18397
|
-
}
|
18398
|
-
|
18399
|
-
return result;
|
18400
|
-
},
|
18401
|
-
|
18402
|
-
/**
|
18403
|
-
Alias for transitionTo.
|
18404
|
-
This method applies a transitionTo to the arguments passed into this method.
|
18405
|
-
|
18406
|
-
@method goToState
|
18407
|
-
*/
|
18408
|
-
goToState: function() {
|
18409
|
-
// not deprecating this yet so people don't constantly need to
|
18410
|
-
// make trivial changes for little reason.
|
18411
|
-
return this.transitionTo.apply(this, arguments);
|
18412
|
-
},
|
18413
|
-
|
18414
|
-
/**
|
18415
|
-
Transition to another state within the state machine. If the path is empty returns
|
18416
|
-
immediately. This method attempts to get a hash of the enter, exit and resolve states
|
18417
|
-
from the existing state cache. Processes the raw state information based on the
|
18418
|
-
passed in context. Creates a new transition object and triggers a new setupContext.
|
18419
|
-
|
18420
|
-
@method transitionTo
|
18421
|
-
@param path
|
18422
|
-
@param context
|
18423
|
-
*/
|
18424
|
-
transitionTo: function(path, context) {
|
18425
|
-
// XXX When is transitionTo called with no path
|
18426
|
-
if (Ember.isEmpty(path)) { return; }
|
18427
|
-
|
18428
|
-
// The ES6 signature of this function is `path, ...contexts`
|
18429
|
-
var contexts = context ? Array.prototype.slice.call(arguments, 1) : [],
|
18430
|
-
currentState = get(this, 'currentState') || this;
|
18431
|
-
|
18432
|
-
// First, get the enter, exit and resolve states for the current state
|
18433
|
-
// and specified path. If possible, use an existing cache.
|
18434
|
-
var hash = this.contextFreeTransition(currentState, path);
|
18435
|
-
|
18436
|
-
// Next, process the raw state information for the contexts passed in.
|
18437
|
-
var transition = new Transition(hash).normalize(this, contexts);
|
18438
|
-
|
18439
|
-
this.enterState(transition);
|
18440
|
-
this.triggerSetupContext(transition);
|
18441
|
-
},
|
18442
|
-
|
18443
|
-
/**
|
18444
|
-
Allows you to transition to any other state in the state manager without
|
18445
|
-
being constrained by the state hierarchy of the current state path.
|
18446
|
-
This method will traverse the state path upwards through its parents until
|
18447
|
-
it finds the specified state path. All the transitions are captured during the
|
18448
|
-
traversal.
|
18449
|
-
|
18450
|
-
Caches and returns hash of transitions, which contain the exitSates, enterStates and
|
18451
|
-
resolvedState
|
18452
|
-
|
18453
|
-
@method contextFreeTransition
|
18454
|
-
@param currentState
|
18455
|
-
@param path
|
18456
|
-
*/
|
18457
|
-
contextFreeTransition: function(currentState, path) {
|
18458
|
-
var cache = currentState.getPathsCache(this, path);
|
18459
|
-
if (cache) { return cache; }
|
18460
|
-
|
18461
|
-
var enterStates = this.getStatesInPath(currentState, path),
|
18462
|
-
exitStates = [],
|
18463
|
-
resolveState = currentState;
|
18464
|
-
|
18465
|
-
// Walk up the states. For each state, check whether a state matching
|
18466
|
-
// the `path` is nested underneath. This will find the closest
|
18467
|
-
// parent state containing `path`.
|
18468
|
-
//
|
18469
|
-
// This allows the user to pass in a relative path. For example, for
|
18470
|
-
// the following state hierarchy:
|
18471
|
-
//
|
18472
|
-
// | |root
|
18473
|
-
// | |- posts
|
18474
|
-
// | | |- show (* current)
|
18475
|
-
// | |- comments
|
18476
|
-
// | | |- show
|
18477
|
-
//
|
18478
|
-
// If the current state is `<root.posts.show>`, an attempt to
|
18479
|
-
// transition to `comments.show` will match `<root.comments.show>`.
|
18480
|
-
//
|
18481
|
-
// First, this code will look for root.posts.show.comments.show.
|
18482
|
-
// Next, it will look for root.posts.comments.show. Finally,
|
18483
|
-
// it will look for `root.comments.show`, and find the state.
|
18484
|
-
//
|
18485
|
-
// After this process, the following variables will exist:
|
18486
|
-
//
|
18487
|
-
// * resolveState: a common parent state between the current
|
18488
|
-
// and target state. In the above example, `<root>` is the
|
18489
|
-
// `resolveState`.
|
18490
|
-
// * enterStates: a list of all of the states represented
|
18491
|
-
// by the path from the `resolveState`. For example, for
|
18492
|
-
// the path `root.comments.show`, `enterStates` would have
|
18493
|
-
// `[<root.comments>, <root.comments.show>]`
|
18494
|
-
// * exitStates: a list of all of the states from the
|
18495
|
-
// `resolveState` to the `currentState`. In the above
|
18496
|
-
// example, `exitStates` would have
|
18497
|
-
// `[<root.posts>`, `<root.posts.show>]`.
|
18498
|
-
while (resolveState && !enterStates) {
|
18499
|
-
exitStates.unshift(resolveState);
|
18500
|
-
|
18501
|
-
resolveState = get(resolveState, 'parentState');
|
18502
|
-
if (!resolveState) {
|
18503
|
-
enterStates = this.getStatesInPath(this, path);
|
18504
|
-
if (!enterStates) {
|
18505
|
-
|
18506
|
-
return;
|
18507
|
-
}
|
18508
|
-
}
|
18509
|
-
enterStates = this.getStatesInPath(resolveState, path);
|
18510
|
-
}
|
18511
|
-
|
18512
|
-
// If the path contains some states that are parents of both the
|
18513
|
-
// current state and the target state, remove them.
|
18514
|
-
//
|
18515
|
-
// For example, in the following hierarchy:
|
18516
|
-
//
|
18517
|
-
// |- root
|
18518
|
-
// | |- post
|
18519
|
-
// | | |- index (* current)
|
18520
|
-
// | | |- show
|
18521
|
-
//
|
18522
|
-
// If the `path` is `root.post.show`, the three variables will
|
18523
|
-
// be:
|
18524
|
-
//
|
18525
|
-
// * resolveState: `<state manager>`
|
18526
|
-
// * enterStates: `[<root>, <root.post>, <root.post.show>]`
|
18527
|
-
// * exitStates: `[<root>, <root.post>, <root.post.index>]`
|
18528
|
-
//
|
18529
|
-
// The goal of this code is to remove the common states, so we
|
18530
|
-
// have:
|
18531
|
-
//
|
18532
|
-
// * resolveState: `<root.post>`
|
18533
|
-
// * enterStates: `[<root.post.show>]`
|
18534
|
-
// * exitStates: `[<root.post.index>]`
|
18535
|
-
//
|
18536
|
-
// This avoid unnecessary calls to the enter and exit transitions.
|
18537
|
-
while (enterStates.length > 0 && enterStates[0] === exitStates[0]) {
|
18538
|
-
resolveState = enterStates.shift();
|
18539
|
-
exitStates.shift();
|
18540
|
-
}
|
18541
|
-
|
18542
|
-
// Cache the enterStates, exitStates, and resolveState for the
|
18543
|
-
// current state and the `path`.
|
18544
|
-
var transitions = {
|
18545
|
-
exitStates: exitStates,
|
18546
|
-
enterStates: enterStates,
|
18547
|
-
resolveState: resolveState
|
18548
|
-
};
|
18549
|
-
|
18550
|
-
currentState.setPathsCache(this, path, transitions);
|
18551
|
-
|
18552
|
-
return transitions;
|
18553
|
-
},
|
18554
|
-
|
18555
|
-
/**
|
18556
|
-
A trigger to setup the state contexts. Each state is setup with
|
18557
|
-
an enterState.
|
18558
|
-
|
18559
|
-
@method triggerSetupContext
|
18560
|
-
@param transitions
|
18561
|
-
*/
|
18562
|
-
triggerSetupContext: function(transitions) {
|
18563
|
-
var contexts = transitions.contexts,
|
18564
|
-
offset = transitions.enterStates.length - contexts.length,
|
18565
|
-
enterStates = transitions.enterStates,
|
18566
|
-
transitionEvent = get(this, 'transitionEvent');
|
18567
|
-
|
18568
|
-
|
18569
|
-
arrayForEach.call(enterStates, function(state, idx) {
|
18570
|
-
state.trigger(transitionEvent, this, contexts[idx-offset]);
|
18571
|
-
}, this);
|
18572
|
-
},
|
18573
|
-
|
18574
|
-
/**
|
18575
|
-
Returns the state instance by name. If state is not found the parentState
|
18576
|
-
is returned instead.
|
18577
|
-
|
18578
|
-
@method getState
|
18579
|
-
@param name
|
18580
|
-
*/
|
18581
|
-
getState: function(name) {
|
18582
|
-
var state = get(this, name),
|
18583
|
-
parentState = get(this, 'parentState');
|
18584
|
-
|
18585
|
-
if (state) {
|
18586
|
-
return state;
|
18587
|
-
} else if (parentState) {
|
18588
|
-
return parentState.getState(name);
|
18589
|
-
}
|
18590
|
-
},
|
18591
|
-
|
18592
|
-
/**
|
18593
|
-
Causes a transition from the exitState of one state to the enterState of another
|
18594
|
-
state in the state machine. At the end of the transition the currentState is set
|
18595
|
-
to the finalState of the transition passed into this method.
|
18596
|
-
|
18597
|
-
@method enterState
|
18598
|
-
@param transition
|
18599
|
-
*/
|
18600
|
-
enterState: function(transition) {
|
18601
|
-
var log = this.enableLogging;
|
18602
|
-
|
18603
|
-
var exitStates = transition.exitStates.slice(0).reverse();
|
18604
|
-
arrayForEach.call(exitStates, function(state) {
|
18605
|
-
state.trigger('exit', this);
|
18606
|
-
}, this);
|
18607
|
-
|
18608
|
-
arrayForEach.call(transition.enterStates, function(state) {
|
18609
|
-
if (log) { Ember.Logger.log("STATEMANAGER: Entering " + get(state, 'path')); }
|
18610
|
-
state.trigger('enter', this);
|
18611
|
-
}, this);
|
18612
|
-
|
18613
|
-
set(this, 'currentState', transition.finalState);
|
18614
|
-
}
|
18615
|
-
});
|
18616
|
-
|
18617
|
-
})();
|
18618
|
-
|
18619
|
-
|
18620
|
-
|
18621
|
-
(function() {
|
18622
|
-
/**
|
18623
|
-
Ember States
|
18624
|
-
|
18625
|
-
@module ember
|
18626
|
-
@submodule ember-states
|
18627
|
-
@requires ember-runtime
|
18628
|
-
*/
|
18629
|
-
|
18630
|
-
})();
|
18631
|
-
|
18632
17933
|
|
18633
17934
|
})();
|
18634
17935
|
|