ember-source 1.0.0.rc3.5 → 1.0.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ember-source might be problematic. Click here for more details.
- data/VERSION +1 -0
- data/dist/ember-data-deps.js +1947 -1299
- data/dist/ember-data-deps.min.js +6 -5
- data/dist/ember-data-deps.prod.js +1945 -1297
- data/dist/ember-debug.js +2 -2
- data/dist/ember-old-router.js +2066 -1375
- data/dist/ember-old-router.min.js +9 -8
- data/dist/ember-old-router.prod.js +2069 -1379
- data/dist/ember-runtime.js +1947 -1299
- data/dist/ember-runtime.min.js +5 -5
- data/dist/ember-runtime.prod.js +1945 -1297
- data/dist/ember-spade.js +13 -6
- data/dist/ember-template-compiler.js +20 -4
- data/dist/ember-template-compiler.min.js +3 -3
- data/dist/ember-template-compiler.prod.js +18 -2
- data/dist/ember-tests.js +1 -1
- data/dist/ember.js +2980 -1618
- data/dist/ember.min.js +9 -9
- data/dist/ember.prod.js +2968 -1608
- data/lib/ember/source.rb +2 -0
- data/lib/ember/version.rb +3 -0
- metadata +6 -13
- data/dist/ember-1.0.0-rc.3.1.js +0 -28566
- data/dist/ember-1.0.0-rc.3.1.min.js +0 -21
- data/dist/ember-1.0.0-rc.3.1.prod.js +0 -28360
data/dist/ember-runtime.min.js
CHANGED
@@ -8,10 +8,10 @@
|
|
8
8
|
// ==========================================================================
|
9
9
|
|
10
10
|
|
11
|
-
// Version: v1.0.0-
|
12
|
-
// Last commit:
|
11
|
+
// Version: v1.0.0-rc4
|
12
|
+
// Last commit: ae2e55f (2013-05-27 19:34:11 -0400)
|
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]={};for(var i,o=r[e],s=o.deps,a=o.callback,u=[],c=0,h=s.length;h>c;c++)"exports"===s[c]?u.push(i={}):u.push(t(s[c]));var l=a.apply(this,u);return n[e]=i||l}})(),function(){function e(e){return t.console&&t.console[e]?t.console[e].apply?function(){t.console[e].apply(t.console,arguments)}:function(){var r=Array.prototype.join.call(arguments,", ");t.console[e](r)}:void 0}"undefined"==typeof Ember&&(Ember={});var t=Ember.imports=Ember.imports||this,r=Ember.exports=Ember.exports||this;Ember.lookup=Ember.lookup||this,r.Em=r.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.3",Ember.ENV=Ember.ENV||("undefined"==typeof 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},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 null===e||void 0===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||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 b=Ember.platform.defineProperty.isSimulated;b&&(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&&(b||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):(b||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.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 m=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return 1!==e}();Ember.tryFinally=m?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=m?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 p={},E="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(E,function(e){p["[object "+e+"]"]=e.toLowerCase()});var d=Object.prototype.toString;Ember.typeOf=function(e){var t;return t=null===e||void 0===e?String(e):p[d.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(m=0,p=f.length;p>m;m++)b=f[m],E[m]=b.before(e,n(),i);return o.call(s)}function u(e){i=i||{},i.exception=e}function c(){for(m=0,p=f.length;p>m;m++)b=f[m],b.after(e,n(),i,E[m]);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 b,m,p,E=[];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;n=Array.prototype.concat,e=Array.prototype.map||Ember.ArrayPolyfills.map,t=Array.prototype.forEach||Ember.ArrayPolyfills.forEach,r=Array.prototype.indexOf||Ember.ArrayPolyfills.indexOf;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){if(e.replace)return e.replace(t,r,i);var o=n.apply([t,r],i);return e.splice.apply(e,o)},intersection:function(e,t){var r=[];return i.forEach(e,function(e){i.indexOf(t,e)>=0&&r.push(e)}),r}}}(),function(){var e=Ember.guidFor,t=Ember.ArrayPolyfills.indexOf,r=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t},n=function(e,t){var n=e.keys.copy(),i=r(e.values);return t.keys=n,t.values=i,t},i=Ember.OrderedSet=function(){this.clear()};i.create=function(){return new i},i.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(t){var r=e(t),n=this.presenceSet,i=this.list;r in n||(n[r]=!0,i.push(t))},remove:function(r){var n=e(r),i=this.presenceSet,o=this.list;delete i[n];var s=t.call(o,r);s>-1&&o.splice(s,1)},isEmpty:function(){return 0===this.list.length},has:function(t){var r=e(t),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 i;return e.presenceSet=r(this.presenceSet),e.list=this.toArray(),e}};var o=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};o.create=function(){return new o},o.prototype={get:function(t){var r=this.values,n=e(t);return r[n]},set:function(t,r){var n=this.keys,i=this.values,o=e(t);n.add(t),i[o]=r},remove:function(t){var r=this.keys,n=this.values,i=e(t);return n.hasOwnProperty(i)?(r.remove(t),delete n[i],!0):!1},has:function(t){var r=this.values,n=e(t);return r.hasOwnProperty(n)},forEach:function(t,r){var n=this.keys,i=this.values;n.forEach(function(n){var o=e(n);t.call(r,n,i[o])})},copy:function(){return n(this,new o)}};var s=Ember.MapWithDefault=function(e){o.call(this),this.defaultValue=e.defaultValue};s.create=function(e){return e?new s(e):new o},s.prototype=Ember.create(o.prototype),s.prototype.get=function(e){var t=this.has(e);if(t)return o.prototype.get.call(this,e);var r=this.defaultValue(e);return this.set(e,r),r},s.prototype.copy=function(){return n(this,new s({defaultValue:this.defaultValue}))}}(),function(){function e(e){return e.match(a)[0]}function t(t,n){var i,a=s.test(n),u=!a&&o.test(n);if((!t||u)&&(t=Ember.lookup),a&&(n=n.slice(5)),t===Ember.lookup&&(i=e(n),t=r(t,i),n=n.slice(i.length+1)),!n||0===n.length)throw new Error("Invalid Path");return[t,n]}var r,n=Ember.META_KEY,i=Ember.ENV.MANDATORY_SETTER,o=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,s=/^this[\.\*]/,a=/^([^\.\*]+)/;r=function r(e,t){if(""===t)return e;if(t||"string"!=typeof e||(t=e,e=null),!e||-1!==t.indexOf("."))return u(e,t);var r,o=e[n],s=o&&o.descs[t];return s?s.get(e,t):(r=i&&o&&o.watching[t]>0?o.values[t]:e[t],void 0!==r||"object"!=typeof e||t in e||"function"!=typeof e.unknownProperty?r:e.unknownProperty(t))},Ember.config.overrideAccessors&&(Ember.get=r,Ember.config.overrideAccessors(),r=Ember.get);var u=Ember._getPath=function(e,n){var i,o,a,u,c;if(null===e&&-1===n.indexOf("."))return r(Ember.lookup,n);for(i=s.test(n),(!e||i)&&(a=t(e,n),e=a[0],n=a[1],a.length=0),o=n.split("."),c=o.length,u=0;e&&c>u;u++)if(e=r(e,o[u],!0),e&&e.isDestroyed)return void 0;return e};Ember.normalizeTuple=function(e,r){return t(e,r)},Ember.getWithDefault=function(e,t,n){var i=r(e,t);return void 0===i?n:i},Ember.get=r,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++)if(t===e[i][0]&&r===e[i][1]){n=i;break}return n}function t(e,t){var r,n=b(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[m],o=i&&i.listeners&&i.listeners[r];if(o)for(var s=o.length-1;s>=0;s--){var a=o[s][0],u=o[s][1],c=o[s][2],h=o[s][3],l=e(n,a,u);-1===l&&n.push([a,u,c,h])}}function n(t,r,n){var i=t[m],o=i&&i.listeners&&i.listeners[r],s=[];if(o){for(var a=o.length-1;a>=0;a--){var u=o[a][0],c=o[a][1],h=o[a][2],l=o[a][3],f=e(n,u,c);-1===f&&(n.push([u,c,h,l]),s.push([u,c,h,l]))}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);-1===u&&(a.push([i,o,s,void 0]),"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,1),"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[m],u=a&&a.listeners&&a.listeners[n];if(!u)return;for(var c=u.length-1;c>=0;c--)s(u[c][0],u[c][1])}}function s(r,n,i,o,s){function a(){return s.call(i)}function u(){c&&(c[3]=void 0)}o||"function"!=typeof i||(o=i,i=null);var c,h=t(r,n),l=e(h,i,o);return-1!==l&&(c=h[l].slice(),c[3]=!0,h[l]=c),Ember.tryFinally(a,u)}function a(r,n,i,o,s){function a(){return s.call(i)}function u(){for(f=0,b=m.length;b>f;f++)m[f][3]=void 0}o||"function"!=typeof i||(o=i,i=null);var c,h,l,f,b,m=[];for(f=0,b=n.length;b>f;f++){c=n[f],h=t(r,c);var p=e(h,i,o);-1!==p&&(l=h[p].slice(),l[3]=!0,h[p]=l,m.push(l))}return Ember.tryFinally(a,u)}function u(e){var t=e[m].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[m];n=i&&i.listeners&&i.listeners[t]}if(n){for(var s=n.length-1;s>=0;s--)if(n[s]&&n[s][3]!==!0){var a=n[s][0],u=n[s][1],c=n[s][2];c&&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[m],n=r&&r.listeners&&r.listeners[t];return!(!n||!n.length)}function l(e,t){var r=[],n=e[m],i=n&&n.listeners&&n.listeners[t];if(!i)return r;for(var o=0,s=i.length;s>o;o++){var a=i[o][0],u=i[o][1];r.push([a,u])}return r}var f=Ember.create,b=Ember.meta,m=Ember.META_KEY;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,i){if(!e.isDestroying){var o=n,s=!o;s&&(o=n={}),r(p,e,t,o,i),s&&(n=null)}}function t(e,t,n){if(!e.isDestroying){var o=i,s=!o;s&&(o=i={}),r(E,e,t,o,n),s&&(i=null)}}function r(e,t,r,n,i){var o=s(t);if(n[o]||(n[o]={}),!n[o][r]){n[o][r]=!0;var a=i.deps;if(a=a&&a[r])for(var u in a){var c=i.descs[u];c&&c._suspended===t||e(t,u)}}}var n,i,o=Ember.meta,s=Ember.guidFor,a=Ember.tryFinally,u=Ember.sendEvent,c=Ember.listenersUnion,h=Ember.listenersDiff,l=Ember._ObserverSet,f=new l,b=new l,m=0,p=Ember.propertyWillChange=function(t,r){var n=o(t,!1),i=n.watching[r]>0||"length"===r,s=n.proto,a=n.descs[r];i&&s!==t&&(a&&a.willChange&&a.willChange(t,r),e(t,r,n),d(t,r,n),_(t,r))},E=Ember.propertyDidChange=function(e,r){var n=o(e,!1),i=n.watching[r]>0||"length"===r,s=n.proto,a=n.descs[r];s!==e&&(a&&a.didChange&&a.didChange(e,r),(i||"length"===r)&&(t(e,r,n),v(e,r,n),O(e,r)))},d=function(e,t,r,n){if(r.hasOwnProperty("chainWatchers")){var i=r.chainWatchers;if(i=i[t])for(var o=0,s=i.length;s>o;o++)i[o].willChange(n)}},v=function(e,t,r,n){if(r.hasOwnProperty("chainWatchers")){var i=r.chainWatchers;if(i=i[t])for(var o=i.length-1;o>=0;o--)i[o].didChange(n)}};Ember.overrideChains=function(e,t,r){v(e,t,r,!0)};var g=Ember.beginPropertyChanges=function(){m++},y=Ember.endPropertyChanges=function(){m--,0>=m&&(f.clear(),b.flush())};Ember.changeProperties=function(e,t){g(),a(e,y,t)};var _=function(e,t){if(!e.isDestroying){var r,n,i=t+":before";m?(r=f.add(e,t,i),n=h(e,i,r),u(e,i,[e,t],n)):u(e,i,[e,t])}},O=function(e,t){if(!e.isDestroying){var r,n=t+":change";m?(r=b.add(e,t,n),c(e,n,r)):u(e,n,[e,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 i(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.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,b;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?(b=a,h[s]=a,n&&f?r(e,s,{configurable:!0,enumerable:!0,writable:!0,value:void 0}):e[s]=void 0,a.setup(e,s)):(h[s]=void 0,null==a?(b=u,n&&f?(c.values[s]=u,r(e,s,{configurable:!0,enumerable:!0,set:i,get:o(s)})):e[s]=u):(b=a,r(e,s,a))),f&&Ember.overrideChains(e,s,c),e.didDefineProperty&&e.didDefineProperty(e,s,b),this}}(),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,a=e(i),u=a.watching;u[o]?u[o]=(u[o]||0)+1:(u[o]=1,s=a.descs[o],s&&s.willWatch&&s.willWatch(i,o),"function"==typeof i.willWatchProperty&&i.willWatchProperty(o),r&&o in i&&(a.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,s=e(t),a=s.watching;1===a[i]?(a[i]=0,o=s.descs[i],o&&o.didUnwatch&&o.didUnwatch(t,i),"function"==typeof t.didUnwatchProperty&&t.didUnwatchProperty(i),r&&i in t&&(n(t,i,{configurable:!0,enumerable:!0,writable:!0,value:s.values[i]}),delete s.values[i])):a[i]>1&&a[i]--}}(),function(){function e(e){return e.match(f)[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){return n(e,!1).proto===e}var n=Ember.meta,i=Ember.get,o=Ember.normalizeTuple,s=Ember.ArrayPolyfills.forEach,a=Ember.warn,u=Ember.watchKey,c=Ember.unwatchKey,h=Ember.propertyWillChange,l=Ember.propertyDidChange,f=/^([^\.\*]+)/,b=[];Ember.flushPendingChains=function(){if(0!==b.length){var e=b;b=[],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===b.length)}};var m=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)}}},p=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()},E=p.prototype;E.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=e&&!r(e)?i(e,this._key):void 0}return this._value},E.destroy=function(){if(this._watching){var e=this._object;e&&m(e,this._key,this),this._watching=!1}},E.copy=function(e){var t,r=new p(null,null,e),n=this._paths;for(t in n)0>=n[t]||r.add(t);return r},E.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 b.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)},E.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)},E.count=0,E.chain=function(t,r,n){var i,o=this._chains;o||(o=this._chains={}),i=o[t],i||(i=o[t]=new p(this,t,n)),i.count++,r&&r.length>0&&(t=e(r),r=r.slice(t.length+1),i.chain(t,r))},E.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--,0>=i.count&&(delete n[i._key],i.destroy())},E.willChange=function(){var e=this._chains;if(e)for(var t in e)e.hasOwnProperty(t)&&e[t].willChange();this._parent&&this._parent.chainWillChange(this,this._key,1)},E.chainWillChange=function(e,t,r){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,r+1):(r>1&&h(this.value(),t),t="this."+t,this._paths[t]>0&&h(this.value(),t))},E.chainDidChange=function(e,t,r){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,r+1):(r>1&&l(this.value(),t),t="this."+t,this._paths[t]>0&&l(this.value(),t))},E.didChange=function(e){if(this._watching){var r=this._parent.value();r!==this._object&&(m(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);e||this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.finishChains=function(e){var t=n(e,!1),r=t.chains;r&&(r.value()!==e&&(t.chains=r=r.copy(e)),r.didChange(!0))}}(),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]=f(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,m(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,p(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,t){for(var r={},n=0;t.length>n;n++)r[t[n]]=u(e,t[n]);return r}function s(e,t){Ember.computed[e]=function(e){var r=l.call(arguments);return Ember.computed(e,function(){return t.apply(this,r)})}}function a(e,t){Ember.computed[e]=function(){var e=l.call(arguments),r=Ember.computed(function(){return t.apply(this,[o(this,e)])});return r.property.apply(r,e)}}var u=Ember.get,c=Ember.set,h=Ember.meta,l=[].slice,f=Ember.create,b=Ember.META_KEY,m=Ember.watch,p=Ember.unwatch;Ember.ComputedProperty=i,i.prototype=new Ember.Descriptor;var E=i.prototype;E.cacheable=function(e){return this._cacheable=e!==!1,this},E.volatile=function(){return this.cacheable(!1)},E.readOnly=function(e){return this._readOnly=void 0===e||!!e,this},E.property=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return this._dependentKeys=e,this},E.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},E.willWatch=function(e,t){var n=e[b];t in n.cache||r(this,e,t,n)},E.didUnwatch=function(e,t){var r=e[b];t in r.cache||n(this,e,t,r)},E.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=h(e);t in r.cache&&(delete r.cache[t],r.watching[t]||n(this,e,t,r))}},E.get=function(e,t){var n,i,o;if(this._cacheable){if(o=h(e),i=o.cache,t in i)return i[t];n=i[t]=this.func.call(e,t),o.watching[t]||r(this,e,t,o)}else n=this.func.call(e,t);return n},E.set=function(e,t,n){var i,o,s=this._cacheable,a=this.func,u=h(e,s),c=u.watching[t],l=this._suspended,f=!1,b=u.cache;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{if(s&&b.hasOwnProperty(t)&&(i=b[t],f=!0),a.wrappedFunction&&(a=a.wrappedFunction),3===a.length)o=a.call(e,t,n,i);else{if(2!==a.length)return Ember.defineProperty(e,t,null,i),Ember.set(e,t,n),void 0;o=a.call(e,t,n)}if(f&&i===o)return;c&&Ember.propertyWillChange(e,t),f&&delete b[t],s&&(c||f||r(this,e,t,u),b[t]=o),c&&Ember.propertyDidChange(e,t)}finally{this._suspended=l}return o},E.setup=function(e,t){var n=e[b];n&&n.watching[t]&&r(this,e,t,h(e))},E.teardown=function(e,t){var r=h(e);return(r.watching[t]||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=l.call(arguments,0,-1),e=l.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=h(e,!1).cache;return r&&t in r?r[t]:void 0},s("empty",function(e){return Ember.isEmpty(u(this,e))}),s("notEmpty",function(e){return!Ember.isEmpty(u(this,e))}),s("none",function(e){return Ember.isNone(u(this,e))}),s("not",function(e){return!u(this,e)}),s("bool",function(e){return!!u(this,e)}),s("match",function(e,t){var r=u(this,e);return"string"==typeof r?!!r.match(t):!1}),s("equal",function(e,t){return u(this,e)===t}),s("gt",function(e,t){return u(this,e)>t}),s("gte",function(e,t){return u(this,e)>=t}),s("lt",function(e,t){return t>u(this,e)}),s("lte",function(e,t){return t>=u(this,e)}),a("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),a("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),a("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),a("map",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?(c(this,e,r),r):u(this,e)})},Ember.computed.defaultTo=function(e){return Ember.computed(function(t,r,n){return 1===arguments.length?null!=n?n:u(this,e):null!=r?r:u(this,e)})}}(),function(){function e(e){return e+r}function t(e){return e+n}var r=":change",n=":before";Ember.guidFor,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(){function e(e,t,r,n){return void 0===t&&(t=e,e=void 0),"string"==typeof t&&(t=e[t]),r&&n>0&&(r=r.length>n?o.call(r,n):null),Ember.handleErrors(function(){return t.apply(e||this,r||[])},this)}function t(){c=null,u.currentRunLoop&&u.end()}function r(){h=null,u(function(){var t=+new Date,n=-1;for(var i in f)if(f.hasOwnProperty(i)){var o=f[i];o&&o.expires&&(t>=o.expires?(delete f[i],e(o.target,o.method,o.args,2)):(0>n||n>o.expires)&&(n=o.expires))}n>0&&(h=setTimeout(r,n-t),l=n)})}function n(t,r){r[this.tguid]&&delete r[this.tguid][this.mguid],f[t]&&e(this.target,this.method,this.args),delete f[t]}function i(e,t,r,i){var o,s=Ember.guidFor(t),a=Ember.guidFor(r),c=u.autorun().onceTimers,h=c[s]&&c[s][a];return h&&f[h]?f[h].args=i:(o={target:t,method:r,args:i,tguid:s,mguid:a},h=Ember.guidFor(o),f[h]=o,c[s]||(c[s]={}),c[s][a]=h,u.schedule(e,o,n,h,c)),h}var o=[].slice,s=Ember.ArrayPolyfills.forEach,a=function(e){this._prev=e||null,this.onceTimers={}};a.prototype={end:function(){this.flush()},prev:function(){return this._prev},schedule:function(e,t,r){var n,i=this._queues;i||(i=this._queues={}),n=i[e],n||(n=i[e]=[]);var s=arguments.length>3?o.call(arguments,3):null;return n.push({target:t,method:r,args:s}),this},flush:function(t){function r(t){e(t.target,t.method,t.args)}function n(){s.call(u,r)}var i,o,a,u,c;if(!this._queues)return this;if(Ember.watch.flushPending(),t)for(;this._queues&&(u=this._queues[t]);)this._queues[t]=null,"sync"===t?(c=Ember.LOG_BINDINGS,c&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(n,Ember.endPropertyChanges),c&&Ember.Logger.log("End: Flush Sync Queue")):s.call(u,r);
|
16
|
-
else{i=Ember.run.queues,a=i.length,o=0;e:for(;a>o;){t=i[o],u=this._queues&&this._queues[t],delete this._queues[t],u&&("sync"===t?(c=Ember.LOG_BINDINGS,c&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(n,Ember.endPropertyChanges),c&&Ember.Logger.log("End: Flush Sync Queue")):s.call(u,r));for(var h=0;o>=h;h++)if(this._queues&&this._queues[i[h]]){o=h;continue e}o++}}return this}},Ember.RunLoop=a,Ember.run=function(t,r){function n(){return t||r?e(t,r,i,2):void 0}var i=arguments;return u.begin(),Ember.tryFinally(n,u.end)};var u=Ember.run;Ember.run.begin=function(){u.currentRunLoop=new a(u.currentRunLoop)},Ember.run.end=function(){function e(){u.currentRunLoop.end()}function t(){u.currentRunLoop=u.currentRunLoop.prev()}Ember.tryFinally(e,t)},Ember.run.queues=["sync","actions","destroy"],Ember.run.schedule=function(){var e=u.autorun();e.schedule.apply(e,arguments)};var c;Ember.run.hasScheduledTimers=function(){return!(!c&&!h)},Ember.run.cancelTimers=function(){c&&(clearTimeout(c),c=null),h&&(clearTimeout(h),h=null),f={}},Ember.run.autorun=function(){return u.currentRunLoop||(u.begin(),c||(c=setTimeout(t,1))),u.currentRunLoop},Ember.run.sync=function(){u.autorun(),u.currentRunLoop.flush("sync")};var h,l,f={};Ember.run.later=function(e,t){var n,i,s,a,u;return 2===arguments.length&&"function"==typeof e?(u=t,t=e,e=void 0,n=[e,t]):(n=o.call(arguments),u=n.pop()),i=+new Date+u,s={target:e,method:t,expires:i,args:n},a=Ember.guidFor(s),f[a]=s,h&&l>i&&(clearTimeout(h),h=null),h||(h=setTimeout(r,u),l=i),a},Ember.run.once=function(e,t){return i("actions",e,t,o.call(arguments,2))},Ember.run.scheduleOnce=function(e,t,r){return i(e,t,r,o.call(arguments,3))},Ember.run.next=function(){var e=o.call(arguments);return e.push(1),u.later.apply(this,e)},Ember.run.cancel=function(e){delete f[e]}}(),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=A(r)):r=t.mixins={},r}function t(e,t){return t&&t.length>0&&(e.mixins=O.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=S(t),e[r]?D:(e[r]=t,t.properties)):t}function i(e,t,r){var n;return n=t.concatenatedProperties||r.concatenatedProperties,e.concatenatedProperties&&(n=n?n.concat(e.concatenatedProperties):e.concatenatedProperties),n}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=A(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,u,c,h){if(n instanceof Ember.Descriptor){if(n===y&&u[t])return D;n.func&&(n=o(i,t,n,c,u)),u[t]=n,c[t]=void 0}else r(n)?n=s(e,t,n,c,u):(h&&C.call(h,t)>=0||"concatenatedProperties"===t)&&(n=a(e,t,n,c)),u[t]=void 0,c[t]=n}function c(e,t,r,o,s,a){function h(e){delete r[e],delete o[e]}for(var l,f,b,m,p,E=0,d=e.length;d>E;E++)if(l=e[E],f=n(t,l),f!==D)if(f){p=Ember.meta(s),m=i(f,o,s);for(b in f)f.hasOwnProperty(b)&&(a.push(b),u(s,b,f[b],p,r,o,m));f.hasOwnProperty("toString")&&(s.toString=f.toString)}else l.mixins&&(c(l.mixins,t,r,o,s,a),l._without&&w.call(l._without,h))}function h(e,t,r,n){if(x.test(t)){var i=n.bindings;i?n.hasOwnProperty("bindings")||(i=n.bindings=A(n.bindings)):i=n.bindings={},i[t]=r}}function l(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 f(e,t){return l(e,t||Ember.meta(e)),e}function b(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 m(e,t,r,n,i){if("function"==typeof r){var o=r[n];if(o)for(var s=0,a=o.length;a>s;s++)Ember[i](e,o[s],null,t)}}function p(e,t,r){var n=e[t];m(e,t,n,"__ember_observesBefore__","removeBeforeObserver"),m(e,t,n,"__ember_observes__","removeObserver"),m(e,t,r,"__ember_observesBefore__","addBeforeObserver"),m(e,t,r,"__ember_observes__","addObserver")}function E(t,r,n){var i,o,s,a={},u={},l=Ember.meta(t),m=[];c(r,e(t),a,u,t,m);for(var E=0,d=m.length;d>E;E++)if(i=m[E],"constructor"!==i&&u.hasOwnProperty(i)&&(s=a[i],o=u[i],s!==y)){for(;s&&s instanceof _;){var v=b(t,s,l,a,u);s=v.desc,o=v.value}(void 0!==s||void 0!==o)&&(p(t,i,o),h(t,i,o,l),j(t,i,s,o,l))}return n||f(t,l),t}function d(e,t,r){var n=S(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(d(i[o],t,r))return!0;return!1}function v(e,t,r){if(!r[S(t)])if(r[S(t)]=!0,t.properties){var n=t.properties;for(var i in n)n.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&w.call(t.mixins,function(t){v(e,t,r)})}var g,y,_,O=Ember.ArrayPolyfills.map,C=Ember.ArrayPolyfills.indexOf,w=Ember.ArrayPolyfills.forEach,P=[].slice,A=Ember.create,j=Ember.defineProperty,S=Ember.guidFor,D={},x=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=f,Ember.anyUnprocessedMixins=!1,g.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return t(new e,arguments)};var N=g.prototype;N.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},N.apply=function(e){return E(e,[this],!1)},N.applyPartial=function(e){return E(e,[this],!0)},N.detect=function(e){if(!e)return!1;if(e instanceof g)return d(e,this,{});var t=Ember.meta(e,!1).mixins;return t?!!t[S(this)]:!1},N.without=function(){var e=new g(this);return e._without=P.call(arguments),e},N.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},y=new Ember.Descriptor,y.toString=function(){return"(Required Property)"},Ember.required=function(){return y},_=function(e){this.methodName=e},_.prototype=new Ember.Descriptor,Ember.alias=function(e){return new _(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 _(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",[],function(){"use strict";function e(e,t){n.async(function(){e.trigger("promise:resolved",{detail:t}),e.isResolved=!0,e.resolvedValue=t})}function t(e,t){n.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedValue=t})}function r(e){var t,r=[],n=new m,i=e.length;0===i&&n.resolve([]);var o=function(e){return function(t){s(e,t)}},s=function(e,t){r[e]=t,0===--i&&n.resolve(r)},a=function(e){n.reject(e)};for(t=0;i>t;t++)e[t].then(o(t),a);return n}var n,i,o="undefined"!=typeof window?window:{},s=o.MutationObserver||o.WebKitMutationObserver;if("undefined"!=typeof process&&"[object process]"==={}.toString.call(process))i=function(e,t){process.nextTick(function(){e.call(t)})};else if(s){var a=[],u=new s(function(){var e=a.slice();a=[],e.forEach(function(e){var t=e[0],r=e[1];t.call(r)})}),c=document.createElement("div");u.observe(c,{attributes:!0}),window.addEventListener("unload",function(){u.disconnect(),u=null}),i=function(e,t){a.push([e,t]),c.setAttribute("drainQueue","drainQueue")}}else i=function(e,t){setTimeout(function(){e.call(t)},1)};var h=function(e,t){this.type=e;for(var r in t)t.hasOwnProperty(r)&&(this[r]=t[r])},l=function(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r][0]===t)return r;return-1},f=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},b={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,r){var n,i,o=f(this);for(e=e.split(/\s+/),r=r||this;i=e.shift();)n=o[i],n||(n=o[i]=[]),-1===l(n,t)&&n.push([t,r])},off:function(e,t){var r,n,i,o=f(this);for(e=e.split(/\s+/);n=e.shift();)t?(r=o[n],i=l(r,t),-1!==i&&r.splice(i,1)):o[n]=[]},trigger:function(e,t){var r,n,i,o,s,a=f(this);if(r=a[e])for(var u=0;r.length>u;u++)n=r[u],i=n[0],o=n[1],"object"!=typeof t&&(t={detail:t}),s=new h(e,t),i.call(o,s)}},m=function(){this.on("promise:resolved",function(e){this.trigger("success",{detail:e.detail})},this),this.on("promise:failed",function(e){this.trigger("error",{detail:e.detail})},this)},p=function(){},E=function(e,t,r,n){var i,o,s,a,u="function"==typeof r;if(u)try{i=r(n.detail),s=!0}catch(c){a=!0,o=c}else i=n.detail,s=!0;i&&"function"==typeof i.then?i.then(function(e){t.resolve(e)},function(e){t.reject(e)}):u&&s?t.resolve(i):a?t.reject(o):t[e](i)};return m.prototype={then:function(e,t){var r=new m;return this.isResolved&&n.async(function(){E("resolve",r,e,{detail:this.resolvedValue})},this),this.isRejected&&n.async(function(){E("reject",r,t,{detail:this.rejectedValue})},this),this.on("promise:resolved",function(t){E("resolve",r,e,t)}),this.on("promise:failed",function(e){E("reject",r,t,e)}),r},resolve:function(t){e(this,t),this.resolve=p,this.reject=p},reject:function(e){t(this,e),this.resolve=p,this.reject=p}},b.mixin(m.prototype),n={async:i,Promise:m,Event:h,EventTarget:b,all:r,raiseOnUncaughtExceptions:!0}})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function 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++)n=t[o],i=e.lookup(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=e.normalize(t);return e.resolve(r)}function a(e,t){var r,n=s(e,t),a=t.split(":"),u=a[0];if(o(e,t,"instantiate")===!1)return n;if(n){var c=[];c=c.concat(e.typeInjections.get(u)||[]),c=c.concat(e.injections[t]||[]);var h=i(e,c);return h.container=e,h._debugContainerKey=t,r=n.create(h)}}function u(e,t){e.cache.eachLocal(function(r,n){o(e,r,"instantiate")!==!1&&t(n)})}function c(e){e.cache.eachLocal(function(t,r){o(e,t,"instantiate")!==!1&&r.destroy()}),e.cache.dict={}}return e.prototype={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},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={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||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},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=a(this,e);return r?(n(this,e)&&t.singleton!==!1&&this.cache.set(e,r),r):void 0},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");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:n})},injection:function(e,t,n){if(this.parent&&r("injection"),-1===e.indexOf(":"))return this.typeInjection(e,t,n);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:n})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;t>e;e++)this.children[e].destroy();this.children=[],u(this,function(e){e.isDestroying=!0}),u(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;t>e;e++)c(this.children[e]);c(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 r(e,t){if(e===t)return 0;var n=Ember.typeOf(e),i=Ember.typeOf(t),o=Ember.Comparable;if(o){if("instance"===n&&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[n],l=s[i];if(l>h)return-1;if(h>l)return 1;switch(n){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 b=e.length,m=t.length,p=Math.min(b,m),E=0,d=0;0===E&&p>d;)E=r(e[d],t[d]),d++;return 0!==E?E:m>b?-1:b>m?1:0;case"instance":return Ember.Comparable&&Ember.Comparable.detect(e)?e.compare(e,t):0;case"date":var v=e.getTime(),g=t.getTime();return g>v?-1:v>g?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){if("object"!=typeof e||null===e)return e+"";var t,r=[];for(var n in e)if(e.hasOwnProperty(n)){if(t=e[n],"toString"===t)continue;"function"===Ember.typeOf(t)&&(t="function() { ... }"),r.push(n+": "+t)}return"{"+r.join(", ")+"}"},Ember.isEqual=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e===t},Ember.ORDER_DEFINITION=Ember.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class","date"],Ember.keys=Object.keys,Ember.keys||(Ember.keys=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t});var n=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){for(var e=Error.prototype.constructor.apply(this,arguments),t=0;n.length>t;t++)this[n[t]]=e[n[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),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,0)-1:r++,e=t[n],(null===e?"(null)":void 0===e?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(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(){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({isEnumerable:!0,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.mapProperty(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},mapProperty:function(e){return this.map(function(t){return n(t,e)})},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)})},filterProperty:function(){return this.filter(r.apply(this,arguments))},rejectProperty: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)},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},findProperty:function(){return this.find(r.apply(this,arguments))},every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},everyProperty:function(){return this.every(r.apply(this,arguments))},some:function(e,t){return!!this.find(function(r,n,i){return!!e.call(t,r,n,i)})},someProperty:function(){return this.some(r.apply(this,arguments))},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){0>s(e,t)&&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}})}(),function(){function e(e){return null===e||void 0===e}var t=Ember.get,r=(Ember.set,Ember.EnumerableUtils.map),n=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{isSCArray:!0,length:Ember.required(),objectAt:function(e){return 0>e||e>=t(this,"length")?void 0:t(this,e)},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(e,r){return void 0!==r&&this.replace(0,t(this,"length"),r),this}),firstObject:Ember.computed(function(){return this.objectAt(0)}),lastObject:Ember.computed(function(){return this.objectAt(t(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(r,n){var i=Ember.A([]),o=t(this,"length");for(e(r)&&(r=0),(e(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(e,r){var n,i=t(this,"length");for(void 0===r&&(r=0),0>r&&(r+=i),n=r;i>n;n++)if(this.objectAt(n,!0)===e)return n;return-1},lastIndexOf:function(e,r){var n,i=t(this,"length");for((void 0===r||r>=i)&&(r=i-1),0>r&&(r+=i),n=r;n>=0;n--)if(this.objectAt(n)===e)return n;return-1},addArrayObserver:function(e,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=t(this,"hasArrayObservers");return o||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",e,n),Ember.addListener(this,"@array:change",e,i),o||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(e,r){var n=r&&r.willChange||"arrayWillChange",i=r&&r.didChange||"arrayDidChange",o=t(this,"hasArrayObservers");return o&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",e,n),Ember.removeListener(this,"@array:change",e,i),o&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(e,r,n){void 0===e?(e=0,r=n=-1):(void 0===r&&(r=-1),void 0===n&&(n=-1)),Ember.isWatching(this,"@each")&&t(this,"@each"),Ember.sendEvent(this,"@array:before",[this,e,r,n]);var i,o;if(e>=0&&r>=0&&t(this,"hasEnumerableObservers")){i=[],o=e+r;for(var s=e;o>s;s++)i.push(this.objectAt(s))}else i=r;return this.enumerableContentWillChange(i,n),this},arrayContentDidChange:function(e,r,i){void 0===e?(e=0,r=i=-1):(void 0===r&&(r=-1),void 0===i&&(i=-1));var o,s;if(e>=0&&i>=0&&t(this,"hasEnumerableObservers")){o=[],s=e+i;for(var a=e;s>a;a++)o.push(this.objectAt(a))}else o=i;this.enumerableContentDidChange(r,o),Ember.sendEvent(this,"@array:change",[this,e,r,i]);var u=t(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(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,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){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;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},r=arguments;1===arguments.length&&"array"===Ember.typeOf(arguments[0])&&(r=arguments[0]);for(var n=0;r.length>n;n++)t[r[n]]=e(this,r[n]);return t},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 n||(n=1),t(this,r,(e(this,r)||0)+n),e(this,r)},decrementProperty:function(r,n){return 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
|
17
|
-
}})}(),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.async=function(e,t){Ember.run.schedule("actions",t,e)};var r=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(){var e=r(this,"promise");return e.then.apply(e,arguments)},resolve:function(e){r(this,"promise").resolve(e)},reject:function(e){r(this,"promise").reject(e)},promise:Ember.computed(function(){return new e.Promise})})}(),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);if(u.proto=this,e){var h=e;e=null,this.reopen.apply(this,h)}if(t){var l=t;t=null;for(var f=this.concatenatedProperties,b=0,p=l.length;p>b;b++){var g=l[b];for(var y in g)if(g.hasOwnProperty(y)){var _=g[y],O=Ember.IS_BINDING;if(O.test(y)){var C=u.bindings;C?u.hasOwnProperty("bindings")||(C=u.bindings=r(u.bindings)):C=u.bindings={},C[y]=_}var w=u.descs[y];if(f&&d(f,y)>=0){var P=this[y];_=P?"function"==typeof P.concat?P.concat(_):Ember.makeArray(P).concat(_):Ember.makeArray(_)}w?w.set(this,y,_):"function"!=typeof this.setUnknownProperty||y in this?E?Ember.defineProperty(this,y,null,_):this[y]=_:this.setUnknownProperty(y,_)}}}m(this,u),delete u.proto,c(this),this.init.apply(this,arguments)};return s.toString=f.prototype.toString,s.willReopen=function(){o&&(s.PrototypeMixin=f.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.destroy,l=Ember.run.schedule,f=Ember.Mixin,b=f._apply,m=f.finishPartial,p=f.prototype.reopen,E=Ember.ENV.MANDATORY_SETTER,d=Ember.EnumerableUtils.indexOf,v={configurable:!0,writable:!0,enumerable:!1,value:void 0},g=e();g.toString=function(){return"Ember.CoreObject"},g.PrototypeMixin=f.create({reopen:function(){return b(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){return this._didCallDestroy?void 0:(this.isDestroying=!0,this._didCallDestroy=!0,l("destroy",this,this._scheduledDestroy),this)},willDestroy:Ember.K,_scheduledDestroy:function(){this.willDestroy&&this.willDestroy(),h(this),this.isDestroyed=!0,this.didDestroy&&this.didDestroy()},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function(){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 y=f.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var t,n=e();return n.ClassMixin=f.create(this.ClassMixin),n.PrototypeMixin=f.create(this.PrototypeMixin),n.ClassMixin.ownerConstructor=n,n.PrototypeMixin.ownerConstructor=n,p.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(),p.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return p.apply(this.ClassMixin,arguments),b(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)}});y.ownerConstructor=g,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(y),g.ClassMixin=y,y.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{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;u.length>o;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){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,a=this._keys;s=i>0?r+i:-1,Ember.beginPropertyChanges(this);for(o in a)a.hasOwnProperty(o)&&(s>0&&e(t,o,this,r,s),Ember.propertyDidChange(this,o));Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(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&&0>=--n[e]){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;Ember.set;var t=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(t,r,n){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=n?e(n,"length"):0;if(this.arrayContentWillChange(t,r,i),n&&0!==n.length){var o=[t,r].concat(n);this.splice.apply(this,o)}else this.splice(t,r);return this.arrayContentDidChange(t,r,i),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()}}),r=["length"];Ember.EnumerableUtils.forEach(t.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(t=t.without.apply(t,r)),Ember.NativeArray=t,Ember.A=function(e){return void 0===e&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){t.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,t=Ember.get,r=Ember.Object.extend(e);r.reopenClass({promise:function(e,n){var i=r.create();return e.call(n,i),t(i,"promise")}}),Ember.Deferred=r}(),function(){var e=Ember.ENV.EMBER_LOAD_HOOKS||{},t={};Ember.onLoad=function(r,n){var i;e[r]=e[r]||Ember.A(),e[r].pushObject(n),(i=t[r])&&n(i)},Ember.runLoadHooks=function(r,n){var i;t[r]=n,(i=e[r])&&e[r].forEach(function(e){e(n)})}}(),function(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,store:null,model:Ember.computed.alias("content"),send:function(t){var r,n=[].slice.call(arguments,1);this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach);Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(r,n){var i=0,o=e(this,"sortProperties"),s=e(this,"sortAscending");return t(o,function(t){0===i&&(i=Ember.compare(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=e(this,"container"),o=e(this,"_subControllers"),s=o[t];if(s||(s=i.lookup("controller:"+n,{singleton:!1}),o[t]=s),!s)throw new Error('Could not resolve itemController: "'+n+'"');return s.set("target",this),s.set("content",r),s},_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||console.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. If you want full error messages please use the non-minified build provided on the Ember website.");
|
15
|
+
!function(){var e,t;!function(){var 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){return t.console&&t.console[e]?t.console[e].apply?function(){t.console[e].apply(t.console,arguments)}:function(){var r=Array.prototype.join.call(arguments,", ");t.console[e](r)}:void 0}"undefined"==typeof Ember&&(Ember={});var t=Ember.imports=Ember.imports||this,r=Ember.exports=Ember.exports||this;Ember.lookup=Ember.lookup||this,r.Em=r.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc4",Ember.ENV=Ember.ENV||("undefined"==typeof 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},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.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 b=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return 1!==e}();Ember.tryFinally=b?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=b?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 p={},E="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(E,function(e){p["[object "+e+"]"]=e.toLowerCase()});var d=Object.prototype.toString;Ember.typeOf=function(e){var t;return t=null===e||void 0===e?String(e):p[d.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(b=0,p=f.length;p>b;b++)m=f[b],E[b]=m.before(e,n(),i);return o.call(s)}function u(e){i=i||{},i.exception=e}function c(){for(b=0,p=f.length;p>b;b++)m=f[b],m.after(e,n(),i,E[b]);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,b,p,E=[];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;n=Array.prototype.concat,e=Array.prototype.map||Ember.ArrayPolyfills.map,t=Array.prototype.forEach||Ember.ArrayPolyfills.forEach,r=Array.prototype.indexOf||Ember.ArrayPolyfills.indexOf;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){if(e.replace)return e.replace(t,r,i);var o=n.apply([t,r],i);return e.splice.apply(e,o)},intersection:function(e,t){var r=[];return i.forEach(e,function(e){i.indexOf(t,e)>=0&&r.push(e)}),r}}}(),function(){function e(e){return e.match(a)[0]}function t(t,n){var i,a=s.test(n),u=!a&&o.test(n);if((!t||u)&&(t=Ember.lookup),a&&(n=n.slice(5)),t===Ember.lookup&&(i=e(n),t=r(t,i),n=n.slice(i.length+1)),!n||0===n.length)throw new Error("Invalid Path");return[t,n]}var r,n=Ember.META_KEY,i=Ember.ENV.MANDATORY_SETTER,o=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,s=/^this[\.\*]/,a=/^([^\.\*]+)/;r=function(e,t){if(""===t)return e;if(t||"string"!=typeof e||(t=e,e=null),null===e||-1!==t.indexOf("."))return u(e,t);var r,o=e[n],s=o&&o.descs[t];return s?s.get(e,t):(r=i&&o&&o.watching[t]>0?o.values[t]:e[t],void 0!==r||"object"!=typeof e||t in e||"function"!=typeof e.unknownProperty?r:e.unknownProperty(t))},Ember.config.overrideAccessors&&(Ember.get=r,Ember.config.overrideAccessors(),r=Ember.get);var u=Ember._getPath=function(e,n){var i,o,a,u,c;if(null===e&&-1===n.indexOf("."))return r(Ember.lookup,n);for(i=s.test(n),(!e||i)&&(a=t(e,n),e=a[0],n=a[1],a.length=0),o=n.split("."),c=o.length,u=0;null!=e&&c>u;u++)if(e=r(e,o[u],!0),e&&e.isDestroyed)return void 0;return e};Ember.normalizeTuple=function(e,r){return t(e,r)},Ember.getWithDefault=function(e,t,n){var i=r(e,t);return void 0===i?n:i},Ember.get=r,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++)if(t===e[i][0]&&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[b],o=i&&i.listeners&&i.listeners[r];if(o)for(var s=o.length-1;s>=0;s--){var a=o[s][0],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[b],o=i&&i.listeners&&i.listeners[r],s=[];if(o){for(var a=o.length-1;a>=0;a--){var u=o[a][0],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|=p),-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,1),"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[b],u=a&&a.listeners&&a.listeners[n];if(!u)return;for(var c=u.length-1;c>=0;c--)s(u[c][0],u[c][1])}}function s(r,n,i,o,s){function a(){return s.call(i)}function u(){c&&(c[2]&=~E)}o||"function"!=typeof i||(o=i,i=null);var c,h=t(r,n),l=e(h,i,o);return-1!==l&&(c=h[l].slice(),c[2]|=E,h[l]=c),Ember.tryFinally(a,u)}function a(r,n,i,o,s){function a(){return s.call(i)}function u(){for(f=0,m=b.length;m>f;f++)b[f][2]&=~E}o||"function"!=typeof i||(o=i,i=null);var c,h,l,f,m,b=[];for(f=0,m=n.length;m>f;f++){c=n[f],h=t(r,c);var p=e(h,i,o);-1!==p&&(l=h[p].slice(),l[2]|=E,h[p]=l,b.push(l))}return Ember.tryFinally(a,u)}function u(e){var t=e[b].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[b];n=i&&i.listeners&&i.listeners[t]}if(n){for(var s=n.length-1;s>=0;s--){var a=n[s];if(a){var u=a[0],c=a[1],h=a[2];h&E||(h&p&&o(e,t,u,c),u||(u=e),"string"==typeof c&&(c=u[c]),r?c.apply(u,r):c.call(u))}}return!0}}function h(e,t){var r=e[b],n=r&&r.listeners&&r.listeners[t];return!(!n||!n.length)}function l(e,t){var r=[],n=e[b],i=n&&n.listeners&&n.listeners[t];if(!i)return r;for(var o=0,s=i.length;s>o;o++){var a=i[o][0],u=i[o][1];r.push([a,u])}return r}var f=Ember.create,m=Ember.meta,b=Ember.META_KEY,p=1,E=2;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,i){if(!e.isDestroying){var o=n,s=!o;s&&(o=n={}),r(p,e,t,o,i),s&&(n=null)}}function t(e,t,n){if(!e.isDestroying){var o=i,s=!o;s&&(o=i={}),r(E,e,t,o,n),s&&(i=null)}}function r(e,t,r,n,i){var o=s(t);if(n[o]||(n[o]={}),!n[o][r]){n[o][r]=!0;var a=i.deps;if(a=a&&a[r])for(var u in a){var c=i.descs[u];c&&c._suspended===t||e(t,u)}}}var n,i,o=Ember.meta,s=Ember.guidFor,a=Ember.tryFinally,u=Ember.sendEvent,c=Ember.listenersUnion,h=Ember.listenersDiff,l=Ember._ObserverSet,f=new l,m=new l,b=0,p=Ember.propertyWillChange=function(t,r){var n=o(t,!1),i=n.watching[r]>0||"length"===r,s=n.proto,a=n.descs[r];i&&s!==t&&(a&&a.willChange&&a.willChange(t,r),e(t,r,n),d(t,r,n),_(t,r))},E=Ember.propertyDidChange=function(e,r){var n=o(e,!1),i=n.watching[r]>0||"length"===r,s=n.proto,a=n.descs[r];s!==e&&(a&&a.didChange&&a.didChange(e,r),(i||"length"===r)&&(t(e,r,n),v(e,r,n),O(e,r)))},d=function(e,t,r,n){if(r.hasOwnProperty("chainWatchers")){var i=r.chainWatchers;if(i=i[t])for(var o=0,s=i.length;s>o;o++)i[o].willChange(n)}},v=function(e,t,r,n){if(r.hasOwnProperty("chainWatchers")){var i=r.chainWatchers;if(i=i[t])for(var o=i.length-1;o>=0;o--)i[o].didChange(n)}};Ember.overrideChains=function(e,t,r){v(e,t,r,!0)};var g=Ember.beginPropertyChanges=function(){b++},y=Ember.endPropertyChanges=function(){b--,0>=b&&(f.clear(),m.flush())};Ember.changeProperties=function(e,t){g(),a(e,y,t)};var _=function(e,t){if(!e.isDestroying){var r,n,i=t+":before";b?(r=f.add(e,t,i),n=h(e,i,r),u(e,i,[e,t],n)):u(e,i,[e,t])}},O=function(e,t){if(!e.isDestroying){var r,n=t+":change";b?(r=m.add(e,t,n),c(e,n,r)):u(e,n,[e,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.get,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,a.setup(e,s)):(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.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,a=e(i),u=a.watching;u[o]?u[o]=(u[o]||0)+1:(u[o]=1,s=a.descs[o],s&&s.willWatch&&s.willWatch(i,o),"function"==typeof i.willWatchProperty&&i.willWatchProperty(o),r&&o in i&&(a.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,s=e(t),a=s.watching;1===a[i]?(a[i]=0,o=s.descs[i],o&&o.didUnwatch&&o.didUnwatch(t,i),"function"==typeof t.didUnwatchProperty&&t.didUnwatchProperty(i),r&&i in t&&(n(t,i,{configurable:!0,enumerable:!0,writable:!0,value:s.values[i]}),delete s.values[i])):a[i]>1&&a[i]--}}(),function(){function e(e){return e.match(f)[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){return n(e,!1).proto===e}var n=Ember.meta,i=Ember.get,o=Ember.normalizeTuple,s=Ember.ArrayPolyfills.forEach,a=Ember.warn,u=Ember.watchKey,c=Ember.unwatchKey,h=Ember.propertyWillChange,l=Ember.propertyDidChange,f=/^([^\.\*]+)/,m=[];Ember.flushPendingChains=function(){if(0!==m.length){var e=m;m=[],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===m.length)}};var b=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)}}},p=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()},E=p.prototype;E.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=e&&!r(e)?i(e,this._key):void 0}return this._value},E.destroy=function(){if(this._watching){var e=this._object;e&&b(e,this._key,this),this._watching=!1}},E.copy=function(e){var t,r=new p(null,null,e),n=this._paths;for(t in n)n[t]<=0||r.add(t);return r},E.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 m.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)},E.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)},E.count=0,E.chain=function(t,r,n){var i,o=this._chains;o||(o=this._chains={}),i=o[t],i||(i=o[t]=new p(this,t,n)),i.count++,r&&r.length>0&&(t=e(r),r=r.slice(t.length+1),i.chain(t,r))},E.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())},E.willChange=function(){var e=this._chains;if(e)for(var t in e)e.hasOwnProperty(t)&&e[t].willChange();this._parent&&this._parent.chainWillChange(this,this._key,1)},E.chainWillChange=function(e,t,r){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,r+1):(r>1&&h(this.value(),t),t="this."+t,this._paths[t]>0&&h(this.value(),t))},E.chainDidChange=function(e,t,r){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,r+1):(r>1&&l(this.value(),t),t="this."+t,this._paths[t]>0&&l(this.value(),t))},E.didChange=function(e){if(this._watching){var r=this._parent.value();r!==this._object&&(b(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);e||this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.finishChains=function(e){var t=n(e,!1),r=t.chains;r&&(r.value()!==e&&(t.chains=r=r.copy(e)),r.didChange(!0))}}(),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]=f(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,b(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,p(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,t){for(var r={},n=0;n<t.length;n++)r[t[n]]=u(e,t[n]);return r}function s(e,t){Ember.computed[e]=function(e){var r=l.call(arguments);return Ember.computed(e,function(){return t.apply(this,r)})}}function a(e,t){Ember.computed[e]=function(){var e=l.call(arguments),r=Ember.computed(function(){return t.apply(this,[o(this,e)])});return r.property.apply(r,e)}}var u=Ember.get,c=Ember.set,h=Ember.meta,l=[].slice,f=Ember.create,m=Ember.META_KEY,b=Ember.watch,p=Ember.unwatch;Ember.ComputedProperty=i,i.prototype=new Ember.Descriptor;var E=i.prototype;E.cacheable=function(e){return this._cacheable=e!==!1,this},E.volatile=function(){return this.cacheable(!1)},E.readOnly=function(e){return this._readOnly=void 0===e||!!e,this},E.property=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return this._dependentKeys=e,this},E.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},E.willWatch=function(e,t){var n=e[m];t in n.cache||r(this,e,t,n)},E.didUnwatch=function(e,t){var r=e[m];t in r.cache||n(this,e,t,r)},E.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=h(e);t in r.cache&&(delete r.cache[t],r.watching[t]||n(this,e,t,r))}},E.get=function(e,t){var n,i,o;if(this._cacheable){if(o=h(e),i=o.cache,t in i)return i[t];n=i[t]=this.func.call(e,t),o.watching[t]||r(this,e,t,o)}else n=this.func.call(e,t);return n},E.set=function(e,t,n){var i,o,s=this._cacheable,a=this.func,u=h(e,s),c=u.watching[t],l=this._suspended,f=!1,m=u.cache;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{if(s&&m.hasOwnProperty(t)&&(i=m[t],f=!0),a.wrappedFunction&&(a=a.wrappedFunction),3===a.length)o=a.call(e,t,n,i);else{if(2!==a.length)return Ember.defineProperty(e,t,null,i),Ember.set(e,t,n),void 0;o=a.call(e,t,n)}if(f&&i===o)return;c&&Ember.propertyWillChange(e,t),f&&delete m[t],s&&(c||f||r(this,e,t,u),m[t]=o),c&&Ember.propertyDidChange(e,t)}finally{this._suspended=l}return o},E.setup=function(e,t){var n=e[m];n&&n.watching[t]&&r(this,e,t,h(e))},E.teardown=function(e,t){var r=h(e);return(r.watching[t]||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=l.call(arguments,0,-1),e=l.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=h(e,!1).cache;return r&&t in r?r[t]:void 0},s("empty",function(e){return Ember.isEmpty(u(this,e))}),s("notEmpty",function(e){return!Ember.isEmpty(u(this,e))}),s("none",function(e){return Ember.isNone(u(this,e))}),s("not",function(e){return!u(this,e)}),s("bool",function(e){return!!u(this,e)}),s("match",function(e,t){var r=u(this,e);return"string"==typeof r?!!r.match(t):!1}),s("equal",function(e,t){return u(this,e)===t}),s("gt",function(e,t){return u(this,e)>t}),s("gte",function(e,t){return u(this,e)>=t}),s("lt",function(e,t){return u(this,e)<t}),s("lte",function(e,t){return u(this,e)<=t}),a("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),a("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),a("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),a("map",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?(c(this,e,r),r):u(this,e)})},Ember.computed.oneWay=function(e){return Ember.computed(e,function(){return u(this,e)})},Ember.computed.defaultTo=function(e){return Ember.computed(function(t,r,n){return 1===arguments.length?null!=n?n:u(this,e):null!=r?r:u(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",["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(),o=setTimeout(function(){e.end(),o=null})}function i(e){var t,r,n,o,u=+new Date;e.run(function(){for(n=0,o=f.length;o>n&&(t=f[n],!(t>u));n+=2);for(r=f.splice(0,n),n=1,o=r.length;o>n;n+=2)e.schedule(e.options.defaultQueue,null,r[n])}),f.length&&(s=setTimeout(function(){i(e),s=null,a=null},f[0]-u),a=f[0])}var o,s,a,u=e.DeferredActionQueues,c=[].slice,h=[].pop,l=[],f=[];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 u(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)
|
16
|
+
}},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,c.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=(new Error).stack,o=arguments.length>3?c.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=(new Error).stack,o=arguments.length>3?c.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=h.call(arguments),r=arguments[0],n=arguments[1],o=+new Date+t;n||(n=r,r=null),"string"==typeof n&&(n=r[n]);var u,l;arguments.length>2?(l=c.call(arguments,2),u=function(){n.apply(r,l)}):u=function(){n.call(r)};var m,b;for(m=0,b=f.length;b>m&&!(o<f[m]);m+=2);return f.splice(m,0,o,u),s&&o>a?u:(s&&(clearTimeout(s),s=null),s=setTimeout(function(){i(e),s=null,a=null},t),a=o,u)},debounce:function(e,t){for(var r,n=this,i=arguments,o=h.call(i),s=0,a=l.length;a>s;s++)if(r=l[s],r[0]===e&&r[1]===t)return;var u=setTimeout(function(){n.run.apply(n,i);for(var o=-1,s=0,a=l.length;a>s;s++)if(r=l[s],r[0]===e&&r[1]===t){o=s;break}o>-1&&l.splice(o,1)},o);l.push([e,t,u])},cancelTimers:function(){for(var e=0,t=l.length;t>e;e++)clearTimeout(l[e][2]);l=[],s&&(clearTimeout(s),s=null),f=[],o&&(clearTimeout(o),o=null)},hasTimers:function(){return!!f.length||o},cancel:function(e){if("object"==typeof e&&e.queue&&e.method)return e.queue.cancel(e);if("function"==typeof e)for(var t=0,r=f.length;r>t;t+=2)if(f[t+1]===e)return f.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}),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._queue.slice(),t._queue=[];var c,h,l,f,m=t.options,b=m&&m.before,p=m&&m.after,E=0,d=r.length;for(d&&b&&b();d>E;)c=r[E],h=r[E+1],l=r[E+2],f=r[E+3],"string"==typeof h&&(h=c[h]),l&&l.length>0?h.apply(c,l):h.call(c),E+=4;d&&p&&p(),-1===(i=n(this,a))?a++:a=i}}},t.DeferredActionQueues=r}),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};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}},e.Queue=t})}(),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.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)}}(),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=A(r)):r=t.mixins={},r}function t(e,t){return t&&t.length>0&&(e.mixins=O.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=S(t),e[r]?x:(e[r]=t,t.properties)):t}function i(e,t,r){var n;return n=t.concatenatedProperties||r.concatenatedProperties,e.concatenatedProperties&&(n=n?n.concat(e.concatenatedProperties):e.concatenatedProperties),n}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=A(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,u,c,h){if(n instanceof Ember.Descriptor){if(n===y&&u[t])return x;n.func&&(n=o(i,t,n,c,u)),u[t]=n,c[t]=void 0}else r(n)?n=s(e,t,n,c,u):(h&&C.call(h,t)>=0||"concatenatedProperties"===t)&&(n=a(e,t,n,c)),u[t]=void 0,c[t]=n}function c(e,t,r,o,s,a){function h(e){delete r[e],delete o[e]}for(var l,f,m,b,p,E=0,d=e.length;d>E;E++)if(l=e[E],f=n(t,l),f!==x)if(f){p=Ember.meta(s),b=i(f,o,s);for(m in f)f.hasOwnProperty(m)&&(a.push(m),u(s,m,f[m],p,r,o,b));f.hasOwnProperty("toString")&&(s.toString=f.toString)}else l.mixins&&(c(l.mixins,t,r,o,s,a),l._without&&w.call(l._without,h))}function h(e,t,r,n){if(D.test(t)){var i=n.bindings;i?n.hasOwnProperty("bindings")||(i=n.bindings=A(n.bindings)):i=n.bindings={},i[t]=r}}function l(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 f(e,t){return l(e,t||Ember.meta(e)),e}function m(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){if("function"==typeof r){var o=r[n];if(o)for(var s=0,a=o.length;a>s;s++)Ember[i](e,o[s],null,t)}}function p(e,t,r){var n=e[t];b(e,t,n,"__ember_observesBefore__","removeBeforeObserver"),b(e,t,n,"__ember_observes__","removeObserver"),b(e,t,r,"__ember_observesBefore__","addBeforeObserver"),b(e,t,r,"__ember_observes__","addObserver")}function E(t,r,n){var i,o,s,a={},u={},l=Ember.meta(t),b=[];c(r,e(t),a,u,t,b);for(var E=0,d=b.length;d>E;E++)if(i=b[E],"constructor"!==i&&u.hasOwnProperty(i)&&(s=a[i],o=u[i],s!==y)){for(;s&&s instanceof _;){var v=m(t,s,l,a,u);s=v.desc,o=v.value}(void 0!==s||void 0!==o)&&(p(t,i,o),h(t,i,o,l),j(t,i,s,o,l))}return n||f(t,l),t}function d(e,t,r){var n=S(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(d(i[o],t,r))return!0;return!1}function v(e,t,r){if(!r[S(t)])if(r[S(t)]=!0,t.properties){var n=t.properties;for(var i in n)n.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&w.call(t.mixins,function(t){v(e,t,r)})}var g,y,_,O=Ember.ArrayPolyfills.map,C=Ember.ArrayPolyfills.indexOf,w=Ember.ArrayPolyfills.forEach,P=[].slice,A=Ember.create,j=Ember.defineProperty,S=Ember.guidFor,x={},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=f,Ember.anyUnprocessedMixins=!1,g.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return t(new e,arguments)};var N=g.prototype;N.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},N.apply=function(e){return E(e,[this],!1)},N.applyPartial=function(e){return E(e,[this],!0)},N.detect=function(e){if(!e)return!1;if(e instanceof g)return d(e,this,{});var t=Ember.meta(e,!1).mixins;return t?!!t[S(this)]:!1},N.without=function(){var e=new g(this);return e._without=P.call(arguments),e},N.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},y=new Ember.Descriptor,y.toString=function(){return"(Required Property)"},Ember.required=function(){return y},_=function(e){this.methodName=e},_.prototype=new Ember.Descriptor,Ember.alias=function(e){return new _(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 _(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/defer","exports"],function(e,t){"use strict";function r(e){var t=[],r=n(),i=e.length;0===i&&r.resolve([]);for(var o=function(e){return function(t){s(e,t)}},s=function(e,n){t[e]=n,0===--i&&r.resolve(t)},a=function(e){r.reject(e)},u=0;u<e.length;u++)e[u]&&"function"==typeof e[u].then?e[u].then(o(u),a):s(u,e[u]);return r.promise}var n=e.defer;t.all=r}),e("rsvp/async",["exports"],function(e){"use strict";var t,r="undefined"!=typeof window?window:{},n=r.MutationObserver||r.WebKitMutationObserver;if("undefined"!=typeof process&&"[object process]"==={}.toString.call(process))t=function(e,t){process.nextTick(function(){e.call(t)})};else if(n){var i=[],o=new n(function(){var e=i.slice();i=[],e.forEach(function(e){var t=e[0],r=e[1];t.call(r)})}),s=document.createElement("div");o.observe(s,{attributes:!0}),window.addEventListener("unload",function(){o.disconnect(),o=null}),t=function(e,t){i.push([e,t]),s.setAttribute("drainQueue","drainQueue")}}else t=function(e,t){setTimeout(function(){e.call(t)},1)};e.async=t}),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={},t=new n(function(t,r){e.resolve=t,e.reject=r});return e.promise=t,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=new o(function(e,n){t=e,r=n});return s(i).then(function(i){i.push(n(t,r));try{e.apply(this,i)}catch(o){r(o)}}),a}}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,t){e===t?a(e,t):s(e,t)||a(e,t)}function s(e,t){var r=null;if(n(t)){try{r=t.then}catch(s){return u(e,s),!0}if(i(r)){try{r.call(t,function(r){t!==r?o(e,r):a(e,r)},function(t){u(e,t)})}catch(s){u(e,s)}return!0}}return!1}function a(e,t){c.async(function(){e.trigger("promise:resolved",{detail:t}),e.isFulfilled=!0,e.fulfillmentValue=t})}function u(e,t){c.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedReason=t})}var c=e.config,h=t.EventTarget,l=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 l))return new l(e);var n=function(e){r||(r=!0,o(t,e))},i=function(e){r||(r=!0,u(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);try{e(n,i)}catch(s){i(s)}},f=function(e,t,r,n){var a,c,h,l,f=i(r);if(f)try{a=r(n.detail),h=!0}catch(m){l=!0,c=m}else a=n.detail,h=!0;s(t,a)||(f&&h?o(t,a):l?u(t,c):"resolve"===e?o(t,a):"reject"===e&&u(t,a))};l.prototype={constructor:l,then:function(e,t){var r=new l(function(){});return this.isFulfilled&&c.async(function(){f("resolve",r,e,{detail:this.fulfillmentValue})},this),this.isRejected&&c.async(function(){f("reject",r,t,{detail:this.rejectedReason})},this),this.on("promise:resolved",function(t){f("resolve",r,e,t)}),this.on("promise:failed",function(e){f("reject",r,t,e)}),r}},h.mixin(l.prototype),r.Promise=l}),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"function"==typeof e||"object"==typeof e&&null!==e}function n(e){var t=new i(function(t,n){var i;try{r(e)?(i=e.then,"function"==typeof i?i.call(e,t,n):t(e)):t(e)}catch(o){n(o)}});return t}var i=e.Promise;t.resolve=n}),e("rsvp",["rsvp/events","rsvp/promise","rsvp/node","rsvp/all","rsvp/hash","rsvp/defer","rsvp/config","rsvp/resolve","rsvp/reject","exports"],function(e,t,r,n,i,o,s,a,u,c){"use strict";function h(e,t){d[e]=t}var l=e.EventTarget,f=t.Promise,m=r.denodeify,b=n.all,p=i.hash,E=o.defer,d=s.config,v=a.resolve,g=u.reject;c.Promise=f,c.EventTarget=l,c.all=b,c.hash=p,c.defer=E,c.denodeify=m,c.configure=h,c.resolve=v,c.reject=g})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function 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++)n=t[o],i=e.lookup(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=e.normalize(t);return e.resolve(r)}function a(e,t){var r,n=s(e,t),a=t.split(":"),u=a[0];if(o(e,t,"instantiate")===!1)return n;if(n){var c=[];c=c.concat(e.typeInjections.get(u)||[]),c=c.concat(e.injections[t]||[]);var h=i(e,c);return h.container=e,h._debugContainerKey=t,r=n.create(h)}}function u(e,t){e.cache.eachLocal(function(r,n){o(e,r,"instantiate")!==!1&&t(n)})}function c(e){e.cache.eachLocal(function(t,r){o(e,t,"instantiate")!==!1&&r.destroy()}),e.cache.dict={}}return e.prototype={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},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={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||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},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=a(this,e);return r?(n(this,e)&&t.singleton!==!1&&this.cache.set(e,r),r):void 0},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");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:n})},injection:function(e,t,n){if(this.parent&&r("injection"),-1===e.indexOf(":"))return this.typeInjection(e,t,n);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:n})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;t>e;e++)this.children[e].destroy();this.children=[],u(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;t>e;e++)c(this.children[e]);c(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,b=t.length,p=Math.min(m,b),E=0,d=0;0===E&&p>d;)E=n(e[d],t[d]),d++;return 0!==E?E:b>m?-1:m>b?1:0;case"instance":return Ember.Comparable&&Ember.Comparable.detect(e)?e.compare(e,t):0;case"date":var v=e.getTime(),g=t.getTime();return g>v?-1:v>g?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){if("object"!=typeof e||null===e)return e+"";var t,r=[];for(var n in e)if(e.hasOwnProperty(n)){if(t=e[n],"toString"===t)continue;"function"===Ember.typeOf(t)&&(t="function() { ... }"),r.push(n+": "+t)}return"{"+r.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(){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,0)-1:r++,e=t[n],(null===e?"(null)":void 0===e?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(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(){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({isEnumerable:!0,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.mapProperty(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},mapProperty:function(e){return this.map(function(t){return n(t,e)})},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)})},filterProperty:function(){return this.filter(r.apply(this,arguments))},rejectProperty: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)},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},findProperty:function(){return this.find(r.apply(this,arguments))},every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},everyProperty:function(){return this.every(r.apply(this,arguments))},some:function(e,t){return!!this.find(function(r,n,i){return!!e.call(t,r,n,i)})},someProperty:function(){return this.some(r.apply(this,arguments))},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}})}(),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,!0)===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")
|
17
|
+
}),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(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,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){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;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},r=arguments;1===arguments.length&&"array"===Ember.typeOf(arguments[0])&&(r=arguments[0]);for(var n=0;n<r.length;n++)t[r[n]]=e(this,r[n]);return t},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)});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(){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);if(u.proto=this,e){var h=e;e=null,this.reopen.apply(this,h)}if(t){var l=t;t=null;for(var f=this.concatenatedProperties,m=0,p=l.length;p>m;m++){var g=l[m];for(var y in g)if(g.hasOwnProperty(y)){var _=g[y],O=Ember.IS_BINDING;if(O.test(y)){var C=u.bindings;C?u.hasOwnProperty("bindings")||(C=u.bindings=r(u.bindings)):C=u.bindings={},C[y]=_}var w=u.descs[y];if(f&&d(f,y)>=0){var P=this[y];_=P?"function"==typeof P.concat?P.concat(_):Ember.makeArray(P).concat(_):Ember.makeArray(_)}w?w.set(this,y,_):"function"!=typeof this.setUnknownProperty||y in this?E?Ember.defineProperty(this,y,null,_):this[y]=_:this.setUnknownProperty(y,_)}}}b(this,u),delete u.proto,c(this),this.init.apply(this,arguments)};return s.toString=f.prototype.toString,s.willReopen=function(){o&&(s.PrototypeMixin=f.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.destroy,l=Ember.run.schedule,f=Ember.Mixin,m=f._apply,b=f.finishPartial,p=f.prototype.reopen,E=Ember.ENV.MANDATORY_SETTER,d=Ember.EnumerableUtils.indexOf,v={configurable:!0,writable:!0,enumerable:!1,value:void 0},g=e();g.toString=function(){return"Ember.CoreObject"},g.PrototypeMixin=f.create({reopen:function(){return m(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){return this.isDestroying?void 0:(this.isDestroying=!0,l("actions",this,this.willDestroy),l("destroy",this,this._scheduledDestroy),this)},willDestroy:Ember.K,_scheduledDestroy:function(){this.isDestroyed||(h(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 y=f.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var t,n=e();return n.ClassMixin=f.create(this.ClassMixin),n.PrototypeMixin=f.create(this.PrototypeMixin),n.ClassMixin.ownerConstructor=n,n.PrototypeMixin.ownerConstructor=n,p.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(),p.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return p.apply(this.ClassMixin,arguments),m(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)}});y.ownerConstructor=g,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(y),g.ClassMixin=y,y.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{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){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,a=this._keys;s=i>0?r+i:-1,Ember.beginPropertyChanges(this);for(o in a)a.hasOwnProperty(o)&&(s>0&&e(t,o,this,r,s),Ember.propertyDidChange(this,o));Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(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;Ember.set;var t=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(t,r,n){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=n?e(n,"length"):0;if(this.arrayContentWillChange(t,r,i),n&&0!==n.length){var o=[t,r].concat(n);this.splice.apply(this,o)}else this.splice(t,r);return this.arrayContentDidChange(t,r,i),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()}}),r=["length"];Ember.EnumerableUtils.forEach(t.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(t=t.without.apply(t,r)),Ember.NativeArray=t,Ember.A=function(e){return void 0===e&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){t.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(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,parentController:null,store:null,model:Ember.computed.alias("content"),send:function(t){var r,n=[].slice.call(arguments,1);this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=(Ember.set,Ember.EnumerableUtils.forEach);Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(r,n){var i=0,o=e(this,"sortProperties"),s=e(this,"sortAscending");return t(o,function(t){0===i&&(i=Ember.compare(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=e(this,"container"),o=e(this,"_subControllers"),s=o[t];if(s||(s=i.lookup("controller:"+n,{singleton:!1}),o[t]=s),!s)throw new Error('Could not resolve itemController: "'+n+'"');return s.set("target",this),s.set("parentController",e(this,"parentController")||this),s.set("content",r),s},_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.");
|
data/dist/ember-runtime.prod.js
CHANGED
@@ -12,11 +12,18 @@ var define, requireModule;
|
|
12
12
|
if (seen[name]) { return seen[name]; }
|
13
13
|
seen[name] = {};
|
14
14
|
|
15
|
-
var mod
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
var mod, deps, callback, reified, exports;
|
16
|
+
|
17
|
+
mod = registry[name];
|
18
|
+
|
19
|
+
if (!mod) {
|
20
|
+
throw new Error("Module '" + name + "' not found.");
|
21
|
+
}
|
22
|
+
|
23
|
+
deps = mod.deps;
|
24
|
+
callback = mod.callback;
|
25
|
+
reified = [];
|
26
|
+
exports;
|
20
27
|
|
21
28
|
for (var i=0, l=deps.length; i<l; i++) {
|
22
29
|
if (deps[i] === 'exports') {
|
@@ -55,7 +62,7 @@ var define, requireModule;
|
|
55
62
|
|
56
63
|
@class Ember
|
57
64
|
@static
|
58
|
-
@version 1.0.0-
|
65
|
+
@version 1.0.0-rc4
|
59
66
|
*/
|
60
67
|
|
61
68
|
if ('undefined' === typeof Ember) {
|
@@ -82,10 +89,10 @@ Ember.toString = function() { return "Ember"; };
|
|
82
89
|
/**
|
83
90
|
@property VERSION
|
84
91
|
@type String
|
85
|
-
@default '1.0.0-
|
92
|
+
@default '1.0.0-rc4'
|
86
93
|
@final
|
87
94
|
*/
|
88
|
-
Ember.VERSION = '1.0.0-
|
95
|
+
Ember.VERSION = '1.0.0-rc4';
|
89
96
|
|
90
97
|
/**
|
91
98
|
Standard environmental variables. You can define these in a global `ENV`
|
@@ -234,7 +241,7 @@ Ember.onerror = null;
|
|
234
241
|
/**
|
235
242
|
@private
|
236
243
|
|
237
|
-
Wrap code block in a try/catch if
|
244
|
+
Wrap code block in a try/catch if `Ember.onerror` is set.
|
238
245
|
|
239
246
|
@method handleErrors
|
240
247
|
@for Ember
|
@@ -310,7 +317,7 @@ Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isN
|
|
310
317
|
@return {Boolean}
|
311
318
|
*/
|
312
319
|
Ember.isEmpty = function(obj) {
|
313
|
-
return obj
|
320
|
+
return Ember.isNone(obj) || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
|
314
321
|
};
|
315
322
|
Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty) ;
|
316
323
|
|
@@ -343,6 +350,13 @@ var platform = Ember.platform = {};
|
|
343
350
|
*/
|
344
351
|
Ember.create = Object.create;
|
345
352
|
|
353
|
+
// IE8 has Object.create but it couldn't treat property descripters.
|
354
|
+
if (Ember.create) {
|
355
|
+
if (Ember.create({a: 1}, {a: {value: 2}}).a !== 2) {
|
356
|
+
Ember.create = null;
|
357
|
+
}
|
358
|
+
}
|
359
|
+
|
346
360
|
// STUB_OBJECT_CREATE allows us to override other libraries that stub
|
347
361
|
// Object.create different than we would prefer
|
348
362
|
if (!Ember.create || Ember.ENV.STUB_OBJECT_CREATE) {
|
@@ -663,7 +677,7 @@ Ember.guidFor = function guidFor(obj) {
|
|
663
677
|
if (obj === undefined) return "(undefined)";
|
664
678
|
if (obj === null) return "(null)";
|
665
679
|
|
666
|
-
var
|
680
|
+
var ret;
|
667
681
|
var type = typeof obj;
|
668
682
|
|
669
683
|
// Don't allow prototype changes to String etc. to change the guidFor
|
@@ -812,6 +826,7 @@ Ember.setMeta = function setMeta(obj, property, value) {
|
|
812
826
|
};
|
813
827
|
|
814
828
|
/**
|
829
|
+
@deprecated
|
815
830
|
@private
|
816
831
|
|
817
832
|
In order to store defaults for a class, a prototype may need to create
|
@@ -844,6 +859,7 @@ Ember.setMeta = function setMeta(obj, property, value) {
|
|
844
859
|
shared with its constructor
|
845
860
|
*/
|
846
861
|
Ember.metaPath = function metaPath(obj, path, writable) {
|
862
|
+
|
847
863
|
var meta = Ember.meta(obj, writable), keyName, value;
|
848
864
|
|
849
865
|
for (var i=0, l=path.length; i<l; i++) {
|
@@ -1064,7 +1080,7 @@ if (needsFinallyFix) {
|
|
1064
1080
|
*/
|
1065
1081
|
if (needsFinallyFix) {
|
1066
1082
|
Ember.tryCatchFinally = function(tryable, catchable, finalizer, binding) {
|
1067
|
-
var result, finalResult, finalError
|
1083
|
+
var result, finalResult, finalError;
|
1068
1084
|
|
1069
1085
|
binding = binding || this;
|
1070
1086
|
|
@@ -1174,6 +1190,7 @@ Ember.typeOf = function(item) {
|
|
1174
1190
|
|
1175
1191
|
return ret;
|
1176
1192
|
};
|
1193
|
+
|
1177
1194
|
})();
|
1178
1195
|
|
1179
1196
|
|
@@ -1420,820 +1437,458 @@ var utils = Ember.EnumerableUtils = {
|
|
1420
1437
|
@module ember-metal
|
1421
1438
|
*/
|
1422
1439
|
|
1423
|
-
|
1424
|
-
JavaScript (before ES6) does not have a Map implementation. Objects,
|
1425
|
-
which are often used as dictionaries, may only have Strings as keys.
|
1426
|
-
|
1427
|
-
Because Ember has a way to get a unique identifier for every object
|
1428
|
-
via `Ember.guidFor`, we can implement a performant Map with arbitrary
|
1429
|
-
keys. Because it is commonly used in low-level bookkeeping, Map is
|
1430
|
-
implemented as a pure JavaScript object for performance.
|
1431
|
-
|
1432
|
-
This implementation follows the current iteration of the ES6 proposal for
|
1433
|
-
maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
|
1434
|
-
with two exceptions. First, because we need our implementation to be pleasant
|
1435
|
-
on older browsers, we do not use the `delete` name (using `remove` instead).
|
1436
|
-
Second, as we do not have the luxury of in-VM iteration, we implement a
|
1437
|
-
forEach method for iteration.
|
1438
|
-
|
1439
|
-
Map is mocked out to look like an Ember object, so you can do
|
1440
|
-
`Ember.Map.create()` for symmetry with other Ember classes.
|
1441
|
-
*/
|
1442
|
-
var guidFor = Ember.guidFor,
|
1443
|
-
indexOf = Ember.ArrayPolyfills.indexOf;
|
1440
|
+
var META_KEY = Ember.META_KEY, get;
|
1444
1441
|
|
1445
|
-
var
|
1446
|
-
var output = {};
|
1442
|
+
var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
|
1447
1443
|
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1444
|
+
var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.\*]/;
|
1445
|
+
var HAS_THIS = /^this[\.\*]/;
|
1446
|
+
var FIRST_KEY = /^([^\.\*]+)/;
|
1451
1447
|
|
1452
|
-
|
1453
|
-
|
1448
|
+
// ..........................................................
|
1449
|
+
// GET AND SET
|
1450
|
+
//
|
1451
|
+
// If we are on a platform that supports accessors we can use those.
|
1452
|
+
// Otherwise simulate accessors by looking up the property directly on the
|
1453
|
+
// object.
|
1454
1454
|
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1455
|
+
/**
|
1456
|
+
Gets the value of a property on an object. If the property is computed,
|
1457
|
+
the function will be invoked. If the property is not defined but the
|
1458
|
+
object implements the `unknownProperty` method then that will be invoked.
|
1458
1459
|
|
1459
|
-
|
1460
|
-
|
1460
|
+
If you plan to run on IE8 and older browsers then you should use this
|
1461
|
+
method anytime you want to retrieve a property on an object that you don't
|
1462
|
+
know for sure is private. (Properties beginning with an underscore '_'
|
1463
|
+
are considered private.)
|
1461
1464
|
|
1462
|
-
|
1463
|
-
|
1465
|
+
On all newer browsers, you only need to use this method to retrieve
|
1466
|
+
properties if the property might not be defined on the object and you want
|
1467
|
+
to respect the `unknownProperty` handler. Otherwise you can ignore this
|
1468
|
+
method.
|
1464
1469
|
|
1465
|
-
|
1466
|
-
|
1467
|
-
Please do not use it at this time. We plan to clean it up
|
1468
|
-
and add many tests soon.
|
1470
|
+
Note that if the object itself is `undefined`, this method will throw
|
1471
|
+
an error.
|
1469
1472
|
|
1470
|
-
@
|
1471
|
-
@
|
1472
|
-
@
|
1473
|
-
@
|
1473
|
+
@method get
|
1474
|
+
@for Ember
|
1475
|
+
@param {Object} obj The object to retrieve from.
|
1476
|
+
@param {String} keyName The property key to retrieve
|
1477
|
+
@return {Object} the property value or `null`.
|
1474
1478
|
*/
|
1475
|
-
|
1476
|
-
this
|
1477
|
-
|
1479
|
+
get = function get(obj, keyName) {
|
1480
|
+
// Helpers that operate with 'this' within an #each
|
1481
|
+
if (keyName === '') {
|
1482
|
+
return obj;
|
1483
|
+
}
|
1478
1484
|
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
*/
|
1484
|
-
OrderedSet.create = function() {
|
1485
|
-
return new OrderedSet();
|
1486
|
-
};
|
1485
|
+
if (!keyName && 'string'===typeof obj) {
|
1486
|
+
keyName = obj;
|
1487
|
+
obj = null;
|
1488
|
+
}
|
1487
1489
|
|
1488
1490
|
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
*/
|
1493
|
-
clear: function() {
|
1494
|
-
this.presenceSet = {};
|
1495
|
-
this.list = [];
|
1496
|
-
},
|
1491
|
+
if (obj === null || keyName.indexOf('.') !== -1) {
|
1492
|
+
return getPath(obj, keyName);
|
1493
|
+
}
|
1497
1494
|
|
1498
|
-
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1495
|
+
var meta = obj[META_KEY], desc = meta && meta.descs[keyName], ret;
|
1496
|
+
if (desc) {
|
1497
|
+
return desc.get(obj, keyName);
|
1498
|
+
} else {
|
1499
|
+
if (MANDATORY_SETTER && meta && meta.watching[keyName] > 0) {
|
1500
|
+
ret = meta.values[keyName];
|
1501
|
+
} else {
|
1502
|
+
ret = obj[keyName];
|
1503
|
+
}
|
1506
1504
|
|
1507
|
-
if (
|
1505
|
+
if (ret === undefined &&
|
1506
|
+
'object' === typeof obj && !(keyName in obj) && 'function' === typeof obj.unknownProperty) {
|
1507
|
+
return obj.unknownProperty(keyName);
|
1508
|
+
}
|
1508
1509
|
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1510
|
+
return ret;
|
1511
|
+
}
|
1512
|
+
};
|
1512
1513
|
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
presenceSet = this.presenceSet,
|
1520
|
-
list = this.list;
|
1514
|
+
// Currently used only by Ember Data tests
|
1515
|
+
if (Ember.config.overrideAccessors) {
|
1516
|
+
Ember.get = get;
|
1517
|
+
Ember.config.overrideAccessors();
|
1518
|
+
get = Ember.get;
|
1519
|
+
}
|
1521
1520
|
|
1522
|
-
|
1521
|
+
function firstKey(path) {
|
1522
|
+
return path.match(FIRST_KEY)[0];
|
1523
|
+
}
|
1523
1524
|
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1525
|
+
// assumes path is already normalized
|
1526
|
+
function normalizeTuple(target, path) {
|
1527
|
+
var hasThis = HAS_THIS.test(path),
|
1528
|
+
isGlobal = !hasThis && IS_GLOBAL_PATH.test(path),
|
1529
|
+
key;
|
1529
1530
|
|
1530
|
-
|
1531
|
-
|
1532
|
-
@return {Boolean}
|
1533
|
-
*/
|
1534
|
-
isEmpty: function() {
|
1535
|
-
return this.list.length === 0;
|
1536
|
-
},
|
1531
|
+
if (!target || isGlobal) target = Ember.lookup;
|
1532
|
+
if (hasThis) path = path.slice(5);
|
1537
1533
|
|
1538
|
-
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
has: function(obj) {
|
1544
|
-
var guid = guidFor(obj),
|
1545
|
-
presenceSet = this.presenceSet;
|
1534
|
+
if (target === Ember.lookup) {
|
1535
|
+
key = firstKey(path);
|
1536
|
+
target = get(target, key);
|
1537
|
+
path = path.slice(key.length+1);
|
1538
|
+
}
|
1546
1539
|
|
1547
|
-
|
1548
|
-
|
1540
|
+
// must return some kind of path to be valid else other things will break.
|
1541
|
+
if (!path || path.length===0) throw new Error('Invalid Path');
|
1549
1542
|
|
1550
|
-
|
1551
|
-
|
1552
|
-
@param {Function} fn
|
1553
|
-
@param self
|
1554
|
-
*/
|
1555
|
-
forEach: function(fn, self) {
|
1556
|
-
// allow mutation during iteration
|
1557
|
-
var list = this.toArray();
|
1543
|
+
return [ target, path ];
|
1544
|
+
}
|
1558
1545
|
|
1559
|
-
|
1560
|
-
|
1561
|
-
}
|
1562
|
-
},
|
1546
|
+
var getPath = Ember._getPath = function(root, path) {
|
1547
|
+
var hasThis, parts, tuple, idx, len;
|
1563
1548
|
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
toArray: function() {
|
1569
|
-
return this.list.slice();
|
1570
|
-
},
|
1549
|
+
// If there is no root and path is a key name, return that
|
1550
|
+
// property from the global object.
|
1551
|
+
// E.g. get('Ember') -> Ember
|
1552
|
+
if (root === null && path.indexOf('.') === -1) { return get(Ember.lookup, path); }
|
1571
1553
|
|
1572
|
-
|
1573
|
-
|
1574
|
-
@return {Ember.OrderedSet}
|
1575
|
-
*/
|
1576
|
-
copy: function() {
|
1577
|
-
var set = new OrderedSet();
|
1554
|
+
// detect complicated paths and normalize them
|
1555
|
+
hasThis = HAS_THIS.test(path);
|
1578
1556
|
|
1579
|
-
|
1580
|
-
|
1557
|
+
if (!root || hasThis) {
|
1558
|
+
tuple = normalizeTuple(root, path);
|
1559
|
+
root = tuple[0];
|
1560
|
+
path = tuple[1];
|
1561
|
+
tuple.length = 0;
|
1562
|
+
}
|
1581
1563
|
|
1582
|
-
|
1564
|
+
parts = path.split(".");
|
1565
|
+
len = parts.length;
|
1566
|
+
for (idx = 0; root != null && idx < len; idx++) {
|
1567
|
+
root = get(root, parts[idx], true);
|
1568
|
+
if (root && root.isDestroyed) { return undefined; }
|
1583
1569
|
}
|
1570
|
+
return root;
|
1584
1571
|
};
|
1585
1572
|
|
1586
1573
|
/**
|
1587
|
-
|
1588
|
-
default Objects, the keys of a Map can be any JavaScript
|
1589
|
-
object.
|
1574
|
+
@private
|
1590
1575
|
|
1591
|
-
|
1576
|
+
Normalizes a target/path pair to reflect that actual target/path that should
|
1577
|
+
be observed, etc. This takes into account passing in global property
|
1578
|
+
paths (i.e. a path beginning with a captial letter not defined on the
|
1579
|
+
target) and * separators.
|
1592
1580
|
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
replace an entry in `values`. When an entry is deleted,
|
1599
|
-
we delete its entry in `keys` and `values`.
|
1600
|
-
|
1601
|
-
@class Map
|
1602
|
-
@namespace Ember
|
1603
|
-
@private
|
1604
|
-
@constructor
|
1605
|
-
*/
|
1606
|
-
var Map = Ember.Map = function() {
|
1607
|
-
this.keys = Ember.OrderedSet.create();
|
1608
|
-
this.values = {};
|
1609
|
-
};
|
1610
|
-
|
1611
|
-
/**
|
1612
|
-
@method create
|
1613
|
-
@static
|
1581
|
+
@method normalizeTuple
|
1582
|
+
@for Ember
|
1583
|
+
@param {Object} target The current target. May be `null`.
|
1584
|
+
@param {String} path A path on the target or a global property path.
|
1585
|
+
@return {Array} a temporary array with the normalized target/path pair.
|
1614
1586
|
*/
|
1615
|
-
|
1616
|
-
return
|
1587
|
+
Ember.normalizeTuple = function(target, path) {
|
1588
|
+
return normalizeTuple(target, path);
|
1617
1589
|
};
|
1618
1590
|
|
1619
|
-
|
1620
|
-
|
1621
|
-
Retrieve the value associated with a given key.
|
1591
|
+
Ember.getWithDefault = function(root, key, defaultValue) {
|
1592
|
+
var value = get(root, key);
|
1622
1593
|
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
*/
|
1627
|
-
get: function(key) {
|
1628
|
-
var values = this.values,
|
1629
|
-
guid = guidFor(key);
|
1594
|
+
if (value === undefined) { return defaultValue; }
|
1595
|
+
return value;
|
1596
|
+
};
|
1630
1597
|
|
1631
|
-
return values[guid];
|
1632
|
-
},
|
1633
1598
|
|
1634
|
-
|
1635
|
-
|
1636
|
-
provided, the new value will replace the old value.
|
1599
|
+
Ember.get = get;
|
1600
|
+
Ember.getPath = Ember.deprecateFunc('getPath is deprecated since get now supports paths', Ember.get);
|
1637
1601
|
|
1638
|
-
|
1639
|
-
@param {*} key
|
1640
|
-
@param {*} value
|
1641
|
-
*/
|
1642
|
-
set: function(key, value) {
|
1643
|
-
var keys = this.keys,
|
1644
|
-
values = this.values,
|
1645
|
-
guid = guidFor(key);
|
1602
|
+
})();
|
1646
1603
|
|
1647
|
-
keys.add(key);
|
1648
|
-
values[guid] = value;
|
1649
|
-
},
|
1650
1604
|
|
1651
|
-
/**
|
1652
|
-
Removes a value from the map for an associated key.
|
1653
1605
|
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
remove: function(key) {
|
1659
|
-
// don't use ES6 "delete" because it will be annoying
|
1660
|
-
// to use in browsers that are not ES6 friendly;
|
1661
|
-
var keys = this.keys,
|
1662
|
-
values = this.values,
|
1663
|
-
guid = guidFor(key);
|
1606
|
+
(function() {
|
1607
|
+
/**
|
1608
|
+
@module ember-metal
|
1609
|
+
*/
|
1664
1610
|
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1670
|
-
return false;
|
1671
|
-
}
|
1672
|
-
},
|
1611
|
+
var o_create = Ember.create,
|
1612
|
+
metaFor = Ember.meta,
|
1613
|
+
META_KEY = Ember.META_KEY,
|
1614
|
+
/* listener flags */
|
1615
|
+
ONCE = 1, SUSPENDED = 2;
|
1673
1616
|
|
1674
|
-
|
1675
|
-
|
1617
|
+
/*
|
1618
|
+
The event system uses a series of nested hashes to store listeners on an
|
1619
|
+
object. When a listener is registered, or when an event arrives, these
|
1620
|
+
hashes are consulted to determine which target and action pair to invoke.
|
1676
1621
|
|
1677
|
-
|
1678
|
-
@param {*} key
|
1679
|
-
@return {Boolean} true if the item was present, false otherwise
|
1680
|
-
*/
|
1681
|
-
has: function(key) {
|
1682
|
-
var values = this.values,
|
1683
|
-
guid = guidFor(key);
|
1622
|
+
The hashes are stored in the object's meta hash, and look like this:
|
1684
1623
|
|
1685
|
-
|
1686
|
-
|
1624
|
+
// Object's meta hash
|
1625
|
+
{
|
1626
|
+
listeners: { // variable name: `listenerSet`
|
1627
|
+
"foo:changed": [ // variable name: `actions`
|
1628
|
+
[target, method, flags]
|
1629
|
+
]
|
1630
|
+
}
|
1631
|
+
}
|
1687
1632
|
|
1688
|
-
|
1689
|
-
Iterate over all the keys and values. Calls the function once
|
1690
|
-
for each key, passing in the key and value, in that order.
|
1633
|
+
*/
|
1691
1634
|
|
1692
|
-
|
1635
|
+
function indexOf(array, target, method) {
|
1636
|
+
var index = -1;
|
1637
|
+
for (var i = 0, l = array.length; i < l; i++) {
|
1638
|
+
if (target === array[i][0] && method === array[i][1]) { index = i; break; }
|
1639
|
+
}
|
1640
|
+
return index;
|
1641
|
+
}
|
1693
1642
|
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
callback. By default, `this` is the map.
|
1698
|
-
*/
|
1699
|
-
forEach: function(callback, self) {
|
1700
|
-
var keys = this.keys,
|
1701
|
-
values = this.values;
|
1643
|
+
function actionsFor(obj, eventName) {
|
1644
|
+
var meta = metaFor(obj, true),
|
1645
|
+
actions;
|
1702
1646
|
|
1703
|
-
|
1704
|
-
var guid = guidFor(key);
|
1705
|
-
callback.call(self, key, values[guid]);
|
1706
|
-
});
|
1707
|
-
},
|
1647
|
+
if (!meta.listeners) { meta.listeners = {}; }
|
1708
1648
|
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
*/
|
1713
|
-
copy: function() {
|
1714
|
-
return copyMap(this, new Map());
|
1649
|
+
if (!meta.hasOwnProperty('listeners')) {
|
1650
|
+
// setup inherited copy of the listeners object
|
1651
|
+
meta.listeners = o_create(meta.listeners);
|
1715
1652
|
}
|
1716
|
-
};
|
1717
1653
|
|
1718
|
-
|
1719
|
-
@class MapWithDefault
|
1720
|
-
@namespace Ember
|
1721
|
-
@extends Ember.Map
|
1722
|
-
@private
|
1723
|
-
@constructor
|
1724
|
-
@param [options]
|
1725
|
-
@param {*} [options.defaultValue]
|
1726
|
-
*/
|
1727
|
-
var MapWithDefault = Ember.MapWithDefault = function(options) {
|
1728
|
-
Map.call(this);
|
1729
|
-
this.defaultValue = options.defaultValue;
|
1730
|
-
};
|
1654
|
+
actions = meta.listeners[eventName];
|
1731
1655
|
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
@return {Ember.MapWithDefault|Ember.Map} If options are passed, returns
|
1738
|
-
`Ember.MapWithDefault` otherwise returns `Ember.Map`
|
1739
|
-
*/
|
1740
|
-
MapWithDefault.create = function(options) {
|
1741
|
-
if (options) {
|
1742
|
-
return new MapWithDefault(options);
|
1743
|
-
} else {
|
1744
|
-
return new Map();
|
1656
|
+
// if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
|
1657
|
+
if (actions && !meta.listeners.hasOwnProperty(eventName)) {
|
1658
|
+
actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
|
1659
|
+
} else if (!actions) {
|
1660
|
+
actions = meta.listeners[eventName] = [];
|
1745
1661
|
}
|
1746
|
-
};
|
1747
1662
|
|
1748
|
-
|
1663
|
+
return actions;
|
1664
|
+
}
|
1749
1665
|
|
1750
|
-
|
1751
|
-
|
1666
|
+
function actionsUnion(obj, eventName, otherActions) {
|
1667
|
+
var meta = obj[META_KEY],
|
1668
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
1752
1669
|
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1670
|
+
if (!actions) { return; }
|
1671
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
1672
|
+
var target = actions[i][0],
|
1673
|
+
method = actions[i][1],
|
1674
|
+
flags = actions[i][2],
|
1675
|
+
actionIndex = indexOf(otherActions, target, method);
|
1759
1676
|
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
var defaultValue = this.defaultValue(key);
|
1764
|
-
this.set(key, defaultValue);
|
1765
|
-
return defaultValue;
|
1677
|
+
if (actionIndex === -1) {
|
1678
|
+
otherActions.push([target, method, flags]);
|
1679
|
+
}
|
1766
1680
|
}
|
1767
|
-
}
|
1681
|
+
}
|
1768
1682
|
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
MapWithDefault.prototype.copy = function() {
|
1774
|
-
return copyMap(this, new MapWithDefault({
|
1775
|
-
defaultValue: this.defaultValue
|
1776
|
-
}));
|
1777
|
-
};
|
1683
|
+
function actionsDiff(obj, eventName, otherActions) {
|
1684
|
+
var meta = obj[META_KEY],
|
1685
|
+
actions = meta && meta.listeners && meta.listeners[eventName],
|
1686
|
+
diffActions = [];
|
1778
1687
|
|
1779
|
-
|
1688
|
+
if (!actions) { return; }
|
1689
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
1690
|
+
var target = actions[i][0],
|
1691
|
+
method = actions[i][1],
|
1692
|
+
flags = actions[i][2],
|
1693
|
+
actionIndex = indexOf(otherActions, target, method);
|
1780
1694
|
|
1695
|
+
if (actionIndex !== -1) { continue; }
|
1781
1696
|
|
1697
|
+
otherActions.push([target, method, flags]);
|
1698
|
+
diffActions.push([target, method, flags]);
|
1699
|
+
}
|
1700
|
+
|
1701
|
+
return diffActions;
|
1702
|
+
}
|
1782
1703
|
|
1783
|
-
(function() {
|
1784
1704
|
/**
|
1785
|
-
|
1705
|
+
Add an event listener
|
1706
|
+
|
1707
|
+
@method addListener
|
1708
|
+
@for Ember
|
1709
|
+
@param obj
|
1710
|
+
@param {String} eventName
|
1711
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
1712
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
1713
|
+
@param {Boolean} once A flag whether a function should only be called once
|
1786
1714
|
*/
|
1715
|
+
function addListener(obj, eventName, target, method, once) {
|
1787
1716
|
|
1788
|
-
var META_KEY = Ember.META_KEY, get;
|
1789
1717
|
|
1790
|
-
|
1718
|
+
if (!method && 'function' === typeof target) {
|
1719
|
+
method = target;
|
1720
|
+
target = null;
|
1721
|
+
}
|
1791
1722
|
|
1792
|
-
var
|
1793
|
-
|
1794
|
-
|
1723
|
+
var actions = actionsFor(obj, eventName),
|
1724
|
+
actionIndex = indexOf(actions, target, method),
|
1725
|
+
flags = 0;
|
1795
1726
|
|
1796
|
-
|
1797
|
-
// GET AND SET
|
1798
|
-
//
|
1799
|
-
// If we are on a platform that supports accessors we can use those.
|
1800
|
-
// Otherwise simulate accessors by looking up the property directly on the
|
1801
|
-
// object.
|
1727
|
+
if (once) flags |= ONCE;
|
1802
1728
|
|
1803
|
-
|
1804
|
-
Gets the value of a property on an object. If the property is computed,
|
1805
|
-
the function will be invoked. If the property is not defined but the
|
1806
|
-
object implements the `unknownProperty` method then that will be invoked.
|
1729
|
+
if (actionIndex !== -1) { return; }
|
1807
1730
|
|
1808
|
-
|
1809
|
-
method anytime you want to retrieve a property on an object that you don't
|
1810
|
-
know for sure is private. (Properties beginning with an underscore '_'
|
1811
|
-
are considered private.)
|
1731
|
+
actions.push([target, method, flags]);
|
1812
1732
|
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1733
|
+
if ('function' === typeof obj.didAddListener) {
|
1734
|
+
obj.didAddListener(eventName, target, method);
|
1735
|
+
}
|
1736
|
+
}
|
1817
1737
|
|
1818
|
-
|
1819
|
-
an
|
1738
|
+
/**
|
1739
|
+
Remove an event listener
|
1820
1740
|
|
1821
|
-
|
1741
|
+
Arguments should match those passed to `Ember.addListener`.
|
1742
|
+
|
1743
|
+
@method removeListener
|
1822
1744
|
@for Ember
|
1823
|
-
@param
|
1824
|
-
@param {String}
|
1825
|
-
@
|
1745
|
+
@param obj
|
1746
|
+
@param {String} eventName
|
1747
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
1748
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
1826
1749
|
*/
|
1827
|
-
|
1828
|
-
// Helpers that operate with 'this' within an #each
|
1829
|
-
if (keyName === '') {
|
1830
|
-
return obj;
|
1831
|
-
}
|
1750
|
+
function removeListener(obj, eventName, target, method) {
|
1832
1751
|
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1752
|
+
|
1753
|
+
if (!method && 'function' === typeof target) {
|
1754
|
+
method = target;
|
1755
|
+
target = null;
|
1836
1756
|
}
|
1837
1757
|
|
1838
|
-
|
1758
|
+
function _removeListener(target, method) {
|
1759
|
+
var actions = actionsFor(obj, eventName),
|
1760
|
+
actionIndex = indexOf(actions, target, method);
|
1839
1761
|
|
1840
|
-
|
1841
|
-
|
1762
|
+
// action doesn't exist, give up silently
|
1763
|
+
if (actionIndex === -1) { return; }
|
1842
1764
|
|
1765
|
+
actions.splice(actionIndex, 1);
|
1843
1766
|
|
1844
|
-
|
1845
|
-
|
1846
|
-
return desc.get(obj, keyName);
|
1847
|
-
} else {
|
1848
|
-
if (MANDATORY_SETTER && meta && meta.watching[keyName] > 0) {
|
1849
|
-
ret = meta.values[keyName];
|
1850
|
-
} else {
|
1851
|
-
ret = obj[keyName];
|
1767
|
+
if ('function' === typeof obj.didRemoveListener) {
|
1768
|
+
obj.didRemoveListener(eventName, target, method);
|
1852
1769
|
}
|
1770
|
+
}
|
1853
1771
|
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1772
|
+
if (method) {
|
1773
|
+
_removeListener(target, method);
|
1774
|
+
} else {
|
1775
|
+
var meta = obj[META_KEY],
|
1776
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
1858
1777
|
|
1859
|
-
return
|
1778
|
+
if (!actions) { return; }
|
1779
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
1780
|
+
_removeListener(actions[i][0], actions[i][1]);
|
1781
|
+
}
|
1860
1782
|
}
|
1861
|
-
};
|
1862
|
-
|
1863
|
-
// Currently used only by Ember Data tests
|
1864
|
-
if (Ember.config.overrideAccessors) {
|
1865
|
-
Ember.get = get;
|
1866
|
-
Ember.config.overrideAccessors();
|
1867
|
-
get = Ember.get;
|
1868
1783
|
}
|
1869
1784
|
|
1870
|
-
|
1871
|
-
|
1872
|
-
}
|
1785
|
+
/**
|
1786
|
+
@private
|
1873
1787
|
|
1874
|
-
|
1875
|
-
function normalizeTuple(target, path) {
|
1876
|
-
var hasThis = HAS_THIS.test(path),
|
1877
|
-
isGlobal = !hasThis && IS_GLOBAL_PATH.test(path),
|
1878
|
-
key;
|
1788
|
+
Suspend listener during callback.
|
1879
1789
|
|
1880
|
-
|
1881
|
-
|
1790
|
+
This should only be used by the target of the event listener
|
1791
|
+
when it is taking an action that would cause the event, e.g.
|
1792
|
+
an object might suspend its property change listener while it is
|
1793
|
+
setting that property.
|
1882
1794
|
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
|
1795
|
+
@method suspendListener
|
1796
|
+
@for Ember
|
1797
|
+
@param obj
|
1798
|
+
@param {String} eventName
|
1799
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
1800
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
1801
|
+
@param {Function} callback
|
1802
|
+
*/
|
1803
|
+
function suspendListener(obj, eventName, target, method, callback) {
|
1804
|
+
if (!method && 'function' === typeof target) {
|
1805
|
+
method = target;
|
1806
|
+
target = null;
|
1887
1807
|
}
|
1888
1808
|
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
1892
|
-
return [ target, path ];
|
1893
|
-
}
|
1894
|
-
|
1895
|
-
var getPath = Ember._getPath = function(root, path) {
|
1896
|
-
var hasThis, parts, tuple, idx, len;
|
1897
|
-
|
1898
|
-
// If there is no root and path is a key name, return that
|
1899
|
-
// property from the global object.
|
1900
|
-
// E.g. get('Ember') -> Ember
|
1901
|
-
if (root === null && path.indexOf('.') === -1) { return get(Ember.lookup, path); }
|
1902
|
-
|
1903
|
-
// detect complicated paths and normalize them
|
1904
|
-
hasThis = HAS_THIS.test(path);
|
1809
|
+
var actions = actionsFor(obj, eventName),
|
1810
|
+
actionIndex = indexOf(actions, target, method),
|
1811
|
+
action;
|
1905
1812
|
|
1906
|
-
if (
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
tuple.length = 0;
|
1813
|
+
if (actionIndex !== -1) {
|
1814
|
+
action = actions[actionIndex].slice(); // copy it, otherwise we're modifying a shared object
|
1815
|
+
action[2] |= SUSPENDED; // mark the action as suspended
|
1816
|
+
actions[actionIndex] = action; // replace the shared object with our copy
|
1911
1817
|
}
|
1912
1818
|
|
1913
|
-
|
1914
|
-
|
1915
|
-
|
1916
|
-
|
1917
|
-
|
1918
|
-
}
|
1919
|
-
return root;
|
1920
|
-
};
|
1819
|
+
function tryable() { return callback.call(target); }
|
1820
|
+
function finalizer() { if (action) { action[2] &= ~SUSPENDED; } }
|
1821
|
+
|
1822
|
+
return Ember.tryFinally(tryable, finalizer);
|
1823
|
+
}
|
1921
1824
|
|
1922
1825
|
/**
|
1923
1826
|
@private
|
1924
1827
|
|
1925
|
-
|
1926
|
-
be observed, etc. This takes into account passing in global property
|
1927
|
-
paths (i.e. a path beginning with a captial letter not defined on the
|
1928
|
-
target) and * separators.
|
1828
|
+
Suspend listener during callback.
|
1929
1829
|
|
1930
|
-
|
1830
|
+
This should only be used by the target of the event listener
|
1831
|
+
when it is taking an action that would cause the event, e.g.
|
1832
|
+
an object might suspend its property change listener while it is
|
1833
|
+
setting that property.
|
1834
|
+
|
1835
|
+
@method suspendListener
|
1931
1836
|
@for Ember
|
1932
|
-
@param
|
1933
|
-
@param {
|
1934
|
-
@
|
1837
|
+
@param obj
|
1838
|
+
@param {Array} eventName Array of event names
|
1839
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
1840
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
1841
|
+
@param {Function} callback
|
1935
1842
|
*/
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1843
|
+
function suspendListeners(obj, eventNames, target, method, callback) {
|
1844
|
+
if (!method && 'function' === typeof target) {
|
1845
|
+
method = target;
|
1846
|
+
target = null;
|
1847
|
+
}
|
1939
1848
|
|
1940
|
-
|
1941
|
-
|
1849
|
+
var suspendedActions = [],
|
1850
|
+
eventName, actions, action, i, l;
|
1942
1851
|
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1852
|
+
for (i=0, l=eventNames.length; i<l; i++) {
|
1853
|
+
eventName = eventNames[i];
|
1854
|
+
actions = actionsFor(obj, eventName);
|
1855
|
+
var actionIndex = indexOf(actions, target, method);
|
1946
1856
|
|
1857
|
+
if (actionIndex !== -1) {
|
1858
|
+
action = actions[actionIndex].slice();
|
1859
|
+
action[2] |= SUSPENDED;
|
1860
|
+
actions[actionIndex] = action;
|
1861
|
+
suspendedActions.push(action);
|
1862
|
+
}
|
1863
|
+
}
|
1947
1864
|
|
1948
|
-
|
1949
|
-
Ember.getPath = Ember.deprecateFunc('getPath is deprecated since get now supports paths', Ember.get);
|
1950
|
-
})();
|
1865
|
+
function tryable() { return callback.call(target); }
|
1951
1866
|
|
1867
|
+
function finalizer() {
|
1868
|
+
for (i = 0, l = suspendedActions.length; i < l; i++) {
|
1869
|
+
suspendedActions[i][2] &= ~SUSPENDED;
|
1870
|
+
}
|
1871
|
+
}
|
1952
1872
|
|
1873
|
+
return Ember.tryFinally(tryable, finalizer);
|
1874
|
+
}
|
1953
1875
|
|
1954
|
-
(function() {
|
1955
1876
|
/**
|
1956
|
-
@
|
1957
|
-
*/
|
1958
|
-
|
1959
|
-
var o_create = Ember.create,
|
1960
|
-
metaFor = Ember.meta,
|
1961
|
-
META_KEY = Ember.META_KEY;
|
1962
|
-
|
1963
|
-
/*
|
1964
|
-
The event system uses a series of nested hashes to store listeners on an
|
1965
|
-
object. When a listener is registered, or when an event arrives, these
|
1966
|
-
hashes are consulted to determine which target and action pair to invoke.
|
1967
|
-
|
1968
|
-
The hashes are stored in the object's meta hash, and look like this:
|
1877
|
+
@private
|
1969
1878
|
|
1970
|
-
|
1971
|
-
{
|
1972
|
-
listeners: { // variable name: `listenerSet`
|
1973
|
-
"foo:changed": [ // variable name: `actions`
|
1974
|
-
[target, method, onceFlag, suspendedFlag]
|
1975
|
-
]
|
1976
|
-
}
|
1977
|
-
}
|
1879
|
+
Return a list of currently watched events
|
1978
1880
|
|
1881
|
+
@method watchedEvents
|
1882
|
+
@for Ember
|
1883
|
+
@param obj
|
1979
1884
|
*/
|
1885
|
+
function watchedEvents(obj) {
|
1886
|
+
var listeners = obj[META_KEY].listeners, ret = [];
|
1980
1887
|
|
1981
|
-
|
1982
|
-
|
1983
|
-
|
1984
|
-
|
1985
|
-
}
|
1986
|
-
return index;
|
1987
|
-
}
|
1988
|
-
|
1989
|
-
function actionsFor(obj, eventName) {
|
1990
|
-
var meta = metaFor(obj, true),
|
1991
|
-
actions;
|
1992
|
-
|
1993
|
-
if (!meta.listeners) { meta.listeners = {}; }
|
1994
|
-
|
1995
|
-
if (!meta.hasOwnProperty('listeners')) {
|
1996
|
-
// setup inherited copy of the listeners object
|
1997
|
-
meta.listeners = o_create(meta.listeners);
|
1998
|
-
}
|
1999
|
-
|
2000
|
-
actions = meta.listeners[eventName];
|
2001
|
-
|
2002
|
-
// if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
|
2003
|
-
if (actions && !meta.listeners.hasOwnProperty(eventName)) {
|
2004
|
-
actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
|
2005
|
-
} else if (!actions) {
|
2006
|
-
actions = meta.listeners[eventName] = [];
|
2007
|
-
}
|
2008
|
-
|
2009
|
-
return actions;
|
2010
|
-
}
|
2011
|
-
|
2012
|
-
function actionsUnion(obj, eventName, otherActions) {
|
2013
|
-
var meta = obj[META_KEY],
|
2014
|
-
actions = meta && meta.listeners && meta.listeners[eventName];
|
2015
|
-
|
2016
|
-
if (!actions) { return; }
|
2017
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
2018
|
-
var target = actions[i][0],
|
2019
|
-
method = actions[i][1],
|
2020
|
-
once = actions[i][2],
|
2021
|
-
suspended = actions[i][3],
|
2022
|
-
actionIndex = indexOf(otherActions, target, method);
|
2023
|
-
|
2024
|
-
if (actionIndex === -1) {
|
2025
|
-
otherActions.push([target, method, once, suspended]);
|
2026
|
-
}
|
2027
|
-
}
|
2028
|
-
}
|
2029
|
-
|
2030
|
-
function actionsDiff(obj, eventName, otherActions) {
|
2031
|
-
var meta = obj[META_KEY],
|
2032
|
-
actions = meta && meta.listeners && meta.listeners[eventName],
|
2033
|
-
diffActions = [];
|
2034
|
-
|
2035
|
-
if (!actions) { return; }
|
2036
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
2037
|
-
var target = actions[i][0],
|
2038
|
-
method = actions[i][1],
|
2039
|
-
once = actions[i][2],
|
2040
|
-
suspended = actions[i][3],
|
2041
|
-
actionIndex = indexOf(otherActions, target, method);
|
2042
|
-
|
2043
|
-
if (actionIndex !== -1) { continue; }
|
2044
|
-
|
2045
|
-
otherActions.push([target, method, once, suspended]);
|
2046
|
-
diffActions.push([target, method, once, suspended]);
|
2047
|
-
}
|
2048
|
-
|
2049
|
-
return diffActions;
|
2050
|
-
}
|
2051
|
-
|
2052
|
-
/**
|
2053
|
-
Add an event listener
|
2054
|
-
|
2055
|
-
@method addListener
|
2056
|
-
@for Ember
|
2057
|
-
@param obj
|
2058
|
-
@param {String} eventName
|
2059
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
2060
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
2061
|
-
@param {Boolean} once A flag whether a function should only be called once
|
2062
|
-
*/
|
2063
|
-
function addListener(obj, eventName, target, method, once) {
|
2064
|
-
|
2065
|
-
|
2066
|
-
if (!method && 'function' === typeof target) {
|
2067
|
-
method = target;
|
2068
|
-
target = null;
|
2069
|
-
}
|
2070
|
-
|
2071
|
-
var actions = actionsFor(obj, eventName),
|
2072
|
-
actionIndex = indexOf(actions, target, method);
|
2073
|
-
|
2074
|
-
if (actionIndex !== -1) { return; }
|
2075
|
-
|
2076
|
-
actions.push([target, method, once, undefined]);
|
2077
|
-
|
2078
|
-
if ('function' === typeof obj.didAddListener) {
|
2079
|
-
obj.didAddListener(eventName, target, method);
|
2080
|
-
}
|
2081
|
-
}
|
2082
|
-
|
2083
|
-
/**
|
2084
|
-
Remove an event listener
|
2085
|
-
|
2086
|
-
Arguments should match those passed to {{#crossLink "Ember/addListener"}}{{/crossLink}}
|
2087
|
-
|
2088
|
-
@method removeListener
|
2089
|
-
@for Ember
|
2090
|
-
@param obj
|
2091
|
-
@param {String} eventName
|
2092
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
2093
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
2094
|
-
*/
|
2095
|
-
function removeListener(obj, eventName, target, method) {
|
2096
|
-
|
2097
|
-
|
2098
|
-
if (!method && 'function' === typeof target) {
|
2099
|
-
method = target;
|
2100
|
-
target = null;
|
2101
|
-
}
|
2102
|
-
|
2103
|
-
function _removeListener(target, method, once) {
|
2104
|
-
var actions = actionsFor(obj, eventName),
|
2105
|
-
actionIndex = indexOf(actions, target, method);
|
2106
|
-
|
2107
|
-
// action doesn't exist, give up silently
|
2108
|
-
if (actionIndex === -1) { return; }
|
2109
|
-
|
2110
|
-
actions.splice(actionIndex, 1);
|
2111
|
-
|
2112
|
-
if ('function' === typeof obj.didRemoveListener) {
|
2113
|
-
obj.didRemoveListener(eventName, target, method);
|
2114
|
-
}
|
2115
|
-
}
|
2116
|
-
|
2117
|
-
if (method) {
|
2118
|
-
_removeListener(target, method);
|
2119
|
-
} else {
|
2120
|
-
var meta = obj[META_KEY],
|
2121
|
-
actions = meta && meta.listeners && meta.listeners[eventName];
|
2122
|
-
|
2123
|
-
if (!actions) { return; }
|
2124
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
2125
|
-
_removeListener(actions[i][0], actions[i][1]);
|
2126
|
-
}
|
2127
|
-
}
|
2128
|
-
}
|
2129
|
-
|
2130
|
-
/**
|
2131
|
-
@private
|
2132
|
-
|
2133
|
-
Suspend listener during callback.
|
2134
|
-
|
2135
|
-
This should only be used by the target of the event listener
|
2136
|
-
when it is taking an action that would cause the event, e.g.
|
2137
|
-
an object might suspend its property change listener while it is
|
2138
|
-
setting that property.
|
2139
|
-
|
2140
|
-
@method suspendListener
|
2141
|
-
@for Ember
|
2142
|
-
@param obj
|
2143
|
-
@param {String} eventName
|
2144
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
2145
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
2146
|
-
@param {Function} callback
|
2147
|
-
*/
|
2148
|
-
function suspendListener(obj, eventName, target, method, callback) {
|
2149
|
-
if (!method && 'function' === typeof target) {
|
2150
|
-
method = target;
|
2151
|
-
target = null;
|
2152
|
-
}
|
2153
|
-
|
2154
|
-
var actions = actionsFor(obj, eventName),
|
2155
|
-
actionIndex = indexOf(actions, target, method),
|
2156
|
-
action;
|
2157
|
-
|
2158
|
-
if (actionIndex !== -1) {
|
2159
|
-
action = actions[actionIndex].slice(); // copy it, otherwise we're modifying a shared object
|
2160
|
-
action[3] = true; // mark the action as suspended
|
2161
|
-
actions[actionIndex] = action; // replace the shared object with our copy
|
2162
|
-
}
|
2163
|
-
|
2164
|
-
function tryable() { return callback.call(target); }
|
2165
|
-
function finalizer() { if (action) { action[3] = undefined; } }
|
2166
|
-
|
2167
|
-
return Ember.tryFinally(tryable, finalizer);
|
2168
|
-
}
|
2169
|
-
|
2170
|
-
/**
|
2171
|
-
@private
|
2172
|
-
|
2173
|
-
Suspend listener during callback.
|
2174
|
-
|
2175
|
-
This should only be used by the target of the event listener
|
2176
|
-
when it is taking an action that would cause the event, e.g.
|
2177
|
-
an object might suspend its property change listener while it is
|
2178
|
-
setting that property.
|
2179
|
-
|
2180
|
-
@method suspendListener
|
2181
|
-
@for Ember
|
2182
|
-
@param obj
|
2183
|
-
@param {Array} eventName Array of event names
|
2184
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
2185
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
2186
|
-
@param {Function} callback
|
2187
|
-
*/
|
2188
|
-
function suspendListeners(obj, eventNames, target, method, callback) {
|
2189
|
-
if (!method && 'function' === typeof target) {
|
2190
|
-
method = target;
|
2191
|
-
target = null;
|
2192
|
-
}
|
2193
|
-
|
2194
|
-
var suspendedActions = [],
|
2195
|
-
eventName, actions, action, i, l;
|
2196
|
-
|
2197
|
-
for (i=0, l=eventNames.length; i<l; i++) {
|
2198
|
-
eventName = eventNames[i];
|
2199
|
-
actions = actionsFor(obj, eventName);
|
2200
|
-
var actionIndex = indexOf(actions, target, method);
|
2201
|
-
|
2202
|
-
if (actionIndex !== -1) {
|
2203
|
-
action = actions[actionIndex].slice();
|
2204
|
-
action[3] = true;
|
2205
|
-
actions[actionIndex] = action;
|
2206
|
-
suspendedActions.push(action);
|
2207
|
-
}
|
2208
|
-
}
|
2209
|
-
|
2210
|
-
function tryable() { return callback.call(target); }
|
2211
|
-
|
2212
|
-
function finalizer() {
|
2213
|
-
for (i = 0, l = suspendedActions.length; i < l; i++) {
|
2214
|
-
suspendedActions[i][3] = undefined;
|
2215
|
-
}
|
2216
|
-
}
|
2217
|
-
|
2218
|
-
return Ember.tryFinally(tryable, finalizer);
|
2219
|
-
}
|
2220
|
-
|
2221
|
-
/**
|
2222
|
-
@private
|
2223
|
-
|
2224
|
-
Return a list of currently watched events
|
2225
|
-
|
2226
|
-
@method watchedEvents
|
2227
|
-
@for Ember
|
2228
|
-
@param obj
|
2229
|
-
*/
|
2230
|
-
function watchedEvents(obj) {
|
2231
|
-
var listeners = obj[META_KEY].listeners, ret = [];
|
2232
|
-
|
2233
|
-
if (listeners) {
|
2234
|
-
for(var eventName in listeners) {
|
2235
|
-
if (listeners[eventName]) { ret.push(eventName); }
|
2236
|
-
}
|
1888
|
+
if (listeners) {
|
1889
|
+
for(var eventName in listeners) {
|
1890
|
+
if (listeners[eventName]) { ret.push(eventName); }
|
1891
|
+
}
|
2237
1892
|
}
|
2238
1893
|
return ret;
|
2239
1894
|
}
|
@@ -2261,13 +1916,11 @@ function sendEvent(obj, eventName, params, actions) {
|
|
2261
1916
|
if (!actions) { return; }
|
2262
1917
|
|
2263
1918
|
for (var i = actions.length - 1; i >= 0; i--) { // looping in reverse for once listeners
|
2264
|
-
|
2265
|
-
|
2266
|
-
var target =
|
2267
|
-
|
2268
|
-
|
2269
|
-
|
2270
|
-
if (once) { removeListener(obj, eventName, target, method); }
|
1919
|
+
var action = actions[i];
|
1920
|
+
if (!action) { continue; }
|
1921
|
+
var target = action[0], method = action[1], flags = action[2];
|
1922
|
+
if (flags & SUSPENDED) { continue; }
|
1923
|
+
if (flags & ONCE) { removeListener(obj, eventName, target, method); }
|
2271
1924
|
if (!target) { target = obj; }
|
2272
1925
|
if ('string' === typeof method) { method = target[method]; }
|
2273
1926
|
if (params) {
|
@@ -2347,7 +2000,7 @@ var guidFor = Ember.guidFor,
|
|
2347
2000
|
keyName: keyName,
|
2348
2001
|
eventName: eventName,
|
2349
2002
|
listeners: [
|
2350
|
-
[target, method,
|
2003
|
+
[target, method, flags]
|
2351
2004
|
]
|
2352
2005
|
},
|
2353
2006
|
...
|
@@ -2576,11 +2229,11 @@ var endPropertyChanges = Ember.endPropertyChanges = function() {
|
|
2576
2229
|
});
|
2577
2230
|
```
|
2578
2231
|
|
2579
|
-
@method
|
2232
|
+
@method changeProperties
|
2580
2233
|
@param {Function} callback
|
2581
2234
|
@param [binding]
|
2582
2235
|
*/
|
2583
|
-
|
2236
|
+
Ember.changeProperties = function(cb, binding){
|
2584
2237
|
beginPropertyChanges();
|
2585
2238
|
tryFinally(cb, endPropertyChanges, binding);
|
2586
2239
|
};
|
@@ -2693,66 +2346,446 @@ var set = function set(obj, keyName, value, tolerant) {
|
|
2693
2346
|
Ember.propertyDidChange(obj, keyName);
|
2694
2347
|
}
|
2695
2348
|
} else {
|
2696
|
-
obj[keyName] = value;
|
2349
|
+
obj[keyName] = value;
|
2350
|
+
}
|
2351
|
+
}
|
2352
|
+
return value;
|
2353
|
+
};
|
2354
|
+
|
2355
|
+
// Currently used only by Ember Data tests
|
2356
|
+
if (Ember.config.overrideAccessors) {
|
2357
|
+
Ember.set = set;
|
2358
|
+
Ember.config.overrideAccessors();
|
2359
|
+
set = Ember.set;
|
2360
|
+
}
|
2361
|
+
|
2362
|
+
function setPath(root, path, value, tolerant) {
|
2363
|
+
var keyName;
|
2364
|
+
|
2365
|
+
// get the last part of the path
|
2366
|
+
keyName = path.slice(path.lastIndexOf('.') + 1);
|
2367
|
+
|
2368
|
+
// get the first part of the part
|
2369
|
+
path = path.slice(0, path.length-(keyName.length+1));
|
2370
|
+
|
2371
|
+
// unless the path is this, look up the first part to
|
2372
|
+
// get the root
|
2373
|
+
if (path !== 'this') {
|
2374
|
+
root = getPath(root, path);
|
2375
|
+
}
|
2376
|
+
|
2377
|
+
if (!keyName || keyName.length === 0) {
|
2378
|
+
throw new Error('You passed an empty path');
|
2379
|
+
}
|
2380
|
+
|
2381
|
+
if (!root) {
|
2382
|
+
if (tolerant) { return; }
|
2383
|
+
else { throw new Error('Object in path '+path+' could not be found or was destroyed.'); }
|
2384
|
+
}
|
2385
|
+
|
2386
|
+
return set(root, keyName, value);
|
2387
|
+
}
|
2388
|
+
|
2389
|
+
Ember.set = set;
|
2390
|
+
Ember.setPath = Ember.deprecateFunc('setPath is deprecated since set now supports paths', Ember.set);
|
2391
|
+
|
2392
|
+
/**
|
2393
|
+
Error-tolerant form of `Ember.set`. Will not blow up if any part of the
|
2394
|
+
chain is `undefined`, `null`, or destroyed.
|
2395
|
+
|
2396
|
+
This is primarily used when syncing bindings, which may try to update after
|
2397
|
+
an object has been destroyed.
|
2398
|
+
|
2399
|
+
@method trySet
|
2400
|
+
@for Ember
|
2401
|
+
@param {Object} obj The object to modify.
|
2402
|
+
@param {String} path The property path to set
|
2403
|
+
@param {Object} value The value to set
|
2404
|
+
*/
|
2405
|
+
Ember.trySet = function(root, path, value) {
|
2406
|
+
return set(root, path, value, true);
|
2407
|
+
};
|
2408
|
+
Ember.trySetPath = Ember.deprecateFunc('trySetPath has been renamed to trySet', Ember.trySet);
|
2409
|
+
|
2410
|
+
})();
|
2411
|
+
|
2412
|
+
|
2413
|
+
|
2414
|
+
(function() {
|
2415
|
+
/**
|
2416
|
+
@module ember-metal
|
2417
|
+
*/
|
2418
|
+
|
2419
|
+
/*
|
2420
|
+
JavaScript (before ES6) does not have a Map implementation. Objects,
|
2421
|
+
which are often used as dictionaries, may only have Strings as keys.
|
2422
|
+
|
2423
|
+
Because Ember has a way to get a unique identifier for every object
|
2424
|
+
via `Ember.guidFor`, we can implement a performant Map with arbitrary
|
2425
|
+
keys. Because it is commonly used in low-level bookkeeping, Map is
|
2426
|
+
implemented as a pure JavaScript object for performance.
|
2427
|
+
|
2428
|
+
This implementation follows the current iteration of the ES6 proposal for
|
2429
|
+
maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
|
2430
|
+
with two exceptions. First, because we need our implementation to be pleasant
|
2431
|
+
on older browsers, we do not use the `delete` name (using `remove` instead).
|
2432
|
+
Second, as we do not have the luxury of in-VM iteration, we implement a
|
2433
|
+
forEach method for iteration.
|
2434
|
+
|
2435
|
+
Map is mocked out to look like an Ember object, so you can do
|
2436
|
+
`Ember.Map.create()` for symmetry with other Ember classes.
|
2437
|
+
*/
|
2438
|
+
var get = Ember.get,
|
2439
|
+
set = Ember.set,
|
2440
|
+
guidFor = Ember.guidFor,
|
2441
|
+
indexOf = Ember.ArrayPolyfills.indexOf;
|
2442
|
+
|
2443
|
+
var copy = function(obj) {
|
2444
|
+
var output = {};
|
2445
|
+
|
2446
|
+
for (var prop in obj) {
|
2447
|
+
if (obj.hasOwnProperty(prop)) { output[prop] = obj[prop]; }
|
2448
|
+
}
|
2449
|
+
|
2450
|
+
return output;
|
2451
|
+
};
|
2452
|
+
|
2453
|
+
var copyMap = function(original, newObject) {
|
2454
|
+
var keys = original.keys.copy(),
|
2455
|
+
values = copy(original.values);
|
2456
|
+
|
2457
|
+
newObject.keys = keys;
|
2458
|
+
newObject.values = values;
|
2459
|
+
newObject.length = original.length;
|
2460
|
+
|
2461
|
+
return newObject;
|
2462
|
+
};
|
2463
|
+
|
2464
|
+
/**
|
2465
|
+
This class is used internally by Ember and Ember Data.
|
2466
|
+
Please do not use it at this time. We plan to clean it up
|
2467
|
+
and add many tests soon.
|
2468
|
+
|
2469
|
+
@class OrderedSet
|
2470
|
+
@namespace Ember
|
2471
|
+
@constructor
|
2472
|
+
@private
|
2473
|
+
*/
|
2474
|
+
var OrderedSet = Ember.OrderedSet = function() {
|
2475
|
+
this.clear();
|
2476
|
+
};
|
2477
|
+
|
2478
|
+
/**
|
2479
|
+
@method create
|
2480
|
+
@static
|
2481
|
+
@return {Ember.OrderedSet}
|
2482
|
+
*/
|
2483
|
+
OrderedSet.create = function() {
|
2484
|
+
return new OrderedSet();
|
2485
|
+
};
|
2486
|
+
|
2487
|
+
|
2488
|
+
OrderedSet.prototype = {
|
2489
|
+
/**
|
2490
|
+
@method clear
|
2491
|
+
*/
|
2492
|
+
clear: function() {
|
2493
|
+
this.presenceSet = {};
|
2494
|
+
this.list = [];
|
2495
|
+
},
|
2496
|
+
|
2497
|
+
/**
|
2498
|
+
@method add
|
2499
|
+
@param obj
|
2500
|
+
*/
|
2501
|
+
add: function(obj) {
|
2502
|
+
var guid = guidFor(obj),
|
2503
|
+
presenceSet = this.presenceSet,
|
2504
|
+
list = this.list;
|
2505
|
+
|
2506
|
+
if (guid in presenceSet) { return; }
|
2507
|
+
|
2508
|
+
presenceSet[guid] = true;
|
2509
|
+
list.push(obj);
|
2510
|
+
},
|
2511
|
+
|
2512
|
+
/**
|
2513
|
+
@method remove
|
2514
|
+
@param obj
|
2515
|
+
*/
|
2516
|
+
remove: function(obj) {
|
2517
|
+
var guid = guidFor(obj),
|
2518
|
+
presenceSet = this.presenceSet,
|
2519
|
+
list = this.list;
|
2520
|
+
|
2521
|
+
delete presenceSet[guid];
|
2522
|
+
|
2523
|
+
var index = indexOf.call(list, obj);
|
2524
|
+
if (index > -1) {
|
2525
|
+
list.splice(index, 1);
|
2526
|
+
}
|
2527
|
+
},
|
2528
|
+
|
2529
|
+
/**
|
2530
|
+
@method isEmpty
|
2531
|
+
@return {Boolean}
|
2532
|
+
*/
|
2533
|
+
isEmpty: function() {
|
2534
|
+
return this.list.length === 0;
|
2535
|
+
},
|
2536
|
+
|
2537
|
+
/**
|
2538
|
+
@method has
|
2539
|
+
@param obj
|
2540
|
+
@return {Boolean}
|
2541
|
+
*/
|
2542
|
+
has: function(obj) {
|
2543
|
+
var guid = guidFor(obj),
|
2544
|
+
presenceSet = this.presenceSet;
|
2545
|
+
|
2546
|
+
return guid in presenceSet;
|
2547
|
+
},
|
2548
|
+
|
2549
|
+
/**
|
2550
|
+
@method forEach
|
2551
|
+
@param {Function} fn
|
2552
|
+
@param self
|
2553
|
+
*/
|
2554
|
+
forEach: function(fn, self) {
|
2555
|
+
// allow mutation during iteration
|
2556
|
+
var list = this.toArray();
|
2557
|
+
|
2558
|
+
for (var i = 0, j = list.length; i < j; i++) {
|
2559
|
+
fn.call(self, list[i]);
|
2560
|
+
}
|
2561
|
+
},
|
2562
|
+
|
2563
|
+
/**
|
2564
|
+
@method toArray
|
2565
|
+
@return {Array}
|
2566
|
+
*/
|
2567
|
+
toArray: function() {
|
2568
|
+
return this.list.slice();
|
2569
|
+
},
|
2570
|
+
|
2571
|
+
/**
|
2572
|
+
@method copy
|
2573
|
+
@return {Ember.OrderedSet}
|
2574
|
+
*/
|
2575
|
+
copy: function() {
|
2576
|
+
var set = new OrderedSet();
|
2577
|
+
|
2578
|
+
set.presenceSet = copy(this.presenceSet);
|
2579
|
+
set.list = this.toArray();
|
2580
|
+
|
2581
|
+
return set;
|
2582
|
+
}
|
2583
|
+
};
|
2584
|
+
|
2585
|
+
/**
|
2586
|
+
A Map stores values indexed by keys. Unlike JavaScript's
|
2587
|
+
default Objects, the keys of a Map can be any JavaScript
|
2588
|
+
object.
|
2589
|
+
|
2590
|
+
Internally, a Map has two data structures:
|
2591
|
+
|
2592
|
+
1. `keys`: an OrderedSet of all of the existing keys
|
2593
|
+
2. `values`: a JavaScript Object indexed by the `Ember.guidFor(key)`
|
2594
|
+
|
2595
|
+
When a key/value pair is added for the first time, we
|
2596
|
+
add the key to the `keys` OrderedSet, and create or
|
2597
|
+
replace an entry in `values`. When an entry is deleted,
|
2598
|
+
we delete its entry in `keys` and `values`.
|
2599
|
+
|
2600
|
+
@class Map
|
2601
|
+
@namespace Ember
|
2602
|
+
@private
|
2603
|
+
@constructor
|
2604
|
+
*/
|
2605
|
+
var Map = Ember.Map = function() {
|
2606
|
+
this.keys = Ember.OrderedSet.create();
|
2607
|
+
this.values = {};
|
2608
|
+
};
|
2609
|
+
|
2610
|
+
/**
|
2611
|
+
@method create
|
2612
|
+
@static
|
2613
|
+
*/
|
2614
|
+
Map.create = function() {
|
2615
|
+
return new Map();
|
2616
|
+
};
|
2617
|
+
|
2618
|
+
Map.prototype = {
|
2619
|
+
/**
|
2620
|
+
This property will change as the number of objects in the map changes.
|
2621
|
+
|
2622
|
+
@property length
|
2623
|
+
@type number
|
2624
|
+
@default 0
|
2625
|
+
*/
|
2626
|
+
length: 0,
|
2627
|
+
|
2628
|
+
|
2629
|
+
/**
|
2630
|
+
Retrieve the value associated with a given key.
|
2631
|
+
|
2632
|
+
@method get
|
2633
|
+
@param {*} key
|
2634
|
+
@return {*} the value associated with the key, or `undefined`
|
2635
|
+
*/
|
2636
|
+
get: function(key) {
|
2637
|
+
var values = this.values,
|
2638
|
+
guid = guidFor(key);
|
2639
|
+
|
2640
|
+
return values[guid];
|
2641
|
+
},
|
2642
|
+
|
2643
|
+
/**
|
2644
|
+
Adds a value to the map. If a value for the given key has already been
|
2645
|
+
provided, the new value will replace the old value.
|
2646
|
+
|
2647
|
+
@method set
|
2648
|
+
@param {*} key
|
2649
|
+
@param {*} value
|
2650
|
+
*/
|
2651
|
+
set: function(key, value) {
|
2652
|
+
var keys = this.keys,
|
2653
|
+
values = this.values,
|
2654
|
+
guid = guidFor(key);
|
2655
|
+
|
2656
|
+
keys.add(key);
|
2657
|
+
values[guid] = value;
|
2658
|
+
set(this, 'length', keys.list.length);
|
2659
|
+
},
|
2660
|
+
|
2661
|
+
/**
|
2662
|
+
Removes a value from the map for an associated key.
|
2663
|
+
|
2664
|
+
@method remove
|
2665
|
+
@param {*} key
|
2666
|
+
@return {Boolean} true if an item was removed, false otherwise
|
2667
|
+
*/
|
2668
|
+
remove: function(key) {
|
2669
|
+
// don't use ES6 "delete" because it will be annoying
|
2670
|
+
// to use in browsers that are not ES6 friendly;
|
2671
|
+
var keys = this.keys,
|
2672
|
+
values = this.values,
|
2673
|
+
guid = guidFor(key);
|
2674
|
+
|
2675
|
+
if (values.hasOwnProperty(guid)) {
|
2676
|
+
keys.remove(key);
|
2677
|
+
delete values[guid];
|
2678
|
+
set(this, 'length', keys.list.length);
|
2679
|
+
return true;
|
2680
|
+
} else {
|
2681
|
+
return false;
|
2697
2682
|
}
|
2698
|
-
}
|
2699
|
-
return value;
|
2700
|
-
};
|
2683
|
+
},
|
2701
2684
|
|
2702
|
-
|
2703
|
-
|
2704
|
-
Ember.set = set;
|
2705
|
-
Ember.config.overrideAccessors();
|
2706
|
-
set = Ember.set;
|
2707
|
-
}
|
2685
|
+
/**
|
2686
|
+
Check whether a key is present.
|
2708
2687
|
|
2709
|
-
|
2710
|
-
|
2688
|
+
@method has
|
2689
|
+
@param {*} key
|
2690
|
+
@return {Boolean} true if the item was present, false otherwise
|
2691
|
+
*/
|
2692
|
+
has: function(key) {
|
2693
|
+
var values = this.values,
|
2694
|
+
guid = guidFor(key);
|
2711
2695
|
|
2712
|
-
|
2713
|
-
|
2696
|
+
return values.hasOwnProperty(guid);
|
2697
|
+
},
|
2714
2698
|
|
2715
|
-
|
2716
|
-
|
2699
|
+
/**
|
2700
|
+
Iterate over all the keys and values. Calls the function once
|
2701
|
+
for each key, passing in the key and value, in that order.
|
2717
2702
|
|
2718
|
-
|
2719
|
-
// get the root
|
2720
|
-
if (path !== 'this') {
|
2721
|
-
root = getPath(root, path);
|
2722
|
-
}
|
2703
|
+
The keys are guaranteed to be iterated over in insertion order.
|
2723
2704
|
|
2724
|
-
|
2725
|
-
|
2726
|
-
|
2705
|
+
@method forEach
|
2706
|
+
@param {Function} callback
|
2707
|
+
@param {*} self if passed, the `this` value inside the
|
2708
|
+
callback. By default, `this` is the map.
|
2709
|
+
*/
|
2710
|
+
forEach: function(callback, self) {
|
2711
|
+
var keys = this.keys,
|
2712
|
+
values = this.values;
|
2727
2713
|
|
2728
|
-
|
2729
|
-
|
2730
|
-
|
2714
|
+
keys.forEach(function(key) {
|
2715
|
+
var guid = guidFor(key);
|
2716
|
+
callback.call(self, key, values[guid]);
|
2717
|
+
});
|
2718
|
+
},
|
2719
|
+
|
2720
|
+
/**
|
2721
|
+
@method copy
|
2722
|
+
@return {Ember.Map}
|
2723
|
+
*/
|
2724
|
+
copy: function() {
|
2725
|
+
return copyMap(this, new Map());
|
2731
2726
|
}
|
2727
|
+
};
|
2732
2728
|
|
2733
|
-
|
2734
|
-
|
2729
|
+
/**
|
2730
|
+
@class MapWithDefault
|
2731
|
+
@namespace Ember
|
2732
|
+
@extends Ember.Map
|
2733
|
+
@private
|
2734
|
+
@constructor
|
2735
|
+
@param [options]
|
2736
|
+
@param {*} [options.defaultValue]
|
2737
|
+
*/
|
2738
|
+
var MapWithDefault = Ember.MapWithDefault = function(options) {
|
2739
|
+
Map.call(this);
|
2740
|
+
this.defaultValue = options.defaultValue;
|
2741
|
+
};
|
2735
2742
|
|
2736
|
-
|
2737
|
-
|
2743
|
+
/**
|
2744
|
+
@method create
|
2745
|
+
@static
|
2746
|
+
@param [options]
|
2747
|
+
@param {*} [options.defaultValue]
|
2748
|
+
@return {Ember.MapWithDefault|Ember.Map} If options are passed, returns
|
2749
|
+
`Ember.MapWithDefault` otherwise returns `Ember.Map`
|
2750
|
+
*/
|
2751
|
+
MapWithDefault.create = function(options) {
|
2752
|
+
if (options) {
|
2753
|
+
return new MapWithDefault(options);
|
2754
|
+
} else {
|
2755
|
+
return new Map();
|
2756
|
+
}
|
2757
|
+
};
|
2758
|
+
|
2759
|
+
MapWithDefault.prototype = Ember.create(Map.prototype);
|
2738
2760
|
|
2739
2761
|
/**
|
2740
|
-
|
2741
|
-
chain is `undefined`, `null`, or destroyed.
|
2762
|
+
Retrieve the value associated with a given key.
|
2742
2763
|
|
2743
|
-
|
2744
|
-
|
2764
|
+
@method get
|
2765
|
+
@param {*} key
|
2766
|
+
@return {*} the value associated with the key, or the default value
|
2767
|
+
*/
|
2768
|
+
MapWithDefault.prototype.get = function(key) {
|
2769
|
+
var hasValue = this.has(key);
|
2745
2770
|
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2771
|
+
if (hasValue) {
|
2772
|
+
return Map.prototype.get.call(this, key);
|
2773
|
+
} else {
|
2774
|
+
var defaultValue = this.defaultValue(key);
|
2775
|
+
this.set(key, defaultValue);
|
2776
|
+
return defaultValue;
|
2777
|
+
}
|
2778
|
+
};
|
2779
|
+
|
2780
|
+
/**
|
2781
|
+
@method copy
|
2782
|
+
@return {Ember.MapWithDefault}
|
2751
2783
|
*/
|
2752
|
-
|
2753
|
-
return
|
2784
|
+
MapWithDefault.prototype.copy = function() {
|
2785
|
+
return copyMap(this, new MapWithDefault({
|
2786
|
+
defaultValue: this.defaultValue
|
2787
|
+
}));
|
2754
2788
|
};
|
2755
|
-
Ember.trySetPath = Ember.deprecateFunc('trySetPath has been renamed to trySet', Ember.trySet);
|
2756
2789
|
|
2757
2790
|
})();
|
2758
2791
|
|
@@ -2784,7 +2817,7 @@ var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
|
|
2784
2817
|
@private
|
2785
2818
|
@constructor
|
2786
2819
|
*/
|
2787
|
-
|
2820
|
+
Ember.Descriptor = function() {};
|
2788
2821
|
|
2789
2822
|
// ..........................................................
|
2790
2823
|
// DEFINING PROPERTIES API
|
@@ -3345,7 +3378,7 @@ Ember.watchPath = function(obj, keyPath) {
|
|
3345
3378
|
};
|
3346
3379
|
|
3347
3380
|
Ember.unwatchPath = function(obj, keyPath) {
|
3348
|
-
var m = metaFor(obj), watching = m.watching
|
3381
|
+
var m = metaFor(obj), watching = m.watching;
|
3349
3382
|
|
3350
3383
|
if (watching[keyPath] === 1) {
|
3351
3384
|
watching[keyPath] = 0;
|
@@ -3606,27 +3639,14 @@ ComputedProperty.prototype = new Ember.Descriptor();
|
|
3606
3639
|
var ComputedPropertyPrototype = ComputedProperty.prototype;
|
3607
3640
|
|
3608
3641
|
/*
|
3609
|
-
|
3610
|
-
|
3611
|
-
Please use `.volatile` over this method.
|
3612
|
-
|
3613
|
-
```javascript
|
3614
|
-
MyApp.president = Ember.Object.create({
|
3615
|
-
fullName: function() {
|
3616
|
-
return this.get('firstName') + ' ' + this.get('lastName');
|
3617
|
-
|
3618
|
-
// By default, Ember will return the value of this property
|
3619
|
-
// without re-executing this function.
|
3620
|
-
}.property('firstName', 'lastName')
|
3642
|
+
Properties are cacheable by default. Computed property will automatically
|
3643
|
+
cache the return value of your function until one of the dependent keys changes.
|
3621
3644
|
|
3622
|
-
|
3623
|
-
|
3645
|
+
Call `volatile()` to set it into non-cached mode. When in this mode
|
3646
|
+
the computed property will not automatically cache the return value.
|
3624
3647
|
|
3625
|
-
|
3626
|
-
|
3627
|
-
}.property('firstName', 'lastName').cacheable(false)
|
3628
|
-
});
|
3629
|
-
```
|
3648
|
+
However, if a property is properly observable, there is no reason to disable
|
3649
|
+
caching.
|
3630
3650
|
|
3631
3651
|
@method cacheable
|
3632
3652
|
@param {Boolean} aFlag optional set to `false` to disable caching
|
@@ -3890,7 +3910,6 @@ ComputedPropertyPrototype.teardown = function(obj, keyName) {
|
|
3890
3910
|
The function should accept two parameters, key and value. If value is not
|
3891
3911
|
undefined you should set the value first. In either case return the
|
3892
3912
|
current value of the property.
|
3893
|
-
|
3894
3913
|
@method computed
|
3895
3914
|
@for Ember
|
3896
3915
|
@param {Function} func The computed property function.
|
@@ -4132,7 +4151,7 @@ registerComputedWithProperties('or', function(properties) {
|
|
4132
4151
|
@for Ember
|
4133
4152
|
@param {String} dependentKey, [dependentKey...]
|
4134
4153
|
@return {Ember.ComputedProperty} computed property which returns
|
4135
|
-
the first
|
4154
|
+
the first truthy value of given list of properties.
|
4136
4155
|
*/
|
4137
4156
|
registerComputedWithProperties('any', function(properties) {
|
4138
4157
|
for (var key in properties) {
|
@@ -4182,6 +4201,48 @@ Ember.computed.alias = function(dependentKey) {
|
|
4182
4201
|
});
|
4183
4202
|
};
|
4184
4203
|
|
4204
|
+
/**
|
4205
|
+
@method computed.oneWay
|
4206
|
+
@for Ember
|
4207
|
+
@param {String} dependentKey
|
4208
|
+
@return {Ember.ComputedProperty} computed property which creates an
|
4209
|
+
one way computed property to the original value for property.
|
4210
|
+
|
4211
|
+
Where `computed.alias` aliases `get` and `set`, and allows for bidirectional
|
4212
|
+
data flow, `computed.oneWay` only provides an aliased `get`. The `set` will
|
4213
|
+
not mutate the upstream property, rather causes the current property to
|
4214
|
+
become the value set. This causes the downstream property to permentantly
|
4215
|
+
diverge from the upstream property.
|
4216
|
+
|
4217
|
+
```javascript
|
4218
|
+
User = Ember.Object.extend({
|
4219
|
+
firstName: null,
|
4220
|
+
lastName: null,
|
4221
|
+
nickName: Ember.computed.oneWay('firstName')
|
4222
|
+
});
|
4223
|
+
|
4224
|
+
user = User.create({
|
4225
|
+
firstName: 'Teddy',
|
4226
|
+
lastName: 'Zeenny'
|
4227
|
+
});
|
4228
|
+
|
4229
|
+
user.get('nickName');
|
4230
|
+
# 'Teddy'
|
4231
|
+
|
4232
|
+
user.set('nickName', 'TeddyBear');
|
4233
|
+
# 'TeddyBear'
|
4234
|
+
|
4235
|
+
user.get('firstName');
|
4236
|
+
# 'Teddy'
|
4237
|
+
```
|
4238
|
+
*/
|
4239
|
+
Ember.computed.oneWay = function(dependentKey) {
|
4240
|
+
return Ember.computed(dependentKey, function() {
|
4241
|
+
return get(this, dependentKey);
|
4242
|
+
});
|
4243
|
+
};
|
4244
|
+
|
4245
|
+
|
4185
4246
|
/**
|
4186
4247
|
@method computed.defaultTo
|
4187
4248
|
@for Ember
|
@@ -4211,8 +4272,6 @@ Ember.computed.defaultTo = function(defaultPath) {
|
|
4211
4272
|
var AFTER_OBSERVERS = ':change';
|
4212
4273
|
var BEFORE_OBSERVERS = ':before';
|
4213
4274
|
|
4214
|
-
var guidFor = Ember.guidFor;
|
4215
|
-
|
4216
4275
|
function changeEvent(keyName) {
|
4217
4276
|
return keyName+AFTER_OBSERVERS;
|
4218
4277
|
}
|
@@ -4272,220 +4331,544 @@ Ember._suspendBeforeObserver = function(obj, path, target, method, callback) {
|
|
4272
4331
|
return Ember._suspendListener(obj, beforeEvent(path), target, method, callback);
|
4273
4332
|
};
|
4274
4333
|
|
4275
|
-
Ember._suspendObserver = function(obj, path, target, method, callback) {
|
4276
|
-
return Ember._suspendListener(obj, changeEvent(path), target, method, callback);
|
4277
|
-
};
|
4334
|
+
Ember._suspendObserver = function(obj, path, target, method, callback) {
|
4335
|
+
return Ember._suspendListener(obj, changeEvent(path), target, method, callback);
|
4336
|
+
};
|
4337
|
+
|
4338
|
+
var map = Ember.ArrayPolyfills.map;
|
4339
|
+
|
4340
|
+
Ember._suspendBeforeObservers = function(obj, paths, target, method, callback) {
|
4341
|
+
var events = map.call(paths, beforeEvent);
|
4342
|
+
return Ember._suspendListeners(obj, events, target, method, callback);
|
4343
|
+
};
|
4344
|
+
|
4345
|
+
Ember._suspendObservers = function(obj, paths, target, method, callback) {
|
4346
|
+
var events = map.call(paths, changeEvent);
|
4347
|
+
return Ember._suspendListeners(obj, events, target, method, callback);
|
4348
|
+
};
|
4349
|
+
|
4350
|
+
Ember.beforeObserversFor = function(obj, path) {
|
4351
|
+
return Ember.listenersFor(obj, beforeEvent(path));
|
4352
|
+
};
|
4353
|
+
|
4354
|
+
/**
|
4355
|
+
@method removeBeforeObserver
|
4356
|
+
@param obj
|
4357
|
+
@param {String} path
|
4358
|
+
@param {Object|Function} targetOrMethod
|
4359
|
+
@param {Function|String} [method]
|
4360
|
+
*/
|
4361
|
+
Ember.removeBeforeObserver = function(obj, path, target, method) {
|
4362
|
+
Ember.unwatch(obj, path);
|
4363
|
+
Ember.removeListener(obj, beforeEvent(path), target, method);
|
4364
|
+
return this;
|
4365
|
+
};
|
4366
|
+
})();
|
4367
|
+
|
4368
|
+
|
4369
|
+
|
4370
|
+
(function() {
|
4371
|
+
define("backburner",
|
4372
|
+
["backburner/deferred_action_queues","exports"],
|
4373
|
+
function(__dependency1__, __exports__) {
|
4374
|
+
"use strict";
|
4375
|
+
var DeferredActionQueues = __dependency1__.DeferredActionQueues;
|
4376
|
+
|
4377
|
+
var slice = [].slice,
|
4378
|
+
pop = [].pop,
|
4379
|
+
debouncees = [],
|
4380
|
+
timers = [],
|
4381
|
+
autorun, laterTimer, laterTimerExpiresAt;
|
4382
|
+
|
4383
|
+
function Backburner(queueNames, options) {
|
4384
|
+
this.queueNames = queueNames;
|
4385
|
+
this.options = options || {};
|
4386
|
+
if (!this.options.defaultQueue) {
|
4387
|
+
this.options.defaultQueue = queueNames[0];
|
4388
|
+
}
|
4389
|
+
this.instanceStack = [];
|
4390
|
+
}
|
4391
|
+
|
4392
|
+
Backburner.prototype = {
|
4393
|
+
queueNames: null,
|
4394
|
+
options: null,
|
4395
|
+
currentInstance: null,
|
4396
|
+
instanceStack: null,
|
4397
|
+
|
4398
|
+
begin: function() {
|
4399
|
+
var onBegin = this.options && this.options.onBegin,
|
4400
|
+
previousInstance = this.currentInstance;
|
4401
|
+
|
4402
|
+
if (previousInstance) {
|
4403
|
+
this.instanceStack.push(previousInstance);
|
4404
|
+
}
|
4405
|
+
|
4406
|
+
this.currentInstance = new DeferredActionQueues(this.queueNames, this.options);
|
4407
|
+
if (onBegin) {
|
4408
|
+
onBegin(this.currentInstance, previousInstance);
|
4409
|
+
}
|
4410
|
+
},
|
4411
|
+
|
4412
|
+
end: function() {
|
4413
|
+
var onEnd = this.options && this.options.onEnd,
|
4414
|
+
currentInstance = this.currentInstance,
|
4415
|
+
nextInstance = null;
|
4416
|
+
|
4417
|
+
try {
|
4418
|
+
currentInstance.flush();
|
4419
|
+
} finally {
|
4420
|
+
this.currentInstance = null;
|
4421
|
+
|
4422
|
+
if (this.instanceStack.length) {
|
4423
|
+
nextInstance = this.instanceStack.pop();
|
4424
|
+
this.currentInstance = nextInstance;
|
4425
|
+
}
|
4426
|
+
|
4427
|
+
if (onEnd) {
|
4428
|
+
onEnd(currentInstance, nextInstance);
|
4429
|
+
}
|
4430
|
+
}
|
4431
|
+
},
|
4432
|
+
|
4433
|
+
run: function(target, method /*, args */) {
|
4434
|
+
var ret;
|
4435
|
+
this.begin();
|
4436
|
+
|
4437
|
+
if (!method) {
|
4438
|
+
method = target;
|
4439
|
+
target = null;
|
4440
|
+
}
|
4441
|
+
|
4442
|
+
if (typeof method === 'string') {
|
4443
|
+
method = target[method];
|
4444
|
+
}
|
4445
|
+
|
4446
|
+
// Prevent Safari double-finally.
|
4447
|
+
var finallyAlreadyCalled = false;
|
4448
|
+
try {
|
4449
|
+
if (arguments.length > 2) {
|
4450
|
+
ret = method.apply(target, slice.call(arguments, 2));
|
4451
|
+
} else {
|
4452
|
+
ret = method.call(target);
|
4453
|
+
}
|
4454
|
+
} finally {
|
4455
|
+
if (!finallyAlreadyCalled) {
|
4456
|
+
finallyAlreadyCalled = true;
|
4457
|
+
this.end();
|
4458
|
+
}
|
4459
|
+
}
|
4460
|
+
return ret;
|
4461
|
+
},
|
4278
4462
|
|
4279
|
-
|
4463
|
+
defer: function(queueName, target, method /* , args */) {
|
4464
|
+
if (!method) {
|
4465
|
+
method = target;
|
4466
|
+
target = null;
|
4467
|
+
}
|
4280
4468
|
|
4281
|
-
|
4282
|
-
|
4283
|
-
|
4284
|
-
};
|
4469
|
+
if (typeof method === 'string') {
|
4470
|
+
method = target[method];
|
4471
|
+
}
|
4285
4472
|
|
4286
|
-
|
4287
|
-
|
4288
|
-
|
4289
|
-
|
4473
|
+
var stack = new Error().stack,
|
4474
|
+
args = arguments.length > 3 ? slice.call(arguments, 3) : undefined;
|
4475
|
+
if (!this.currentInstance) { createAutorun(this); }
|
4476
|
+
return this.currentInstance.schedule(queueName, target, method, args, false, stack);
|
4477
|
+
},
|
4290
4478
|
|
4291
|
-
|
4292
|
-
|
4293
|
-
|
4479
|
+
deferOnce: function(queueName, target, method /* , args */) {
|
4480
|
+
if (!method) {
|
4481
|
+
method = target;
|
4482
|
+
target = null;
|
4483
|
+
}
|
4294
4484
|
|
4295
|
-
|
4296
|
-
|
4297
|
-
|
4298
|
-
@param {String} path
|
4299
|
-
@param {Object|Function} targetOrMethod
|
4300
|
-
@param {Function|String} [method]
|
4301
|
-
*/
|
4302
|
-
Ember.removeBeforeObserver = function(obj, path, target, method) {
|
4303
|
-
Ember.unwatch(obj, path);
|
4304
|
-
Ember.removeListener(obj, beforeEvent(path), target, method);
|
4305
|
-
return this;
|
4306
|
-
};
|
4307
|
-
})();
|
4485
|
+
if (typeof method === 'string') {
|
4486
|
+
method = target[method];
|
4487
|
+
}
|
4308
4488
|
|
4489
|
+
var stack = new Error().stack,
|
4490
|
+
args = arguments.length > 3 ? slice.call(arguments, 3) : undefined;
|
4491
|
+
if (!this.currentInstance) { createAutorun(this); }
|
4492
|
+
return this.currentInstance.schedule(queueName, target, method, args, true, stack);
|
4493
|
+
},
|
4309
4494
|
|
4495
|
+
setTimeout: function() {
|
4496
|
+
var self = this,
|
4497
|
+
wait = pop.call(arguments),
|
4498
|
+
target = arguments[0],
|
4499
|
+
method = arguments[1],
|
4500
|
+
executeAt = (+new Date()) + wait;
|
4310
4501
|
|
4311
|
-
(
|
4312
|
-
|
4313
|
-
|
4314
|
-
|
4315
|
-
// Ember.guidFor, Ember.tryFinally
|
4502
|
+
if (!method) {
|
4503
|
+
method = target;
|
4504
|
+
target = null;
|
4505
|
+
}
|
4316
4506
|
|
4317
|
-
|
4318
|
-
|
4319
|
-
|
4507
|
+
if (typeof method === 'string') {
|
4508
|
+
method = target[method];
|
4509
|
+
}
|
4320
4510
|
|
4321
|
-
|
4322
|
-
|
4323
|
-
|
4511
|
+
var fn, args;
|
4512
|
+
if (arguments.length > 2) {
|
4513
|
+
args = slice.call(arguments, 2);
|
4324
4514
|
|
4325
|
-
|
4326
|
-
|
4515
|
+
fn = function() {
|
4516
|
+
method.apply(target, args);
|
4517
|
+
};
|
4518
|
+
} else {
|
4519
|
+
fn = function() {
|
4520
|
+
method.call(target);
|
4521
|
+
};
|
4522
|
+
}
|
4327
4523
|
|
4328
|
-
//
|
4329
|
-
|
4330
|
-
|
4524
|
+
// find position to insert - TODO: binary search
|
4525
|
+
var i, l;
|
4526
|
+
for (i = 0, l = timers.length; i < l; i += 2) {
|
4527
|
+
if (executeAt < timers[i]) { break; }
|
4528
|
+
}
|
4331
4529
|
|
4332
|
-
|
4333
|
-
method = target;
|
4334
|
-
target = undefined;
|
4335
|
-
}
|
4530
|
+
timers.splice(i, 0, executeAt, fn);
|
4336
4531
|
|
4337
|
-
|
4338
|
-
if (args && ignore > 0) {
|
4339
|
-
args = args.length > ignore ? slice.call(args, ignore) : null;
|
4340
|
-
}
|
4532
|
+
if (laterTimer && laterTimerExpiresAt < executeAt) { return fn; }
|
4341
4533
|
|
4342
|
-
|
4343
|
-
|
4344
|
-
|
4345
|
-
|
4346
|
-
|
4534
|
+
if (laterTimer) {
|
4535
|
+
clearTimeout(laterTimer);
|
4536
|
+
laterTimer = null;
|
4537
|
+
}
|
4538
|
+
laterTimer = setTimeout(function() {
|
4539
|
+
executeTimers(self);
|
4540
|
+
laterTimer = null;
|
4541
|
+
laterTimerExpiresAt = null;
|
4542
|
+
}, wait);
|
4543
|
+
laterTimerExpiresAt = executeAt;
|
4544
|
+
|
4545
|
+
return fn;
|
4546
|
+
},
|
4347
4547
|
|
4548
|
+
debounce: function(target, method /* , args, wait */) {
|
4549
|
+
var self = this,
|
4550
|
+
args = arguments,
|
4551
|
+
wait = pop.call(args),
|
4552
|
+
debouncee;
|
4348
4553
|
|
4349
|
-
|
4350
|
-
|
4351
|
-
//
|
4554
|
+
for (var i = 0, l = debouncees.length; i < l; i++) {
|
4555
|
+
debouncee = debouncees[i];
|
4556
|
+
if (debouncee[0] === target && debouncee[1] === method) { return; } // do nothing
|
4557
|
+
}
|
4352
4558
|
|
4353
|
-
|
4354
|
-
|
4559
|
+
var timer = setTimeout(function() {
|
4560
|
+
self.run.apply(self, args);
|
4355
4561
|
|
4356
|
-
|
4357
|
-
|
4358
|
-
|
4359
|
-
|
4360
|
-
|
4361
|
-
|
4362
|
-
|
4363
|
-
|
4364
|
-
}
|
4562
|
+
// remove debouncee
|
4563
|
+
var index = -1;
|
4564
|
+
for (var i = 0, l = debouncees.length; i < l; i++) {
|
4565
|
+
debouncee = debouncees[i];
|
4566
|
+
if (debouncee[0] === target && debouncee[1] === method) {
|
4567
|
+
index = i;
|
4568
|
+
break;
|
4569
|
+
}
|
4570
|
+
}
|
4365
4571
|
|
4366
|
-
|
4367
|
-
|
4368
|
-
@method end
|
4369
|
-
*/
|
4370
|
-
end: function() {
|
4371
|
-
this.flush();
|
4372
|
-
},
|
4572
|
+
if (index > -1) { debouncees.splice(index, 1); }
|
4573
|
+
}, wait);
|
4373
4574
|
|
4374
|
-
|
4375
|
-
|
4376
|
-
*/
|
4377
|
-
prev: function() {
|
4378
|
-
return this._prev;
|
4379
|
-
},
|
4575
|
+
debouncees.push([target, method, timer]);
|
4576
|
+
},
|
4380
4577
|
|
4381
|
-
|
4382
|
-
|
4383
|
-
|
4578
|
+
cancelTimers: function() {
|
4579
|
+
for (var i = 0, l = debouncees.length; i < l; i++) {
|
4580
|
+
clearTimeout(debouncees[i][2]);
|
4581
|
+
}
|
4582
|
+
debouncees = [];
|
4384
4583
|
|
4385
|
-
|
4386
|
-
|
4387
|
-
|
4388
|
-
|
4389
|
-
|
4390
|
-
*/
|
4391
|
-
schedule: function(queueName, target, method) {
|
4392
|
-
var queues = this._queues, queue;
|
4393
|
-
if (!queues) { queues = this._queues = {}; }
|
4394
|
-
queue = queues[queueName];
|
4395
|
-
if (!queue) { queue = queues[queueName] = []; }
|
4584
|
+
if (laterTimer) {
|
4585
|
+
clearTimeout(laterTimer);
|
4586
|
+
laterTimer = null;
|
4587
|
+
}
|
4588
|
+
timers = [];
|
4396
4589
|
|
4397
|
-
|
4398
|
-
|
4399
|
-
|
4400
|
-
|
4590
|
+
if (autorun) {
|
4591
|
+
clearTimeout(autorun);
|
4592
|
+
autorun = null;
|
4593
|
+
}
|
4594
|
+
},
|
4401
4595
|
|
4402
|
-
|
4403
|
-
|
4404
|
-
|
4405
|
-
*/
|
4406
|
-
flush: function(queueName) {
|
4407
|
-
var queueNames, idx, len, queue, log;
|
4596
|
+
hasTimers: function() {
|
4597
|
+
return !!timers.length || autorun;
|
4598
|
+
},
|
4408
4599
|
|
4409
|
-
|
4600
|
+
cancel: function(timer) {
|
4601
|
+
if (typeof timer === 'object' && timer.queue && timer.method) { // we're cancelling a deferOnce
|
4602
|
+
return timer.queue.cancel(timer);
|
4603
|
+
} else if (typeof timer === 'function') { // we're cancelling a setTimeout
|
4604
|
+
for (var i = 0, l = timers.length; i < l; i += 2) {
|
4605
|
+
if (timers[i + 1] === timer) {
|
4606
|
+
timers.splice(i, 2); // remove the two elements
|
4607
|
+
return true;
|
4608
|
+
}
|
4609
|
+
}
|
4610
|
+
}
|
4611
|
+
}
|
4612
|
+
};
|
4613
|
+
|
4614
|
+
Backburner.prototype.schedule = Backburner.prototype.defer;
|
4615
|
+
Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce;
|
4616
|
+
Backburner.prototype.later = Backburner.prototype.setTimeout;
|
4410
4617
|
|
4411
|
-
function
|
4412
|
-
|
4618
|
+
function createAutorun(backburner) {
|
4619
|
+
backburner.begin();
|
4620
|
+
autorun = setTimeout(function() {
|
4621
|
+
backburner.end();
|
4622
|
+
autorun = null;
|
4623
|
+
});
|
4413
4624
|
}
|
4414
4625
|
|
4415
|
-
function
|
4416
|
-
|
4626
|
+
function executeTimers(self) {
|
4627
|
+
var now = +new Date(),
|
4628
|
+
time, fns, i, l;
|
4629
|
+
|
4630
|
+
self.run(function() {
|
4631
|
+
// TODO: binary search
|
4632
|
+
for (i = 0, l = timers.length; i < l; i += 2) {
|
4633
|
+
time = timers[i];
|
4634
|
+
if (time > now) { break; }
|
4635
|
+
}
|
4636
|
+
|
4637
|
+
fns = timers.splice(0, i);
|
4638
|
+
|
4639
|
+
for (i = 1, l = fns.length; i < l; i += 2) {
|
4640
|
+
self.schedule(self.options.defaultQueue, null, fns[i]);
|
4641
|
+
}
|
4642
|
+
});
|
4643
|
+
|
4644
|
+
if (timers.length) {
|
4645
|
+
laterTimer = setTimeout(function() {
|
4646
|
+
executeTimers(self);
|
4647
|
+
laterTimer = null;
|
4648
|
+
laterTimerExpiresAt = null;
|
4649
|
+
}, timers[0] - now);
|
4650
|
+
laterTimerExpiresAt = timers[0];
|
4651
|
+
}
|
4417
4652
|
}
|
4418
4653
|
|
4419
|
-
Ember.watch.flushPending(); // make sure all chained watchers are setup
|
4420
4654
|
|
4421
|
-
|
4422
|
-
|
4423
|
-
|
4655
|
+
__exports__.Backburner = Backburner;
|
4656
|
+
});
|
4657
|
+
|
4658
|
+
define("backburner/deferred_action_queues",
|
4659
|
+
["backburner/queue","exports"],
|
4660
|
+
function(__dependency1__, __exports__) {
|
4661
|
+
"use strict";
|
4662
|
+
var Queue = __dependency1__.Queue;
|
4663
|
+
|
4664
|
+
function DeferredActionQueues(queueNames, options) {
|
4665
|
+
var queues = this.queues = {};
|
4666
|
+
this.queueNames = queueNames = queueNames || [];
|
4424
4667
|
|
4425
|
-
|
4426
|
-
|
4427
|
-
|
4428
|
-
|
4429
|
-
|
4668
|
+
var queueName;
|
4669
|
+
for (var i = 0, l = queueNames.length; i < l; i++) {
|
4670
|
+
queueName = queueNames[i];
|
4671
|
+
queues[queueName] = new Queue(this, queueName, options[queueName]);
|
4672
|
+
}
|
4673
|
+
}
|
4430
4674
|
|
4431
|
-
|
4675
|
+
DeferredActionQueues.prototype = {
|
4676
|
+
queueNames: null,
|
4677
|
+
queues: null,
|
4432
4678
|
|
4433
|
-
|
4679
|
+
schedule: function(queueName, target, method, args, onceFlag, stack) {
|
4680
|
+
var queues = this.queues,
|
4681
|
+
queue = queues[queueName];
|
4434
4682
|
|
4435
|
-
|
4683
|
+
if (!queue) { throw new Error("You attempted to schedule an action in a queue (" + queueName + ") that doesn't exist"); }
|
4436
4684
|
|
4685
|
+
if (onceFlag) {
|
4686
|
+
return queue.pushUnique(target, method, args, stack);
|
4437
4687
|
} else {
|
4438
|
-
|
4688
|
+
return queue.push(target, method, args, stack);
|
4689
|
+
}
|
4690
|
+
},
|
4691
|
+
|
4692
|
+
flush: function() {
|
4693
|
+
var queues = this.queues,
|
4694
|
+
queueNames = this.queueNames,
|
4695
|
+
queueName, queue, queueItems, priorQueueNameIndex,
|
4696
|
+
queueNameIndex = 0, numberOfQueues = queueNames.length;
|
4697
|
+
|
4698
|
+
outerloop:
|
4699
|
+
while (queueNameIndex < numberOfQueues) {
|
4700
|
+
queueName = queueNames[queueNameIndex];
|
4701
|
+
queue = queues[queueName];
|
4702
|
+
queueItems = queue._queue.slice();
|
4703
|
+
queue._queue = [];
|
4704
|
+
|
4705
|
+
var options = queue.options,
|
4706
|
+
before = options && options.before,
|
4707
|
+
after = options && options.after,
|
4708
|
+
target, method, args, stack,
|
4709
|
+
queueIndex = 0, numberOfQueueItems = queueItems.length;
|
4710
|
+
|
4711
|
+
if (numberOfQueueItems && before) { before(); }
|
4712
|
+
while (queueIndex < numberOfQueueItems) {
|
4713
|
+
target = queueItems[queueIndex];
|
4714
|
+
method = queueItems[queueIndex+1];
|
4715
|
+
args = queueItems[queueIndex+2];
|
4716
|
+
stack = queueItems[queueIndex+3]; // Debugging assistance
|
4717
|
+
|
4718
|
+
if (typeof method === 'string') { method = target[method]; }
|
4719
|
+
|
4720
|
+
// TODO: error handling
|
4721
|
+
if (args && args.length > 0) {
|
4722
|
+
method.apply(target, args);
|
4723
|
+
} else {
|
4724
|
+
method.call(target);
|
4725
|
+
}
|
4726
|
+
|
4727
|
+
queueIndex += 4;
|
4728
|
+
}
|
4729
|
+
if (numberOfQueueItems && after) { after(); }
|
4730
|
+
|
4731
|
+
if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
|
4732
|
+
queueNameIndex = priorQueueNameIndex;
|
4733
|
+
continue outerloop;
|
4734
|
+
}
|
4735
|
+
|
4736
|
+
queueNameIndex++;
|
4439
4737
|
}
|
4440
4738
|
}
|
4739
|
+
};
|
4441
4740
|
|
4442
|
-
|
4443
|
-
|
4444
|
-
|
4445
|
-
|
4741
|
+
function indexOfPriorQueueWithActions(daq, currentQueueIndex) {
|
4742
|
+
var queueName, queue;
|
4743
|
+
|
4744
|
+
for (var i = 0, l = currentQueueIndex; i <= l; i++) {
|
4745
|
+
queueName = daq.queueNames[i];
|
4746
|
+
queue = daq.queues[queueName];
|
4747
|
+
if (queue._queue.length) { return i; }
|
4748
|
+
}
|
4749
|
+
|
4750
|
+
return -1;
|
4751
|
+
}
|
4752
|
+
|
4753
|
+
__exports__.DeferredActionQueues = DeferredActionQueues;
|
4754
|
+
});
|
4755
|
+
|
4756
|
+
define("backburner/queue",
|
4757
|
+
["exports"],
|
4758
|
+
function(__exports__) {
|
4759
|
+
"use strict";
|
4760
|
+
function Queue(daq, name, options) {
|
4761
|
+
this.daq = daq;
|
4762
|
+
this.name = name;
|
4763
|
+
this.options = options;
|
4764
|
+
this._queue = [];
|
4765
|
+
}
|
4766
|
+
|
4767
|
+
Queue.prototype = {
|
4768
|
+
daq: null,
|
4769
|
+
name: null,
|
4770
|
+
options: null,
|
4771
|
+
_queue: null,
|
4772
|
+
|
4773
|
+
push: function(target, method, args, stack) {
|
4774
|
+
var queue = this._queue;
|
4775
|
+
queue.push(target, method, args, stack);
|
4776
|
+
return {queue: this, target: target, method: method};
|
4777
|
+
},
|
4446
4778
|
|
4447
|
-
|
4448
|
-
|
4449
|
-
queueName = queueNames[idx];
|
4450
|
-
queue = this._queues && this._queues[queueName];
|
4451
|
-
delete this._queues[queueName];
|
4779
|
+
pushUnique: function(target, method, args, stack) {
|
4780
|
+
var queue = this._queue, currentTarget, currentMethod, i, l;
|
4452
4781
|
|
4453
|
-
|
4454
|
-
|
4455
|
-
|
4456
|
-
if (queueName === 'sync') {
|
4457
|
-
log = Ember.LOG_BINDINGS;
|
4458
|
-
if (log) { Ember.Logger.log('Begin: Flush Sync Queue'); }
|
4782
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
4783
|
+
currentTarget = queue[i];
|
4784
|
+
currentMethod = queue[i+1];
|
4459
4785
|
|
4460
|
-
|
4786
|
+
if (currentTarget === target && currentMethod === method) {
|
4787
|
+
queue[i+2] = args; // replace args
|
4788
|
+
queue[i+3] = stack; // replace stack
|
4789
|
+
return {queue: this, target: target, method: method}; // TODO: test this code path
|
4790
|
+
}
|
4791
|
+
}
|
4461
4792
|
|
4462
|
-
|
4793
|
+
this._queue.push(target, method, args, stack);
|
4794
|
+
return {queue: this, target: target, method: method};
|
4795
|
+
},
|
4463
4796
|
|
4464
|
-
|
4797
|
+
// TODO: remove me, only being used for Ember.run.sync
|
4798
|
+
flush: function() {
|
4799
|
+
var queue = this._queue,
|
4800
|
+
options = this.options,
|
4801
|
+
before = options && options.before,
|
4802
|
+
after = options && options.after,
|
4803
|
+
target, method, args, stack, i, l = queue.length;
|
4804
|
+
|
4805
|
+
if (l && before) { before(); }
|
4806
|
+
for (i = 0; i < l; i += 4) {
|
4807
|
+
target = queue[i];
|
4808
|
+
method = queue[i+1];
|
4809
|
+
args = queue[i+2];
|
4810
|
+
stack = queue[i+3]; // Debugging assistance
|
4811
|
+
|
4812
|
+
// TODO: error handling
|
4813
|
+
if (args && args.length > 0) {
|
4814
|
+
method.apply(target, args);
|
4465
4815
|
} else {
|
4466
|
-
|
4816
|
+
method.call(target);
|
4467
4817
|
}
|
4468
4818
|
}
|
4819
|
+
if (l && after) { after(); }
|
4469
4820
|
|
4470
|
-
//
|
4471
|
-
|
4472
|
-
|
4473
|
-
|
4474
|
-
|
4475
|
-
|
4476
|
-
}
|
4821
|
+
// check if new items have been added
|
4822
|
+
if (queue.length > l) {
|
4823
|
+
this._queue = queue.slice(l);
|
4824
|
+
this.flush();
|
4825
|
+
} else {
|
4826
|
+
this._queue.length = 0;
|
4477
4827
|
}
|
4828
|
+
},
|
4829
|
+
|
4830
|
+
cancel: function(actionToCancel) {
|
4831
|
+
var queue = this._queue, currentTarget, currentMethod, i, l;
|
4478
4832
|
|
4479
|
-
|
4833
|
+
for (i = 0, l = queue.length; i < l; i += 4) {
|
4834
|
+
currentTarget = queue[i];
|
4835
|
+
currentMethod = queue[i+1];
|
4836
|
+
|
4837
|
+
if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
|
4838
|
+
queue.splice(i, 4);
|
4839
|
+
return true;
|
4840
|
+
}
|
4841
|
+
}
|
4480
4842
|
}
|
4481
|
-
}
|
4843
|
+
};
|
4844
|
+
|
4845
|
+
__exports__.Queue = Queue;
|
4846
|
+
});
|
4847
|
+
|
4848
|
+
})();
|
4849
|
+
|
4482
4850
|
|
4483
|
-
return this;
|
4484
|
-
}
|
4485
4851
|
|
4852
|
+
(function() {
|
4853
|
+
var onBegin = function(current) {
|
4854
|
+
Ember.run.currentRunLoop = current;
|
4855
|
+
};
|
4856
|
+
|
4857
|
+
var onEnd = function(current, next) {
|
4858
|
+
Ember.run.currentRunLoop = next;
|
4486
4859
|
};
|
4487
4860
|
|
4488
|
-
|
4861
|
+
var Backburner = requireModule('backburner').Backburner,
|
4862
|
+
backburner = new Backburner(['sync', 'actions', 'destroy'], {
|
4863
|
+
sync: {
|
4864
|
+
before: Ember.beginPropertyChanges,
|
4865
|
+
after: Ember.endPropertyChanges
|
4866
|
+
},
|
4867
|
+
defaultQueue: 'actions',
|
4868
|
+
onBegin: onBegin,
|
4869
|
+
onEnd: onEnd
|
4870
|
+
}),
|
4871
|
+
slice = [].slice;
|
4489
4872
|
|
4490
4873
|
// ..........................................................
|
4491
4874
|
// Ember.run - this is ideally the only public API the dev sees
|
@@ -4519,20 +4902,76 @@ Ember.RunLoop = RunLoop;
|
|
4519
4902
|
@return {Object} return value from invoking the passed function.
|
4520
4903
|
*/
|
4521
4904
|
Ember.run = function(target, method) {
|
4522
|
-
var
|
4523
|
-
run.begin();
|
4905
|
+
var ret;
|
4524
4906
|
|
4525
|
-
|
4526
|
-
|
4527
|
-
|
4907
|
+
if (Ember.onerror) {
|
4908
|
+
try {
|
4909
|
+
ret = backburner.run.apply(backburner, arguments);
|
4910
|
+
} catch (e) {
|
4911
|
+
Ember.onerror(e);
|
4528
4912
|
}
|
4913
|
+
} else {
|
4914
|
+
ret = backburner.run.apply(backburner, arguments);
|
4529
4915
|
}
|
4530
4916
|
|
4531
|
-
return
|
4917
|
+
return ret;
|
4918
|
+
};
|
4919
|
+
|
4920
|
+
/**
|
4921
|
+
|
4922
|
+
If no run-loop is present, it creates a new one. If a run loop is
|
4923
|
+
present it will queue itself to run on the existing run-loops action
|
4924
|
+
queue.
|
4925
|
+
|
4926
|
+
Please note: This is not for normal usage, and should be used sparingly.
|
4927
|
+
|
4928
|
+
If invoked when not within a run loop:
|
4929
|
+
|
4930
|
+
```javascript
|
4931
|
+
Ember.run.join(function(){
|
4932
|
+
// creates a new run-loop
|
4933
|
+
});
|
4934
|
+
```
|
4935
|
+
|
4936
|
+
Alternatively, if called within an existing run loop:
|
4937
|
+
|
4938
|
+
```javascript
|
4939
|
+
Ember.run(function(){
|
4940
|
+
// creates a new run-loop
|
4941
|
+
Ember.run.join(function(){
|
4942
|
+
// joins with the existing run-loop, and queues for invocation on
|
4943
|
+
// the existing run-loops action queue.
|
4944
|
+
});
|
4945
|
+
});
|
4946
|
+
```
|
4947
|
+
|
4948
|
+
@method join
|
4949
|
+
@namespace Ember
|
4950
|
+
@param {Object} [target] target of method to call
|
4951
|
+
@param {Function|String} method Method to invoke.
|
4952
|
+
May be a function or a string. If you pass a string
|
4953
|
+
then it will be looked up on the passed target.
|
4954
|
+
@param {Object} [args*] Any additional arguments you wish to pass to the method.
|
4955
|
+
@return {Object} return value from invoking the passed function. Please note,
|
4956
|
+
when called within an existing loop, no return value is possible.
|
4957
|
+
*/
|
4958
|
+
Ember.run.join = function(target, method) {
|
4959
|
+
if (!Ember.run.currentRunLoop) {
|
4960
|
+
return Ember.run.apply(Ember.run, arguments);
|
4961
|
+
}
|
4962
|
+
|
4963
|
+
var args = slice.call(arguments);
|
4964
|
+
args.unshift('actions');
|
4965
|
+
Ember.run.schedule.apply(Ember.run, args);
|
4532
4966
|
};
|
4533
4967
|
|
4968
|
+
Ember.run.backburner = backburner;
|
4969
|
+
|
4534
4970
|
var run = Ember.run;
|
4535
4971
|
|
4972
|
+
Ember.run.currentRunLoop = null;
|
4973
|
+
|
4974
|
+
Ember.run.queues = backburner.queueNames;
|
4536
4975
|
|
4537
4976
|
/**
|
4538
4977
|
Begins a new RunLoop. Any deferred actions invoked after the begin will
|
@@ -4549,7 +4988,7 @@ var run = Ember.run;
|
|
4549
4988
|
@return {void}
|
4550
4989
|
*/
|
4551
4990
|
Ember.run.begin = function() {
|
4552
|
-
|
4991
|
+
backburner.begin();
|
4553
4992
|
};
|
4554
4993
|
|
4555
4994
|
/**
|
@@ -4567,12 +5006,7 @@ Ember.run.begin = function() {
|
|
4567
5006
|
@return {void}
|
4568
5007
|
*/
|
4569
5008
|
Ember.run.end = function() {
|
4570
|
-
|
4571
|
-
|
4572
|
-
function tryable() { run.currentRunLoop.end(); }
|
4573
|
-
function finalizer() { run.currentRunLoop = run.currentRunLoop.prev(); }
|
4574
|
-
|
4575
|
-
Ember.tryFinally(tryable, finalizer);
|
5009
|
+
backburner.end();
|
4576
5010
|
};
|
4577
5011
|
|
4578
5012
|
/**
|
@@ -4585,7 +5019,6 @@ Ember.run.end = function() {
|
|
4585
5019
|
@type Array
|
4586
5020
|
@default ['sync', 'actions', 'destroy']
|
4587
5021
|
*/
|
4588
|
-
Ember.run.queues = ['sync', 'actions', 'destroy'];
|
4589
5022
|
|
4590
5023
|
/**
|
4591
5024
|
Adds the passed target/method and any optional arguments to the named
|
@@ -4624,57 +5057,18 @@ Ember.run.queues = ['sync', 'actions', 'destroy'];
|
|
4624
5057
|
@return {void}
|
4625
5058
|
*/
|
4626
5059
|
Ember.run.schedule = function(queue, target, method) {
|
4627
|
-
|
4628
|
-
|
5060
|
+
checkAutoRun();
|
5061
|
+
backburner.schedule.apply(backburner, arguments);
|
4629
5062
|
};
|
4630
5063
|
|
4631
|
-
var scheduledAutorun;
|
4632
|
-
function autorun() {
|
4633
|
-
scheduledAutorun = null;
|
4634
|
-
if (run.currentRunLoop) { run.end(); }
|
4635
|
-
}
|
4636
|
-
|
4637
5064
|
// Used by global test teardown
|
4638
5065
|
Ember.run.hasScheduledTimers = function() {
|
4639
|
-
return
|
5066
|
+
return backburner.hasTimers();
|
4640
5067
|
};
|
4641
5068
|
|
4642
5069
|
// Used by global test teardown
|
4643
5070
|
Ember.run.cancelTimers = function () {
|
4644
|
-
|
4645
|
-
clearTimeout(scheduledAutorun);
|
4646
|
-
scheduledAutorun = null;
|
4647
|
-
}
|
4648
|
-
if (scheduledLater) {
|
4649
|
-
clearTimeout(scheduledLater);
|
4650
|
-
scheduledLater = null;
|
4651
|
-
}
|
4652
|
-
timers = {};
|
4653
|
-
};
|
4654
|
-
|
4655
|
-
/**
|
4656
|
-
Begins a new RunLoop if necessary and schedules a timer to flush the
|
4657
|
-
RunLoop at a later time. This method is used by parts of Ember to
|
4658
|
-
ensure the RunLoop always finishes. You normally do not need to call this
|
4659
|
-
method directly. Instead use `Ember.run()`
|
4660
|
-
|
4661
|
-
@method autorun
|
4662
|
-
@example
|
4663
|
-
Ember.run.autorun();
|
4664
|
-
@return {Ember.RunLoop} the new current RunLoop
|
4665
|
-
*/
|
4666
|
-
Ember.run.autorun = function() {
|
4667
|
-
if (!run.currentRunLoop) {
|
4668
|
-
|
4669
|
-
|
4670
|
-
run.begin();
|
4671
|
-
|
4672
|
-
if (!scheduledAutorun) {
|
4673
|
-
scheduledAutorun = setTimeout(autorun, 1);
|
4674
|
-
}
|
4675
|
-
}
|
4676
|
-
|
4677
|
-
return run.currentRunLoop;
|
5071
|
+
backburner.cancelTimers();
|
4678
5072
|
};
|
4679
5073
|
|
4680
5074
|
/**
|
@@ -4694,42 +5088,9 @@ Ember.run.autorun = function() {
|
|
4694
5088
|
@return {void}
|
4695
5089
|
*/
|
4696
5090
|
Ember.run.sync = function() {
|
4697
|
-
|
4698
|
-
run.currentRunLoop.flush('sync');
|
5091
|
+
backburner.currentInstance.queues.sync.flush();
|
4699
5092
|
};
|
4700
5093
|
|
4701
|
-
// ..........................................................
|
4702
|
-
// TIMERS
|
4703
|
-
//
|
4704
|
-
|
4705
|
-
var timers = {}; // active timers...
|
4706
|
-
|
4707
|
-
var scheduledLater, scheduledLaterExpires;
|
4708
|
-
function invokeLaterTimers() {
|
4709
|
-
scheduledLater = null;
|
4710
|
-
run(function() {
|
4711
|
-
var now = (+ new Date()), earliest = -1;
|
4712
|
-
for (var key in timers) {
|
4713
|
-
if (!timers.hasOwnProperty(key)) { continue; }
|
4714
|
-
var timer = timers[key];
|
4715
|
-
if (timer && timer.expires) {
|
4716
|
-
if (now >= timer.expires) {
|
4717
|
-
delete timers[key];
|
4718
|
-
invoke(timer.target, timer.method, timer.args, 2);
|
4719
|
-
} else {
|
4720
|
-
if (earliest < 0 || (timer.expires < earliest)) { earliest = timer.expires; }
|
4721
|
-
}
|
4722
|
-
}
|
4723
|
-
}
|
4724
|
-
|
4725
|
-
// schedule next timeout to fire when the earliest timer expires
|
4726
|
-
if (earliest > 0) {
|
4727
|
-
scheduledLater = setTimeout(invokeLaterTimers, earliest - now);
|
4728
|
-
scheduledLaterExpires = earliest;
|
4729
|
-
}
|
4730
|
-
});
|
4731
|
-
}
|
4732
|
-
|
4733
5094
|
/**
|
4734
5095
|
Invokes the passed target/method and optional arguments after a specified
|
4735
5096
|
period if time. The last parameter of this method must always be a number
|
@@ -4741,89 +5102,24 @@ function invokeLaterTimers() {
|
|
4741
5102
|
together, which is often more efficient than using a real setTimeout.
|
4742
5103
|
|
4743
5104
|
```javascript
|
4744
|
-
Ember.run.later(myContext, function(){
|
4745
|
-
// code here will execute within a RunLoop in about 500ms with this == myContext
|
4746
|
-
}, 500);
|
4747
|
-
```
|
4748
|
-
|
4749
|
-
@method later
|
4750
|
-
@param {Object} [target] target of method to invoke
|
4751
|
-
@param {Function|String} method The method to invoke.
|
4752
|
-
If you pass a string it will be resolved on the
|
4753
|
-
target at the time the method is invoked.
|
4754
|
-
@param {Object} [args*] Optional arguments to pass to the timeout.
|
4755
|
-
@param {Number} wait Number of milliseconds to wait.
|
4756
|
-
@return {String} a string you can use to cancel the timer in
|
4757
|
-
{{#crossLink "Ember/run.cancel"}}{{/crossLink}} later.
|
4758
|
-
*/
|
4759
|
-
Ember.run.later = function(target, method) {
|
4760
|
-
var args, expires, timer, guid, wait;
|
4761
|
-
|
4762
|
-
// setTimeout compatibility...
|
4763
|
-
if (arguments.length===2 && 'function' === typeof target) {
|
4764
|
-
wait = method;
|
4765
|
-
method = target;
|
4766
|
-
target = undefined;
|
4767
|
-
args = [target, method];
|
4768
|
-
} else {
|
4769
|
-
args = slice.call(arguments);
|
4770
|
-
wait = args.pop();
|
4771
|
-
}
|
4772
|
-
|
4773
|
-
expires = (+ new Date()) + wait;
|
4774
|
-
timer = { target: target, method: method, expires: expires, args: args };
|
4775
|
-
guid = Ember.guidFor(timer);
|
4776
|
-
timers[guid] = timer;
|
4777
|
-
|
4778
|
-
if(scheduledLater && expires < scheduledLaterExpires) {
|
4779
|
-
// Cancel later timer (then reschedule earlier timer below)
|
4780
|
-
clearTimeout(scheduledLater);
|
4781
|
-
scheduledLater = null;
|
4782
|
-
}
|
4783
|
-
|
4784
|
-
if (!scheduledLater) {
|
4785
|
-
// Schedule later timers to be run.
|
4786
|
-
scheduledLater = setTimeout(invokeLaterTimers, wait);
|
4787
|
-
scheduledLaterExpires = expires;
|
4788
|
-
}
|
4789
|
-
|
4790
|
-
return guid;
|
4791
|
-
};
|
4792
|
-
|
4793
|
-
function invokeOnceTimer(guid, onceTimers) {
|
4794
|
-
if (onceTimers[this.tguid]) { delete onceTimers[this.tguid][this.mguid]; }
|
4795
|
-
if (timers[guid]) { invoke(this.target, this.method, this.args); }
|
4796
|
-
delete timers[guid];
|
4797
|
-
}
|
4798
|
-
|
4799
|
-
function scheduleOnce(queue, target, method, args) {
|
4800
|
-
var tguid = Ember.guidFor(target),
|
4801
|
-
mguid = Ember.guidFor(method),
|
4802
|
-
onceTimers = run.autorun().onceTimers,
|
4803
|
-
guid = onceTimers[tguid] && onceTimers[tguid][mguid],
|
4804
|
-
timer;
|
4805
|
-
|
4806
|
-
if (guid && timers[guid]) {
|
4807
|
-
timers[guid].args = args; // replace args
|
4808
|
-
} else {
|
4809
|
-
timer = {
|
4810
|
-
target: target,
|
4811
|
-
method: method,
|
4812
|
-
args: args,
|
4813
|
-
tguid: tguid,
|
4814
|
-
mguid: mguid
|
4815
|
-
};
|
4816
|
-
|
4817
|
-
guid = Ember.guidFor(timer);
|
4818
|
-
timers[guid] = timer;
|
4819
|
-
if (!onceTimers[tguid]) { onceTimers[tguid] = {}; }
|
4820
|
-
onceTimers[tguid][mguid] = guid; // so it isn't scheduled more than once
|
4821
|
-
|
4822
|
-
run.schedule(queue, timer, invokeOnceTimer, guid, onceTimers);
|
4823
|
-
}
|
5105
|
+
Ember.run.later(myContext, function(){
|
5106
|
+
// code here will execute within a RunLoop in about 500ms with this == myContext
|
5107
|
+
}, 500);
|
5108
|
+
```
|
4824
5109
|
|
4825
|
-
|
4826
|
-
}
|
5110
|
+
@method later
|
5111
|
+
@param {Object} [target] target of method to invoke
|
5112
|
+
@param {Function|String} method The method to invoke.
|
5113
|
+
If you pass a string it will be resolved on the
|
5114
|
+
target at the time the method is invoked.
|
5115
|
+
@param {Object} [args*] Optional arguments to pass to the timeout.
|
5116
|
+
@param {Number} wait Number of milliseconds to wait.
|
5117
|
+
@return {String} a string you can use to cancel the timer in
|
5118
|
+
`Ember.run.cancel` later.
|
5119
|
+
*/
|
5120
|
+
Ember.run.later = function(target, method) {
|
5121
|
+
return backburner.later.apply(backburner, arguments);
|
5122
|
+
};
|
4827
5123
|
|
4828
5124
|
/**
|
4829
5125
|
Schedule a function to run one time during the current RunLoop. This is equivalent
|
@@ -4838,7 +5134,10 @@ function scheduleOnce(queue, target, method, args) {
|
|
4838
5134
|
@return {Object} timer
|
4839
5135
|
*/
|
4840
5136
|
Ember.run.once = function(target, method) {
|
4841
|
-
|
5137
|
+
checkAutoRun();
|
5138
|
+
var args = slice.call(arguments);
|
5139
|
+
args.unshift('actions');
|
5140
|
+
return backburner.scheduleOnce.apply(backburner, args);
|
4842
5141
|
};
|
4843
5142
|
|
4844
5143
|
/**
|
@@ -4886,12 +5185,13 @@ Ember.run.once = function(target, method) {
|
|
4886
5185
|
@return {Object} timer
|
4887
5186
|
*/
|
4888
5187
|
Ember.run.scheduleOnce = function(queue, target, method) {
|
4889
|
-
|
5188
|
+
checkAutoRun();
|
5189
|
+
return backburner.scheduleOnce.apply(backburner, arguments);
|
4890
5190
|
};
|
4891
5191
|
|
4892
5192
|
/**
|
4893
|
-
Schedules an item to run from within a separate run loop, after
|
4894
|
-
control has been returned to the system. This is equivalent to calling
|
5193
|
+
Schedules an item to run from within a separate run loop, after
|
5194
|
+
control has been returned to the system. This is equivalent to calling
|
4895
5195
|
`Ember.run.later` with a wait time of 1ms.
|
4896
5196
|
|
4897
5197
|
```javascript
|
@@ -4903,7 +5203,7 @@ Ember.run.scheduleOnce = function(queue, target, method) {
|
|
4903
5203
|
Multiple operations scheduled with `Ember.run.next` will coalesce
|
4904
5204
|
into the same later run loop, along with any other operations
|
4905
5205
|
scheduled by `Ember.run.later` that expire right around the same
|
4906
|
-
time that `Ember.run.next` operations will fire.
|
5206
|
+
time that `Ember.run.next` operations will fire.
|
4907
5207
|
|
4908
5208
|
Note that there are often alternatives to using `Ember.run.next`.
|
4909
5209
|
For instance, if you'd like to schedule an operation to happen
|
@@ -4929,13 +5229,13 @@ Ember.run.scheduleOnce = function(queue, target, method) {
|
|
4929
5229
|
|
4930
5230
|
One benefit of the above approach compared to using `Ember.run.next` is
|
4931
5231
|
that you will be able to perform DOM/CSS operations before unprocessed
|
4932
|
-
elements are rendered to the screen, which may prevent flickering or
|
5232
|
+
elements are rendered to the screen, which may prevent flickering or
|
4933
5233
|
other artifacts caused by delaying processing until after rendering.
|
4934
5234
|
|
4935
|
-
The other major benefit to the above approach is that `Ember.run.next`
|
4936
|
-
introduces an element of non-determinism, which can make things much
|
4937
|
-
harder to test, due to its reliance on `setTimeout`; it's much harder
|
4938
|
-
to guarantee the order of scheduled operations when they are scheduled
|
5235
|
+
The other major benefit to the above approach is that `Ember.run.next`
|
5236
|
+
introduces an element of non-determinism, which can make things much
|
5237
|
+
harder to test, due to its reliance on `setTimeout`; it's much harder
|
5238
|
+
to guarantee the order of scheduled operations when they are scheduled
|
4939
5239
|
outside of the current run loop, i.e. with `Ember.run.next`.
|
4940
5240
|
|
4941
5241
|
@method next
|
@@ -4948,8 +5248,8 @@ Ember.run.scheduleOnce = function(queue, target, method) {
|
|
4948
5248
|
*/
|
4949
5249
|
Ember.run.next = function() {
|
4950
5250
|
var args = slice.call(arguments);
|
4951
|
-
args.push(1);
|
4952
|
-
return
|
5251
|
+
args.push(1);
|
5252
|
+
return backburner.later.apply(backburner, args);
|
4953
5253
|
};
|
4954
5254
|
|
4955
5255
|
/**
|
@@ -4978,9 +5278,16 @@ Ember.run.next = function() {
|
|
4978
5278
|
@return {void}
|
4979
5279
|
*/
|
4980
5280
|
Ember.run.cancel = function(timer) {
|
4981
|
-
|
5281
|
+
return backburner.cancel(timer);
|
4982
5282
|
};
|
4983
5283
|
|
5284
|
+
// Make sure it's not an autorun during testing
|
5285
|
+
function checkAutoRun() {
|
5286
|
+
if (!Ember.run.currentRunLoop) {
|
5287
|
+
|
5288
|
+
}
|
5289
|
+
}
|
5290
|
+
|
4984
5291
|
})();
|
4985
5292
|
|
4986
5293
|
|
@@ -5265,7 +5572,7 @@ function mixinProperties(to, from) {
|
|
5265
5572
|
mixinProperties(Binding, {
|
5266
5573
|
|
5267
5574
|
/**
|
5268
|
-
See
|
5575
|
+
See `Ember.Binding.from`.
|
5269
5576
|
|
5270
5577
|
@method from
|
5271
5578
|
@static
|
@@ -5276,7 +5583,7 @@ mixinProperties(Binding, {
|
|
5276
5583
|
},
|
5277
5584
|
|
5278
5585
|
/**
|
5279
|
-
See
|
5586
|
+
See `Ember.Binding.to`.
|
5280
5587
|
|
5281
5588
|
@method to
|
5282
5589
|
@static
|
@@ -5293,7 +5600,7 @@ mixinProperties(Binding, {
|
|
5293
5600
|
This means that if you change the "to" side directly, the "from" side may have
|
5294
5601
|
a different value.
|
5295
5602
|
|
5296
|
-
See
|
5603
|
+
See `Binding.oneWay`.
|
5297
5604
|
|
5298
5605
|
@method oneWay
|
5299
5606
|
@param {String} from from path.
|
@@ -5354,7 +5661,7 @@ mixinProperties(Binding, {
|
|
5354
5661
|
|
5355
5662
|
You should consider using one way bindings anytime you have an object that
|
5356
5663
|
may be created frequently and you do not intend to change a property; only
|
5357
|
-
to monitor it for changes
|
5664
|
+
to monitor it for changes (such as in the example above).
|
5358
5665
|
|
5359
5666
|
## Adding Bindings Manually
|
5360
5667
|
|
@@ -5655,14 +5962,6 @@ function mergeMixins(mixins, m, descs, values, base, keys) {
|
|
5655
5962
|
}
|
5656
5963
|
}
|
5657
5964
|
|
5658
|
-
function writableReq(obj) {
|
5659
|
-
var m = Ember.meta(obj), req = m.required;
|
5660
|
-
if (!req || !m.hasOwnProperty('required')) {
|
5661
|
-
req = m.required = req ? o_create(req) : {};
|
5662
|
-
}
|
5663
|
-
return req;
|
5664
|
-
}
|
5665
|
-
|
5666
5965
|
var IS_BINDING = Ember.IS_BINDING = /^.+Binding$/;
|
5667
5966
|
|
5668
5967
|
function detectBinding(obj, key, value, m) {
|
@@ -6148,14 +6447,57 @@ Ember Metal
|
|
6148
6447
|
})();
|
6149
6448
|
|
6150
6449
|
(function() {
|
6151
|
-
define("rsvp",
|
6152
|
-
[],
|
6153
|
-
function() {
|
6450
|
+
define("rsvp/all",
|
6451
|
+
["rsvp/defer","exports"],
|
6452
|
+
function(__dependency1__, __exports__) {
|
6453
|
+
"use strict";
|
6454
|
+
var defer = __dependency1__.defer;
|
6455
|
+
|
6456
|
+
function all(promises) {
|
6457
|
+
var results = [], deferred = defer(), remaining = promises.length;
|
6458
|
+
|
6459
|
+
if (remaining === 0) {
|
6460
|
+
deferred.resolve([]);
|
6461
|
+
}
|
6462
|
+
|
6463
|
+
var resolver = function(index) {
|
6464
|
+
return function(value) {
|
6465
|
+
resolveAll(index, value);
|
6466
|
+
};
|
6467
|
+
};
|
6468
|
+
|
6469
|
+
var resolveAll = function(index, value) {
|
6470
|
+
results[index] = value;
|
6471
|
+
if (--remaining === 0) {
|
6472
|
+
deferred.resolve(results);
|
6473
|
+
}
|
6474
|
+
};
|
6475
|
+
|
6476
|
+
var rejectAll = function(error) {
|
6477
|
+
deferred.reject(error);
|
6478
|
+
};
|
6479
|
+
|
6480
|
+
for (var i = 0; i < promises.length; i++) {
|
6481
|
+
if (promises[i] && typeof promises[i].then === 'function') {
|
6482
|
+
promises[i].then(resolver(i), rejectAll);
|
6483
|
+
} else {
|
6484
|
+
resolveAll(i, promises[i]);
|
6485
|
+
}
|
6486
|
+
}
|
6487
|
+
return deferred.promise;
|
6488
|
+
}
|
6489
|
+
|
6490
|
+
__exports__.all = all;
|
6491
|
+
});
|
6492
|
+
|
6493
|
+
define("rsvp/async",
|
6494
|
+
["exports"],
|
6495
|
+
function(__exports__) {
|
6154
6496
|
"use strict";
|
6155
6497
|
var browserGlobal = (typeof window !== 'undefined') ? window : {};
|
6156
6498
|
|
6157
|
-
var
|
6158
|
-
var
|
6499
|
+
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
|
6500
|
+
var async;
|
6159
6501
|
|
6160
6502
|
if (typeof process !== 'undefined' &&
|
6161
6503
|
{}.toString.call(process) === '[object process]') {
|
@@ -6164,10 +6506,10 @@ define("rsvp",
|
|
6164
6506
|
callback.call(binding);
|
6165
6507
|
});
|
6166
6508
|
};
|
6167
|
-
} else if (
|
6509
|
+
} else if (BrowserMutationObserver) {
|
6168
6510
|
var queue = [];
|
6169
6511
|
|
6170
|
-
var observer = new
|
6512
|
+
var observer = new BrowserMutationObserver(function() {
|
6171
6513
|
var toProcess = queue.slice();
|
6172
6514
|
queue = [];
|
6173
6515
|
|
@@ -6198,6 +6540,47 @@ define("rsvp",
|
|
6198
6540
|
};
|
6199
6541
|
}
|
6200
6542
|
|
6543
|
+
|
6544
|
+
__exports__.async = async;
|
6545
|
+
});
|
6546
|
+
|
6547
|
+
define("rsvp/config",
|
6548
|
+
["rsvp/async","exports"],
|
6549
|
+
function(__dependency1__, __exports__) {
|
6550
|
+
"use strict";
|
6551
|
+
var async = __dependency1__.async;
|
6552
|
+
|
6553
|
+
var config = {};
|
6554
|
+
config.async = async;
|
6555
|
+
|
6556
|
+
__exports__.config = config;
|
6557
|
+
});
|
6558
|
+
|
6559
|
+
define("rsvp/defer",
|
6560
|
+
["rsvp/promise","exports"],
|
6561
|
+
function(__dependency1__, __exports__) {
|
6562
|
+
"use strict";
|
6563
|
+
var Promise = __dependency1__.Promise;
|
6564
|
+
|
6565
|
+
function defer() {
|
6566
|
+
var deferred = {};
|
6567
|
+
|
6568
|
+
var promise = new Promise(function(resolve, reject) {
|
6569
|
+
deferred.resolve = resolve;
|
6570
|
+
deferred.reject = reject;
|
6571
|
+
});
|
6572
|
+
|
6573
|
+
deferred.promise = promise;
|
6574
|
+
return deferred;
|
6575
|
+
}
|
6576
|
+
|
6577
|
+
__exports__.defer = defer;
|
6578
|
+
});
|
6579
|
+
|
6580
|
+
define("rsvp/events",
|
6581
|
+
["exports"],
|
6582
|
+
function(__exports__) {
|
6583
|
+
"use strict";
|
6201
6584
|
var Event = function(type, options) {
|
6202
6585
|
this.type = type;
|
6203
6586
|
|
@@ -6292,7 +6675,148 @@ define("rsvp",
|
|
6292
6675
|
}
|
6293
6676
|
};
|
6294
6677
|
|
6295
|
-
|
6678
|
+
|
6679
|
+
__exports__.EventTarget = EventTarget;
|
6680
|
+
});
|
6681
|
+
|
6682
|
+
define("rsvp/hash",
|
6683
|
+
["rsvp/defer","exports"],
|
6684
|
+
function(__dependency1__, __exports__) {
|
6685
|
+
"use strict";
|
6686
|
+
var defer = __dependency1__.defer;
|
6687
|
+
|
6688
|
+
function size(object) {
|
6689
|
+
var size = 0;
|
6690
|
+
|
6691
|
+
for (var prop in object) {
|
6692
|
+
size++;
|
6693
|
+
}
|
6694
|
+
|
6695
|
+
return size;
|
6696
|
+
}
|
6697
|
+
|
6698
|
+
function hash(promises) {
|
6699
|
+
var results = {}, deferred = defer(), remaining = size(promises);
|
6700
|
+
|
6701
|
+
if (remaining === 0) {
|
6702
|
+
deferred.resolve({});
|
6703
|
+
}
|
6704
|
+
|
6705
|
+
var resolver = function(prop) {
|
6706
|
+
return function(value) {
|
6707
|
+
resolveAll(prop, value);
|
6708
|
+
};
|
6709
|
+
};
|
6710
|
+
|
6711
|
+
var resolveAll = function(prop, value) {
|
6712
|
+
results[prop] = value;
|
6713
|
+
if (--remaining === 0) {
|
6714
|
+
deferred.resolve(results);
|
6715
|
+
}
|
6716
|
+
};
|
6717
|
+
|
6718
|
+
var rejectAll = function(error) {
|
6719
|
+
deferred.reject(error);
|
6720
|
+
};
|
6721
|
+
|
6722
|
+
for (var prop in promises) {
|
6723
|
+
if (promises[prop] && typeof promises[prop].then === 'function') {
|
6724
|
+
promises[prop].then(resolver(prop), rejectAll);
|
6725
|
+
} else {
|
6726
|
+
resolveAll(prop, promises[prop]);
|
6727
|
+
}
|
6728
|
+
}
|
6729
|
+
|
6730
|
+
return deferred.promise;
|
6731
|
+
}
|
6732
|
+
|
6733
|
+
__exports__.hash = hash;
|
6734
|
+
});
|
6735
|
+
|
6736
|
+
define("rsvp/node",
|
6737
|
+
["rsvp/promise","rsvp/all","exports"],
|
6738
|
+
function(__dependency1__, __dependency2__, __exports__) {
|
6739
|
+
"use strict";
|
6740
|
+
var Promise = __dependency1__.Promise;
|
6741
|
+
var all = __dependency2__.all;
|
6742
|
+
|
6743
|
+
function makeNodeCallbackFor(resolve, reject) {
|
6744
|
+
return function (error, value) {
|
6745
|
+
if (error) {
|
6746
|
+
reject(error);
|
6747
|
+
} else if (arguments.length > 2) {
|
6748
|
+
resolve(Array.prototype.slice.call(arguments, 1));
|
6749
|
+
} else {
|
6750
|
+
resolve(value);
|
6751
|
+
}
|
6752
|
+
};
|
6753
|
+
}
|
6754
|
+
|
6755
|
+
function denodeify(nodeFunc) {
|
6756
|
+
return function() {
|
6757
|
+
var nodeArgs = Array.prototype.slice.call(arguments), resolve, reject;
|
6758
|
+
|
6759
|
+
var promise = new Promise(function(nodeResolve, nodeReject) {
|
6760
|
+
resolve = nodeResolve;
|
6761
|
+
reject = nodeReject;
|
6762
|
+
});
|
6763
|
+
|
6764
|
+
all(nodeArgs).then(function(nodeArgs) {
|
6765
|
+
nodeArgs.push(makeNodeCallbackFor(resolve, reject));
|
6766
|
+
|
6767
|
+
try {
|
6768
|
+
nodeFunc.apply(this, nodeArgs);
|
6769
|
+
} catch(e) {
|
6770
|
+
reject(e);
|
6771
|
+
}
|
6772
|
+
});
|
6773
|
+
|
6774
|
+
return promise;
|
6775
|
+
};
|
6776
|
+
}
|
6777
|
+
|
6778
|
+
__exports__.denodeify = denodeify;
|
6779
|
+
});
|
6780
|
+
|
6781
|
+
define("rsvp/promise",
|
6782
|
+
["rsvp/config","rsvp/events","exports"],
|
6783
|
+
function(__dependency1__, __dependency2__, __exports__) {
|
6784
|
+
"use strict";
|
6785
|
+
var config = __dependency1__.config;
|
6786
|
+
var EventTarget = __dependency2__.EventTarget;
|
6787
|
+
|
6788
|
+
function objectOrFunction(x) {
|
6789
|
+
return isFunction(x) || (typeof x === "object" && x !== null);
|
6790
|
+
}
|
6791
|
+
|
6792
|
+
function isFunction(x){
|
6793
|
+
return typeof x === "function";
|
6794
|
+
}
|
6795
|
+
|
6796
|
+
var Promise = function(resolver) {
|
6797
|
+
var promise = this,
|
6798
|
+
resolved = false;
|
6799
|
+
|
6800
|
+
if (typeof resolver !== 'function') {
|
6801
|
+
throw new TypeError('You must pass a resolver function as the sole argument to the promise constructor');
|
6802
|
+
}
|
6803
|
+
|
6804
|
+
if (!(promise instanceof Promise)) {
|
6805
|
+
return new Promise(resolver);
|
6806
|
+
}
|
6807
|
+
|
6808
|
+
var resolvePromise = function(value) {
|
6809
|
+
if (resolved) { return; }
|
6810
|
+
resolved = true;
|
6811
|
+
resolve(promise, value);
|
6812
|
+
};
|
6813
|
+
|
6814
|
+
var rejectPromise = function(value) {
|
6815
|
+
if (resolved) { return; }
|
6816
|
+
resolved = true;
|
6817
|
+
reject(promise, value);
|
6818
|
+
};
|
6819
|
+
|
6296
6820
|
this.on('promise:resolved', function(event) {
|
6297
6821
|
this.trigger('success', { detail: event.detail });
|
6298
6822
|
}, this);
|
@@ -6300,12 +6824,16 @@ define("rsvp",
|
|
6300
6824
|
this.on('promise:failed', function(event) {
|
6301
6825
|
this.trigger('error', { detail: event.detail });
|
6302
6826
|
}, this);
|
6303
|
-
};
|
6304
6827
|
|
6305
|
-
|
6828
|
+
try {
|
6829
|
+
resolver(resolvePromise, rejectPromise);
|
6830
|
+
} catch(e) {
|
6831
|
+
rejectPromise(e);
|
6832
|
+
}
|
6833
|
+
};
|
6306
6834
|
|
6307
6835
|
var invokeCallback = function(type, promise, callback, event) {
|
6308
|
-
var hasCallback =
|
6836
|
+
var hasCallback = isFunction(callback),
|
6309
6837
|
value, error, succeeded, failed;
|
6310
6838
|
|
6311
6839
|
if (hasCallback) {
|
@@ -6321,34 +6849,34 @@ define("rsvp",
|
|
6321
6849
|
succeeded = true;
|
6322
6850
|
}
|
6323
6851
|
|
6324
|
-
if (
|
6325
|
-
|
6326
|
-
promise.resolve(value);
|
6327
|
-
}, function(error) {
|
6328
|
-
promise.reject(error);
|
6329
|
-
});
|
6852
|
+
if (handleThenable(promise, value)) {
|
6853
|
+
return;
|
6330
6854
|
} else if (hasCallback && succeeded) {
|
6331
|
-
|
6855
|
+
resolve(promise, value);
|
6332
6856
|
} else if (failed) {
|
6333
|
-
|
6334
|
-
} else {
|
6335
|
-
promise
|
6857
|
+
reject(promise, error);
|
6858
|
+
} else if (type === 'resolve') {
|
6859
|
+
resolve(promise, value);
|
6860
|
+
} else if (type === 'reject') {
|
6861
|
+
reject(promise, value);
|
6336
6862
|
}
|
6337
6863
|
};
|
6338
6864
|
|
6339
6865
|
Promise.prototype = {
|
6866
|
+
constructor: Promise,
|
6867
|
+
|
6340
6868
|
then: function(done, fail) {
|
6341
|
-
var thenPromise = new Promise();
|
6869
|
+
var thenPromise = new Promise(function() {});
|
6342
6870
|
|
6343
|
-
if (this.
|
6344
|
-
|
6345
|
-
invokeCallback('resolve', thenPromise, done, { detail: this.
|
6871
|
+
if (this.isFulfilled) {
|
6872
|
+
config.async(function() {
|
6873
|
+
invokeCallback('resolve', thenPromise, done, { detail: this.fulfillmentValue });
|
6346
6874
|
}, this);
|
6347
6875
|
}
|
6348
6876
|
|
6349
6877
|
if (this.isRejected) {
|
6350
|
-
|
6351
|
-
invokeCallback('reject', thenPromise, fail, { detail: this.
|
6878
|
+
config.async(function() {
|
6879
|
+
invokeCallback('reject', thenPromise, fail, { detail: this.rejectedReason });
|
6352
6880
|
}, this);
|
6353
6881
|
}
|
6354
6882
|
|
@@ -6361,75 +6889,162 @@ define("rsvp",
|
|
6361
6889
|
});
|
6362
6890
|
|
6363
6891
|
return thenPromise;
|
6364
|
-
}
|
6892
|
+
}
|
6893
|
+
};
|
6365
6894
|
|
6366
|
-
|
6367
|
-
resolve(this, value);
|
6895
|
+
EventTarget.mixin(Promise.prototype);
|
6368
6896
|
|
6369
|
-
|
6370
|
-
|
6371
|
-
|
6897
|
+
function resolve(promise, value) {
|
6898
|
+
if (promise === value) {
|
6899
|
+
fulfill(promise, value);
|
6900
|
+
} else if (!handleThenable(promise, value)) {
|
6901
|
+
fulfill(promise, value);
|
6902
|
+
}
|
6903
|
+
}
|
6904
|
+
|
6905
|
+
function handleThenable(promise, value) {
|
6906
|
+
var then = null;
|
6372
6907
|
|
6373
|
-
|
6374
|
-
|
6908
|
+
if (objectOrFunction(value)) {
|
6909
|
+
try {
|
6910
|
+
then = value.then;
|
6911
|
+
} catch(e) {
|
6912
|
+
reject(promise, e);
|
6913
|
+
return true;
|
6914
|
+
}
|
6375
6915
|
|
6376
|
-
|
6377
|
-
|
6916
|
+
if (isFunction(then)) {
|
6917
|
+
try {
|
6918
|
+
then.call(value, function(val) {
|
6919
|
+
if (value !== val) {
|
6920
|
+
resolve(promise, val);
|
6921
|
+
} else {
|
6922
|
+
fulfill(promise, val);
|
6923
|
+
}
|
6924
|
+
}, function(val) {
|
6925
|
+
reject(promise, val);
|
6926
|
+
});
|
6927
|
+
} catch (e) {
|
6928
|
+
reject(promise, e);
|
6929
|
+
}
|
6930
|
+
return true;
|
6931
|
+
}
|
6378
6932
|
}
|
6379
|
-
};
|
6380
6933
|
|
6381
|
-
|
6382
|
-
|
6934
|
+
return false;
|
6935
|
+
}
|
6936
|
+
|
6937
|
+
function fulfill(promise, value) {
|
6938
|
+
config.async(function() {
|
6383
6939
|
promise.trigger('promise:resolved', { detail: value });
|
6384
|
-
promise.
|
6385
|
-
promise.
|
6940
|
+
promise.isFulfilled = true;
|
6941
|
+
promise.fulfillmentValue = value;
|
6386
6942
|
});
|
6387
6943
|
}
|
6388
6944
|
|
6389
6945
|
function reject(promise, value) {
|
6390
|
-
|
6946
|
+
config.async(function() {
|
6391
6947
|
promise.trigger('promise:failed', { detail: value });
|
6392
6948
|
promise.isRejected = true;
|
6393
|
-
promise.
|
6949
|
+
promise.rejectedReason = value;
|
6394
6950
|
});
|
6395
6951
|
}
|
6396
6952
|
|
6397
|
-
function all(promises) {
|
6398
|
-
var i, results = [];
|
6399
|
-
var allPromise = new Promise();
|
6400
|
-
var remaining = promises.length;
|
6401
6953
|
|
6402
|
-
|
6403
|
-
|
6404
|
-
}
|
6954
|
+
__exports__.Promise = Promise;
|
6955
|
+
});
|
6405
6956
|
|
6406
|
-
|
6407
|
-
|
6408
|
-
|
6409
|
-
|
6410
|
-
|
6957
|
+
define("rsvp/reject",
|
6958
|
+
["rsvp/promise","exports"],
|
6959
|
+
function(__dependency1__, __exports__) {
|
6960
|
+
"use strict";
|
6961
|
+
var Promise = __dependency1__.Promise;
|
6411
6962
|
|
6412
|
-
var resolve = function(index, value) {
|
6413
|
-
results[index] = value;
|
6414
|
-
if (--remaining === 0) {
|
6415
|
-
allPromise.resolve(results);
|
6416
|
-
}
|
6417
|
-
};
|
6418
6963
|
|
6419
|
-
|
6420
|
-
|
6421
|
-
|
6964
|
+
function objectOrFunction(x) {
|
6965
|
+
return typeof x === "function" || (typeof x === "object" && x !== null);
|
6966
|
+
}
|
6422
6967
|
|
6423
|
-
|
6424
|
-
|
6425
|
-
|
6426
|
-
|
6968
|
+
|
6969
|
+
function reject(reason) {
|
6970
|
+
return new Promise(function (resolve, reject) {
|
6971
|
+
reject(reason);
|
6972
|
+
});
|
6427
6973
|
}
|
6428
6974
|
|
6429
|
-
EventTarget.mixin(Promise.prototype);
|
6430
6975
|
|
6431
|
-
|
6432
|
-
|
6976
|
+
__exports__.reject = reject;
|
6977
|
+
});
|
6978
|
+
|
6979
|
+
define("rsvp/resolve",
|
6980
|
+
["rsvp/promise","exports"],
|
6981
|
+
function(__dependency1__, __exports__) {
|
6982
|
+
"use strict";
|
6983
|
+
var Promise = __dependency1__.Promise;
|
6984
|
+
|
6985
|
+
|
6986
|
+
function objectOrFunction(x) {
|
6987
|
+
return typeof x === "function" || (typeof x === "object" && x !== null);
|
6988
|
+
}
|
6989
|
+
|
6990
|
+
function resolve(thenable){
|
6991
|
+
var promise = new Promise(function(resolve, reject){
|
6992
|
+
var then;
|
6993
|
+
|
6994
|
+
try {
|
6995
|
+
if ( objectOrFunction(thenable) ) {
|
6996
|
+
then = thenable.then;
|
6997
|
+
|
6998
|
+
if (typeof then === "function") {
|
6999
|
+
then.call(thenable, resolve, reject);
|
7000
|
+
} else {
|
7001
|
+
resolve(thenable);
|
7002
|
+
}
|
7003
|
+
|
7004
|
+
} else {
|
7005
|
+
resolve(thenable);
|
7006
|
+
}
|
7007
|
+
|
7008
|
+
} catch(error) {
|
7009
|
+
reject(error);
|
7010
|
+
}
|
7011
|
+
});
|
7012
|
+
|
7013
|
+
return promise;
|
7014
|
+
}
|
7015
|
+
|
7016
|
+
|
7017
|
+
__exports__.resolve = resolve;
|
7018
|
+
});
|
7019
|
+
|
7020
|
+
define("rsvp",
|
7021
|
+
["rsvp/events","rsvp/promise","rsvp/node","rsvp/all","rsvp/hash","rsvp/defer","rsvp/config","rsvp/resolve","rsvp/reject","exports"],
|
7022
|
+
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
|
7023
|
+
"use strict";
|
7024
|
+
var EventTarget = __dependency1__.EventTarget;
|
7025
|
+
var Promise = __dependency2__.Promise;
|
7026
|
+
var denodeify = __dependency3__.denodeify;
|
7027
|
+
var all = __dependency4__.all;
|
7028
|
+
var hash = __dependency5__.hash;
|
7029
|
+
var defer = __dependency6__.defer;
|
7030
|
+
var config = __dependency7__.config;
|
7031
|
+
var resolve = __dependency8__.resolve;
|
7032
|
+
var reject = __dependency9__.reject;
|
7033
|
+
|
7034
|
+
function configure(name, value) {
|
7035
|
+
config[name] = value;
|
7036
|
+
}
|
7037
|
+
|
7038
|
+
|
7039
|
+
__exports__.Promise = Promise;
|
7040
|
+
__exports__.EventTarget = EventTarget;
|
7041
|
+
__exports__.all = all;
|
7042
|
+
__exports__.hash = hash;
|
7043
|
+
__exports__.defer = defer;
|
7044
|
+
__exports__.denodeify = denodeify;
|
7045
|
+
__exports__.configure = configure;
|
7046
|
+
__exports__.resolve = resolve;
|
7047
|
+
__exports__.reject = reject;
|
6433
7048
|
});
|
6434
7049
|
|
6435
7050
|
})();
|
@@ -6605,10 +7220,6 @@ define("container",
|
|
6605
7220
|
|
6606
7221
|
this.children = [];
|
6607
7222
|
|
6608
|
-
eachDestroyable(this, function(item) {
|
6609
|
-
item.isDestroying = true;
|
6610
|
-
});
|
6611
|
-
|
6612
7223
|
eachDestroyable(this, function(item) {
|
6613
7224
|
item.destroy();
|
6614
7225
|
});
|
@@ -6979,10 +7590,15 @@ Ember.ORDER_DEFINITION = Ember.ENV.ORDER_DEFINITION || [
|
|
6979
7590
|
*/
|
6980
7591
|
Ember.keys = Object.keys;
|
6981
7592
|
|
6982
|
-
if (!Ember.keys) {
|
7593
|
+
if (!Ember.keys || Ember.create.isSimulated) {
|
6983
7594
|
Ember.keys = function(obj) {
|
6984
7595
|
var ret = [];
|
6985
7596
|
for(var key in obj) {
|
7597
|
+
// Prevents browsers that don't respect non-enumerability from
|
7598
|
+
// copying internal Ember properties
|
7599
|
+
if (key.substring(0,2) === '__') continue;
|
7600
|
+
if (key === '_super') continue;
|
7601
|
+
|
6986
7602
|
if (obj.hasOwnProperty(key)) { ret.push(key); }
|
6987
7603
|
}
|
6988
7604
|
return ret;
|
@@ -7004,7 +7620,7 @@ var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'n
|
|
7004
7620
|
@constructor
|
7005
7621
|
*/
|
7006
7622
|
Ember.Error = function() {
|
7007
|
-
var tmp = Error.
|
7623
|
+
var tmp = Error.apply(this, arguments);
|
7008
7624
|
|
7009
7625
|
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
7010
7626
|
for (var idx = 0; idx < errorProps.length; idx++) {
|
@@ -7266,10 +7882,12 @@ Ember.String = {
|
|
7266
7882
|
/**
|
7267
7883
|
Returns the Capitalized form of a string
|
7268
7884
|
|
7269
|
-
|
7270
|
-
|
7271
|
-
|
7272
|
-
|
7885
|
+
```javascript
|
7886
|
+
'innerHTML'.capitalize() // 'InnerHTML'
|
7887
|
+
'action_name'.capitalize() // 'Action_name'
|
7888
|
+
'css-class-name'.capitalize() // 'Css-class-name'
|
7889
|
+
'my favorite items'.capitalize() // 'My favorite items'
|
7890
|
+
```
|
7273
7891
|
|
7274
7892
|
@method capitalize
|
7275
7893
|
@param {String} str
|
@@ -7306,7 +7924,7 @@ var fmt = Ember.String.fmt,
|
|
7306
7924
|
if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
7307
7925
|
|
7308
7926
|
/**
|
7309
|
-
See
|
7927
|
+
See `Ember.String.fmt`.
|
7310
7928
|
|
7311
7929
|
@method fmt
|
7312
7930
|
@for String
|
@@ -7316,7 +7934,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7316
7934
|
};
|
7317
7935
|
|
7318
7936
|
/**
|
7319
|
-
See
|
7937
|
+
See `Ember.String.w`.
|
7320
7938
|
|
7321
7939
|
@method w
|
7322
7940
|
@for String
|
@@ -7326,7 +7944,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7326
7944
|
};
|
7327
7945
|
|
7328
7946
|
/**
|
7329
|
-
See
|
7947
|
+
See `Ember.String.loc`.
|
7330
7948
|
|
7331
7949
|
@method loc
|
7332
7950
|
@for String
|
@@ -7336,7 +7954,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7336
7954
|
};
|
7337
7955
|
|
7338
7956
|
/**
|
7339
|
-
See
|
7957
|
+
See `Ember.String.camelize`.
|
7340
7958
|
|
7341
7959
|
@method camelize
|
7342
7960
|
@for String
|
@@ -7346,7 +7964,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7346
7964
|
};
|
7347
7965
|
|
7348
7966
|
/**
|
7349
|
-
See
|
7967
|
+
See `Ember.String.decamelize`.
|
7350
7968
|
|
7351
7969
|
@method decamelize
|
7352
7970
|
@for String
|
@@ -7356,7 +7974,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7356
7974
|
};
|
7357
7975
|
|
7358
7976
|
/**
|
7359
|
-
See
|
7977
|
+
See `Ember.String.dasherize`.
|
7360
7978
|
|
7361
7979
|
@method dasherize
|
7362
7980
|
@for String
|
@@ -7366,7 +7984,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7366
7984
|
};
|
7367
7985
|
|
7368
7986
|
/**
|
7369
|
-
See
|
7987
|
+
See `Ember.String.underscore`.
|
7370
7988
|
|
7371
7989
|
@method underscore
|
7372
7990
|
@for String
|
@@ -7376,7 +7994,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7376
7994
|
};
|
7377
7995
|
|
7378
7996
|
/**
|
7379
|
-
See
|
7997
|
+
See `Ember.String.classify`.
|
7380
7998
|
|
7381
7999
|
@method classify
|
7382
8000
|
@for String
|
@@ -7386,7 +8004,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) {
|
|
7386
8004
|
};
|
7387
8005
|
|
7388
8006
|
/**
|
7389
|
-
See
|
8007
|
+
See `Ember.String.capitalize`.
|
7390
8008
|
|
7391
8009
|
@method capitalize
|
7392
8010
|
@for String
|
@@ -7462,8 +8080,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
7462
8080
|
will instead clear the cache so that it is updated when the next `get`
|
7463
8081
|
is called on the property.
|
7464
8082
|
|
7465
|
-
See
|
7466
|
-
{{#crossLink "Ember/computed"}}{{/crossLink}}
|
8083
|
+
See `Ember.ComputedProperty`, `Ember.computed`.
|
7467
8084
|
|
7468
8085
|
@method property
|
7469
8086
|
@for Function
|
@@ -7490,7 +8107,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
7490
8107
|
});
|
7491
8108
|
```
|
7492
8109
|
|
7493
|
-
See
|
8110
|
+
See `Ember.Observable.observes`.
|
7494
8111
|
|
7495
8112
|
@method observes
|
7496
8113
|
@for Function
|
@@ -7517,7 +8134,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Function) {
|
|
7517
8134
|
});
|
7518
8135
|
```
|
7519
8136
|
|
7520
|
-
See
|
8137
|
+
See `Ember.Observable.observesBefore`.
|
7521
8138
|
|
7522
8139
|
@method observesBefore
|
7523
8140
|
@for Function
|
@@ -8414,9 +9031,7 @@ Ember.Enumerable = Ember.Mixin.create({
|
|
8414
9031
|
// HELPERS
|
8415
9032
|
//
|
8416
9033
|
|
8417
|
-
var get = Ember.get, set = Ember.set, map = Ember.EnumerableUtils.map, cacheFor = Ember.cacheFor;
|
8418
|
-
|
8419
|
-
function none(obj) { return obj===null || obj===undefined; }
|
9034
|
+
var get = Ember.get, set = Ember.set, isNone = Ember.isNone, map = Ember.EnumerableUtils.map, cacheFor = Ember.cacheFor;
|
8420
9035
|
|
8421
9036
|
// ..........................................................
|
8422
9037
|
// ARRAY
|
@@ -8439,7 +9054,7 @@ function none(obj) { return obj===null || obj===undefined; }
|
|
8439
9054
|
|
8440
9055
|
You can use the methods defined in this module to access and modify array
|
8441
9056
|
contents in a KVO-friendly way. You can also be notified whenever the
|
8442
|
-
membership
|
9057
|
+
membership of an array changes by changing the syntax of the property to
|
8443
9058
|
`.observes('*myProperty.[]')`.
|
8444
9059
|
|
8445
9060
|
To support `Ember.Array` in your own class, you must override two
|
@@ -8456,9 +9071,6 @@ function none(obj) { return obj===null || obj===undefined; }
|
|
8456
9071
|
*/
|
8457
9072
|
Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.prototype */ {
|
8458
9073
|
|
8459
|
-
// compatibility
|
8460
|
-
isSCArray: true,
|
8461
|
-
|
8462
9074
|
/**
|
8463
9075
|
Your array must support the `length` property. Your replace methods should
|
8464
9076
|
set this property whenever it changes.
|
@@ -8566,8 +9178,8 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8566
9178
|
slice: function(beginIndex, endIndex) {
|
8567
9179
|
var ret = Ember.A([]);
|
8568
9180
|
var length = get(this, 'length') ;
|
8569
|
-
if (
|
8570
|
-
if (
|
9181
|
+
if (isNone(beginIndex)) beginIndex = 0 ;
|
9182
|
+
if (isNone(endIndex) || (endIndex > length)) endIndex = length ;
|
8571
9183
|
|
8572
9184
|
if (beginIndex < 0) beginIndex = length + beginIndex;
|
8573
9185
|
if (endIndex < 0) endIndex = length + endIndex;
|
@@ -8727,7 +9339,7 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8727
9339
|
@param {Number} startIdx The starting index in the array that will change.
|
8728
9340
|
@param {Number} removeAmt The number of items that will be removed. If you
|
8729
9341
|
pass `null` assumes 0
|
8730
|
-
@param {Number} addAmt The number of items that will be added
|
9342
|
+
@param {Number} addAmt The number of items that will be added. If you
|
8731
9343
|
pass `null` assumes 0.
|
8732
9344
|
@return {Ember.Array} receiver
|
8733
9345
|
*/
|
@@ -8761,6 +9373,20 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8761
9373
|
return this;
|
8762
9374
|
},
|
8763
9375
|
|
9376
|
+
/**
|
9377
|
+
If you are implementing an object that supports `Ember.Array`, call this
|
9378
|
+
method just after the array content changes to notify any observers and
|
9379
|
+
invalidate any related properties. Pass the starting index of the change
|
9380
|
+
as well as a delta of the amounts to change.
|
9381
|
+
|
9382
|
+
@method arrayContentDidChange
|
9383
|
+
@param {Number} startIdx The starting index in the array that did change.
|
9384
|
+
@param {Number} removeAmt The number of items that were removed. If you
|
9385
|
+
pass `null` assumes 0
|
9386
|
+
@param {Number} addAmt The number of items that were added. If you
|
9387
|
+
pass `null` assumes 0.
|
9388
|
+
@return {Ember.Array} receiver
|
9389
|
+
*/
|
8764
9390
|
arrayContentDidChange: function(startIdx, removeAmt, addAmt) {
|
8765
9391
|
|
8766
9392
|
// if no args are passed assume everything changes
|
@@ -8901,8 +9527,7 @@ var get = Ember.get, set = Ember.set;
|
|
8901
9527
|
@extends Ember.Mixin
|
8902
9528
|
@since Ember 0.9
|
8903
9529
|
*/
|
8904
|
-
Ember.Copyable = Ember.Mixin.create(
|
8905
|
-
/** @scope Ember.Copyable.prototype */ {
|
9530
|
+
Ember.Copyable = Ember.Mixin.create(/** @scope Ember.Copyable.prototype */ {
|
8906
9531
|
|
8907
9532
|
/**
|
8908
9533
|
Override to return a copy of the receiver. Default implementation raises
|
@@ -9007,8 +9632,7 @@ var get = Ember.get, set = Ember.set;
|
|
9007
9632
|
@extends Ember.Mixin
|
9008
9633
|
@since Ember 0.9
|
9009
9634
|
*/
|
9010
|
-
Ember.Freezable = Ember.Mixin.create(
|
9011
|
-
/** @scope Ember.Freezable.prototype */ {
|
9635
|
+
Ember.Freezable = Ember.Mixin.create(/** @scope Ember.Freezable.prototype */ {
|
9012
9636
|
|
9013
9637
|
/**
|
9014
9638
|
Set to `true` when the object is frozen. Use this property to detect
|
@@ -9189,8 +9813,7 @@ var get = Ember.get, set = Ember.set;
|
|
9189
9813
|
@uses Ember.Array
|
9190
9814
|
@uses Ember.MutableEnumerable
|
9191
9815
|
*/
|
9192
|
-
Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable
|
9193
|
-
/** @scope Ember.MutableArray.prototype */ {
|
9816
|
+
Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,/** @scope Ember.MutableArray.prototype */ {
|
9194
9817
|
|
9195
9818
|
/**
|
9196
9819
|
__Required.__ You must implement this method to apply this mixin.
|
@@ -9461,7 +10084,6 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,
|
|
9461
10084
|
|
9462
10085
|
});
|
9463
10086
|
|
9464
|
-
|
9465
10087
|
})();
|
9466
10088
|
|
9467
10089
|
|
@@ -9509,7 +10131,7 @@ var get = Ember.get, set = Ember.set;
|
|
9509
10131
|
For example:
|
9510
10132
|
|
9511
10133
|
```javascript
|
9512
|
-
Ember.Object.
|
10134
|
+
Ember.Object.extend({
|
9513
10135
|
valueObserver: function() {
|
9514
10136
|
// Executes whenever the "value" property changes
|
9515
10137
|
}.observes('value')
|
@@ -9528,8 +10150,8 @@ var get = Ember.get, set = Ember.set;
|
|
9528
10150
|
object.addObserver('propertyKey', targetObject, targetAction)
|
9529
10151
|
```
|
9530
10152
|
|
9531
|
-
This will call the `targetAction` method on the `targetObject`
|
9532
|
-
|
10153
|
+
This will call the `targetAction` method on the `targetObject` whenever
|
10154
|
+
the value of the `propertyKey` changes.
|
9533
10155
|
|
9534
10156
|
Note that if `propertyKey` is a computed property, the observer will be
|
9535
10157
|
called when any of the property dependencies are changed, even if the
|
@@ -9789,8 +10411,8 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ {
|
|
9789
10411
|
|
9790
10412
|
This is the core method used to register an observer for a property.
|
9791
10413
|
|
9792
|
-
Once you call this method,
|
9793
|
-
will be notified. Note that the observers are triggered
|
10414
|
+
Once you call this method, any time the key's value is set, your observer
|
10415
|
+
will be notified. Note that the observers are triggered any time the
|
9794
10416
|
value is set, regardless of whether it has actually changed. Your
|
9795
10417
|
observer should be prepared to handle that.
|
9796
10418
|
|
@@ -9915,11 +10537,11 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ {
|
|
9915
10537
|
|
9916
10538
|
@method incrementProperty
|
9917
10539
|
@param {String} keyName The name of the property to increment
|
9918
|
-
@param {
|
9919
|
-
@return {
|
10540
|
+
@param {Number} increment The amount to increment by. Defaults to 1
|
10541
|
+
@return {Number} The new property value
|
9920
10542
|
*/
|
9921
10543
|
incrementProperty: function(keyName, increment) {
|
9922
|
-
if (
|
10544
|
+
if (Ember.isNone(increment)) { increment = 1; }
|
9923
10545
|
set(this, keyName, (get(this, keyName) || 0)+increment);
|
9924
10546
|
return get(this, keyName);
|
9925
10547
|
},
|
@@ -9934,12 +10556,12 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ {
|
|
9934
10556
|
|
9935
10557
|
@method decrementProperty
|
9936
10558
|
@param {String} keyName The name of the property to decrement
|
9937
|
-
@param {
|
9938
|
-
@return {
|
10559
|
+
@param {Number} decrement The amount to decrement by. Defaults to 1
|
10560
|
+
@return {Number} The new property value
|
9939
10561
|
*/
|
9940
|
-
decrementProperty: function(keyName,
|
9941
|
-
if (
|
9942
|
-
set(this, keyName, (get(this, keyName) || 0)-
|
10562
|
+
decrementProperty: function(keyName, decrement) {
|
10563
|
+
if (Ember.isNone(decrement)) { decrement = 1; }
|
10564
|
+
set(this, keyName, (get(this, keyName) || 0)-decrement);
|
9943
10565
|
return get(this, keyName);
|
9944
10566
|
},
|
9945
10567
|
|
@@ -9948,7 +10570,7 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ {
|
|
9948
10570
|
current value.
|
9949
10571
|
|
9950
10572
|
```javascript
|
9951
|
-
starship.toggleProperty('
|
10573
|
+
starship.toggleProperty('warpDriveEngaged');
|
9952
10574
|
```
|
9953
10575
|
|
9954
10576
|
@method toggleProperty
|
@@ -9980,7 +10602,6 @@ Ember.Observable = Ember.Mixin.create(/** @scope Ember.Observable.prototype */ {
|
|
9980
10602
|
}
|
9981
10603
|
});
|
9982
10604
|
|
9983
|
-
|
9984
10605
|
})();
|
9985
10606
|
|
9986
10607
|
|
@@ -10275,9 +10896,9 @@ Ember.Evented = Ember.Mixin.create({
|
|
10275
10896
|
(function() {
|
10276
10897
|
var RSVP = requireModule("rsvp");
|
10277
10898
|
|
10278
|
-
RSVP.async
|
10899
|
+
RSVP.configure('async', function(callback, binding) {
|
10279
10900
|
Ember.run.schedule('actions', binding, callback);
|
10280
|
-
};
|
10901
|
+
});
|
10281
10902
|
|
10282
10903
|
/**
|
10283
10904
|
@module ember
|
@@ -10299,9 +10920,22 @@ Ember.DeferredMixin = Ember.Mixin.create({
|
|
10299
10920
|
@param {Function} doneCallback a callback function to be called when done
|
10300
10921
|
@param {Function} failCallback a callback function to be called when failed
|
10301
10922
|
*/
|
10302
|
-
then: function(
|
10303
|
-
var promise
|
10304
|
-
|
10923
|
+
then: function(resolve, reject) {
|
10924
|
+
var deferred, promise, entity;
|
10925
|
+
|
10926
|
+
entity = this;
|
10927
|
+
deferred = get(this, '_deferred');
|
10928
|
+
promise = deferred.promise;
|
10929
|
+
|
10930
|
+
function fulfillmentHandler(fulfillment) {
|
10931
|
+
if (fulfillment === promise) {
|
10932
|
+
return resolve(entity);
|
10933
|
+
} else {
|
10934
|
+
return resolve(fulfillment);
|
10935
|
+
}
|
10936
|
+
}
|
10937
|
+
|
10938
|
+
return promise.then(resolve && fulfillmentHandler, reject);
|
10305
10939
|
},
|
10306
10940
|
|
10307
10941
|
/**
|
@@ -10310,7 +10944,16 @@ Ember.DeferredMixin = Ember.Mixin.create({
|
|
10310
10944
|
@method resolve
|
10311
10945
|
*/
|
10312
10946
|
resolve: function(value) {
|
10313
|
-
|
10947
|
+
var deferred, promise;
|
10948
|
+
|
10949
|
+
deferred = get(this, '_deferred');
|
10950
|
+
promise = deferred.promise;
|
10951
|
+
|
10952
|
+
if (value === this){
|
10953
|
+
deferred.resolve(promise);
|
10954
|
+
} else {
|
10955
|
+
deferred.resolve(value);
|
10956
|
+
}
|
10314
10957
|
},
|
10315
10958
|
|
10316
10959
|
/**
|
@@ -10319,11 +10962,11 @@ Ember.DeferredMixin = Ember.Mixin.create({
|
|
10319
10962
|
@method reject
|
10320
10963
|
*/
|
10321
10964
|
reject: function(value) {
|
10322
|
-
get(this, '
|
10965
|
+
get(this, '_deferred').reject(value);
|
10323
10966
|
},
|
10324
10967
|
|
10325
|
-
|
10326
|
-
return
|
10968
|
+
_deferred: Ember.computed(function() {
|
10969
|
+
return RSVP.defer();
|
10327
10970
|
})
|
10328
10971
|
});
|
10329
10972
|
|
@@ -10634,21 +11277,23 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10634
11277
|
raised.
|
10635
11278
|
|
10636
11279
|
Note that destruction is scheduled for the end of the run loop and does not
|
10637
|
-
happen immediately.
|
11280
|
+
happen immediately. It will set an isDestroying flag immediately.
|
10638
11281
|
|
10639
11282
|
@method destroy
|
10640
11283
|
@return {Ember.Object} receiver
|
10641
11284
|
*/
|
10642
11285
|
destroy: function() {
|
10643
|
-
if (this.
|
10644
|
-
|
11286
|
+
if (this.isDestroying) { return; }
|
10645
11287
|
this.isDestroying = true;
|
10646
|
-
this._didCallDestroy = true;
|
10647
11288
|
|
11289
|
+
schedule('actions', this, this.willDestroy);
|
10648
11290
|
schedule('destroy', this, this._scheduledDestroy);
|
10649
11291
|
return this;
|
10650
11292
|
},
|
10651
11293
|
|
11294
|
+
/**
|
11295
|
+
Override to implement teardown.
|
11296
|
+
*/
|
10652
11297
|
willDestroy: Ember.K,
|
10653
11298
|
|
10654
11299
|
/**
|
@@ -10660,10 +11305,9 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10660
11305
|
@method _scheduledDestroy
|
10661
11306
|
*/
|
10662
11307
|
_scheduledDestroy: function() {
|
10663
|
-
if (this.
|
11308
|
+
if (this.isDestroyed) { return; }
|
10664
11309
|
destroy(this);
|
10665
11310
|
this.isDestroyed = true;
|
10666
|
-
if (this.didDestroy) { this.didDestroy(); }
|
10667
11311
|
},
|
10668
11312
|
|
10669
11313
|
bind: function(to, from) {
|
@@ -11153,8 +11797,7 @@ var get = Ember.get, set = Ember.set;
|
|
11153
11797
|
@extends Ember.Object
|
11154
11798
|
@uses Ember.MutableArray
|
11155
11799
|
*/
|
11156
|
-
Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray
|
11157
|
-
/** @scope Ember.ArrayProxy.prototype */ {
|
11800
|
+
Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray,/** @scope Ember.ArrayProxy.prototype */ {
|
11158
11801
|
|
11159
11802
|
/**
|
11160
11803
|
The content array. Must be an object that implements `Ember.Array` and/or
|
@@ -11428,7 +12071,6 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray,
|
|
11428
12071
|
}
|
11429
12072
|
});
|
11430
12073
|
|
11431
|
-
|
11432
12074
|
})();
|
11433
12075
|
|
11434
12076
|
|
@@ -11528,8 +12170,7 @@ function contentPropertyDidChange(content, contentKey) {
|
|
11528
12170
|
@namespace Ember
|
11529
12171
|
@extends Ember.Object
|
11530
12172
|
*/
|
11531
|
-
Ember.ObjectProxy = Ember.Object.extend(
|
11532
|
-
/** @scope Ember.ObjectProxy.prototype */ {
|
12173
|
+
Ember.ObjectProxy = Ember.Object.extend(/** @scope Ember.ObjectProxy.prototype */ {
|
11533
12174
|
/**
|
11534
12175
|
The object whose properties will be forwarded.
|
11535
12176
|
|
@@ -11967,7 +12608,7 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.Array) {
|
|
11967
12608
|
@submodule ember-runtime
|
11968
12609
|
*/
|
11969
12610
|
|
11970
|
-
var get = Ember.get, set = Ember.set, guidFor = Ember.guidFor,
|
12611
|
+
var get = Ember.get, set = Ember.set, guidFor = Ember.guidFor, isNone = Ember.isNone, fmt = Ember.String.fmt;
|
11971
12612
|
|
11972
12613
|
/**
|
11973
12614
|
An unordered collection of objects.
|
@@ -12325,7 +12966,7 @@ Ember.Set = Ember.CoreObject.extend(Ember.MutableEnumerable, Ember.Copyable, Emb
|
|
12325
12966
|
// implements Ember.MutableEnumerable
|
12326
12967
|
addObject: function(obj) {
|
12327
12968
|
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
12328
|
-
if (
|
12969
|
+
if (isNone(obj)) return this; // nothing to do
|
12329
12970
|
|
12330
12971
|
var guid = guidFor(obj),
|
12331
12972
|
idx = this[guid],
|
@@ -12353,7 +12994,7 @@ Ember.Set = Ember.CoreObject.extend(Ember.MutableEnumerable, Ember.Copyable, Emb
|
|
12353
12994
|
// implements Ember.MutableEnumerable
|
12354
12995
|
removeObject: function(obj) {
|
12355
12996
|
if (get(this, 'isFrozen')) throw new Error(Ember.FROZEN_ERROR);
|
12356
|
-
if (
|
12997
|
+
if (isNone(obj)) return this; // nothing to do
|
12357
12998
|
|
12358
12999
|
var guid = guidFor(obj),
|
12359
13000
|
idx = this[guid],
|
@@ -12428,7 +13069,7 @@ Deferred.reopenClass({
|
|
12428
13069
|
promise: function(callback, binding) {
|
12429
13070
|
var deferred = Deferred.create();
|
12430
13071
|
callback.call(binding, deferred);
|
12431
|
-
return
|
13072
|
+
return deferred;
|
12432
13073
|
}
|
12433
13074
|
});
|
12434
13075
|
|
@@ -12439,6 +13080,8 @@ Ember.Deferred = Deferred;
|
|
12439
13080
|
|
12440
13081
|
|
12441
13082
|
(function() {
|
13083
|
+
var forEach = Ember.ArrayPolyfills.forEach;
|
13084
|
+
|
12442
13085
|
/**
|
12443
13086
|
@module ember
|
12444
13087
|
@submodule ember-runtime
|
@@ -12471,12 +13114,10 @@ Ember.onLoad = function(name, callback) {
|
|
12471
13114
|
@param object {Object} object to pass to callbacks
|
12472
13115
|
*/
|
12473
13116
|
Ember.runLoadHooks = function(name, object) {
|
12474
|
-
var hooks;
|
12475
|
-
|
12476
13117
|
loaded[name] = object;
|
12477
13118
|
|
12478
|
-
if (
|
12479
|
-
loadHooks[name]
|
13119
|
+
if (loadHooks[name]) {
|
13120
|
+
forEach.call(loadHooks[name], function(callback) {
|
12480
13121
|
callback(object);
|
12481
13122
|
});
|
12482
13123
|
}
|
@@ -12550,6 +13191,8 @@ Ember.ControllerMixin = Ember.Mixin.create({
|
|
12550
13191
|
|
12551
13192
|
container: null,
|
12552
13193
|
|
13194
|
+
parentController: null,
|
13195
|
+
|
12553
13196
|
store: null,
|
12554
13197
|
|
12555
13198
|
model: Ember.computed.alias('content'),
|
@@ -12891,6 +13534,10 @@ var get = Ember.get, set = Ember.set, forEach = Ember.EnumerableUtils.forEach,
|
|
12891
13534
|
});
|
12892
13535
|
```
|
12893
13536
|
|
13537
|
+
The itemController instances will have a `parentController` property set to
|
13538
|
+
either the the `parentController` property of the `ArrayController`
|
13539
|
+
or to the `ArrayController` instance itself.
|
13540
|
+
|
12894
13541
|
@class ArrayController
|
12895
13542
|
@namespace Ember
|
12896
13543
|
@extends Ember.ArrayProxy
|
@@ -13001,6 +13648,7 @@ Ember.ArrayController = Ember.ArrayProxy.extend(Ember.ControllerMixin,
|
|
13001
13648
|
}
|
13002
13649
|
|
13003
13650
|
subController.set('target', this);
|
13651
|
+
subController.set('parentController', get(this, 'parentController') || this);
|
13004
13652
|
subController.set('content', object);
|
13005
13653
|
|
13006
13654
|
return subController;
|
@@ -13072,6 +13720,6 @@ Ember Runtime
|
|
13072
13720
|
|
13073
13721
|
|
13074
13722
|
if (typeof location !== 'undefined' && (location.hostname === 'localhost' || location.hostname === '127.0.0.1')) {
|
13075
|
-
|
13723
|
+
Ember.Logger.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. "+
|
13076
13724
|
"If you want full error messages please use the non-minified build provided on the Ember website.");
|
13077
13725
|
}
|