ember-source 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ember-source might be problematic. Click here for more details.
- data/dist/ember-data-deps.js +2197 -2107
- data/dist/ember-data-deps.min.js +5 -5
- data/dist/ember-data-deps.prod.js +1578 -1488
- data/dist/ember-debug.js +2 -2
- data/dist/ember-old-router.js +2497 -2244
- data/dist/ember-old-router.min.js +8 -8
- data/dist/ember-old-router.prod.js +1965 -1711
- data/dist/ember-runtime.js +2197 -2107
- data/dist/ember-runtime.min.js +5 -5
- data/dist/ember-runtime.prod.js +1578 -1488
- data/dist/ember-spade.js +1 -1
- data/dist/ember-template-compiler.js +13 -2
- data/dist/ember-template-compiler.min.js +3 -3
- data/dist/ember-template-compiler.prod.js +11 -0
- data/dist/ember-tests.js +1 -1
- data/dist/ember.js +2511 -2253
- data/dist/ember.min.js +8 -8
- data/dist/ember.prod.js +1969 -1710
- metadata +2 -2
data/dist/ember-data-deps.min.js
CHANGED
@@ -8,10 +8,10 @@
|
|
8
8
|
// ==========================================================================
|
9
9
|
|
10
10
|
|
11
|
-
// Version: v1.0.0-rc.1-
|
12
|
-
// Last commit:
|
11
|
+
// Version: v1.0.0-rc.1-354-g4e75d2b
|
12
|
+
// Last commit: 4e75d2b (2013-04-09 16:28:08 -0700)
|
13
13
|
|
14
14
|
|
15
|
-
(function(){var e,t;(function(){var n={},r={};e=function(e,t,r){n[e]={deps:t,callback:r}},t=function(e){if(r[e])return r[e];r[e]={};var i=n[e],s=i.deps,o=i.callback,u=[],a;for(var f=0,l=s.length;f<l;f++)s[f]==="exports"?u.push(a={}):u.push(t(s[f]));var c=o.apply(this,u);return r[e]=a||c}})(),function(){function r(t){if(e.console&&e.console[t])return e.console[t].apply?function(){e.console[t].apply(e.console,arguments)}:function(){var n=Array.prototype.join.call(arguments,", ");e.console[t](n)}}"undefined"==typeof Ember&&(Ember={});var e=Ember.imports=Ember.imports||this,t=Ember.exports=Ember.exports||this,n=Ember.lookup=Ember.lookup||this;t.Em=t.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.2",Ember.ENV=Ember.ENV||("undefined"==typeof ENV?{}:ENV),Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,typeof Ember.EXTEND_PROTOTYPES=="undefined"&&(Ember.EXTEND_PROTOTYPES=!0),Ember.LOG_STACKTRACE_ON_DEPRECATION=Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,Ember.SHIM_ES5=Ember.ENV.SHIM_ES5===!1?!1:Ember.EXTEND_PROTOTYPES,Ember.LOG_VERSION=Ember.ENV.LOG_VERSION===!1?!1:!0,Ember.K=function(){return this},"undefined"==typeof Ember.assert&&(Ember.assert=Ember.K),"undefined"==typeof Ember.warn&&(Ember.warn=Ember.K),"undefined"==typeof Ember.debug&&(Ember.debug=Ember.K),"undefined"==typeof Ember.deprecate&&(Ember.deprecate=Ember.K),"undefined"==typeof Ember.deprecateFunc&&(Ember.deprecateFunc=function(e,t){return t}),Ember.uuid=0,Ember.Logger={log:r("log")||Ember.K,warn:r("warn")||Ember.K,error:r("error")||Ember.K,info:r("info")||Ember.K,debug:r("debug")||r("info")||Ember.K},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.call(t||this);try{return e.call(t||this)}catch(n){Ember.onerror(n)}},Ember.merge=function(e,t){for(var n in t){if(!t.hasOwnProperty(n))continue;e[n]=t[n]}return e},Ember.isNone=function(e){return e===null||e===undefined},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return e===null||e===undefined||e.length===0&&typeof e!="function"||typeof e=="object"&&Ember.get(e,"length")===0},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty)}(),function(){var e=Ember.platform={};Ember.create=Object.create;if(!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,n){t.prototype=e,e=new t;if(n){t.prototype=e;for(var r in n)t.prototype[r]=n[r].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var n=Object.defineProperty,r,i;if(n)try{n({},"a",{get:function(){}})}catch(s){n=null}n&&(r=function(){var e={};return n(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),n(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),i=function(){try{return n(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?i||(n=function(e,t,n){var r;return typeof Node=="object"?r=e instanceof Node:r=typeof e=="object"&&typeof e.nodeType=="number"&&typeof e.nodeName=="string",r?e[t]=n.value:Object.defineProperty(e,t,n)}):n=null),e.defineProperty=n,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,n){n.get||(e[t]=n.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),function(){function h(e){this.descs={},this.watching={},this.cache={},this.source=e}function p(e,t){return!!e&&typeof e[t]=="function"}var e=Ember.platform.defineProperty,t=Ember.create,n="__ember"+ +(new Date),r=0,i=[],s={},o=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=n;var u={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(i,s){s||(s="ember");var o=s+r++;return i&&(u.value=o,e(i,n,u)),o},Ember.guidFor=function(o){if(o===undefined)return"(undefined)";if(o===null)return"(null)";var a,f,l=typeof o;switch(l){case"number":return f=i[o],f||(f=i[o]="nu"+o),f;case"string":return f=s[o],f||(f=s[o]="st"+r++),f;case"boolean":return o?"(true)":"(false)";default:if(o[n])return o[n];if(o===Object)return"(Object)";if(o===Array)return"(Array)";return f="ember"+r++,u.value=f,e(o,n,u),f}};var a={writable:!0,configurable:!1,enumerable:!1,value:null},f=Ember.GUID_KEY+"_meta";Ember.META_KEY=f;var l={descs:{},watching:{}};o&&(l.values={}),Ember.EMPTY_META=l,Object.freeze&&Object.freeze(l);var c=Ember.platform.defineProperty.isSimulated;c&&(h.prototype.__preventPlainObject__=!0,h.prototype.toJSON=function(){}),Ember.meta=function(r,i){var s=r[f];return i===!1?s||l:(s?s.source!==r&&(c||e(r,f,a),s=t(s),s.descs=t(s.descs),s.watching=t(s.watching),s.cache={},s.source=r,o&&(s.values=t(s.values)),r[f]=s):(c||e(r,f,a),s=new h(r),o&&(s.values={}),r[f]=s,s.descs.constructor=null),s)},Ember.getMeta=function(t,n){var r=Ember.meta(t,!1);return r[n]},Ember.setMeta=function(t,n,r){var i=Ember.meta(t,!0);return i[n]=r,r},Ember.metaPath=function(n,r,i){var s=Ember.meta(n,i),o,u;for(var a=0,f=r.length;a<f;a++){o=r[a],u=s[o];if(!u){if(!i)return undefined;u=s[o]={__ember_source__:n}}else if(u.__ember_source__!==n){if(!i)return undefined;u=s[o]=t(u),u.__ember_source__=n}s=u}return u},Ember.wrap=function(e,t){function n(){}function r(){var r,i=this._super;return this._super=t||n,r=e.apply(this,arguments),this._super=i,r}return r.wrappedFunction=e,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:e.length!==undefined&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return e===null||e===undefined?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=p,Ember.tryInvoke=function(e,t,n){if(p(e,t))return e[t].apply(e,n||[])};var d=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return e!==1}();d?Ember.tryFinally=function(e,t,n){var r,i,s;n=n||this;try{r=e.call(n)}finally{try{i=t.call(n)}catch(o){s=o}}if(s)throw s;return i===undefined?r:i}:Ember.tryFinally=function(e,t,n){var r,i;n=n||this;try{r=e.call(n)}finally{i=t.call(n)}return i===undefined?r:i},d?Ember.tryCatchFinally=function(e,t,n,r){var i,s,o,u;r=r||this;try{i=e.call(r)}catch(a){i=t.call(r,a)}finally{try{s=n.call(r)}catch(f){o=f}}if(o)throw o;return s===undefined?i:s}:Ember.tryCatchFinally=function(e,t,n,r){var i,s;r=r||this;try{i=e.call(r)}catch(o){i=t.call(r,o)}finally{s=n.call(r)}return s===undefined?i:s}}(),function(){Ember.Instrumentation={};var e=[],t={},n=function(n){var r=[],i;for(var s=0,o=e.length;s<o;s++)i=e[s],i.regex.test(n)&&r.push(i.object);return t[n]=r,r},r=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+(new Date)}}();Ember.Instrumentation.instrument=function(e,i,s,o){function d(){for(h=0,p=u.length;h<p;h++)c=u[h],l[h]=c.before(e,r(),i);return s.call(o)}function v(e){i=i||{},i.exception=e}function m(){for(h=0,p=u.length;h<p;h++)c=u[h],c.after(e,r(),i,l[h]);Ember.STRUCTURED_PROFILE&&console.timeEnd(a)}var u=t[e],a,f;Ember.STRUCTURED_PROFILE&&(a=e+": "+i.object,console.time(a)),u||(u=n(e));if(u.length===0)return f=s.call(o),Ember.STRUCTURED_PROFILE&&console.timeEnd(a),f;var l=[],c,h,p;return Ember.tryCatchFinally(d,v,m)},Ember.Instrumentation.subscribe=function(n,r){var i=n.split("."),s,o=[];for(var u=0,a=i.length;u<a;u++)s=i[u],s==="*"?o.push("[^\\.]*"):o.push(s);o=o.join("\\."),o+="(\\..*)?";var f={pattern:n,regex:new RegExp("^"+o+"$"),object:r};return e.push(f),t={},f},Ember.Instrumentation.unsubscribe=function(n){var r;for(var i=0,s=e.length;i<s;i++)e[i]===n&&(r=i);e.splice(r,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e=Ember.EnumerableUtils={map:function(e,t,n){return e.map?e.map.call(e,t,n):Array.prototype.map.call(e,t,n)},forEach:function(e,t,n){return e.forEach?e.forEach.call(e,t,n):Array.prototype.forEach.call(e,t,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):Array.prototype.indexOf.call(e,t,n)},indexesOf:function(t,n){return n===undefined?[]:e.map(n,function(n){return e.indexOf(t,n)})},addObject:function(t,n){var r=e.indexOf(t,n);r===-1&&t.push(n)},removeObject:function(t,n){var r=e.indexOf(t,n);r!==-1&&t.splice(r,1)},replace:function(e,t,n,r){if(e.replace)return e.replace(t,n,r);var i=Array.prototype.concat.apply([t,n],r);return e.splice.apply(e,i)},intersection:function(e,t){var n=[];return e.forEach(function(e){t.indexOf(e)>=0&&n.push(e)}),n}}}(),function(){var e=function(e){return e&&Function.prototype.toString.call(e).indexOf("[native code]")>-1},t=e(Array.prototype.map)?Array.prototype.map:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=new Array(n),i=arguments[1];for(var s=0;s<n;s++)s in t&&(r[s]=e.call(i,t[s],s,t));return r},n=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=arguments[1];for(var i=0;i<n;i++)i in t&&e.call(r,t[i],i,t)},r=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){t===null||t===undefined?t=0:t<0&&(t=Math.max(0,this.length+t));for(var n=t,r=this.length;n<r;n++)if(this[n]===e)return n;return-1};Ember.ArrayPolyfills={map:t,forEach:n,indexOf:r},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=n),Array.prototype.indexOf||(Array.prototype.indexOf=r))}(),function(){var e=Ember.guidFor,t=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},r=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t},i=Ember.OrderedSet=function(){this.clear()};i.create=function(){return new i},i.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(t){var n=e(t),r=this.presenceSet,i=this.list;if(n in r)return;r[n]=!0,i.push(t)},remove:function(n){var r=e(n),i=this.presenceSet,s=this.list;delete i[r];var o=t.call(s,n);o>-1&&s.splice(o,1)},isEmpty:function(){return this.list.length===0},has:function(t){var n=e(t),r=this.presenceSet;return n in r},forEach:function(e,t){var n=this.list.slice();for(var r=0,i=n.length;r<i;r++)e.call(t,n[r])},toArray:function(){return this.list.slice()},copy:function(){var e=new i;return e.presenceSet=n(this.presenceSet),e.list=this.list.slice(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={get:function(t){var n=this.values,r=e(t);return n[r]},set:function(t,n){var r=this.keys,i=this.values,s=e(t);r.add(t),i[s]=n},remove:function(t){var n=this.keys,r=this.values,i=e(t),s;return r.hasOwnProperty(i)?(n.remove(t),s=r[i],delete r[i],!0):!1},has:function(t){var n=this.values,r=e(t);return n.hasOwnProperty(r)},forEach:function(t,n){var r=this.keys,i=this.values;r.forEach(function(r){var s=e(r);t.call(n,r,i[s])})},copy:function(){return r(this,new s)}};var o=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};o.create=function(e){return e?new o(e):new s},o.prototype=Ember.create(s.prototype),o.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var n=this.defaultValue(e);return this.set(e,n),n},o.prototype.copy=function(){return r(this,new o({defaultValue:this.defaultValue}))}}(),function(){function a(e){return e.match(u)[0]}function f(e,n){var r=o.test(n),i=!r&&s.test(n),u;if(!e||i)e=Ember.lookup;r&&(n=n.slice(5)),e===Ember.lookup&&(u=a(n),e=t(e,u),n=n.slice(u.length+1));if(!n||n.length===0)throw new Error("Invalid Path");return[e,n]}function l(e,n){var r,i,s,u,a;if(e===null&&n.indexOf(".")===-1)return t(Ember.lookup,n);r=o.test(n);if(!e||r)s=f(e,n),e=s[0],n=s[1],s.length=0;i=n.split("."),a=i.length;for(u=0;e&&u<a;u++){e=t(e,i[u],!0);if(e&&e.isDestroyed)return undefined}return e}function c(e,t,r,i){var s;s=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(s.length+1)),t!=="this"&&(e=l(e,t));if(!s||s.length===0)throw new Error("You passed an empty path");if(!e){if(i)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return n(e,s,r)}var e=Ember.META_KEY,t,n,r=Ember.ENV.MANDATORY_SETTER,i=/^([A-Z$]|([0-9][A-Z$]))/,s=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,o=/^this[\.\*]/,u=/^([^\.\*]+)/;t=function(n,i){if(i==="")return n;!i&&"string"==typeof n&&(i=n,n=null);if(!n||i.indexOf(".")!==-1)return l(n,i);var s=n[e],o=s&&s.descs[i],u;return o?o.get(n,i):(r&&s&&s.watching[i]>0?u=s.values[i]:u=n[i],u!==undefined||"object"!=typeof n||i in n||"function"!=typeof n.unknownProperty?u:n.unknownProperty(i))},n=function(n,i,s,o){typeof n=="string"&&(s=i,i=n,n=null);if(!n||i.indexOf(".")!==-1)return c(n,i,s,o);var u=n[e],a=u&&u.descs[i],f,l;return a?a.set(n,i,s):(f="object"==typeof n&&!(i in n),f&&"function"==typeof n.setUnknownProperty?n.setUnknownProperty(i,s):u&&u.watching[i]>0?(r?l=u.values[i]:l=n[i],s!==l&&(Ember.propertyWillChange(n,i),r?l!==undefined||i in n?u.values[i]=s:Ember.defineProperty(n,i,null,s):n[i]=s,Ember.propertyDidChange(n,i))):n[i]=s),s},Ember.config.overrideAccessors&&(Ember.get=t,Ember.set=n,Ember.config.overrideAccessors(),t=Ember.get,n=Ember.set),Ember.normalizeTuple=function(e,t){return f(e,t)},Ember.getWithDefault=function(e,n,r){var i=t(e,n);return i===undefined?r:i},Ember.get=t,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get),Ember.set=n,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,r){return n(e,t,r,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet),Ember.isGlobalPath=function(e){return i.test(e)}}(),function(){var e=Ember.META_KEY,t=Ember.meta,n=Ember.platform.defineProperty,r=Ember.ENV.MANDATORY_SETTER,i=Ember.Descriptor=function(){},s=Ember.MANDATORY_SETTER_FUNCTION=function(e){},o=Ember.DEFAULT_GETTER_FUNCTION=function(t){return function(){var n=this[e];return n&&n.values[t]}};Ember.defineProperty=function(e,i,u,a,f){var l,c,h,p;return f||(f=t(e)),l=f.descs,c=f.descs[i],h=f.watching[i]>0,c instanceof Ember.Descriptor&&c.teardown(e,i),u instanceof Ember.Descriptor?(p=u,l[i]=u,r&&h?n(e,i,{configurable:!0,enumerable:!0,writable:!0,value:undefined}):e[i]=undefined,u.setup(e,i)):(l[i]=undefined,u==null?(p=a,r&&h?(f.values[i]=a,n(e,i,{configurable:!0,enumerable:!0,set:s,get:o(i)})):e[i]=a):(p=u,n(e,i,u))),h&&Ember.overrideChains(e,i,f),e.didDefineProperty&&e.didDefineProperty(e,i,p),this}}(),function(){function i(){this.clear()}function u(t){return t+e}function a(e){return e+t}var e=":change",t=":before",n=Ember.guidFor,r=0;i.prototype.add=function(e,t,n){var r=this.observerSet,i=this.observers,s=Ember.guidFor(e),o=r[s],u;return o||(r[s]=o={}),u=o[t],u===undefined&&(u=i.push({sender:e,keyName:t,eventName:n,listeners:[]})-1,o[t]=u),i[u].listeners},i.prototype.flush=function(){var e=this.observers,t,n,r,i;this.clear();for(t=0,n=e.length;t<n;++t){r=e[t],i=r.sender;if(i.isDestroying||i.isDestroyed)continue;Ember.sendEvent(i,r.eventName,[i,r.keyName],r.listeners)}},i.prototype.clear=function(){this.observerSet={},this.observers=[]};var s=new i,o=new i;Ember.beginPropertyChanges=function(){r++},Ember.endPropertyChanges=function(){r--,r<=0&&(s.clear(),o.flush())},Ember.changeProperties=function(e,t){Ember.beginPropertyChanges(),Ember.tryFinally(e,Ember.endPropertyChanges,t)},Ember.setProperties=function(e,t){return Ember.changeProperties(function(){for(var n in t)t.hasOwnProperty(n)&&Ember.set(e,n,t[n])}),e},Ember.addObserver=function(e,t,n,r){return Ember.addListener(e,u(t),n,r),Ember.watch(e,t),this},Ember.observersFor=function(e,t){return Ember.listenersFor(e,u(t))},Ember.removeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,u(t),n,r),this},Ember.addBeforeObserver=function(e,t,n,r){return Ember.addListener(e,a(t),n,r),Ember.watch(e,t),this},Ember._suspendBeforeObserver=function(e,t,n,r,i){return Ember._suspendListener(e,a(t),n,r,i)},Ember._suspendObserver=function(e,t,n,r,i){return Ember._suspendListener(e,u(t),n,r,i)};var f=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,t,n,r,i){var s=f.call(t,a);return Ember._suspendListeners(e,s,n,r,i)},Ember._suspendObservers=function(e,t,n,r,i){var s=f.call(t,u);return Ember._suspendListeners(e,s,n,r,i)},Ember.beforeObserversFor=function(e,t){return Ember.listenersFor(e,a(t))},Ember.removeBeforeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,a(t),n,r),this},Ember.notifyBeforeObservers=function(e,t){if(e.isDestroying)return;var n=a(t),i,o;r?(i=s.add(e,t,n),o=Ember.listenersDiff(e,n,i),Ember.sendEvent(e,n,[e,t],o)):Ember.sendEvent(e,n,[e,t])},Ember.notifyObservers=function(e,t){if(e.isDestroying)return;var n=u(t),i;r?(i=o.add(e,t,n),Ember.listenersUnion(e,n,i)):Ember.sendEvent(e,n,[e,t])}}(),function(){function h(e){return e.match(a)[0]}function p(e){return e==="*"||!f.test(e)}function d(t,n,r,i,s){var o=e(n);i[o]||(i[o]={});if(i[o][r])return;i[o][r]=!0;var u=s.deps;u=u&&u[r];if(u)for(var a in u){var f=s.descs[a];if(f&&f._suspended===n)continue;t(n,a)}}function g(e,t,n){if(e.isDestroying)return;var r=v,i=!r;i&&(r=v={}),d(A,e,t,r,n),i&&(v=null)}function y(e,t,n){if(e.isDestroying)return;var r=m,i=!r;i&&(r=m={}),d(O,e,t,r,n),i&&(m=null)}function b(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e),s=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(s=i.chainWatchers={}),s[n]||(s[n]=[]),s[n].push(r),Ember.watch(e,n)}function w(e,n,r){if(!e||"object"!=typeof e)return;var i=t(e,!1);if(!i.hasOwnProperty("chainWatchers"))return;var s=i.chainWatchers;if(s[n]){s=s[n];for(var o=0,u=s.length;o<u;o++)s[o]===r&&s.splice(o,1)}Ember.unwatch(e,n)}function S(){if(E.length===0)return;var e=E;E=[],u.call(e,function(e){e[0].add(e[1])})}function x(e){return t(e,!1).proto===e}function C(e){var n=t(e),r=n.chains;return r?r.value()!==e&&(r=n.chains=r.copy(e)):r=n.chains=new T(null,null,e),r}function k(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=0,o=i.length;s<o;s++)i[s].willChange(r)}function L(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=i.length-1;s>=0;s--)i[s].didChange(r)}function A(e,n){var r=t(e,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(!i)return;if(s===e)return;o&&o.willChange&&o.willChange(e,n),g(e,n,r),k(e,n,r),Ember.notifyBeforeObservers(e,n)}function O(e,n){var r=t(e,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(s===e)return;o&&o.didChange&&o.didChange(e,n);if(!i&&n!=="length")return;y(e,n,r),L(e,n,r),Ember.notifyObservers(e,n)}var e=Ember.guidFor,t=Ember.meta,n=Ember.get,r=Ember.set,i=Ember.normalizeTuple,s=Ember.GUID_KEY,o=Ember.META_KEY,u=Ember.ArrayPolyfills.forEach,a=/^([^\.\*]+)/,f=/[\.\*]/,l=Ember.ENV.MANDATORY_SETTER,c=Ember.platform.defineProperty,v,m,E=[],T=function(e,t,n){var r;this._parent=e,this._key=t,this._watching=n===undefined,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&b(this._object,this._key,this)),this._parent&&this._parent._key==="@each"&&this.value()},N=T.prototype;N.value=function(){if(this._value===undefined&&this._watching){var e=this._parent.value();this._value=e&&!x(e)?n(e,this._key):undefined}return this._value},N.destroy=function(){if(this._watching){var e=this._object;e&&w(e,this._key,this),this._watching=!1}},N.copy=function(e){var t=new T(null,null,e),n=this._paths,r;for(r in n){if(n[r]<=0)continue;t.add(r)}return t},N.add=function(e){var t,n,r,s,o;o=this._paths,o[e]=(o[e]||0)+1,t=this.value(),n=i(t,e);if(n[0]&&n[0]===t)e=n[1],r=h(e),e=e.slice(r.length+1);else{if(!n[0]){E.push([this,e]),n.length=0;return}s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]}n.length=0,this.chain(r,e,s)},N.remove=function(e){var t,n,r,s,o;o=this._paths,o[e]>0&&o[e]--,t=this.value(),n=i(t,e),n[0]===t?(e=n[1],r=h(e),e=e.slice(r.length+1)):(s=n[0],r=e.slice(0,0-(n[1].length+1)),e=n[1]),n.length=0,this.unchain(r,e)},N.count=0,N.chain=function(e,t,n){var r=this._chains,i;r||(r=this._chains={}),i=r[e],i||(i=r[e]=new T(this,e,n)),i.count++,t&&t.length>0&&(e=h(t),t=t.slice(e.length+1),i.chain(e,t))},N.unchain=function(e,t){var n=this._chains,r=n[e];t&&t.length>1&&(e=h(t),t=t.slice(e.length+1),r.unchain(e,t)),r.count--,r.count<=0&&(delete n[r._key],r.destroy())},N.willChange=function(){var e=this._chains;if(e)for(var t in e){if(!e.hasOwnProperty(t))continue;e[t].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},N.chainWillChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,n+1):(n>1&&Ember.propertyWillChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyWillChange(this.value(),t))},N.chainDidChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,n+1):(n>1&&Ember.propertyDidChange(this.value(),t),t="this."+t,this._paths[t]>0&&Ember.propertyDidChange(this.value(),t))},N.didChange=function(e){if(this._watching){var t=this._parent.value();t!==this._object&&(w(this._object,this._key,this),this._object=t,b(t,this._key,this)),this._value=undefined,this._parent&&this._parent._key==="@each"&&this.value()}var n=this._chains;if(n)for(var r in n){if(!n.hasOwnProperty(r))continue;n[r].didChange(e)}if(e)return;this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.overrideChains=function(e,t,n){L(e,t,n,!0)},Ember.watch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]?i[n]=(i[n]||0)+1:(i[n]=1,p(n)?(s=r.descs[n],s&&s.willWatch&&s.willWatch(e,n),"function"==typeof e.willWatchProperty&&e.willWatchProperty(n),l&&n in e&&(r.values[n]=e[n],c(e,n,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(n)}))):C(e).add(n)),this},Ember.isWatching=function(t,n){var r=t[o];return(r&&r.watching[n])>0},Ember.watch.flushPending=S,Ember.unwatch=function(e,n){if(n==="length"&&Ember.typeOf(e)==="array")return this;var r=t(e),i=r.watching,s;return i[n]===1?(i[n]=0,p(n)?(s=r.descs[n],s&&s.didUnwatch&&s.didUnwatch(e,n),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(n),l&&n in e&&(c(e,n,{configurable:!0,enumerable:!0,writable:!0,value:r.values[n]}),delete r.values[n])):C(e).remove(n)):i[n]>1&&i[n]--,this},Ember.rewatch=function(e){var n=t(e,!1),r=n.chains;return s in e&&!e.hasOwnProperty(s)&&Ember.generateGuid(e,"ember"),r&&r.value()!==e&&(n.chains=r.copy(e)),this},Ember.finishChains=function(e){var n=t(e,!1),r=n.chains;r&&(r.value()!==e&&(n.chains=r=r.copy(e)),r.didChange(!0))},Ember.propertyWillChange=A,Ember.propertyDidChange=O;var M=[];Ember.destroy=function(e){var t=e[o],n,r,i,s;if(t){e[o]=null,n=t.chains;if(n){M.push(n);while(M.length>0){n=M.pop(),r=n._chains;if(r)for(i in r)r.hasOwnProperty(i)&&M.push(r[i]);n._watching&&(s=n._object,s&&w(s,n._key,n))}}}}}(),function(){function a(e,t,n){var r=t[n];return r?t.hasOwnProperty(n)||(r=t[n]=i(r)):r=t[n]={},r}function f(e,t){return a(e,t,"deps")}function l(e,t,n,r){var i=e._dependentKeys,s,u,l,c,h;if(!i)return;s=f(t,r);for(u=0,l=i.length;u<l;u++)c=i[u],h=a(t,s,c),h[n]=(h[n]||0)+1,o(t,c)}function c(e,t,n,r){var i=e._dependentKeys,s,o,l,c,h;if(!i)return;s=f(t,r);for(o=0,l=i.length;o<l;o++)c=i[o],h=a(t,s,c),h[n]=(h[n]||0)-1,u(t,c)}function h(e,t){this.func=e,this._cacheable=t&&t.cacheable!==undefined?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(t.readOnly!==undefined||!!t.readOnly)}function d(t,n){var r={};for(var i=0;i<n.length;i++)r[n[i]]=e(t,n[i]);return r}function v(e,t){Ember.computed[e]=function(e){var n=r.call(arguments);return Ember.computed(e,function(){return t.apply(this,n)})}}function m(e,t){Ember.computed[e]=function(){var e=r.call(arguments),n=Ember.computed(function(){return t.apply(this,[d(this,e)])});return n.property.apply(n,e)}}var e=Ember.get,t=Ember.set,n=Ember.meta,r=[].slice,i=Ember.create,s=Ember.META_KEY,o=Ember.watch,u=Ember.unwatch;Ember.ComputedProperty=h,h.prototype=new Ember.Descriptor;var p=h.prototype;p.cacheable=function(e){return this._cacheable=e!==!1,this},p.volatile=function(){return this.cacheable(!1)},p.readOnly=function(e){return this._readOnly=e===undefined||!!e,this},p.property=function(){var e=[];for(var t=0,n=arguments.length;t<n;t++)e.push(arguments[t]);return this._dependentKeys=e,this},p.meta=function(e){return arguments.length===0?this._meta||{}:(this._meta=e,this)},p.willWatch=function(e,t){var n=e[s];t in n.cache||l(this,e,t,n)},p.didUnwatch=function(e,t){var n=e[s];t in n.cache||c(this,e,t,n)},p.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=n(e);t in r.cache&&(delete r.cache[t],r.watching[t]||c(this,e,t,r))}},p.get=function(e,t){var r,i,s;if(this._cacheable){s=n(e),i=s.cache;if(t in i)return i[t];r=i[t]=this.func.call(e,t),s.watching[t]||l(this,e,t,s)}else r=this.func.call(e,t);return r},p.set=function(e,t,r){var i=this._cacheable,s=this.func,o=n(e,i),u=o.watching[t],a=this._suspended,f=!1,c=o.cache,h,p;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{i&&c.hasOwnProperty(t)&&(h=c[t],f=!0),s.wrappedFunction&&(s=s.wrappedFunction);if(s.length===3)p=s.call(e,t,r,h);else{if(s.length!==2){Ember.defineProperty(e,t,null,h),Ember.set(e,t,r);return}p=s.call(e,t,r)}if(f&&h===p)return;u&&Ember.propertyWillChange(e,t),f&&delete c[t],i&&(!u&&!f&&l(this,e,t,o),c[t]=p),u&&Ember.propertyDidChange(e,t)}finally{this._suspended=a}return p},p.setup=function(e,t){var r=e[s];r&&r.watching[t]&&l(this,e,t,n(e))},p.teardown=function(e,t){var r=n(e);return(r.watching[t]||t in r.cache)&&c(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;arguments.length>1&&(t=r.call(arguments,0,-1),e=r.call(arguments,-1)[0]);if(typeof e!="function")throw new Error("Computed Property declared without a property function");var n=new h(e);return t&&n.property.apply(n,t),n},Ember.cacheFor=function(t,r){var i=n(t,!1).cache;if(i&&r in i)return i[r]},v("empty",function(t){return Ember.isEmpty(e(this,t))}),v("notEmpty",function(t){return!Ember.isEmpty(e(this,t))}),v("none",function(t){return Ember.isNone(e(this,t))}),v("not",function(t){return!e(this,t)}),v("bool",function(t){return!!e(this,t)}),v("match",function(t,n){var r=e(this,t);return typeof r=="string"?!!r.match(n):!1}),v("equal",function(t,n){return e(this,t)===n}),v("gt",function(t,n){return e(this,t)>n}),v("gte",function(t,n){return e(this,t)>=n}),v("lt",function(t,n){return e(this,t)<n}),v("lte",function(t,n){return e(this,t)<=n}),m("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),m("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),m("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),m("map",function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&(Ember.isNone(e[n])?t.push(null):t.push(e[n]));return t}),Ember.computed.alias=function(n){return Ember.computed(n,function(r,i){return arguments.length>1?(t(this,n,i),i):e(this,n)})},Ember.computed.defaultTo=function(t){return Ember.computed(function(n,r,i){var s;return arguments.length===1?i!=null?i:e(this,t):r!=null?r:e(this,t)})}}(),function(){function r(e,t,n){var r=-1;for(var i=0,s=e.length;i<s;i++)if(t===e[i][0]&&n===e[i][1]){r=i;break}return r}function i(n,r){var i=t(n,!0),s;return i.listeners||(i.listeners={}),i.hasOwnProperty("listeners")||(i.listeners=e(i.listeners)),s=i.listeners[r],s&&!i.listeners.hasOwnProperty(r)?s=i.listeners[r]=i.listeners[r].slice():s||(s=i.listeners[r]=[]),s}function s(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t];if(!o)return;for(var u=o.length-1;u>=0;u--){var a=o[u][0],f=o[u][1],l=o[u][2],c=o[u][3],h=r(i,a,f);h===-1&&i.push([a,f,l,c])}}function o(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t],u=[];if(!o)return;for(var a=o.length-1;a>=0;a--){var f=o[a][0],l=o[a][1],c=o[a][2],h=o[a][3],p=r(i,f,l);if(p!==-1)continue;i.push([f,l,c,h]),u.push([f,l,c,h])}return u}function u(e,t,n,s,o){!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s);if(a!==-1)return;u.push([n,s,o,undefined]),"function"==typeof e.didAddListener&&e.didAddListener(t,n,s)}function a(e,t,s,o){function u(n,s,o){var u=i(e,t),a=r(u,n,s);if(a===-1)return;u.splice(a,1),"function"==typeof e.didRemoveListener&&e.didRemoveListener(t,n,s)}!o&&"function"==typeof s&&(o=s,s=null);if(o)u(s,o);else{var a=e[n],f=a&&a.listeners&&a.listeners[t];if(!f)return;for(var l=f.length-1;l>=0;l--)u(f[l][0],f[l][1])}}function f(e,t,n,s,o){function l(){return o.call(n)}function c(){f&&(f[3]=undefined)}!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s),f;return a!==-1&&(f=u[a].slice(),f[3]=!0,u[a]=f),Ember.tryFinally(l,c)}function l(e,t,n,s,o){function d(){return o.call(n)}function v(){for(c=0,h=u.length;c<h;c++)u[c][3]=undefined}!s&&"function"==typeof n&&(s=n,n=null);var u=[],a,f,l,c,h;for(c=0,h=t.length;c<h;c++){a=t[c],f=i(e,a);var p=r(f,n,s);p!==-1&&(l=f[p].slice(),l[3]=!0,f[p]=l,u.push(l))}return Ember.tryFinally(d,v)}function c(e){var t=e[n].listeners,r=[];if(t)for(var i in t)t[i]&&r.push(i);return r}function h(e,t,r,i){e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,r);if(!i){var s=e[n];i=s&&s.listeners&&s.listeners[t]}if(!i)return;for(var o=i.length-1;o>=0;o--){if(!i[o]||i[o][3]===!0)continue;var u=i[o][0],f=i[o][1],l=i[o][2];l&&a(e,t,u,f),u||(u=e),"string"==typeof f&&(f=u[f]),r?f.apply(u,r):f.call(u)}return!0}function p(e,t){var r=e[n],i=r&&r.listeners&&r.listeners[t];return!!i&&!!i.length}function d(e,t){var r=[],i=e[n],s=i&&i.listeners&&i.listeners[t];if(!s)return r;for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];r.push([a,f])}return r}var e=Ember.create,t=Ember.meta,n=Ember.META_KEY;Ember.addListener=u,Ember.removeListener=a,Ember._suspendListener=f,Ember._suspendListeners=l,Ember.sendEvent=h,Ember.hasListeners=p,Ember.watchedEvents=c,Ember.listenersFor=d,Ember.listenersDiff=o,Ember.listenersUnion=s}(),function(){function n(t,n,r,i){return n===undefined&&(n=t,t=undefined),"string"==typeof n&&(n=t[n]),r&&i>0&&(r=r.length>i?e.call(r,i):null),Ember.handleErrors(function(){return n.apply(t||this,r||[])},this)}function u(){o=null,s.currentRunLoop&&s.end()}function c(){f=null,s(function(){var e=+(new Date),t=-1;for(var r in a){if(!a.hasOwnProperty(r))continue;var i=a[r];if(i&&i.expires)if(e>=i.expires)delete a[r],n(i.target,i.method,i.args,2);else if(t<0||i.expires<t)t=i.expires}t>0&&(f=setTimeout(c,t-e),l=t)})}function h(e,t){t[this.tguid]&&delete t[this.tguid][this.mguid],a[e]&&n(this.target,this.method,this.args),delete a[e]}function p(e,t,n,r){var i=Ember.guidFor(t),o=Ember.guidFor(n),u=s.autorun().onceTimers,f=u[i]&&u[i][o],l;return f&&a[f]?a[f].args=r:(l={target:t,method:n,args:r,tguid:i,mguid:o},f=Ember.guidFor(l),a[f]=l,u[i]||(u[i]={}),u[i][o]=f,s.schedule(e,l,h,f,u)),f}var e=[].slice,t=Ember.ArrayPolyfills.forEach,r,i=function(e){this._prev=e||null,this.onceTimers={}};i.prototype={end:function(){this.flush()},prev:function(){return this._prev},schedule:function(t,n,r){var i=this._queues,s;i||(i=this._queues={}),s=i[t],s||(s=i[t]=[]);var o=arguments.length>3?e.call(arguments,3):null;return s.push({target:n,method:r,args:o}),this},flush:function(e){function f(e){n(e.target,e.method,e.args)}function l(){t.call(u,f)}var i,s,o,u,a;if(!this._queues)return this;Ember.watch.flushPending();if(e)while(this._queues&&(u=this._queues[e]))this._queues[e]=null,e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f);else{i=Ember.run.queues,o=i.length,s=0;e:while(s<o){e=i[s],u=this._queues&&this._queues[e],delete this._queues[e],u&&(e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f));for(var c=0;c<=s;c++)if(this._queues&&this._queues[i[c]]){s=c;continue e}s++}}return r=null,this}},Ember.RunLoop=i,Ember.run=function(e,t){function i(){if(e||t)return n(e,t,r,2)}var r=arguments;return s.begin(),Ember.tryFinally(i,s.end)};var s=Ember.run;Ember.run.begin=function(){s
|
16
|
-
.currentRunLoop=new i(s.currentRunLoop)},Ember.run.end=function(){function e(){s.currentRunLoop.end()}function t(){s.currentRunLoop=s.currentRunLoop.prev()}Ember.tryFinally(e,t)},Ember.run.queues=["sync","actions","destroy"],Ember.run.schedule=function(e,t,n){var r=s.autorun();r.schedule.apply(r,arguments)};var o;Ember.run.hasScheduledTimers=function(){return!!o||!!f},Ember.run.cancelTimers=function(){o&&(clearTimeout(o),o=null),f&&(clearTimeout(f),f=null),a={}},Ember.run.autorun=function(){return s.currentRunLoop||(s.begin(),o||(o=setTimeout(u,1))),s.currentRunLoop},Ember.run.sync=function(){s.autorun(),s.currentRunLoop.flush("sync")};var a={},f,l;Ember.run.later=function(t,n){var r,i,s,o,u;return arguments.length===2&&"function"==typeof t?(u=n,n=t,t=undefined,r=[t,n]):(r=e.call(arguments),u=r.pop()),i=+(new Date)+u,s={target:t,method:n,expires:i,args:r},o=Ember.guidFor(s),a[o]=s,f&&i<l&&(clearTimeout(f),f=null),f||(f=setTimeout(c,u),l=i),o},Ember.run.once=function(t,n){return p("actions",t,n,e.call(arguments,2))},Ember.run.scheduleOnce=function(t,n,r,i){return p(t,n,r,e.call(arguments,3))},Ember.run.next=function(){var t=e.call(arguments);return t.push(1),s.later.apply(this,t)},Ember.run.cancel=function(e){delete a[e]}}(),function(){function i(t,n){return e(r(n)?Ember.lookup:t,n)}function o(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}Ember.LOG_BINDINGS=!!Ember.ENV.LOG_BINDINGS;var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isGlobalPath,s=function(e,t){this._direction="fwd",this._from=t,this._to=e,this._directionMap=Ember.Map.create()};s.prototype={copy:function(){var e=new s(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+n(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,n=this._to;return Ember.trySet(e,n,i(e,t)),Ember.addObserver(e,t,this,this.fromDidChange),this._oneWay||Ember.addObserver(e,n,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return Ember.removeObserver(e,this._from,this,this.fromDidChange),t&&Ember.removeObserver(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var n=this._directionMap,r=n.get(e);r||(Ember.run.schedule("sync",this,this._sync,e),n.set(e,t)),r==="back"&&t==="fwd"&&n.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(t.isDestroyed||!this._readyToSync)return;var r=this._directionMap,s=r.get(t),o=this._from,u=this._to;r.remove(t);if(s==="fwd"){var a=i(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",a,t),this._oneWay?Ember.trySet(t,u,a):Ember._suspendObserver(t,u,this,this.toDidChange,function(){Ember.trySet(t,u,a)})}else if(s==="back"){var f=e(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",f,t),Ember._suspendObserver(t,o,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(o)?Ember.lookup:t,o,f)})}}},o(s,{from:function(){var e=this,t=new e;return t.from.apply(t,arguments)},to:function(){var e=this,t=new e;return t.to.apply(t,arguments)},oneWay:function(e,t){var n=this,r=new n(null,e);return r.oneWay(t)}}),Ember.Binding=s,Ember.bind=function(e,t,n){return(new Ember.Binding(t,n)).connect(e)},Ember.oneWay=function(e,t,n){return(new Ember.Binding(t,n)).oneWay().connect(e)}}(),function(){function l(e){var t=Ember.meta(e,!0),n=t.mixins;return n?t.hasOwnProperty("mixins")||(n=t.mixins=u(n)):n=t.mixins={},n}function c(t,n){return n&&n.length>0&&(t.mixins=r.call(n,function(t){if(t instanceof e)return t;var n=new e;return n.properties=t,n})),t}function h(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function d(t,n){var r;return n instanceof e?(r=f(n),t[r]?p:(t[r]=n,n.properties)):n}function v(e,t,n){var r;return r=t.concatenatedProperties||n.concatenatedProperties,e.concatenatedProperties&&(r=r?r.concat(e.concatenatedProperties):e.concatenatedProperties),r}function m(e,t,n,r,i){var s;return r[t]===undefined&&(s=i[t]),s=s||e.descs[t],!!s&&s instanceof Ember.ComputedProperty?(n=u(n),n.func=Ember.wrap(n.func,s.func),n):n}function g(e,t,n,r,i){var s;return i[t]===undefined&&(s=r[t]),s=s||e[t],"function"!=typeof s?n:Ember.wrap(n,s)}function y(e,t,n,r){var i=r[t]||e[t];return i?"function"==typeof i.concat?i.concat(n):Ember.makeArray(i).concat(n):Ember.makeArray(n)}function b(e,n,r,s,o,u,a){if(r instanceof Ember.Descriptor){if(r===t&&o[n])return p;r.func&&(r=m(s,n,r,u,o)),o[n]=r,u[n]=undefined}else{if(h(r))r=g(e,n,r,u,o);else if(a&&i.call(a,n)>=0||n==="concatenatedProperties")r=y(e,n,r,u);o[n]=undefined,u[n]=r}}function w(e,t,n,r,i){function c(e){delete n[e],delete r[e]}var o,u,a,f,l;for(var h=0,m=e.length;h<m;h++){o=e[h],u=d(t,o);if(u===p)continue;if(u){l=Ember.meta(i),f=v(u,r,i);for(a in u){if(!u.hasOwnProperty(a))continue;b(i,a,u[a],l,n,r,f)}u.hasOwnProperty("toString")&&(i.toString=u.toString)}else o.mixins&&(w(o.mixins,t,n,r,i),o._without&&s.call(o._without,c))}}function E(e){var t=Ember.meta(e),n=t.required;if(!n||!t.hasOwnProperty("required"))n=t.required=n?u(n):{};return n}function x(e,t,n,r){if(S.test(t)){var i=r.bindings;i?r.hasOwnProperty("bindings")||(i=r.bindings=u(r.bindings)):i=r.bindings={},i[t]=n}}function T(e,t){var n=t.bindings,r,i,s;if(n){for(r in n)i=n[r],i&&(s=r.slice(0,-7),i instanceof Ember.Binding?(i=i.copy(),i.to(s)):i=new Ember.Binding(s,i),i.connect(e),e[r]=i);t.bindings={}}}function N(e,t){return T(e,t||Ember.meta(e)),e}function C(e,t,n,r,i){var s=t.methodName,o;return r[s]||i[s]?(o=i[s],t=r[s]):n.descs[s]?(t=n.descs[s],o=undefined):(t=undefined,o=e[s]),{desc:t,value:o}}function k(e,t,n,r,i){if("function"!=typeof n)return;var s=n[r];if(s)for(var o=0,u=s.length;o<u;o++)Ember[i](e,s[o],null,t)}function L(e,t,n){var r=e[t];k(e,t,r,"__ember_observesBefore__","removeBeforeObserver"),k(e,t,r,"__ember_observes__","removeObserver"),k(e,t,n,"__ember_observesBefore__","addBeforeObserver"),k(e,t,n,"__ember_observes__","addObserver")}function A(e,r,i){var s={},o={},u=Ember.meta(e),f,c,h;w(r,l(e),s,o,e);for(f in o){if(f==="contructor"||!o.hasOwnProperty(f))continue;h=s[f],c=o[f];if(h===t)continue;while(h&&h instanceof n){var p=C(e,h,u,s,o);h=p.desc,c=p.value}if(h===undefined&&c===undefined)continue;L(e,f,c),x(e,f,c,u),a(e,f,h,c,u)}return i||N(e,u),e}function M(e,t,n){var r=f(e);if(n[r])return!1;n[r]=!0;if(e===t)return!0;var i=e.mixins,s=i?i.length:0;while(--s>=0)if(M(i[s],t,n))return!0;return!1}function _(e,t,n){if(n[f(t)])return;n[f(t)]=!0;if(t.properties){var r=t.properties;for(var i in r)r.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&s.call(t.mixins,function(t){_(e,t,n)})}var e,t,n,r=Ember.ArrayPolyfills.map,i=Ember.ArrayPolyfills.indexOf,s=Ember.ArrayPolyfills.forEach,o=[].slice,u=Ember.create,a=Ember.defineProperty,f=Ember.guidFor,p={},S=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=o.call(arguments,1);return A(e,t,!1),e},Ember.Mixin=function(){return c(this,arguments)},e=Ember.Mixin,e._apply=A,e.applyPartial=function(e){var t=o.call(arguments,1);return A(e,t,!0)},e.finishPartial=N,Ember.anyUnprocessedMixins=!1,e.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return c(new e,arguments)};var O=e.prototype;O.reopen=function(){var t,n;this.properties?(t=e.create(),t.properties=this.properties,delete this.properties,this.mixins=[t]):this.mixins||(this.mixins=[]);var r=arguments.length,i=this.mixins,s;for(s=0;s<r;s++)t=arguments[s],t instanceof e?i.push(t):(n=e.create(),n.properties=t,i.push(n));return this},O.apply=function(e){return A(e,[this],!1)},O.applyPartial=function(e){return A(e,[this],!0)},O.detect=function(t){if(!t)return!1;if(t instanceof e)return M(t,this,{});var n=Ember.meta(t,!1).mixins;return n?!!n[f(this)]:!1},O.without=function(){var t=new e(this);return t._without=o.call(arguments),t},O.keys=function(){var e={},t={},n=[];_(e,this,t);for(var r in e)e.hasOwnProperty(r)&&n.push(r);return n},e.mixins=function(e){var t=Ember.meta(e,!1).mixins,n=[];if(!t)return n;for(var r in t){var i=t[r];i.properties||n.push(i)}return n},t=new Ember.Descriptor,t.toString=function(){return"(Required Property)"},Ember.required=function(){return t},n=function(e){this.methodName=e},n.prototype=new Ember.Descriptor,Ember.alias=function(e){return new n(e)},Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new n(e)},Ember.observer=function(e){var t=o.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;e<t;e++)var n=arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=o.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){}(),function(){e("rsvp",[],function(){"use strict";function d(e,t){n.async(function(){e.trigger("promise:resolved",{detail:t}),e.isResolved=!0,e.resolvedValue=t})}function v(e,t){n.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedValue=t})}function m(e){var t,n=[],r=new c,i=e.length;i===0&&r.resolve([]);var s=function(e){return function(t){o(e,t)}},o=function(e,t){n[e]=t,--i===0&&r.resolve(n)},u=function(e){r.reject(e)};for(t=0;t<i;t++)e[t].then(s(t),u);return r}var e=typeof window!="undefined"?window:{},t=e.MutationObserver||e.WebKitMutationObserver,n,r;if(typeof process!="undefined"&&{}.toString.call(process)==="[object process]")r=function(e,t){process.nextTick(function(){e.call(t)})};else if(t){var i=[],s=new t(function(){var e=i.slice();i=[],e.forEach(function(e){var t=e[0],n=e[1];t.call(n)})}),o=document.createElement("div");s.observe(o,{attributes:!0}),window.addEventListener("unload",function(){s.disconnect(),s=null}),r=function(e,t){i.push([e,t]),o.setAttribute("drainQueue","drainQueue")}}else r=function(e,t){setTimeout(function(){e.call(t)},1)};var u=function(e,t){this.type=e;for(var n in t){if(!t.hasOwnProperty(n))continue;this[n]=t[n]}},a=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n][0]===t)return n;return-1},f=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},l={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,n){var r=f(this),i,s;e=e.split(/\s+/),n=n||this;while(s=e.shift())i=r[s],i||(i=r[s]=[]),a(i,t)===-1&&i.push([t,n])},off:function(e,t){var n=f(this),r,i,s;e=e.split(/\s+/);while(i=e.shift()){if(!t){n[i]=[];continue}r=n[i],s=a(r,t),s!==-1&&r.splice(s,1)}},trigger:function(e,t){var n=f(this),r,i,s,o,a;if(r=n[e])for(var l=0;l<r.length;l++)i=r[l],s=i[0],o=i[1],typeof t!="object"&&(t={detail:t}),a=new u(e,t),s.call(o,a)}},c=function(){this.on("promise:resolved",function(e){this.trigger("success",{detail:e.detail})},this),this.on("promise:failed",function(e){this.trigger("error",{detail:e.detail})},this)},h=function(){},p=function(e,t,n,r){var i=typeof n=="function",s,o,u,a;if(i)try{s=n(r.detail),u=!0}catch(f){a=!0,o=f}else s=r.detail,u=!0;s&&typeof s.then=="function"?s.then(function(e){t.resolve(e)},function(e){t.reject(e)}):i&&u?t.resolve(s):a?t.reject(o):t[e](s)};return c.prototype={then:function(e,t){var r=new c;return this.isResolved&&n.async(function(){p("resolve",r,e,{detail:this.resolvedValue})},this),this.isRejected&&n.async(function(){p("reject",r,t,{detail:this.rejectedValue})},this),this.on("promise:resolved",function(t){p("resolve",r,e,t)}),this.on("promise:failed",function(e){p("reject",r,t,e)}),r},resolve:function(e){d(this,e),this.resolve=h,this.reject=h},reject:function(e){v(this,e),this.resolve=h,this.reject=h}},l.mixin(c.prototype),n={async:r,Promise:c,Event:u,EventTarget:l,all:m,raiseOnUncaughtExceptions:!0},n})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function n(e){throw new Error(e+" is not currently supported on child containers")}function r(e,t){var n=s(e,t,"singleton");return n!==!1}function i(e,t){var n={};if(!t)return n;var r,i;for(var s=0,o=t.length;s<o;s++)r=t[s],i=e.lookup(r.fullName),n[r.property]=i;return n}function s(e,t,n){var r=e._options.get(t);if(r&&r[n]!==undefined)return r[n];var i=t.split(":")[0];r=e._typeOptions.get(i);if(r)return r[n]}function o(e,t){var n=e.normalize(t);return e.resolve(n)}function u(e,t){var n=o(e,t),r=t.split(":"),u=r[0],a=r[1],f;if(s(e,t,"instantiate")===!1)return n;if(n){var l=[];l=l.concat(e.typeInjections.get(u)||[]),l=l.concat(e.injections[t]||[]);var c=i(e,l);return c.container=e,c._debugContainerKey=t,f=n.create(c),f}}function a(e,t){e.cache.eachLocal(function(n,r){if(s(e,n,"instantiate")===!1)return;t(r)})}function f(e){e.cache.eachLocal(function(t,n){if(s(e,t,"instantiate")===!1)return;n.destroy()}),e.cache.dict={}}return e.prototype={get:function(e){var t=this.dict;if(t.hasOwnProperty(e))return t[e];if(this.parent)return this.parent.get(e)},set:function(e,t){this.dict[e]=t},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var n=this.dict;for(var r in n)n.hasOwnProperty(r)&&e.call(t,r,n[r])}},t.prototype={child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,n){e[t]=n},register:function(e,t,n,r){var i;e.indexOf(":")!==-1?(r=n,n=t,i=e):i=e+":"+t;var s=this.normalize(i);this.registry.set(s,n),this._options.set(s,r||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},lookup:function(e,t){e=this.normalize(e),t=t||{};if(this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var n=u(this,e);if(!n)return;return r(this,e)&&t.singleton!==!1&&this.cache.set(e,n),n},has:function(e){return this.cache.has(e)?!0:!!o(this,e)},optionsForType:function(e,t){this.parent&&n("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,r){this.parent&&n("typeInjection");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:r})},injection:function(e,t,r){this.parent&&n("injection");if(e.indexOf(":")===-1)return this.typeInjection(e,t,r);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:r})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;e<t;e++)this.children[e].destroy();this.children=[],a(this,function(e){e.isDestroying=!0}),a(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;e<t;e++)f(this.children[e]);f(this)}},t})}(),function(){function i(t,n,r,s){var o,u,a;if("object"!=typeof t||t===null)return t;if(n&&(u=e(r,t))>=0)return s[u];if(Ember.typeOf(t)==="array"){o=t.slice();if(n){u=o.length;while(--u>=0)o[u]=i(o[u],n,r,s)}}else if(Ember.Copyable&&Ember.Copyable.detect(t))o=t.copy(n,r,s);else{o={};for(a in t){if(!t.hasOwnProperty(a))continue;if(a.substring(0,2)==="__")continue;o[a]=n?i(t[a],n,r,s):t[a]}}return n&&(r.push(t),s.push(o)),o}var e=Ember.EnumerableUtils.indexOf,t={},n="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(n,function(e){t["[object "+e+"]"]=e.toLowerCase()});var r=Object.prototype.toString;Ember.typeOf=function(e){var n;return n=e===null||e===undefined?String(e):t[r.call(e)]||"object",n==="function"?Ember.Object&&Ember.Object.detect(e)&&(n="class"):n==="object"&&(e instanceof Error?n="error":Ember.Object&&e instanceof Ember.Object?n="instance":n="object"),n},Ember.compare=function o(e,t){if(e===t)return 0;var n=Ember.typeOf(e),r=Ember.typeOf(t),i=Ember.Comparable;if(i){if(n==="instance"&&i.detect(e.constructor))return e.constructor.compare(e,t);if(r==="instance"&&i.detect(t.constructor))return 1-t.constructor.compare(t,e)}var s=Ember.ORDER_DEFINITION_MAPPING;if(!s){var u=Ember.ORDER_DEFINITION;s=Ember.ORDER_DEFINITION_MAPPING={};var a,f;for(a=0,f=u.length;a<f;++a)s[u[a]]=a;delete Ember.ORDER_DEFINITION}var l=s[n],c=s[r];if(l<c)return-1;if(l>c)return 1;switch(n){case"boolean":case"number":if(e<t)return-1;if(e>t)return 1;return 0;case"string":var h=e.localeCompare(t);if(h<0)return-1;if(h>0)return 1;return 0;case"array":var p=e.length,d=t.length,v=Math.min(p,d),m=0,g=0;while(m===0&&g<v)m=o(e[g],t[g]),g++;if(m!==0)return m;if(p<d)return-1;if(p>d)return 1;return 0;case"instance":if(Ember.Comparable&&Ember.Comparable.detect(e))return e.compare(e,t);return 0;case"date":var y=e.getTime(),b=t.getTime();if(y<b)return-1;if(y>b)return 1;return 0;default:return 0}},Ember.copy=function(e,t){return"object"!=typeof e||e===null?e:Ember.Copyable&&Ember.Copyable.detect(e)?e.copy(t):i(e,t,t?[]:null,t?[]:null)},Ember.inspect=function(e){if(typeof e!="object"||e===null)return e+"";var t,n=[];for(var r in e)if(e.hasOwnProperty(r)){t=e[r];if(t==="toString")continue;Ember.typeOf(t)==="function"&&(t="function() { ... }"),n.push(r+": "+t)}return"{"+n.join(", ")+"}"},Ember.isEqual=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e===t},Ember.ORDER_DEFINITION=Ember.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class","date"],Ember.keys=Object.keys,Ember.keys||(Ember.keys=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t});var s=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){var e=Error.prototype.constructor.apply(this,arguments);for(var t=0;t<s.length;t++)this[s[t]]=e[s[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){Ember.RSVP=t("rsvp")}(),function(){var e=/[ _]/g,t={},n=/([a-z])([A-Z])/g,r=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,s=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var n=0;return e.replace(/%@([0-9]+)?/g,function(e,r){return r=r?parseInt(r,0)-1:n++,e=t[r],(e===null?"(null)":e===undefined?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(n,"$1_$2").toLowerCase()},dasherize:function(n){var r=t,i=r.hasOwnProperty(n),s;return i?r[n]:(s=Ember.String.decamelize(n).replace(e,"-"),r[n]=s,s)},camelize:function(e){return e.replace(r,function(e,t,n){return n?n.toUpperCase():""}).replace(/^([A-Z])/,function(e,t,n){return e.toLowerCase()})},classify:function(e){var t=e.split("."),n=[];for(var r=0,i=t.length;r<i;r++){var s=Ember.String.camelize(t[r]);n.push(s.charAt(0).toUpperCase()+s.substr(1))}return n.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(s,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,n=Ember.String.loc,r=Ember.String.camelize,i=Ember.String.decamelize,s=Ember.String.dasherize,o=Ember.String.underscore,u=Ember.String.capitalize,a=Ember.String.classify;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.String)String.prototype.fmt=function(){return e(this,arguments)},String.prototype.w=function(){return t(this)},String.prototype.loc=function(){return n(this,arguments)},String.prototype.camelize=function(){return r(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return s(this)},String.prototype.underscore=function(){return o(this)},String.prototype.classify=function(){return a(this)},String.prototype.capitalize=function(){return u(this)}}(),function(){var e=Array.prototype.slice;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Function)Function.prototype.property=function(){var e=Ember.computed(this);return e.property.apply(e,arguments)},Function.prototype.observes=function(){return this.__ember_observes__=e.call(arguments),this},Function.prototype.observesBefore=function(){return this.__ember_observesBefore__=e.call(arguments),this}}(),function(){}(),function(){function s(){return i.length===0?{}:i.pop()}function o(e){return i.push(e),null}function u(t,n){function i(i){var s=e(i,t);return r?n===s:!!s}var r=arguments.length===2;return i}var e=Ember.get,t=Ember.set,n=Array.prototype.slice,r=Ember.EnumerableUtils.indexOf,i=[];Ember.Enumerable=Ember.Mixin.create({isEnumerable:!0,nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(e(this,"length")===0)return undefined;var t=s(),n;return n=this.nextObject(0,null,t),o(t),n}).property("[]"),lastObject:Ember.computed(function(){var t=e(this,"length");if(t===0)return undefined;var n=s(),r=0,i,u=null;do u=i,i=this.nextObject(r++,u,n);while(i!==undefined);return o(n),u}).property("[]"),contains:function(e){return this.find(function(t){return t===e})!==undefined},forEach:function(t,n){if(typeof t!="function")throw new TypeError;var r=e(this,"length"),i=null,u=s();n===undefined&&(n=null);for(var a=0;a<r;a++){var f=this.nextObject(a,i,u);t.call(n,f,a,this),i=f}return i=null,u=o(u),this},getEach:function(e){return this.mapProperty(e)},setEach:function(e,n){return this.forEach(function(r){t(r,e,n)})},map:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){n[i]=e.call(t,r,i,s)}),n},mapProperty:function(t){return this.map(function(n){return e(n,t)})},filter:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){e.call(t,r,i,s)&&n.push(r)}),n},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterProperty:function(e,t){return this.filter(u.apply(this,arguments))},rejectProperty:function(t,n){var r=function(r){return e(r,t)===n},i=function(n){return!!e(n,t)},s=arguments.length===2?r:i;return this.reject(s)},find:function(t,n){var r=e(this,"length");n===undefined&&(n=null);var i=null,u,a=!1,f,l=s();for(var c=0;c<r&&!a;c++){u=this.nextObject(c,i,l);if(a=t.call(n,u,c,this))f=u;i=u}return u=i=null,l=o(l),f},findProperty:function(e,t){return this.find(u.apply(this,arguments))},every:function(e,t){return!this.find(function(n,r,i){return!e.call(t,n,r,i)})},everyProperty:function(e,t){return this.every(u.apply(this,arguments))},some:function(e,t){return!!this.find(function(n,r,i){return!!e.call(t,n,r,i)})},someProperty:function(e,t){return this.some(u.apply(this,arguments))},reduce:function(e,t,n){if(typeof e!="function")throw new TypeError;var r=t;return this.forEach(function(t,i){r=e.call(null,r,t,i,this,n)},this),r},invoke:function(e){var t,r=Ember.A([]);return arguments.length>1&&(t=n.call(arguments,1)),this.forEach(function(n,i){var s=n&&n[e];"function"==typeof s&&(r[i]=t?s.apply(n,t):s.call(n))},this),r},toArray:function(){var e=Ember.A([]);return this.forEach(function(t,n){e[n]=t}),e},compact:function(){return this.filter(function(e){return e!=null})},without:function(e){if(!this.contains(e))return this;var t=Ember.A([]);return this.forEach(function(n){n!==e&&(t[t.length]=n)}),t},uniq:function(){var e=Ember.A([]);return this.forEach(function(t){r(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(e,t){return this}),addEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",t,r),Ember.addListener(this,"@enumerable:change",t,i),s||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",t,r),Ember.removeListener(this,"@enumerable:change",t,i),s&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.propertyWillChange(this,"[]"),s&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,t,n]),this},enumerableContentDidChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.sendEvent(this,"@enumerable:change",[this,t,n]),s&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this}})}(),function(){function i(e){return e===null||e===undefined}var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.map,r=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{isSCArray:!0,length:Ember.required(),objectAt:function(t){return t<0||t>=e(this,"length")?undefined:e(this,t)},objectsAt:function(e){var t=this;return n(e,function(e){return t.objectAt(e)})},nextObject:function(e){return this.objectAt(e)},"[]":Ember.computed(function(t,n){return n!==undefined&&this.replace(0,e(this,"length"),n),this}),firstObject:Ember.computed(function(){return this.objectAt(0)}),lastObject:Ember.computed(function(){return this.objectAt(e(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(t,n){var r=Ember.A([]),s=e(this,"length");i(t)&&(t=0);if(i(n)||n>s)n=s;t<0&&(t=s+t),n<0&&(n=s+n);while(t<n)r[r.length]=this.objectAt(t++);return r},indexOf:function(t,n){var r,i=e(this,"length");n===undefined&&(n=0),n<0&&(n+=i);for(r=n;r<i;r++)if(this.objectAt(r,!0)===t)return r;return-1},lastIndexOf:function(t,n){var r,i=e(this,"length");if(n===undefined||n>=i)n=i-1;n<0&&(n+=i);for(r=n;r>=0;r--)if(this.objectAt(r)===t)return r;return-1},addArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,r),Ember.addListener(this,"@array:change",t,i),s||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,r),Ember.removeListener(this,"@array:change",t,i),s&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,n,r){t===undefined?(t=0,n=r=-1):(n===undefined&&(n=-1),r===undefined&&(r=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,n,r]);var i,s;if(t>=0&&n>=0&&e(this,"hasEnumerableObservers")){i=[],s=t+n;for(var o=t;o<s;o++)i.push(this.objectAt(o))}else i=n;return this.enumerableContentWillChange(i,r),this},arrayContentDidChange:function(t,n,i){t===undefined?(t=0,n=i=-1):(n===undefined&&(n=-1),i===undefined&&(i=-1));var s,o;if(t>=0&&i>=0&&e(this,"hasEnumerableObservers")){s=[],o=t+i;for(var u=t;u<o;u++)s.push(this.objectAt(u))}else s=i;this.enumerableContentDidChange(n,s),Ember.sendEvent(this,"@array:change",[this,t,n,i]);var a=e(this,"length"),f=r(this,"firstObject"),l=r(this,"lastObject");return this.objectAt(0)!==f&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(a-1)!==l&&(Ember.propertyWillChange(this,"lastObject"),Ember.propertyDidChange(this,"lastObject")),this},"@each":Ember.computed(function(){return this.__each||(this.__each=new Ember.EachProxy(this)),this.__each})})}(),function(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,compare:Ember.required(Function)})}(),function(){var e=Ember.get,t=Ember.set;Ember.Copyable=Ember.Mixin.create({copy:Ember.required(Function),frozenCopy:function(){if(Ember.Freezable&&Ember.Freezable.detect(this))return e(this,"isFrozen")?this:this.copy().freeze();throw new Error(Ember.String.fmt("%@ does not support freezing",[this]))}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Freezable=Ember.Mixin.create({isFrozen:!1,freeze:function(){return e(this,"isFrozen")?this:(t(this,"isFrozen",!0),this)}}),Ember.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){var e=Ember.EnumerableUtils.forEach;Ember.MutableEnumerable=Ember.Mixin.create(Ember.Enumerable,{addObject:Ember.required(Function),addObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.addObject(e)},this),Ember.endPropertyChanges(this),this},removeObject:Ember.required(Function),removeObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.removeObject(e)},this),Ember.endPropertyChanges(this),this}})}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=n(this,"length");return e===0?this:(this.replace(0,e,t),this)},insertAt:function(t,r){if(t>n(this,"length"))throw new Error(e);return this.replace(t,0,[r]),this},removeAt:function(r,i){if("number"==typeof r){if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1),this.replace(r,i,t)}return this},pushObject:function(e){return this.insertAt(n(this,"length"),e),e},pushObjects:function(e){return this.replace(n(this,"length"),0,e),this},popObject:function(){var e=n(this,"length");if(e===0)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(n(this,"length")===0)return null;var e=this.objectAt(0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=n(this,"length");if(e===0)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this.replace(0,t,e),this},removeObject:function(e){var t=n(this,"length")||0;while(--t>=0){var r=this.objectAt(t);r===e&&this.removeAt(t)}return this},addObject:function(e){return this.contains(e)||this.pushObject(e),this}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},n=arguments;arguments.length===1&&Ember.typeOf(arguments[0])==="array"&&(n=arguments[0]);for(var r=0;r<n.length;r++)t[n[r]]=e(this,n[r]);return t},set:function(e,n){return t(this,e,n),this},setProperties:function(e){return Ember.setProperties(this,e)},beginPropertyChanges:function(){return Ember.beginPropertyChanges(),this},endPropertyChanges:function(){return Ember.endPropertyChanges(),this},propertyWillChange:function(e){return Ember.propertyWillChange(this,e),this},propertyDidChange:function(e){return Ember.propertyDidChange(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addBeforeObserver:function(e,t,n){Ember.addBeforeObserver(this,e,t,n)},addObserver:function(e,t,n){Ember.addObserver(this,e,t,n)},removeObserver:function(e,t,n){Ember.removeObserver(this,e,t,n)},hasObserverFor:function(e){return Ember.hasListeners(this,e+":change")},getPath:function(e){return this.get(e)},setPath:function(e,t){return this.set(e,t)},getWithDefault:function(e,t){return Ember.getWithDefault(this,e,t)},incrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)+r),e(this,n)},decrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)-r),e(this,n)},toggleProperty:function(n){return t(this,n,!e(this,n)),e(this,n)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get,t=Ember.set;Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,targetObject:Ember.computed(function(){var t=e(this,"target");if(Ember.typeOf(t)==="string"){var n=e(this,t);return n===undefined&&(n=e(Ember.lookup,t)),n}return t}).property("target"),triggerAction:function(){var t=e(this,"action"),n=e(this,"targetObject");if(n&&t){var r;return typeof n.send=="function"?r=n.send(t,this):(typeof t=="string"&&(t=n[t]),r=t.call(n,this)),r!==!1&&(r=!0),r}return!1}})}(),function(){Ember.Evented=
|
17
|
-
Ember.Mixin.create({on:function(e,t,n){return Ember.addListener(this,e,t,n),this},one:function(e,t,n){return n||(n=t,t=null),Ember.addListener(this,e,t,n,!0),this},trigger:function(e){var t=[],n,r;for(n=1,r=arguments.length;n<r;n++)t.push(arguments[n]);Ember.sendEvent(this,e,t)},fire:function(e){this.trigger.apply(this,arguments)},off:function(e,t,n){return Ember.removeListener(this,e,t,n),this},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.async=function(e,t){Ember.run.schedule("actions",t,e)};var n=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){var r=n(this,"promise");return r.then.apply(r,arguments)},resolve:function(e){n(this,"promise").resolve(e)},reject:function(e){n(this,"promise").reject(e)},promise:Ember.computed(function(){return new e.Promise})})}(),function(){}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function b(){var e=!1,t,s,o=function(){e||o.proto(),r(this,i,y),r(this,"_super",y);var a=u(this);a.proto=this;if(t){var l=t;t=null,this.reopen.apply(this,l)}if(s){var c=s;s=null;var h=this.concatenatedProperties;for(var p=0,v=c.length;p<v;p++){var b=c[p];for(var w in b){if(!b.hasOwnProperty(w))continue;var E=b[w],S=Ember.IS_BINDING;if(S.test(w)){var x=a.bindings;x?a.hasOwnProperty("bindings")||(x=a.bindings=n(a.bindings)):x=a.bindings={},x[w]=E}var T=a.descs[w];if(h&&g(h,w)>=0){var N=this[w];N?"function"==typeof N.concat?E=N.concat(E):E=Ember.makeArray(N).concat(E):E=Ember.makeArray(E)}T?T.set(this,w,E):typeof this.setUnknownProperty!="function"||w in this?m?Ember.defineProperty(this,w,null,E):this[w]=E:this.setUnknownProperty(w,E)}}}d(this,a),delete a.proto,f(this),this.init.apply(this,arguments)};return o.toString=h.prototype.toString,o.willReopen=function(){e&&(o.PrototypeMixin=h.create(o.PrototypeMixin)),e=!1},o._initMixins=function(e){t=e},o._initProperties=function(e){s=e},o.proto=function(){var t=o.superclass;return t&&t.proto(),e||(e=!0,o.PrototypeMixin.applyPartial(o.prototype),a(o.prototype)),this.prototype},o}function E(e){return function(){return e}}var e=Ember.set,t=Ember.get,n=Ember.create,r=Ember.platform.defineProperty,i=Ember.GUID_KEY,s=Ember.guidFor,o=Ember.generateGuid,u=Ember.meta,a=Ember.rewatch,f=Ember.finishChains,l=Ember.destroy,c=Ember.run.schedule,h=Ember.Mixin,p=h._apply,d=h.finishPartial,v=h.prototype.reopen,m=Ember.ENV.MANDATORY_SETTER,g=Ember.EnumerableUtils.indexOf,y={configurable:!0,writable:!0,enumerable:!1,value:undefined},w=b();w.toString=function(){return"Ember.CoreObject"},w.PrototypeMixin=h.create({reopen:function(){return p(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){if(this._didCallDestroy)return;return this.isDestroying=!0,this._didCallDestroy=!0,this.willDestroy&&this.willDestroy(),c("destroy",this,this._scheduledDestroy),this},_scheduledDestroy:function(){l(this),e(this,"isDestroyed",!0),this.didDestroy&&this.didDestroy()},bind:function(e,t){return t instanceof Ember.Binding||(t=Ember.Binding.from(t)),t.to(e).connect(this),t},toString:function x(){var e=typeof this.toStringExtension=="function",t=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+s(this)+t+">";return this.toString=E(n),n}}),w.PrototypeMixin.ownerConstructor=w,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(w.PrototypeMixin),w.__super__=null;var S=h.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var e=b(),t;return e.ClassMixin=h.create(this.ClassMixin),e.PrototypeMixin=h.create(this.PrototypeMixin),e.ClassMixin.ownerConstructor=e,e.PrototypeMixin.ownerConstructor=e,v.apply(e.PrototypeMixin,arguments),e.superclass=this,e.__super__=this.prototype,t=e.prototype=n(this.prototype),t.constructor=e,o(t,"ember"),u(t).proto=t,e.ClassMixin.apply(e),e},createWithMixins:function(){var e=this;return arguments.length>0&&this._initMixins(arguments),new e},create:function(){var e=this;return arguments.length>0&&this._initProperties(arguments),new e},reopen:function(){return this.willReopen(),v.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return v.apply(this.ClassMixin,arguments),p(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;while(e){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=u(this.proto(),!1).descs[e];return t._meta||{}},eachComputedProperty:function(e,t){var n=this.proto(),r=u(n).descs,i={},s;for(var o in r)s=r[o],s instanceof Ember.ComputedProperty&&e.call(t||this,o,s._meta||i)}});S.ownerConstructor=w,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(S),w.ClassMixin=S,S.apply(w),Ember.CoreObject=w}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function o(e,t,n){var u=e.length;r[e.join(".")]=t;for(var f in t){if(!i.call(t,f))continue;var c=t[f];e[u]=f;if(c&&c.toString===l)c.toString=h(e.join(".")),c[a]=e.join(".");else if(c&&c.isNamespace){if(n[s(c)])continue;n[s(c)]=!0,o(e,c,n)}}e.length=u}function u(){var e=Ember.Namespace,t=Ember.lookup,n,r;if(e.PROCESSED)return;for(var i in t){if(i==="parent"||i==="top"||i==="frameElement")continue;if(i==="globalStorage"&&t.StorageList&&t.globalStorage instanceof t.StorageList)continue;if(t.hasOwnProperty&&!t.hasOwnProperty(i))continue;try{n=Ember.lookup[i],r=n&&n.isNamespace}catch(s){continue}r&&(n[a]=i)}}function f(e){var t=e.superclass;if(t)return t[a]?t[a]:f(t);return}function l(){!Ember.BOOTED&&!this[a]&&c();var e;if(this[a])e=this[a];else{var t=f(this);t?e="(subclass of "+t+")":e="(unknown mixin)",this.toString=h(e)}return e}function c(){var e=!n.PROCESSED,t=Ember.anyUnprocessedMixins;e&&(u(),n.PROCESSED=!0);if(e||t){var r=n.NAMESPACES,i;for(var s=0,a=r.length;s<a;s++)i=r[s],o([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function h(e){return function(){return e}}var e=Ember.get,t=Ember.ArrayPolyfills.indexOf,n=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var t=e(this,"name");return t?t:(u(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=undefined,e.splice(t.call(e,this),1),this._super()}});n.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:c,byName:function(e){return Ember.BOOTED||c(),r[e]}});var r=n.NAMESPACES_BY_ID,i={}.hasOwnProperty,s=Ember.guidFor,a=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=l}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(e){return n(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,r){n(this,"content").replace(e,t,r)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var e=n(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){var e=n(this,"content");this._setupContent()},"content"),_setupContent:function(){var e=n(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,undefined),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,undefined,t)},"arrangedContent"),_setupArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(e){return n(this,"content")&&this.objectAtContent(e)},length:Ember.computed(function(){var e=n(this,"arrangedContent");return e?n(e,"length"):0}),_replace:function(e,t,r){var i=n(this,"content");return i&&this.replaceContent(e,t,r),this},replace:function(){if(n(this,"arrangedContent")!==n(this,"content"))throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(t,r){if(t>n(this,"content.length"))throw new Error(e);return this._replace(t,0,[r]),this},insertAt:function(e,t){if(n(this,"arrangedContent")===n(this,"content"))return this._insertAt(e,t);throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(r,i){if("number"==typeof r){var s=n(this,"content"),o=n(this,"arrangedContent"),u=[],a;if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1);for(a=r;a<r+i;a++)u.push(s.indexOf(o.objectAt(a)));u.sort(function(e,t){return t-e}),Ember.beginPropertyChanges();for(a=0;a<u.length;a++)this._replace(u[a],1,t);Ember.endPropertyChanges()}return this},pushObject:function(e){return this._insertAt(n(this,"content.length"),e),e},pushObjects:function(e){return this._replace(n(this,"length"),0,e),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this._replace(0,t,e),this},unshiftObject:function(e){return this._insertAt(0,e),e},unshiftObjects:function(e){return this._replace(0,0,e),this},slice:function(){var e=this.toArray();return e.slice.apply(e,arguments)},arrangedContentArrayWillChange:function(e,t,n,r){this.arrayContentWillChange(t,n,r)},arrangedContentArrayDidChange:function(e,t,n,r){this.arrayContentDidChange(t,n,r)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function f(e,t){var n=t.slice(8);if(n in this)return;u(this,n)}function l(e,t){var n=t.slice(8);if(n in this)return;a(this,n)}var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.addBeforeObserver,i=Ember.addObserver,s=Ember.removeBeforeObserver,o=Ember.removeObserver,u=Ember.propertyWillChange,a=Ember.propertyDidChange;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;r(this,t,null,f),i(this,t,null,l)},didUnwatchProperty:function(e){var t="content."+e;s(this,t,null,f),o(this,t,null,l)},unknownProperty:function(t){var n=e(this,"content");if(n)return e(n,t)},setUnknownProperty:function(n,r){var i=e(this,"content");return t(i,n,r)}}),Ember.ObjectProxy.reopenClass({create:function(){var e,t,n,r,i,s;if(arguments.length){t=this.proto();for(n=0,r=arguments.length;n<r;n++){i=arguments[n];for(s in i){if(!i.hasOwnProperty(s)||s in t)continue;e||(e={}),e[s]=null}}e&&this._initMixins([e])}return this._super.apply(this,arguments)}})}(),function(){function o(e,t,r,i,s){var o=r._objects,u;o||(o=r._objects={});while(--s>=i){var a=e.objectAt(s);a&&(Ember.addBeforeObserver(a,t,r,"contentKeyWillChange"),Ember.addObserver(a,t,r,"contentKeyDidChange"),u=n(a),o[u]||(o[u]=[]),o[u].push(s))}}function u(e,t,r,i,s){var o=r._objects;o||(o=r._objects={});var u,a;while(--s>=i){var f=e.objectAt(s);f&&(Ember.removeBeforeObserver(f,t,r,"contentKeyWillChange"),Ember.removeObserver(f,t,r,"contentKeyDidChange"),a=n(f),u=o[a],u[u.indexOf(s)]=null)}}var e=Ember.set,t=Ember.get,n=Ember.guidFor,r=Ember.EnumerableUtils.forEach,i=Ember.Object.extend(Ember.Array,{init:function(e,t,n){this._super(),this._keyName=t,this._owner=n,this._content=e},objectAt:function(e){var n=this._content.objectAt(e);return n&&t(n,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?t(e,"length"):0})}),s=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),r(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e,t){var n;return n=new i(this._content,e,this),Ember.defineProperty(this,e,null,n),this.beginObservingContentKey(e),n},arrayWillChange:function(e,t,n,r){var i=this._keys,s,o;o=n>0?t+n:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;o>0&&u(e,s,this,t,o),Ember.propertyWillChange(this,s)}Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(e,t,n,r){var i=this._keys,s,u;u=r>0?t+r:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;u>0&&o(e,s,this,t,u),Ember.propertyDidChange(this,s)}Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(e){var n=this._keys;n||(n=this._keys={});if(!n[e]){n[e]=1;var r=this._content,i=t(r,"length");o(r,e,this,0,i)}else n[e]++},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var r=this._content,i=t(r,"length");u(r,e,this,0,i)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return e==="length"?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(t,n,r){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=r?e(r,"length"):0;this.arrayContentWillChange(t,n,i);if(!r||r.length===0)this.splice(t,n);else{var s=[t,n].concat(r);this.splice.apply(this,s)}return this.arrayContentDidChange(t,n,i),this},unknownProperty:function(e,t){var n;return t!==undefined&&n===undefined&&(n=this[e]=t),n},indexOf:function(e,t){var n,r=this.length;t===undefined?t=0:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n<r;n++)if(this[n]===e)return n;return-1},lastIndexOf:function(e,t){var n,r=this.length;t===undefined?t=r-1:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n>=0;n--)if(this[n]===e)return n;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),r=["length"];Ember.EnumerableUtils.forEach(n.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(n=n.without.apply(n,r)),Ember.NativeArray=n,Ember.A=function(e){return e===undefined&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){n.apply(Array.prototype),Ember.A=function(e){return e||[]}},(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Array)&&Ember.NativeArray.activate()}(),function(){var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isNone,i=Ember.String.fmt;Ember.Set=Ember.CoreObject.extend(Ember.MutableEnumerable,Ember.Copyable,Ember.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(Ember.FROZEN_ERROR);var r=e(this,"length");if(r===0)return this;var i;this.enumerableContentWillChange(r,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var s=0;s<r;s++)i=n(this[s]),delete this[i],delete this[s];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(r,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var n=e(this,"length");if(e(t,"length")!==n)return!1;while(--n>=0)if(!t.contains(this[n]))return!1;return!0},add:Ember.aliasMethod("addObject"),remove:Ember.aliasMethod("removeObject"),pop:function(){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);var t=this.length>0?this[this.length-1]:null;return this.remove(t),t},push:Ember.aliasMethod("addObject"),shift:Ember.aliasMethod("pop"),unshift:Ember.aliasMethod("push"),addEach:Ember.aliasMethod("addObjects"),removeEach:Ember.aliasMethod("removeObjects"),init:function(e){this._super(),e&&this.addObjects(e)},nextObject:function(e){return this[e]},firstObject:Ember.computed(function(){return this.length>0?this[0]:undefined}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:undefined}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a;return o>=0&&o<u&&this[o]===i?this:(a=[i],this.enumerableContentWillChange(null,a),Ember.propertyWillChange(this,"lastObject"),u=e(this,"length"),this[s]=u,this[u]=i,t(this,"length",u+1),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(null,a),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a=o===0,f=o===u-1,l,c;return o>=0&&o<u&&this[o]===i&&(c=[i],this.enumerableContentWillChange(c,null),a&&Ember.propertyWillChange(this,"firstObject"),f&&Ember.propertyWillChange(this,"lastObject"),o<u-1&&(l=this[u-1],this[o]=l,this[n(l)]=o),delete this[s],delete this[u-1],t(this,"length",u-1),a&&Ember.propertyDidChange(this,"firstObject"),f&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(c,null)),this},contains:function(e){return this[n(e)]>=0},copy:function(){var r=this.constructor,i=new r,s=e(this,"length");t(i,"length",s);while(--s>=0)i[s]=this[s],i[n(this[s])]=s;return i},toString:function(){var e=this.length,t,n=[];for(t=0;t<e;t++)n[t]=this[t];return i("Ember.Set<%@>",[n.join(",")])}})}(),function(){var e=Ember.DeferredMixin,t=Ember.get,n=Ember.Object.extend(e);n.reopenClass({promise:function(e,r){var i=n.create();return e.call(r,i),t(i,"promise")}}),Ember.Deferred=n}(),function(){var e=Ember.ENV.EMBER_LOAD_HOOKS||{},t={};Ember.onLoad=function(n,r){var i;e[n]=e[n]||Ember.A(),e[n].pushObject(r),(i=t[n])&&r(i)},Ember.runLoadHooks=function(n,r){var i;t[n]=r,(i=e[n])&&e[n].forEach(function(e){e(r)})}}(),function(){}(),function(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,store:null,model:Ember.computed.alias("content"),send:function(t){var n=[].slice.call(arguments,1),r;this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach;Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(t,r){var i=0,s=e(this,"sortProperties"),o=e(this,"sortAscending");return n(s,function(n){i===0&&(i=Ember.compare(e(t,n),e(r,n)),i!==0&&!o&&(i=-1*i))}),i},destroy:function(){var t=e(this,"content"),r=e(this,"sortProperties");return t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(t,r){var i=e(this,"content"),s=e(this,"isSorted"),o=e(this,"sortProperties"),u=this;return i&&s?(i=i.slice(),i.sort(function(e,t){return u.orderBy(e,t)}),n(i,function(e){n(o,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(i)):i}),_contentWillChange:Ember.beforeObserver(function(){var t=e(this,"content"),r=e(this,"sortProperties");t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},"content"),sortAscendingWillChange:Ember.beforeObserver(function(){this._lastSortAscending=e(this,"sortAscending")},"sortAscending"),sortAscendingDidChange:Ember.observer(function(){if(e(this,"sortAscending")!==this._lastSortAscending){var t=e(this,"arrangedContent");t.reverseObjects()}},"sortAscending"),contentArrayWillChange:function(t,r,i,s){var o=e(this,"isSorted");if(o){var u=e(this,"arrangedContent"),a=t.slice(r,r+i),f=e(this,"sortProperties");n(a,function(e){u.removeObject(e),n(f,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},contentArrayDidChange:function(t,r,i,s){var o=e(this,"isSorted"),u=e(this,"sortProperties");if(o){var a=t.slice(r,r+s);n(a,function(e){this.insertItemSorted(e),n(u,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},insertItemSorted:function(t){var n=e(this,"arrangedContent"),r=e(n,"length"),i=this._binarySearch(t,0,r);n.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var n=e(this,"arrangedContent"),r=n.indexOf(t),i=n.objectAt(r-1),s=n.objectAt(r+1),o=i&&this.orderBy(t,i),u=s&&this.orderBy(t,s);if(o<0||u>0)n.removeObject(t),this.insertItemSorted(t)},_binarySearch:function(t,n,r){var i,s,o,u;return n===r?n:(u=e(this,"arrangedContent"),i=n+Math.floor((r-n)/2),s=u.objectAt(i),o=this.orderBy(s,t),o<0?this._binarySearch(t,i+1,r):o>0?this._binarySearch(t,n,i):i)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach,r=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(t){return e(this,"itemController")},objectAtContent:function(t){var n=e(this,"length"),r=e(this,"arrangedContent"),i=r&&r.objectAt(t);if(t>=0&&t<n){var s=this.lookupItemController(i);if(s)return this.controllerAt(t,i,s)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(t,i,s){var o=e(this,"_subControllers"),u=o.slice(t,t+i);n(u,function(e){e&&e.destroy()}),r(o,t,i,new Array(s)),this._super(t,i,s)},init:function(){this._super(),this.get("content")||Ember.defineProperty(this,"content",undefined,Ember.A()),this.set("_subControllers",Ember.A())},controllerAt:function(t,n,r){var i=e(this,"container"),s=e(this,"_subControllers"),o=s[t];o||(o=i.lookup("controller:"+r,{singleton:!1}),s[t]=o);if(!o)throw new Error('Could not resolve itemController: "'+r+'"');return o.set("target",this),o.set("content",n),o},_subControllers:null,_resetSubControllers:function(){var t=e(this,"_subControllers");n(t,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}(),function(){}(),function(){}(),function(){var e=Ember.get,t=Ember.set;Ember.State=Ember.Object.extend(Ember.Evented,{isState:!0,parentState:null,start:null,name:null,path:Ember.computed(function(){var t=e(this,"parentState.path"),n=e(this,"name");return t&&(n=t+"."+n),n}),trigger:function(e){this[e]&&this[e].apply(this,[].slice.call(arguments,1)),this._super.apply(this,arguments)},init:function(){var n=e(this,"states");t(this,"childStates",Ember.A()),t(this,"eventTransitions",e(this,"eventTransitions")||{});var r,i,s;if(!n){n={};for(r in this){if(r==="constructor")continue;if(i=this[r]){if(s=i.transitionTarget)this.eventTransitions[r]=s;this.setupChild(n,r,i)}}t(this,"states",n)}else for(r in n)this.setupChild(n,r,n[r]);t(this,"pathsCache",{}),t(this,"pathsCacheNoContext",{})},setupChild:function(n,r,i){if(!i)return!1;i.isState?t(i,"name",r):Ember.State.detect(i)&&(i=i.create({name:r}));if(i.isState)return t(i,"parentState",this),e(this,"childStates").pushObject(i),n[r]=i,i},lookupEventTransition:function(e){var t,n=this;while(n&&!t)t=n.eventTransitions[e],n=n.get("parentState");return t},isLeaf:Ember.computed(function(){return!e(this,"childStates").length}),hasContext:!0,setup:Ember.K,enter:Ember.K,exit:Ember.K}),Ember.State.reopenClass({transitionTo:function(e){var t=function(t,n){var r=[],i=Ember.$&&Ember.$.Event;n&&i&&n instanceof i?n.hasOwnProperty("contexts")&&(r=n.contexts.slice()):r=[].slice.call(arguments,1),r.unshift(e),t.transitionTo.apply(t,r)};return t.transitionTarget=e,t}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.ArrayPolyfills.forEach,i=function(e){this.enterStates=e.enterStates.slice(),this.exitStates=e.exitStates.slice(),this.resolveState=e.resolveState,this.finalState=e.enterStates[e.enterStates.length-1]||e.resolveState};i.prototype={normalize:function(e,t){return this.matchContextsToStates(t),this.addInitialStates(),this.removeUnchangedContexts(e),this},matchContextsToStates:function(t){var n=this.enterStates.length-1,r=[],i,s;while(t.length>0){if(n>=0)i=this.enterStates[n--];else{if(this.enterStates.length){i=e(this.enterStates[0],"parentState");if(!i)throw"Cannot match all contexts to states"}else i=this.resolveState;this.enterStates.unshift(i),this.exitStates.unshift(i)}e(i,"hasContext")?s=t.pop():s=null,r.unshift(s)}this.contexts=r},addInitialStates:function(){var t=this.finalState,n;for(;;){n=e(t,"initialState")||"start",t=e(t,"states."+n);if(!t)break;this.finalState=t,this.enterStates.push(t),this.contexts.push(undefined)}},removeUnchangedContexts:function(e){while(this.enterStates.length>0){if(this.enterStates[0]!==this.exitStates[0])break;if(this.enterStates.length===this.contexts.length){if(e.getStateMeta(this.enterStates[0],"context")!==this.contexts[0])break;this.contexts.shift()}this.resolveState=this.enterStates.shift(),this.exitStates.shift()}}};var s=function(t,r,i){var u=this.enableLogging,a=i?"unhandledEvent":t,f=r[a],l,c,h;l=[].slice.call(arguments,3);if(typeof f=="function")return u&&(i?Ember.Logger.log(n("STATEMANAGER: Unhandled event '%@' being sent to state %@.",[t,e(r,"path")])):Ember.Logger.log(n("STATEMANAGER: Sending event '%@' to state %@.",[t,e(r,"path")]))),h=l,i&&h.unshift(t),h.unshift(this),f.apply(r,h);var p=e(r,"parentState");if(p)return c=l,c.unshift(t,p,i),s.apply(this,c);if(!i)return o.call(this,t,l,!0)},o=function(t,n,r){return n.unshift(t,e(this,"currentState"),r),s.apply(this,n)};Ember.StateManager=Ember.State.extend({init:function(){this._super(),t(this,"stateMeta",Ember.Map.create());var n=e(this,"initialState");!n&&e(this,"states.start")&&(n="start"),n&&this.transitionTo(n)},stateMetaFor:function(t){var n=e(this,"stateMeta"),r=n.get(t);return r||(r={},n.set(t,r)),r},setStateMeta:function(e,n,r){return t(this.stateMetaFor(e),n,r)},getStateMeta:function(t,n){return e(this.stateMetaFor(t),n)},currentState:null,currentPath:Ember.computed.alias("currentState.path"),transitionEvent:"setup",errorOnUnhandledEvent:!0,send:function(e){var t=[].slice.call(arguments,1);return o.call(this,e,t,!1)},unhandledEvent:function(t,n){if(e(this,"errorOnUnhandledEvent"))throw new Ember.Error(this.toString()+" could not respond to event "+n+" in state "+e(this,"currentState.path")+".")},getStateByPath:function(t,n){var r=n.split("."),i=t;for(var s=0,o=r.length;s<o;s++){i=e(e(i,"states"),r[s]);if(!i)break}return i},findStateByPath:function(t,n){var r;while(!r&&t)r=this.getStateByPath(t,n),t=e(t,"parentState");return r},getStatesInPath:function(t,n){if(!n||n==="")return undefined;var r=n.split("."),i=[],s,o;for(var u=0,a=r.length;u<a;u++){s=e(t,"states");if(!s)return undefined;o=e(s,r[u]);if(!o)return undefined;t=o,i.push(o)}return i},goToState:function(){return this.transitionTo.apply(this,arguments)},transitionTo:function(t,n){if(Ember.isEmpty(t))return;var r=n?Array.prototype.slice.call(arguments,1):[],s=e(this,"currentState")||this,o=this.contextFreeTransition(s,t),u=(new i(o)).normalize(this,r);this.enterState(u),this.triggerSetupContext(u)},contextFreeTransition:function(t,n){var r=t.pathsCache[n];if(r)return r;var i=this.getStatesInPath(t,n),s=[],o=t;while(o&&!i){s.unshift(o),o=e(o,"parentState");if(!o){i=this.getStatesInPath(this,n);if(!i)return}i=this.getStatesInPath(o,n)}while(i.length>0&&i[0]===s[0])o=i.shift(),s.shift();var u=t.pathsCache[n]={exitStates:s,enterStates:i,resolveState:o};return u},triggerSetupContext:function(t){var n=t.contexts,i=t.enterStates.length-n.length,s=t.enterStates,o=e(this,"transitionEvent");r.call(s,function(e,t){e.trigger(o,this,n[t-i])},this)},getState:function(t){var n=e(this,t),r=e(this,"parentState");if(n)return n;if(r)return r.getState(t)},enterState:function(n){var i=this.enableLogging,s=n.exitStates.slice(0).reverse();r.call(s,function(e){e.trigger("exit",this)},this),r.call(n.enterStates,function(t){i&&Ember.Logger.log("STATEMANAGER: Entering "+e(t,"path")),t.trigger("enter",this)},this),t(this,"currentState",n.finalState)}})}(),function(){}()})(),typeof location!="undefined"&&(location.hostname==="localhost"||location.hostname==="127.0.0.1")&&console.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. If you want full error messages please use the non-minified build provided on the Ember website.");
|
15
|
+
(function(){var e,t;(function(){var n={},r={};e=function(e,t,r){n[e]={deps:t,callback:r}},t=function(e){if(r[e])return r[e];r[e]={};var i=n[e],s=i.deps,o=i.callback,u=[],a;for(var f=0,l=s.length;f<l;f++)s[f]==="exports"?u.push(a={}):u.push(t(s[f]));var c=o.apply(this,u);return r[e]=a||c}})(),function(){function r(t){if(e.console&&e.console[t])return e.console[t].apply?function(){e.console[t].apply(e.console,arguments)}:function(){var n=Array.prototype.join.call(arguments,", ");e.console[t](n)}}"undefined"==typeof Ember&&(Ember={});var e=Ember.imports=Ember.imports||this,t=Ember.exports=Ember.exports||this,n=Ember.lookup=Ember.lookup||this;t.Em=t.Ember=Em=Ember,Ember.isNamespace=!0,Ember.toString=function(){return"Ember"},Ember.VERSION="1.0.0-rc.2",Ember.ENV=Ember.ENV||("undefined"==typeof ENV?{}:ENV),Ember.config=Ember.config||{},Ember.EXTEND_PROTOTYPES=Ember.ENV.EXTEND_PROTOTYPES,typeof Ember.EXTEND_PROTOTYPES=="undefined"&&(Ember.EXTEND_PROTOTYPES=!0),Ember.LOG_STACKTRACE_ON_DEPRECATION=Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION!==!1,Ember.SHIM_ES5=Ember.ENV.SHIM_ES5===!1?!1:Ember.EXTEND_PROTOTYPES,Ember.LOG_VERSION=Ember.ENV.LOG_VERSION===!1?!1:!0,Ember.K=function(){return this},"undefined"==typeof Ember.assert&&(Ember.assert=Ember.K),"undefined"==typeof Ember.warn&&(Ember.warn=Ember.K),"undefined"==typeof Ember.debug&&(Ember.debug=Ember.K),"undefined"==typeof Ember.deprecate&&(Ember.deprecate=Ember.K),"undefined"==typeof Ember.deprecateFunc&&(Ember.deprecateFunc=function(e,t){return t}),Ember.uuid=0,Ember.Logger={log:r("log")||Ember.K,warn:r("warn")||Ember.K,error:r("error")||Ember.K,info:r("info")||Ember.K,debug:r("debug")||r("info")||Ember.K},Ember.onerror=null,Ember.handleErrors=function(e,t){if("function"!=typeof Ember.onerror)return e.call(t||this);try{return e.call(t||this)}catch(n){Ember.onerror(n)}},Ember.merge=function(e,t){for(var n in t){if(!t.hasOwnProperty(n))continue;e[n]=t[n]}return e},Ember.isNone=function(e){return e===null||e===undefined},Ember.none=Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.",Ember.isNone),Ember.isEmpty=function(e){return e===null||e===undefined||e.length===0&&typeof e!="function"||typeof e=="object"&&Ember.get(e,"length")===0},Ember.empty=Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.",Ember.isEmpty)}(),function(){var e=Ember.platform={};Ember.create=Object.create;if(!Ember.create||Ember.ENV.STUB_OBJECT_CREATE){var t=function(){};Ember.create=function(e,n){t.prototype=e,e=new t;if(n){t.prototype=e;for(var r in n)t.prototype[r]=n[r].value;e=new t}return t.prototype=null,e},Ember.create.isSimulated=!0}var n=Object.defineProperty,r,i;if(n)try{n({},"a",{get:function(){}})}catch(s){n=null}n&&(r=function(){var e={};return n(e,"a",{configurable:!0,enumerable:!0,get:function(){},set:function(){}}),n(e,"a",{configurable:!0,enumerable:!0,writable:!0,value:!0}),e.a===!0}(),i=function(){try{return n(document.createElement("div"),"definePropertyOnDOM",{}),!0}catch(e){}return!1}(),r?i||(n=function(e,t,n){var r;return typeof Node=="object"?r=e instanceof Node:r=typeof e=="object"&&typeof e.nodeType=="number"&&typeof e.nodeName=="string",r?e[t]=n.value:Object.defineProperty(e,t,n)}):n=null),e.defineProperty=n,e.hasPropertyAccessors=!0,e.defineProperty||(e.hasPropertyAccessors=!1,e.defineProperty=function(e,t,n){n.get||(e[t]=n.value)},e.defineProperty.isSimulated=!0),Ember.ENV.MANDATORY_SETTER&&!e.hasPropertyAccessors&&(Ember.ENV.MANDATORY_SETTER=!1)}(),function(){var e=Ember.EnumerableUtils={map:function(e,t,n){return e.map?e.map.call(e,t,n):Array.prototype.map.call(e,t,n)},forEach:function(e,t,n){return e.forEach?e.forEach.call(e,t,n):Array.prototype.forEach.call(e,t,n)},indexOf:function(e,t,n){return e.indexOf?e.indexOf.call(e,t,n):Array.prototype.indexOf.call(e,t,n)},indexesOf:function(t,n){return n===undefined?[]:e.map(n,function(n){return e.indexOf(t,n)})},addObject:function(t,n){var r=e.indexOf(t,n);r===-1&&t.push(n)},removeObject:function(t,n){var r=e.indexOf(t,n);r!==-1&&t.splice(r,1)},replace:function(e,t,n,r){if(e.replace)return e.replace(t,n,r);var i=Array.prototype.concat.apply([t,n],r);return e.splice.apply(e,i)},intersection:function(e,t){var n=[];return e.forEach(function(e){t.indexOf(e)>=0&&n.push(e)}),n}}}(),function(){var e=function(e){return e&&Function.prototype.toString.call(e).indexOf("[native code]")>-1},t=e(Array.prototype.map)?Array.prototype.map:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=new Array(n),i=arguments[1];for(var s=0;s<n;s++)s in t&&(r[s]=e.call(i,t[s],s,t));return r},n=e(Array.prototype.forEach)?Array.prototype.forEach:function(e){if(this===void 0||this===null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")throw new TypeError;var r=arguments[1];for(var i=0;i<n;i++)i in t&&e.call(r,t[i],i,t)},r=e(Array.prototype.indexOf)?Array.prototype.indexOf:function(e,t){t===null||t===undefined?t=0:t<0&&(t=Math.max(0,this.length+t));for(var n=t,r=this.length;n<r;n++)if(this[n]===e)return n;return-1};Ember.ArrayPolyfills={map:t,forEach:n,indexOf:r},Ember.SHIM_ES5&&(Array.prototype.map||(Array.prototype.map=t),Array.prototype.forEach||(Array.prototype.forEach=n),Array.prototype.indexOf||(Array.prototype.indexOf=r))}(),function(){function h(e){this.descs={},this.watching={},this.cache={},this.source=e}function p(e,t){return!!e&&typeof e[t]=="function"}var e=Ember.platform.defineProperty,t=Ember.create,n="__ember"+ +(new Date),r=0,i=[],s={},o=Ember.ENV.MANDATORY_SETTER;Ember.GUID_KEY=n;var u={writable:!1,configurable:!1,enumerable:!1,value:null};Ember.generateGuid=function(i,s){s||(s="ember");var o=s+r++;return i&&(u.value=o,e(i,n,u)),o},Ember.guidFor=function(o){if(o===undefined)return"(undefined)";if(o===null)return"(null)";var a,f,l=typeof o;switch(l){case"number":return f=i[o],f||(f=i[o]="nu"+o),f;case"string":return f=s[o],f||(f=s[o]="st"+r++),f;case"boolean":return o?"(true)":"(false)";default:if(o[n])return o[n];if(o===Object)return"(Object)";if(o===Array)return"(Array)";return f="ember"+r++,u.value=f,e(o,n,u),f}};var a={writable:!0,configurable:!1,enumerable:!1,value:null},f=Ember.GUID_KEY+"_meta";Ember.META_KEY=f;var l={descs:{},watching:{}};o&&(l.values={}),Ember.EMPTY_META=l,Object.freeze&&Object.freeze(l);var c=Ember.platform.defineProperty.isSimulated;c&&(h.prototype.__preventPlainObject__=!0,h.prototype.toJSON=function(){}),Ember.meta=function(r,i){var s=r[f];return i===!1?s||l:(s?s.source!==r&&(c||e(r,f,a),s=t(s),s.descs=t(s.descs),s.watching=t(s.watching),s.cache={},s.source=r,o&&(s.values=t(s.values)),r[f]=s):(c||e(r,f,a),s=new h(r),o&&(s.values={}),r[f]=s,s.descs.constructor=null),s)},Ember.getMeta=function(t,n){var r=Ember.meta(t,!1);return r[n]},Ember.setMeta=function(t,n,r){var i=Ember.meta(t,!0);return i[n]=r,r},Ember.metaPath=function(n,r,i){var s=Ember.meta(n,i),o,u;for(var a=0,f=r.length;a<f;a++){o=r[a],u=s[o];if(!u){if(!i)return undefined;u=s[o]={__ember_source__:n}}else if(u.__ember_source__!==n){if(!i)return undefined;u=s[o]=t(u),u.__ember_source__=n}s=u}return u},Ember.wrap=function(e,t){function n(){}function r(){var r,i=this._super;return this._super=t||n,r=e.apply(this,arguments),this._super=i,r}return r.wrappedFunction=e,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r},Ember.isArray=function(e){return!e||e.setInterval?!1:Array.isArray&&Array.isArray(e)?!0:Ember.Array&&Ember.Array.detect(e)?!0:e.length!==undefined&&"object"==typeof e?!0:!1},Ember.makeArray=function(e){return e===null||e===undefined?[]:Ember.isArray(e)?e:[e]},Ember.canInvoke=p,Ember.tryInvoke=function(e,t,n){if(p(e,t))return e[t].apply(e,n||[])};var d=function(){var e=0;try{try{}finally{throw e++,new Error("needsFinallyFixTest")}}catch(t){}return e!==1}();d?Ember.tryFinally=function(e,t,n){var r,i,s;n=n||this;try{r=e.call(n)}finally{try{i=t.call(n)}catch(o){s=o}}if(s)throw s;return i===undefined?r:i}:Ember.tryFinally=function(e,t,n){var r,i;n=n||this;try{r=e.call(n)}finally{i=t.call(n)}return i===undefined?r:i},d?Ember.tryCatchFinally=function(e,t,n,r){var i,s,o,u;r=r||this;try{i=e.call(r)}catch(a){i=t.call(r,a)}finally{try{s=n.call(r)}catch(f){o=f}}if(o)throw o;return s===undefined?i:s}:Ember.tryCatchFinally=function(e,t,n,r){var i,s;r=r||this;try{i=e.call(r)}catch(o){i=t.call(r,o)}finally{s=n.call(r)}return s===undefined?i:s};var v={},m="Boolean Number String Function Array Date RegExp Object".split(" ");Ember.ArrayPolyfills.forEach.call(m,function(e){v["[object "+e+"]"]=e.toLowerCase()});var g=Object.prototype.toString;Ember.typeOf=function(e){var t;return t=e===null||e===undefined?String(e):v[g.call(e)]||"object",t==="function"?Ember.Object&&Ember.Object.detect(e)&&(t="class"):t==="object"&&(e instanceof Error?t="error":Ember.Object&&e instanceof Ember.Object?t="instance":t="object"),t}}(),function(){Ember.Instrumentation={};var e=[],t={},n=function(n){var r=[],i;for(var s=0,o=e.length;s<o;s++)i=e[s],i.regex.test(n)&&r.push(i.object);return t[n]=r,r},r=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+(new Date)}}();Ember.Instrumentation.instrument=function(e,i,s,o){function d(){for(h=0,p=u.length;h<p;h++)c=u[h],l[h]=c.before(e,r(),i);return s.call(o)}function v(e){i=i||{},i.exception=e}function m(){for(h=0,p=u.length;h<p;h++)c=u[h],c.after(e,r(),i,l[h]);Ember.STRUCTURED_PROFILE&&console.timeEnd(a)}var u=t[e],a,f;Ember.STRUCTURED_PROFILE&&(a=e+": "+i.object,console.time(a)),u||(u=n(e));if(u.length===0)return f=s.call(o),Ember.STRUCTURED_PROFILE&&console.timeEnd(a),f;var l=[],c,h,p;return Ember.tryCatchFinally(d,v,m)},Ember.Instrumentation.subscribe=function(n,r){var i=n.split("."),s,o=[];for(var u=0,a=i.length;u<a;u++)s=i[u],s==="*"?o.push("[^\\.]*"):o.push(s);o=o.join("\\."),o+="(\\..*)?";var f={pattern:n,regex:new RegExp("^"+o+"$"),object:r};return e.push(f),t={},f},Ember.Instrumentation.unsubscribe=function(n){var r;for(var i=0,s=e.length;i<s;i++)e[i]===n&&(r=i);e.splice(r,1),t={}},Ember.Instrumentation.reset=function(){e=[],t={}},Ember.instrument=Ember.Instrumentation.instrument,Ember.subscribe=Ember.Instrumentation.subscribe}(),function(){var e=Ember.guidFor,t=Ember.ArrayPolyfills.indexOf,n=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},r=function(e,t){var r=e.keys.copy(),i=n(e.values);return t.keys=r,t.values=i,t},i=Ember.OrderedSet=function(){this.clear()};i.create=function(){return new i},i.prototype={clear:function(){this.presenceSet={},this.list=[]},add:function(t){var n=e(t),r=this.presenceSet,i=this.list;if(n in r)return;r[n]=!0,i.push(t)},remove:function(n){var r=e(n),i=this.presenceSet,s=this.list;delete i[r];var o=t.call(s,n);o>-1&&s.splice(o,1)},isEmpty:function(){return this.list.length===0},has:function(t){var n=e(t),r=this.presenceSet;return n in r},forEach:function(e,t){var n=this.list.slice();for(var r=0,i=n.length;r<i;r++)e.call(t,n[r])},toArray:function(){return this.list.slice()},copy:function(){var e=new i;return e.presenceSet=n(this.presenceSet),e.list=this.list.slice(),e}};var s=Ember.Map=function(){this.keys=Ember.OrderedSet.create(),this.values={}};s.create=function(){return new s},s.prototype={get:function(t){var n=this.values,r=e(t);return n[r]},set:function(t,n){var r=this.keys,i=this.values,s=e(t);r.add(t),i[s]=n},remove:function(t){var n=this.keys,r=this.values,i=e(t),s;return r.hasOwnProperty(i)?(n.remove(t),s=r[i],delete r[i],!0):!1},has:function(t){var n=this.values,r=e(t);return n.hasOwnProperty(r)},forEach:function(t,n){var r=this.keys,i=this.values;r.forEach(function(r){var s=e(r);t.call(n,r,i[s])})},copy:function(){return r(this,new s)}};var o=Ember.MapWithDefault=function(e){s.call(this),this.defaultValue=e.defaultValue};o.create=function(e){return e?new o(e):new s},o.prototype=Ember.create(s.prototype),o.prototype.get=function(e){var t=this.has(e);if(t)return s.prototype.get.call(this,e);var n=this.defaultValue(e);return this.set(e,n),n},o.prototype.copy=function(){return r(this,new o({defaultValue:this.defaultValue}))}}(),function(){function o(e){return e.match(s)[0]}function u(e,n){var s=i.test(n),u=!s&&r.test(n),a;if(!e||u)e=Ember.lookup;s&&(n=n.slice(5)),e===Ember.lookup&&(a=o(n),e=t(e,a),n=n.slice(a.length+1));if(!n||n.length===0)throw new Error("Invalid Path");return[e,n]}var e=Ember.META_KEY,t,n=Ember.ENV.MANDATORY_SETTER,r=/^([A-Z$]|([0-9][A-Z$])).*[\.\*]/,i=/^this[\.\*]/,s=/^([^\.\*]+)/;t=function(r,i){if(i==="")return r;!i&&"string"==typeof r&&(i=r,r=null);if(!r||i.indexOf(".")!==-1)return a(r,i);var s=r[e],o=s&&s.descs[i],u;return o?o.get(r,i):(n&&s&&s.watching[i]>0?u=s.values[i]:u=r[i],u!==undefined||"object"!=typeof r||i in r||"function"!=typeof r.unknownProperty?u:r.unknownProperty(i))},Ember.config.overrideAccessors&&(Ember.get=t,Ember.config.overrideAccessors(),t=Ember.get);var a=Ember._getPath=function(e,n){var r,s,o,a,f;if(e===null&&n.indexOf(".")===-1)return t(Ember.lookup,n);r=i.test(n);if(!e||r)o=u(e,n),e=o[0],n=o[1],o.length=0;s=n.split("."),f=s.length;for(a=0;e&&a<f;a++){e=t(e,s[a],!0);if(e&&e.isDestroyed)return undefined}return e};Ember.normalizeTuple=function(e,t){return u(e,t)},Ember.getWithDefault=function(e,n,r){var i=t(e,n);return i===undefined?r:i},Ember.get=t,Ember.getPath=Ember.deprecateFunc("getPath is deprecated since get now supports paths",Ember.get)}(),function(){function r(e,t,n){var r=-1;for(var i=0,s=e.length;i<s;i++)if(t===e[i][0]&&n===e[i][1]){r=i;break}return r}function i(n,r){var i=t(n,!0),s;return i.listeners||(i.listeners={}),i.hasOwnProperty("listeners")||(i.listeners=e(i.listeners)),s=i.listeners[r],s&&!i.listeners.hasOwnProperty(r)?s=i.listeners[r]=i.listeners[r].slice():s||(s=i.listeners[r]=[]),s}function s(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t];if(!o)return;for(var u=o.length-1;u>=0;u--){var a=o[u][0],f=o[u][1],l=o[u][2],c=o[u][3],h=r(i,a,f);h===-1&&i.push([a,f,l,c])}}function o(e,t,i){var s=e[n],o=s&&s.listeners&&s.listeners[t],u=[];if(!o)return;for(var a=o.length-1;a>=0;a--){var f=o[a][0],l=o[a][1],c=o[a][2],h=o[a][3],p=r(i,f,l);if(p!==-1)continue;i.push([f,l,c,h]),u.push([f,l,c,h])}return u}function u(e,t,n,s,o){!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s);if(a!==-1)return;u.push([n,s,o,undefined]),"function"==typeof e.didAddListener&&e.didAddListener(t,n,s)}function a(e,t,s,o){function u(n,s,o){var u=i(e,t),a=r(u,n,s);if(a===-1)return;u.splice(a,1),"function"==typeof e.didRemoveListener&&e.didRemoveListener(t,n,s)}!o&&"function"==typeof s&&(o=s,s=null);if(o)u(s,o);else{var a=e[n],f=a&&a.listeners&&a.listeners[t];if(!f)return;for(var l=f.length-1;l>=0;l--)u(f[l][0],f[l][1])}}function f(e,t,n,s,o){function l(){return o.call(n)}function c(){f&&(f[3]=undefined)}!s&&"function"==typeof n&&(s=n,n=null);var u=i(e,t),a=r(u,n,s),f;return a!==-1&&(f=u[a].slice(),f[3]=!0,u[a]=f),Ember.tryFinally(l,c)}function l(e,t,n,s,o){function d(){return o.call(n)}function v(){for(c=0,h=u.length;c<h;c++)u[c][3]=undefined}!s&&"function"==typeof n&&(s=n,n=null);var u=[],a,f,l,c,h;for(c=0,h=t.length;c<h;c++){a=t[c],f=i(e,a);var p=r(f,n,s);p!==-1&&(l=f[p].slice(),l[3]=!0,f[p]=l,u.push(l))}return Ember.tryFinally(d,v)}function c(e){var t=e[n].listeners,r=[];if(t)for(var i in t)t[i]&&r.push(i);return r}function h(e,t,r,i){e!==Ember&&"function"==typeof e.sendEvent&&e.sendEvent(t,r);if(!i){var s=e[n];i=s&&s.listeners&&s.listeners[t]}if(!i)return;for(var o=i.length-1;o>=0;o--){if(!i[o]||i[o][3]===!0)continue;var u=i[o][0],f=i[o][1],l=i[o][2];l&&a(e,t,u,f),u||(u=e),"string"==typeof f&&(f=u[f]),r?f.apply(u,r):f.call(u)}return!0}function p(e,t){var r=e[n],i=r&&r.listeners&&r.listeners[t];return!!i&&!!i.length}function d(e,t){var r=[],i=e[n],s=i&&i.listeners&&i.listeners[t];if(!s)return r;for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];r.push([a,f])}return r}var e=Ember.create,t=Ember.meta,n=Ember.META_KEY;Ember.addListener=u,Ember.removeListener=a,Ember._suspendListener=f,Ember._suspendListeners=l,Ember.sendEvent=h,Ember.hasListeners=p,Ember.watchedEvents=c,Ember.listenersFor=d,Ember.listenersDiff=o,Ember.listenersUnion=s}(),function(){var e=Ember.guidFor,t=Ember.sendEvent,n=Ember._ObserverSet=function(){this.clear()};n.prototype.add=function(t,n,r){var i=this.observerSet,s=this.observers,o=e(t),u=i[o],a;return u||(i[o]=u={}),a=u[n],a===undefined&&(a=s.push({sender:t,keyName:n,eventName:r,listeners:[]})-1,u[n]=a),s[a].listeners},n.prototype.flush=function(){var e=this.observers,n,r,i,s;this.clear();for(n=0,r=e.length;n<r;++n){i=e[n],s=i.sender;if(s.isDestroying||s.isDestroyed)continue;t(s,i.eventName,[s,i.keyName],i.listeners)}},n.prototype.clear=function(){this.observerSet={},this.observers=[]}}(),function(){function d(e,t,n){if(e.isDestroying)return;var r=h,i=!r;i&&(r=h={}),m(l,e,t,r,n),i&&(h=null)}function v(e,t,n){if(e.isDestroying)return;var r=p,i=!r;i&&(r=p={}),m(c,e,t,r,n),i&&(p=null)}function m(e,n,r,i,s){var o=t(n);i[o]||(i[o]={});if(i[o][r])return;i[o][r]=!0;var u=s.deps;u=u&&u[r];if(u)for(var a in u){var f=s.descs[a];if(f&&f._suspended===n)continue;e(n,a)}}var e=Ember.meta,t=Ember.guidFor,n=Ember.tryFinally,r=Ember.sendEvent,i=Ember.listenersUnion,s=Ember.listenersDiff,o=Ember._ObserverSet,u=new o,a=new o,f=0,l=Ember.propertyWillChange=function(t,n){var r=e(t,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(!i)return;if(s===t)return;o&&o.willChange&&o.willChange(t,n),d(t,n,r),g(t,n,r),S(t,n)},c=Ember.propertyDidChange=function(t,n){var r=e(t,!1),i=r.watching[n]>0||n==="length",s=r.proto,o=r.descs[n];if(s===t)return;o&&o.didChange&&o.didChange(t,n);if(!i&&n!=="length")return;v(t,n,r),y(t,n,r),x(t,n)},h,p,g=function(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=0,o=i.length;s<o;s++)i[s].willChange(r)},y=function(e,t,n,r){if(!n.hasOwnProperty("chainWatchers"))return;var i=n.chainWatchers;i=i[t];if(!i)return;for(var s=i.length-1;s>=0;s--)i[s].didChange(r)};Ember.overrideChains=function(e,t,n){y(e,t,n,!0)};var b=Ember.beginPropertyChanges=function(){f++},w=Ember.endPropertyChanges=function(){f--,f<=0&&(u.clear(),a.flush())},E=Ember.changeProperties=function(e,t){b(),n(e,w,t)},S=function(e,t){if(e.isDestroying)return;var n=t+":before",i,o;f?(i=u.add(e,t,n),o=s(e,n,i),r(e,n,[e,t],o)):r(e,n,[e,t])},x=function(e,t){if(e.isDestroying)return;var n=t+":change",s;f?(s=a.add(e,t,n),i(e,n,s)):r(e,n,[e,t])}}(),function(){function u(e,t,n,r){var i;i=t.slice(t.lastIndexOf(".")+1),t=t.slice(0,t.length-(i.length+1)),t!=="this"&&(e=s(e,t));if(!i||i.length===0)throw new Error("You passed an empty path");if(!e){if(r)return;throw new Error("Object in path "+t+" could not be found or was destroyed.")}return o(e,i,n)}var e=Ember.META_KEY,t=Ember.ENV.MANDATORY_SETTER,n=/^([A-Z$]|([0-9][A-Z$]))/,r=Ember.propertyWillChange,i=Ember.propertyDidChange,s=Ember._getPath,o=function(r,i,s,o){typeof r=="string"&&(s=i,i=r,r=null);if(!r||i.indexOf(".")!==-1)return u(r,i,s,o);var a=r[e],f=a&&a.descs[i],l,c;return f?f.set(r,i,s):(l="object"==typeof r&&!(i in r),l&&"function"==typeof r.setUnknownProperty?r.setUnknownProperty(i,s):a&&a.watching[i]>0?(t?c=a.values[i]:c=r[i],s!==c&&(Ember.propertyWillChange(r,i),t?c!==undefined||i in r?a.values[i]=s:Ember.defineProperty(r,i,null,s):r[i]=s,Ember.propertyDidChange(r,i))):r[i]=s),s};Ember.config.overrideAccessors&&(Ember.set=o,Ember.config.overrideAccessors(),o=Ember.set),Ember.set=o,Ember.setPath=Ember.deprecateFunc("setPath is deprecated since set now supports paths",Ember.set),Ember.trySet=function(e,t,n){return o(e,t,n,!0)},Ember.trySetPath=Ember.deprecateFunc("trySetPath has been renamed to trySet",Ember.trySet)}(),function(){var e=Ember.META_KEY,t=Ember.meta,n=Ember.platform.defineProperty,r=Ember.ENV.MANDATORY_SETTER,i=Ember.Descriptor=function(){},s=Ember.MANDATORY_SETTER_FUNCTION=function(e){},o=Ember.DEFAULT_GETTER_FUNCTION=function(t){return function(){var n=this[e];return n&&n.values[t]}};Ember.defineProperty=function(e,i,u,a,f){var l,c,h,p;return f||(f=t(e)),l=f.descs,c=f.descs[i],h=f.watching[i]>0,c instanceof Ember.Descriptor&&c.teardown(e,i),u instanceof Ember.Descriptor?(p=u,l[i]=u,r&&h?n(e,i,{configurable:!0,enumerable:!0,writable:!0,value:undefined}):e[i]=undefined,u.setup(e,i)):(l[i]=undefined,u==null?(p=a,r&&h?(f.values[i]=a,n(e,i,{configurable:!0,enumerable:!0,set:s,get:o(i)})):e[i]=a):(p=u,n(e,i,u))),h&&Ember.overrideChains(e,i,f),e.didDefineProperty&&e.didDefineProperty(e,i,p),this}}(),function(){var e=Ember.changeProperties,t=Ember.set;Ember.setProperties=function(n,r){return e(function(){for(var e in r)r.hasOwnProperty(e)&&t(n,e,r[e])}),n}}(),function(){var e=Ember.meta,t=Ember.typeOf,n=Ember.ENV.MANDATORY_SETTER,r=Ember.platform.defineProperty;Ember.watchKey=function(i,s){if(s==="length"&&t(i)==="array")return;var o=e(i),u=o.watching,a;u[s]?u[s]=(u[s]||0)+1:(u[s]=1,a=o.descs[s],a&&a.willWatch&&a.willWatch(i,s),"function"==typeof i.willWatchProperty&&i.willWatchProperty(s),n&&s in i&&(o.values[s]=i[s],r(i,s,{configurable:!0,enumerable:!0,set:Ember.MANDATORY_SETTER_FUNCTION,get:Ember.DEFAULT_GETTER_FUNCTION(s)})))},Ember.unwatchKey=function(t,i){var s=e(t),o=s.watching,u;o[i]===1?(o[i]=0,u=s.descs[i],u&&u.didUnwatch&&u.didUnwatch(t,i),"function"==typeof t.didUnwatchProperty&&t.didUnwatchProperty(i),n&&i in t&&(r(t,i,{configurable:!0,enumerable:!0,writable:!0,value:s.values[i]}),delete s.values[i])):o[i]>1&&o[i]--}}(),function(){function l(e){return e.match(f)[0]}function h(t,n,r){if(!t||"object"!=typeof t)return;var i=e(t),o=i.chainWatchers;i.hasOwnProperty("chainWatchers")||(o=i.chainWatchers={}),o[n]||(o[n]=[]),o[n].push(r),s(t,n)}function d(t){return e(t,!1).proto===t}var e=Ember.meta,t=Ember.get,n=Ember.normalizeTuple,r=Ember.ArrayPolyfills.forEach,i=Ember.warn,s=Ember.watchKey,o=Ember.unwatchKey,u=Ember.propertyWillChange,a=Ember.propertyDidChange,f=/^([^\.\*]+)/,c=[];Ember.flushPendingChains=function(){if(c.length===0)return;var e=c;c=[],r.call(e,function(e){e[0].add(e[1])}),i("Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos",c.length===0)};var p=Ember.removeChainWatcher=function(t,n,r){if(!t||"object"!=typeof t)return;var i=e(t,!1);if(!i.hasOwnProperty("chainWatchers"))return;var s=i.chainWatchers;if(s[n]){s=s[n];for(var u=0,a=s.length;u<a;u++)s[u]===r&&s.splice(u,1)}o(t,n)},v=Ember._ChainNode=function(e,t,n){var r;this._parent=e,this._key=t,this._watching=n===undefined,this._value=n,this._paths={},this._watching&&(this._object=e.value(),this._object&&h(this._object,this._key,this)),this._parent&&this._parent._key==="@each"&&this.value()},m=v.prototype;m.value=function(){if(this._value===undefined&&this._watching){var e=this._parent.value();this._value=e&&!d(e)?t(e,this._key):undefined}return this._value},m.destroy=function(){if(this._watching){var e=this._object;e&&p(e,this._key,this),this._watching=!1}},m.copy=function(e){var t=new v(null,null,e),n=this._paths,r;for(r in n){if(n[r]<=0)continue;t.add(r)}return t},m.add=function(e){var t,r,i,s,o;o=this._paths,o[e]=(o[e]||0)+1,t=this.value(),r=n(t,e);if(r[0]&&r[0]===t)e=r[1],i=l(e),e=e.slice(i.length+1);else{if(!r[0]){c.push([this,e]),r.length=0;return}s=r[0],i=e.slice(0,0-(r[1].length+1)),e=r[1]}r.length=0,this.chain(i,e,s)},m.remove=function(e){var t,r,i,s,o;o=this._paths,o[e]>0&&o[e]--,t=this.value(),r=n(t,e),r[0]===t?(e=r[1],i=l(e),e=e.slice(i.length+1)):(s=r[0],i=e.slice(0,0-(r[1].length+1)),e=r[1]),r.length=0,this.unchain(i,e)},m.count=0,m.chain=function(e,t,n){var r=this._chains,i;r||(r=this._chains={}),i=r[e],i||(i=r[e]=new v(this,e,n)),i.count++,t&&t.length>0&&(e=l(t),t=t.slice(e.length+1),i.chain(e,t))},m.unchain=function(e,t){var n=this._chains,r=n[e];t&&t.length>1&&(e=l(t),t=t.slice(e.length+1),r.unchain(e,t)),r.count--,r.count<=0&&(delete n[r._key],r.destroy())},m.willChange=function(){var e=this._chains;if(e)for(var t in e){if(!e.hasOwnProperty(t))continue;e[t].willChange()}this._parent&&this._parent.chainWillChange(this,this._key,1)},m.chainWillChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainWillChange(this,t,n+1):(n>1&&u(this.value(),t),t="this."+t,this._paths[t]>0&&u(this.value(),t))},m.chainDidChange=function(e,t,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.chainDidChange(this,t,n+1):(n>1&&a(this.value(),t),t="this."+t,this._paths[t]>0&&a(this.value(),t))},m.didChange=function(e){if(this._watching){var t=this._parent.value();t!==this._object&&(p(this._object,this._key,this),this._object=t,h(t,this._key,this)),this._value=undefined,this._parent&&this._parent._key==="@each"&&this.value()}var n=this._chains;if(n)for(var r in n){if(!n.hasOwnProperty(r))continue;n[r].didChange(e)}if(e)return;this._parent&&this._parent.chainDidChange(this,this._key,1)},Ember.finishChains=function(t){var n=e(t,!1),r=n.chains;r&&(r.value()!==t&&(n.chains=r=r.copy(t)),r.didChange(!0))}}(),function(){function r(t){var r=e(t),i=r.chains;return i?i.value()!==t&&(i=r.chains=i.copy(t)):i=r.chains=new n(null,null,t),i}var e=Ember.meta,t=Ember.typeOf,n=Ember._ChainNode;Ember.watchPath=function(n,i){if(i==="length"&&t(n)==="array")return;var s=e(n),o=s.watching;o[i]?o[i]=(o[i]||0)+1:(o[i]=1,r(n).add(i))},Ember.unwatchPath=function(t,n){var i=e(t),s=i.watching,o;s[n]===1?(s[n]=0,r(t).remove(n)):s[n]>1&&s[n]--}}(),function(){function c(e){return e==="*"||!l.test(e)}var e=Ember.meta,t=Ember.GUID_KEY,n=Ember.META_KEY,r=Ember.removeChainWatcher,i=Ember.watchKey,s=Ember.unwatchKey,o=Ember.watchPath,u=Ember.unwatchPath,a=Ember.typeOf,f=Ember.generateGuid,l=/[\.\*]/;Ember.watch=function(e,t){if(t==="length"&&a(e)==="array")return;c(t)?i(e,t):o(e,t)},Ember.isWatching=function(t,r){var i=t[n];return(i&&i.watching[r])>0},Ember.watch.flushPending=Ember.flushPendingChains,Ember.unwatch=function(e,t){if(t==="length"&&a(e)==="array")return;c(t)?s(e,t):u(e,t)},Ember.rewatch=function(n){var r=e(n,!1),i=r.chains;t in n&&!n.hasOwnProperty(t)&&f(n,"ember"),i&&i.value()!==n&&(r.chains=i.copy(n))};var h=[];Ember.destroy=function(e){var t=e[n],i,s,o,u;if(t){e[n]=null,i=t.chains;if(i){h.push(i);while(h.length>0){i=h.pop(),s=i._chains;if(s)for(o in s)s.hasOwnProperty(o)&&h.push(s[o]);i._watching&&(u=i._object,u&&r(u,i._key,i))}}}}}(),function(){function a(e,t,n){var r=t[n];return r?t.hasOwnProperty(n)||(r=t[n]=i(r)):r=t[n]={},r}function f(e,t){return a(e,t,"deps")}function l(e,t,n,r){var i=e._dependentKeys,s,u,l,c,h;if(!i)return;s=f(t,r);for(u=0,l=i.length;u<l;u++)c=i[u],h=a(t,s,c),h[n]=(h[n]||0)+1,o(t,c)}function c(e,t,n,r){var i=e._dependentKeys,s,o,l,c,h;if(!i)return;s=f(t,r);for(o=0,l=i.length;o<l;o++)c=i[o],h=a(t,s,c),h[n]=(h[n]||0)-1,u(t,c)}function h(e,t){this.func=e,this._cacheable=t&&t.cacheable!==undefined?t.cacheable:!0,this._dependentKeys=t&&t.dependentKeys,this._readOnly=t&&(t.readOnly!==undefined||!!t.readOnly)}function d(t,n){var r={};for(var i=0;i<n.length;i++)r[n[i]]=e(t,n[i]);return r}function v(e,t){Ember.computed[e]=function(e){var n=r.call(arguments);return Ember.computed(e,function(){return t.apply(this,n)})}}function m(e,t){Ember.computed[e]=function(){var e=r.call(arguments),n=Ember.computed(function(){return t.apply(this,[d(this,e)])});return n.property.apply(n,e)}}var e=Ember.get,t=Ember.set,n=Ember.meta,r=[].slice,i=Ember.create,s=Ember.META_KEY,o=Ember.watch,u=Ember.unwatch;Ember.ComputedProperty=h,h.prototype=new Ember.Descriptor;var p=h.prototype;p.cacheable=function(e){return this._cacheable=e!==!1,this},p.volatile=function(){return this.cacheable(!1)},p.readOnly=function(e){return this._readOnly=e===undefined||!!e,this},p.property=function(){var e=[];for(var t=0,n=arguments.length;t<n;t++)e.push(arguments[t]);return this._dependentKeys=e,this},p.meta=function(e){return arguments.length===0?this._meta||{}:(this._meta=e,this)},p.willWatch=function(e,t){var n=e[s];t in n.cache||l(this,e,t,n)},p.didUnwatch=function(e,t){var n=e[s];t in n.cache||c(this,e,t,n)},p.didChange=function(e,t){if(this._cacheable&&this._suspended!==e){var r=n(e);t in r.cache&&(delete r.cache[t],r.watching[t]||c(this,e,t,r))}},p.get=function(e,t){var r,i,s;if(this._cacheable){s=n(e),i=s.cache;if(t in i)return i[t];r=i[t]=this.func.call(e,t),s.watching[t]||l(this,e,t,s)}else r=this.func.call(e,t);return r},p.set=function(e,t,r){var i=this._cacheable,s=this.func,o=n(e,i),u=o.watching[t],a=this._suspended,f=!1,c=o.cache,h,p;if(this._readOnly)throw new Error("Cannot Set: "+t+" on: "+e.toString());this._suspended=e;try{i&&c.hasOwnProperty(t)&&(h=c[t],f=!0),s.wrappedFunction&&(s=s.wrappedFunction);if(s.length===3)p=s.call(e,t,r,h);else{if(s.length!==2){Ember.defineProperty(e,t,null,h),Ember.set(e,t,r);return}p=s.call(e,t,r)}if(f&&h===p)return;u&&Ember.propertyWillChange(e,t),f&&delete c[t],i&&(!u&&!f&&l(this,e,t,o),c[t]=p),u&&Ember.propertyDidChange(e,t)}finally{this._suspended=a}return p},p.setup=function(e,t){var r=e[s];r&&r.watching[t]&&l(this,e,t,n(e))},p.teardown=function(e,t){var r=n(e);return(r.watching[t]||t in r.cache)&&c(this,e,t,r),this._cacheable&&delete r.cache[t],null},Ember.computed=function(e){var t;arguments.length>1&&(t=r.call(arguments,0,-1),e=r.call(arguments,-1)[0]);if(typeof e!="function")throw new Error("Computed Property declared without a property function");var n=new h(e);return t&&n.property.apply(n,t),n},Ember.cacheFor=function(t,r){var i=n(t,!1).cache;if(i&&r in i)return i[r]},v("empty",function(t){return Ember.isEmpty(e(this,t))}),v("notEmpty",function(t){return!Ember.isEmpty(e(this,t))}),v("none",function(t){return Ember.isNone(e(this,t))}),v("not",function(t){return!e(this,t)}),v("bool",function(t){return!!e(this,t)}),v("match",function(t,n){var r=e(this,t);return typeof r=="string"?!!r.match(n):!1}),v("equal",function(t,n){return e(this,t)===n}),v("gt",function(t,n){return e(this,t)>n}),v("gte",function(t,n){return e(this,t)>=n}),v("lt",function(t,n){return e(this,t)<n}),v("lte",function(t,n){return e(this,t)<=n}),m("and",function(e){for(var t in e)if(e.hasOwnProperty(t)&&!e[t])return!1;return!0}),m("or",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1}),m("any",function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return e[t];return null}),m("map",function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&(Ember.isNone(e[n])?t.push(null):t.push(e[n]));return t}),Ember.computed.alias=function(n){return Ember.computed(n,function(r,i){return arguments.length>1?(t(this,n,i),i):e(this,n)})},Ember.computed.defaultTo=function(t){return Ember.computed(function(n,r,i){var s;return arguments.length===1?i!=null?i:e(this,t):r!=null?r:e(this,t)})}}(),function(){function r(t){return t+e}function i(e){return e+t}var e=":change",t=":before",n=Ember.guidFor;Ember.addObserver=function(e,t,n,i){return Ember.addListener(e,r(t),n,i),Ember.watch(e,t),this},Ember.observersFor=function(e,t){return Ember.listenersFor(e,r(t))},Ember.removeObserver=function(e,t,n,i){return Ember.unwatch(e,t),Ember.removeListener(e,r(t),n,i),this},Ember.addBeforeObserver=function(e,t,n,r){return Ember.addListener(e,i(t),n,r),Ember.watch(e,t),this},Ember._suspendBeforeObserver=function(e,t,n,r,s){return Ember._suspendListener(e,i(t),n,r,s)},Ember._suspendObserver=function(e,t,n,i,s){return Ember._suspendListener(e,r(t),n,i,s)};var s=Ember.ArrayPolyfills.map;Ember._suspendBeforeObservers=function(e,t,n,r,o){var u=s.call(t,i);return Ember._suspendListeners(e,u,n,r,o)},Ember._suspendObservers=function(e,t,n,i,o){var u=s.call(t,r);return Ember._suspendListeners(e,u,n,i,o)},Ember.beforeObserversFor=function(e,t){return Ember.listenersFor(e,i(t))},Ember.removeBeforeObserver=function(e,t,n,r){return Ember.unwatch(e,t),Ember.removeListener(e,i(t),n,r),this}}(),function(){function n(t,n,r,i){return n===undefined&&(n=t,t=undefined),"string"==typeof n&&(n=t[n]),r&&i>0&&(r=r.length>i?e.call(r,i):null),Ember.handleErrors(function(){return n.apply(t||this,r||[])},this)}function u(){o=null,s.currentRunLoop&&s.end()}function c(){f=null,s(function(){var e=+(new Date),t=-1;for(var r in a){if(!a.hasOwnProperty(r))continue;var i=a[r];if(i&&i.expires)if(e>=i.expires)delete a[r],n(i.target,i.method,i.args,2);else if(t<0||i.expires<t)t=i.expires}t>0&&(f=setTimeout(c,t-e),l=t)})}function h(e,t){t[this.tguid]&&delete t[this.tguid][this.mguid],a[e]&&n(this.target,this.method,this.args),delete a[e]}function p(e,t,n,r){var i=Ember.guidFor(t),o=Ember.guidFor(n),u=s.autorun().onceTimers,f=u[i]&&u[i][o],l;return f&&a[f]?a[f].args=r:(l={target:t,method:n,args:r,tguid:i,mguid:o},f=Ember.guidFor(l),a[f]=l,u[i]||(u[i]={}),u[i][o]=f,s.schedule(e,l,h,f,u)),f}var e=[].slice,t=Ember.ArrayPolyfills
|
16
|
+
.forEach,r,i=function(e){this._prev=e||null,this.onceTimers={}};i.prototype={end:function(){this.flush()},prev:function(){return this._prev},schedule:function(t,n,r){var i=this._queues,s;i||(i=this._queues={}),s=i[t],s||(s=i[t]=[]);var o=arguments.length>3?e.call(arguments,3):null;return s.push({target:n,method:r,args:o}),this},flush:function(e){function f(e){n(e.target,e.method,e.args)}function l(){t.call(u,f)}var i,s,o,u,a;if(!this._queues)return this;Ember.watch.flushPending();if(e)while(this._queues&&(u=this._queues[e]))this._queues[e]=null,e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f);else{i=Ember.run.queues,o=i.length,s=0;e:while(s<o){e=i[s],u=this._queues&&this._queues[e],delete this._queues[e],u&&(e==="sync"?(a=Ember.LOG_BINDINGS,a&&Ember.Logger.log("Begin: Flush Sync Queue"),Ember.beginPropertyChanges(),Ember.tryFinally(l,Ember.endPropertyChanges),a&&Ember.Logger.log("End: Flush Sync Queue")):t.call(u,f));for(var c=0;c<=s;c++)if(this._queues&&this._queues[i[c]]){s=c;continue e}s++}}return r=null,this}},Ember.RunLoop=i,Ember.run=function(e,t){function i(){if(e||t)return n(e,t,r,2)}var r=arguments;return s.begin(),Ember.tryFinally(i,s.end)};var s=Ember.run;Ember.run.begin=function(){s.currentRunLoop=new i(s.currentRunLoop)},Ember.run.end=function(){function e(){s.currentRunLoop.end()}function t(){s.currentRunLoop=s.currentRunLoop.prev()}Ember.tryFinally(e,t)},Ember.run.queues=["sync","actions","destroy"],Ember.run.schedule=function(e,t,n){var r=s.autorun();r.schedule.apply(r,arguments)};var o;Ember.run.hasScheduledTimers=function(){return!!o||!!f},Ember.run.cancelTimers=function(){o&&(clearTimeout(o),o=null),f&&(clearTimeout(f),f=null),a={}},Ember.run.autorun=function(){return s.currentRunLoop||(s.begin(),o||(o=setTimeout(u,1))),s.currentRunLoop},Ember.run.sync=function(){s.autorun(),s.currentRunLoop.flush("sync")};var a={},f,l;Ember.run.later=function(t,n){var r,i,s,o,u;return arguments.length===2&&"function"==typeof t?(u=n,n=t,t=undefined,r=[t,n]):(r=e.call(arguments),u=r.pop()),i=+(new Date)+u,s={target:t,method:n,expires:i,args:r},o=Ember.guidFor(s),a[o]=s,f&&i<l&&(clearTimeout(f),f=null),f||(f=setTimeout(c,u),l=i),o},Ember.run.once=function(t,n){return p("actions",t,n,e.call(arguments,2))},Ember.run.scheduleOnce=function(t,n,r,i){return p(t,n,r,e.call(arguments,3))},Ember.run.next=function(){var t=e.call(arguments);return t.push(1),s.later.apply(this,t)},Ember.run.cancel=function(e){delete a[e]}}(),function(){function s(t,n){return e(i(n)?Ember.lookup:t,n)}function u(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}Ember.LOG_BINDINGS=!!Ember.ENV.LOG_BINDINGS;var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=/^([A-Z$]|([0-9][A-Z$]))/,i=Ember.isGlobalPath=function(e){return r.test(e)},o=function(e,t){this._direction="fwd",this._from=t,this._to=e,this._directionMap=Ember.Map.create()};o.prototype={copy:function(){var e=new o(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+n(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,n=this._to;return Ember.trySet(e,n,s(e,t)),Ember.addObserver(e,t,this,this.fromDidChange),this._oneWay||Ember.addObserver(e,n,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return Ember.removeObserver(e,this._from,this,this.fromDidChange),t&&Ember.removeObserver(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var n=this._directionMap,r=n.get(e);r||(Ember.run.schedule("sync",this,this._sync,e),n.set(e,t)),r==="back"&&t==="fwd"&&n.set(e,"fwd")},_sync:function(t){var n=Ember.LOG_BINDINGS;if(t.isDestroyed||!this._readyToSync)return;var r=this._directionMap,i=r.get(t),o=this._from,u=this._to;r.remove(t);if(i==="fwd"){var a=s(t,this._from);n&&Ember.Logger.log(" ",this.toString(),"->",a,t),this._oneWay?Ember.trySet(t,u,a):Ember._suspendObserver(t,u,this,this.toDidChange,function(){Ember.trySet(t,u,a)})}else if(i==="back"){var f=e(t,this._to);n&&Ember.Logger.log(" ",this.toString(),"<-",f,t),Ember._suspendObserver(t,o,this,this.fromDidChange,function(){Ember.trySet(Ember.isGlobalPath(o)?Ember.lookup:t,o,f)})}}},u(o,{from:function(){var e=this,t=new e;return t.from.apply(t,arguments)},to:function(){var e=this,t=new e;return t.to.apply(t,arguments)},oneWay:function(e,t){var n=this,r=new n(null,e);return r.oneWay(t)}}),Ember.Binding=o,Ember.bind=function(e,t,n){return(new Ember.Binding(t,n)).connect(e)},Ember.oneWay=function(e,t,n){return(new Ember.Binding(t,n)).oneWay().connect(e)}}(),function(){function l(e){var t=Ember.meta(e,!0),n=t.mixins;return n?t.hasOwnProperty("mixins")||(n=t.mixins=u(n)):n=t.mixins={},n}function c(t,n){return n&&n.length>0&&(t.mixins=r.call(n,function(t){if(t instanceof e)return t;var n=new e;return n.properties=t,n})),t}function h(e){return"function"==typeof e&&e.isMethod!==!1&&e!==Boolean&&e!==Object&&e!==Number&&e!==Array&&e!==Date&&e!==String}function d(t,n){var r;return n instanceof e?(r=f(n),t[r]?p:(t[r]=n,n.properties)):n}function v(e,t,n){var r;return r=t.concatenatedProperties||n.concatenatedProperties,e.concatenatedProperties&&(r=r?r.concat(e.concatenatedProperties):e.concatenatedProperties),r}function m(e,t,n,r,i){var s;return r[t]===undefined&&(s=i[t]),s=s||e.descs[t],!!s&&s instanceof Ember.ComputedProperty?(n=u(n),n.func=Ember.wrap(n.func,s.func),n):n}function g(e,t,n,r,i){var s;return i[t]===undefined&&(s=r[t]),s=s||e[t],"function"!=typeof s?n:Ember.wrap(n,s)}function y(e,t,n,r){var i=r[t]||e[t];return i?"function"==typeof i.concat?i.concat(n):Ember.makeArray(i).concat(n):Ember.makeArray(n)}function b(e,n,r,s,o,u,a){if(r instanceof Ember.Descriptor){if(r===t&&o[n])return p;r.func&&(r=m(s,n,r,u,o)),o[n]=r,u[n]=undefined}else{if(h(r))r=g(e,n,r,u,o);else if(a&&i.call(a,n)>=0||n==="concatenatedProperties")r=y(e,n,r,u);o[n]=undefined,u[n]=r}}function w(e,t,n,r,i,o){function h(e){delete n[e],delete r[e]}var u,a,f,l,c;for(var m=0,g=e.length;m<g;m++){u=e[m],a=d(t,u);if(a===p)continue;if(a){c=Ember.meta(i),l=v(a,r,i);for(f in a){if(!a.hasOwnProperty(f))continue;o.push(f),b(i,f,a[f],c,n,r,l)}a.hasOwnProperty("toString")&&(i.toString=a.toString)}else u.mixins&&(w(u.mixins,t,n,r,i,o),u._without&&s.call(u._without,h))}}function E(e){var t=Ember.meta(e),n=t.required;if(!n||!t.hasOwnProperty("required"))n=t.required=n?u(n):{};return n}function x(e,t,n,r){if(S.test(t)){var i=r.bindings;i?r.hasOwnProperty("bindings")||(i=r.bindings=u(r.bindings)):i=r.bindings={},i[t]=n}}function T(e,t){var n=t.bindings,r,i,s;if(n){for(r in n)i=n[r],i&&(s=r.slice(0,-7),i instanceof Ember.Binding?(i=i.copy(),i.to(s)):i=new Ember.Binding(s,i),i.connect(e),e[r]=i);t.bindings={}}}function N(e,t){return T(e,t||Ember.meta(e)),e}function C(e,t,n,r,i){var s=t.methodName,o;return r[s]||i[s]?(o=i[s],t=r[s]):n.descs[s]?(t=n.descs[s],o=undefined):(t=undefined,o=e[s]),{desc:t,value:o}}function k(e,t,n,r,i){if("function"!=typeof n)return;var s=n[r];if(s)for(var o=0,u=s.length;o<u;o++)Ember[i](e,s[o],null,t)}function L(e,t,n){var r=e[t];k(e,t,r,"__ember_observesBefore__","removeBeforeObserver"),k(e,t,r,"__ember_observes__","removeObserver"),k(e,t,n,"__ember_observesBefore__","addBeforeObserver"),k(e,t,n,"__ember_observes__","addObserver")}function A(e,r,i){var s={},o={},u=Ember.meta(e),f,c,h,p=[];w(r,l(e),s,o,e,p);for(var d=0,v=p.length;d<v;d++){f=p[d];if(f==="constructor"||!o.hasOwnProperty(f))continue;h=s[f],c=o[f];if(h===t)continue;while(h&&h instanceof n){var m=C(e,h,u,s,o);h=m.desc,c=m.value}if(h===undefined&&c===undefined)continue;L(e,f,c),x(e,f,c,u),a(e,f,h,c,u)}return i||N(e,u),e}function M(e,t,n){var r=f(e);if(n[r])return!1;n[r]=!0;if(e===t)return!0;var i=e.mixins,s=i?i.length:0;while(--s>=0)if(M(i[s],t,n))return!0;return!1}function _(e,t,n){if(n[f(t)])return;n[f(t)]=!0;if(t.properties){var r=t.properties;for(var i in r)r.hasOwnProperty(i)&&(e[i]=!0)}else t.mixins&&s.call(t.mixins,function(t){_(e,t,n)})}var e,t,n,r=Ember.ArrayPolyfills.map,i=Ember.ArrayPolyfills.indexOf,s=Ember.ArrayPolyfills.forEach,o=[].slice,u=Ember.create,a=Ember.defineProperty,f=Ember.guidFor,p={},S=Ember.IS_BINDING=/^.+Binding$/;Ember.mixin=function(e){var t=o.call(arguments,1);return A(e,t,!1),e},Ember.Mixin=function(){return c(this,arguments)},e=Ember.Mixin,e.prototype={properties:null,mixins:null,ownerConstructor:null},e._apply=A,e.applyPartial=function(e){var t=o.call(arguments,1);return A(e,t,!0)},e.finishPartial=N,Ember.anyUnprocessedMixins=!1,e.create=function(){Ember.anyUnprocessedMixins=!0;var e=this;return c(new e,arguments)};var O=e.prototype;O.reopen=function(){var t,n;this.properties?(t=e.create(),t.properties=this.properties,delete this.properties,this.mixins=[t]):this.mixins||(this.mixins=[]);var r=arguments.length,i=this.mixins,s;for(s=0;s<r;s++)t=arguments[s],t instanceof e?i.push(t):(n=e.create(),n.properties=t,i.push(n));return this},O.apply=function(e){return A(e,[this],!1)},O.applyPartial=function(e){return A(e,[this],!0)},O.detect=function(t){if(!t)return!1;if(t instanceof e)return M(t,this,{});var n=Ember.meta(t,!1).mixins;return n?!!n[f(this)]:!1},O.without=function(){var t=new e(this);return t._without=o.call(arguments),t},O.keys=function(){var e={},t={},n=[];_(e,this,t);for(var r in e)e.hasOwnProperty(r)&&n.push(r);return n},e.mixins=function(e){var t=Ember.meta(e,!1).mixins,n=[];if(!t)return n;for(var r in t){var i=t[r];i.properties||n.push(i)}return n},t=new Ember.Descriptor,t.toString=function(){return"(Required Property)"},Ember.required=function(){return t},n=function(e){this.methodName=e},n.prototype=new Ember.Descriptor,Ember.alias=function(e){return new n(e)},Ember.deprecateFunc("Ember.alias is deprecated. Please use Ember.aliasMethod or Ember.computed.alias instead.",Ember.alias),Ember.aliasMethod=function(e){return new n(e)},Ember.observer=function(e){var t=o.call(arguments,1);return e.__ember_observes__=t,e},Ember.immediateObserver=function(){for(var e=0,t=arguments.length;e<t;e++)var n=arguments[e];return Ember.observer.apply(this,arguments)},Ember.beforeObserver=function(e){var t=o.call(arguments,1);return e.__ember_observesBefore__=t,e}}(),function(){}(),function(){e("rsvp",[],function(){"use strict";function d(e,t){n.async(function(){e.trigger("promise:resolved",{detail:t}),e.isResolved=!0,e.resolvedValue=t})}function v(e,t){n.async(function(){e.trigger("promise:failed",{detail:t}),e.isRejected=!0,e.rejectedValue=t})}function m(e){var t,n=[],r=new c,i=e.length;i===0&&r.resolve([]);var s=function(e){return function(t){o(e,t)}},o=function(e,t){n[e]=t,--i===0&&r.resolve(n)},u=function(e){r.reject(e)};for(t=0;t<i;t++)e[t].then(s(t),u);return r}var e=typeof window!="undefined"?window:{},t=e.MutationObserver||e.WebKitMutationObserver,n,r;if(typeof process!="undefined"&&{}.toString.call(process)==="[object process]")r=function(e,t){process.nextTick(function(){e.call(t)})};else if(t){var i=[],s=new t(function(){var e=i.slice();i=[],e.forEach(function(e){var t=e[0],n=e[1];t.call(n)})}),o=document.createElement("div");s.observe(o,{attributes:!0}),window.addEventListener("unload",function(){s.disconnect(),s=null}),r=function(e,t){i.push([e,t]),o.setAttribute("drainQueue","drainQueue")}}else r=function(e,t){setTimeout(function(){e.call(t)},1)};var u=function(e,t){this.type=e;for(var n in t){if(!t.hasOwnProperty(n))continue;this[n]=t[n]}},a=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n][0]===t)return n;return-1},f=function(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t},l={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e},on:function(e,t,n){var r=f(this),i,s;e=e.split(/\s+/),n=n||this;while(s=e.shift())i=r[s],i||(i=r[s]=[]),a(i,t)===-1&&i.push([t,n])},off:function(e,t){var n=f(this),r,i,s;e=e.split(/\s+/);while(i=e.shift()){if(!t){n[i]=[];continue}r=n[i],s=a(r,t),s!==-1&&r.splice(s,1)}},trigger:function(e,t){var n=f(this),r,i,s,o,a;if(r=n[e])for(var l=0;l<r.length;l++)i=r[l],s=i[0],o=i[1],typeof t!="object"&&(t={detail:t}),a=new u(e,t),s.call(o,a)}},c=function(){this.on("promise:resolved",function(e){this.trigger("success",{detail:e.detail})},this),this.on("promise:failed",function(e){this.trigger("error",{detail:e.detail})},this)},h=function(){},p=function(e,t,n,r){var i=typeof n=="function",s,o,u,a;if(i)try{s=n(r.detail),u=!0}catch(f){a=!0,o=f}else s=r.detail,u=!0;s&&typeof s.then=="function"?s.then(function(e){t.resolve(e)},function(e){t.reject(e)}):i&&u?t.resolve(s):a?t.reject(o):t[e](s)};return c.prototype={then:function(e,t){var r=new c;return this.isResolved&&n.async(function(){p("resolve",r,e,{detail:this.resolvedValue})},this),this.isRejected&&n.async(function(){p("reject",r,t,{detail:this.rejectedValue})},this),this.on("promise:resolved",function(t){p("resolve",r,e,t)}),this.on("promise:failed",function(e){p("reject",r,t,e)}),r},resolve:function(e){d(this,e),this.resolve=h,this.reject=h},reject:function(e){v(this,e),this.resolve=h,this.reject=h}},l.mixin(c.prototype),n={async:r,Promise:c,Event:u,EventTarget:l,all:m,raiseOnUncaughtExceptions:!0},n})}(),function(){e("container",[],function(){function e(e){this.parent=e,this.dict={}}function t(t){this.parent=t,this.children=[],this.resolver=t&&t.resolver||function(){},this.registry=new e(t&&t.registry),this.cache=new e(t&&t.cache),this.typeInjections=new e(t&&t.typeInjections),this.injections={},this._options=new e(t&&t._options),this._typeOptions=new e(t&&t._typeOptions)}function n(e){throw new Error(e+" is not currently supported on child containers")}function r(e,t){var n=s(e,t,"singleton");return n!==!1}function i(e,t){var n={};if(!t)return n;var r,i;for(var s=0,o=t.length;s<o;s++)r=t[s],i=e.lookup(r.fullName),n[r.property]=i;return n}function s(e,t,n){var r=e._options.get(t);if(r&&r[n]!==undefined)return r[n];var i=t.split(":")[0];r=e._typeOptions.get(i);if(r)return r[n]}function o(e,t){var n=e.normalize(t);return e.resolve(n)}function u(e,t){var n=o(e,t),r=t.split(":"),u=r[0],a=r[1],f;if(s(e,t,"instantiate")===!1)return n;if(n){var l=[];l=l.concat(e.typeInjections.get(u)||[]),l=l.concat(e.injections[t]||[]);var c=i(e,l);return c.container=e,c._debugContainerKey=t,f=n.create(c),f}}function a(e,t){e.cache.eachLocal(function(n,r){if(s(e,n,"instantiate")===!1)return;t(r)})}function f(e){e.cache.eachLocal(function(t,n){if(s(e,t,"instantiate")===!1)return;n.destroy()}),e.cache.dict={}}return e.prototype={get:function(e){var t=this.dict;if(t.hasOwnProperty(e))return t[e];if(this.parent)return this.parent.get(e)},set:function(e,t){this.dict[e]=t},has:function(e){var t=this.dict;return t.hasOwnProperty(e)?!0:this.parent?this.parent.has(e):!1},eachLocal:function(e,t){var n=this.dict;for(var r in n)n.hasOwnProperty(r)&&e.call(t,r,n[r])}},t.prototype={child:function(){var e=new t(this);return this.children.push(e),e},set:function(e,t,n){e[t]=n},register:function(e,t,n,r){var i;e.indexOf(":")!==-1?(r=n,n=t,i=e):i=e+":"+t;var s=this.normalize(i);this.registry.set(s,n),this._options.set(s,r||{})},resolve:function(e){return this.resolver(e)||this.registry.get(e)},normalize:function(e){return e},lookup:function(e,t){e=this.normalize(e),t=t||{};if(this.cache.has(e)&&t.singleton!==!1)return this.cache.get(e);var n=u(this,e);if(!n)return;return r(this,e)&&t.singleton!==!1&&this.cache.set(e,n),n},has:function(e){return this.cache.has(e)?!0:!!o(this,e)},optionsForType:function(e,t){this.parent&&n("optionsForType"),this._typeOptions.set(e,t)},options:function(e,t){this.optionsForType(e,t)},typeInjection:function(e,t,r){this.parent&&n("typeInjection");var i=this.typeInjections.get(e);i||(i=[],this.typeInjections.set(e,i)),i.push({property:t,fullName:r})},injection:function(e,t,r){this.parent&&n("injection");if(e.indexOf(":")===-1)return this.typeInjection(e,t,r);var i=this.injections[e]=this.injections[e]||[];i.push({property:t,fullName:r})},destroy:function(){this.isDestroyed=!0;for(var e=0,t=this.children.length;e<t;e++)this.children[e].destroy();this.children=[],a(this,function(e){e.isDestroying=!0}),a(this,function(e){e.destroy()}),delete this.parent,this.isDestroyed=!0},reset:function(){for(var e=0,t=this.children.length;e<t;e++)f(this.children[e]);f(this)}},t})}(),function(){function t(n,r,i,s){var o,u,a;if("object"!=typeof n||n===null)return n;if(r&&(u=e(i,n))>=0)return s[u];if(Ember.typeOf(n)==="array"){o=n.slice();if(r){u=o.length;while(--u>=0)o[u]=t(o[u],r,i,s)}}else if(Ember.Copyable&&Ember.Copyable.detect(n))o=n.copy(r,i,s);else{o={};for(a in n){if(!n.hasOwnProperty(a))continue;if(a.substring(0,2)==="__")continue;o[a]=r?t(n[a],r,i,s):n[a]}}return r&&(i.push(n),s.push(o)),o}var e=Ember.EnumerableUtils.indexOf;Ember.compare=function r(e,t){if(e===t)return 0;var n=Ember.typeOf(e),i=Ember.typeOf(t),s=Ember.Comparable;if(s){if(n==="instance"&&s.detect(e.constructor))return e.constructor.compare(e,t);if(i==="instance"&&s.detect(t.constructor))return 1-t.constructor.compare(t,e)}var o=Ember.ORDER_DEFINITION_MAPPING;if(!o){var u=Ember.ORDER_DEFINITION;o=Ember.ORDER_DEFINITION_MAPPING={};var a,f;for(a=0,f=u.length;a<f;++a)o[u[a]]=a;delete Ember.ORDER_DEFINITION}var l=o[n],c=o[i];if(l<c)return-1;if(l>c)return 1;switch(n){case"boolean":case"number":if(e<t)return-1;if(e>t)return 1;return 0;case"string":var h=e.localeCompare(t);if(h<0)return-1;if(h>0)return 1;return 0;case"array":var p=e.length,d=t.length,v=Math.min(p,d),m=0,g=0;while(m===0&&g<v)m=r(e[g],t[g]),g++;if(m!==0)return m;if(p<d)return-1;if(p>d)return 1;return 0;case"instance":if(Ember.Comparable&&Ember.Comparable.detect(e))return e.compare(e,t);return 0;case"date":var y=e.getTime(),b=t.getTime();if(y<b)return-1;if(y>b)return 1;return 0;default:return 0}},Ember.copy=function(e,n){return"object"!=typeof e||e===null?e:Ember.Copyable&&Ember.Copyable.detect(e)?e.copy(n):t(e,n,n?[]:null,n?[]:null)},Ember.inspect=function(e){if(typeof e!="object"||e===null)return e+"";var t,n=[];for(var r in e)if(e.hasOwnProperty(r)){t=e[r];if(t==="toString")continue;Ember.typeOf(t)==="function"&&(t="function() { ... }"),n.push(r+": "+t)}return"{"+n.join(", ")+"}"},Ember.isEqual=function(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e===t},Ember.ORDER_DEFINITION=Ember.ENV.ORDER_DEFINITION||["undefined","null","boolean","number","string","array","object","instance","function","class","date"],Ember.keys=Object.keys,Ember.keys||(Ember.keys=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t});var n=["description","fileName","lineNumber","message","name","number","stack"];Ember.Error=function(){var e=Error.prototype.constructor.apply(this,arguments);for(var t=0;t<n.length;t++)this[n[t]]=e[n[t]]},Ember.Error.prototype=Ember.create(Error.prototype)}(),function(){Ember.RSVP=t("rsvp")}(),function(){var e=/[ _]/g,t={},n=/([a-z])([A-Z])/g,r=/(\-|_|\.|\s)+(.)?/g,i=/([a-z\d])([A-Z]+)/g,s=/\-|\s+/g;Ember.STRINGS={},Ember.String={fmt:function(e,t){var n=0;return e.replace(/%@([0-9]+)?/g,function(e,r){return r=r?parseInt(r,0)-1:n++,e=t[r],(e===null?"(null)":e===undefined?"":e).toString()})},loc:function(e,t){return e=Ember.STRINGS[e]||e,Ember.String.fmt(e,t)},w:function(e){return e.split(/\s+/)},decamelize:function(e){return e.replace(n,"$1_$2").toLowerCase()},dasherize:function(n){var r=t,i=r.hasOwnProperty(n),s;return i?r[n]:(s=Ember.String.decamelize(n).replace(e,"-"),r[n]=s,s)},camelize:function(e){return e.replace(r,function(e,t,n){return n?n.toUpperCase():""}).replace(/^([A-Z])/,function(e,t,n){return e.toLowerCase()})},classify:function(e){var t=e.split("."),n=[];for(var r=0,i=t.length;r<i;r++){var s=Ember.String.camelize(t[r]);n.push(s.charAt(0).toUpperCase()+s.substr(1))}return n.join(".")},underscore:function(e){return e.replace(i,"$1_$2").replace(s,"_").toLowerCase()},capitalize:function(e){return e.charAt(0).toUpperCase()+e.substr(1)}}}(),function(){var e=Ember.String.fmt,t=Ember.String.w,n=Ember.String.loc,r=Ember.String.camelize,i=Ember.String.decamelize,s=Ember.String.dasherize,o=Ember.String.underscore,u=Ember.String.capitalize,a=Ember.String.classify;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.String)String.prototype.fmt=function(){return e(this,arguments)},String.prototype.w=function(){return t(this)},String.prototype.loc=function(){return n(this,arguments)},String.prototype.camelize=function(){return r(this)},String.prototype.decamelize=function(){return i(this)},String.prototype.dasherize=function(){return s(this)},String.prototype.underscore=function(){return o(this)},String.prototype.classify=function(){return a(this)},String.prototype.capitalize=function(){return u(this)}}(),function(){var e=Array.prototype.slice;if(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Function)Function.prototype.property=function(){var e=Ember.computed(this);return e.property.apply(e,arguments)},Function.prototype.observes=function(){return this.__ember_observes__=e.call(arguments),this},Function.prototype.observesBefore=function(){return this.__ember_observesBefore__=e.call(arguments),this}}(),function(){}(),function(){function s(){return i.length===0?{}:i.pop()}function o(e){return i.push(e),null}function u(t,n){function i(i){var s=e(i,t);return r?n===s:!!s}var r=arguments.length===2;return i}var e=Ember.get,t=Ember.set,n=Array.prototype.slice,r=Ember.EnumerableUtils.indexOf,i=[];Ember.Enumerable=Ember.Mixin.create({isEnumerable:!0,nextObject:Ember.required(Function),firstObject:Ember.computed(function(){if(e(this,"length")===0)return undefined;var t=s(),n;return n=this.nextObject(0,null,t),o(t),n}).property("[]"),lastObject:Ember.computed(function(){var t=e(this,"length");if(t===0)return undefined;var n=s(),r=0,i,u=null;do u=i,i=this.nextObject(r++,u,n);while(i!==undefined);return o(n),u}).property("[]"),contains:function(e){return this.find(function(t){return t===e})!==undefined},forEach:function(t,n){if(typeof t!="function")throw new TypeError;var r=e(this,"length"),i=null,u=s();n===undefined&&(n=null);for(var a=0;a<r;a++){var f=this.nextObject(a,i,u);t.call(n,f,a,this),i=f}return i=null,u=o(u),this},getEach:function(e){return this.mapProperty(e)},setEach:function(e,n){return this.forEach(function(r){t(r,e,n)})},map:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){n[i]=e.call(t,r,i,s)}),n},mapProperty:function(t){return this.map(function(n){return e(n,t)})},filter:function(e,t){var n=Ember.A([]);return this.forEach(function(r,i,s){e.call(t,r,i,s)&&n.push(r)}),n},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterProperty:function(e,t){return this.filter(u.apply(this,arguments))},rejectProperty:function(t,n){var r=function(r){return e(r,t)===n},i=function(n){return!!e(n,t)},s=arguments.length===2?r:i;return this.reject(s)},find:function(t,n){var r=e(this,"length");n===undefined&&(n=null);var i=null,u,a=!1,f,l=s();for(var c=0;c<r&&!a;c++){u=this.nextObject(c,i,l);if(a=t.call(n,u,c,this))f=u;i=u}return u=i=null,l=o(l),f},findProperty:function(e,t){return this.find(u.apply(this,arguments))},every:function(e,t){return!this.find(function(n,r,i){return!e.call(t,n,r,i)})},everyProperty:function(e,t){return this.every(u.apply(this,arguments))},some:function(e,t){return!!this.find(function(n,r,i){return!!e.call(t,n,r,i)})},someProperty:function(e,t){return this.some(u.apply(this,arguments))},reduce:function(e,t,n){if(typeof e!="function")throw new TypeError;var r=t;return this.forEach(function(t,i){r=e.call(null,r,t,i,this,n)},this),r},invoke:function(e){var t,r=Ember.A([]);return arguments.length>1&&(t=n.call(arguments,1)),this.forEach(function(n,i){var s=n&&n[e];"function"==typeof s&&(r[i]=t?s.apply(n,t):s.call(n))},this),r},toArray:function(){var e=Ember.A([]);return this.forEach(function(t,n){e[n]=t}),e},compact:function(){return this.filter(function(e){return e!=null})},without:function(e){if(!this.contains(e))return this;var t=Ember.A([]);return this.forEach(function(n){n!==e&&(t[t.length]=n)}),t},uniq:function(){var e=Ember.A([]);return this.forEach(function(t){r(e,t)<0&&e.push(t)}),e},"[]":Ember.computed(function(e,t){return this}),addEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s||Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.addListener(this,"@enumerable:before",t,r),Ember.addListener(this,"@enumerable:change",t,i),s||Ember.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(t,n){var r=n&&n.willChange||"enumerableWillChange",i=n&&n.didChange||"enumerableDidChange",s=e(this,"hasEnumerableObservers");return s&&Ember.propertyWillChange(this,"hasEnumerableObservers"),Ember.removeListener(this,"@enumerable:before",t,r),Ember.removeListener(this,"@enumerable:change",t,i),s&&Ember.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:Ember.computed(function(){return Ember.hasListeners(this,"@enumerable:change")||Ember.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.propertyWillChange(this,"[]"),s&&Ember.propertyWillChange(this,"length"),Ember.sendEvent(this,"@enumerable:before",[this,t,n]),this},enumerableContentDidChange:function(t,n){var r,i,s;return"number"==typeof t?r=t:t?r=e(t,"length"):r=t=-1,"number"==typeof n?i=n:n?i=e(n,"length"):i=n=-1,s=i<0||r<0||i-r!==0,t===-1&&(t=null),n===-1&&(n=null),Ember.sendEvent(this,"@enumerable:change",[this,t,n]),s&&Ember.propertyDidChange(this,"length"),Ember.propertyDidChange(this,"[]"),this}})}(),function(){function i(e){return e===null||e===undefined}var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.map,r=Ember.cacheFor;Ember.Array=Ember.Mixin.create(Ember.Enumerable,{isSCArray:!0,length:Ember.required(),objectAt:function(t){return t<0||t>=e(this,"length")?undefined:e(this,t)},objectsAt:function(e){var t=this;return n(e,function(e){return t.objectAt(e)})},nextObject:function(e){return this.objectAt(e)},"[]":Ember.computed(function(t,n){return n!==undefined&&this.replace(0,e(this,"length"),n),this}),firstObject:Ember.computed(function(){return this.objectAt(0)}),lastObject:Ember.computed(function(){return this.objectAt(e(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(t,n){var r=Ember.A([]),s=e(this,"length");i(t)&&(t=0);if(i(n)||n>s)n=s;t<0&&(t=s+t),n<0&&(n=s+n);while(t<n)r[r.length]=this.objectAt(t++);return r},indexOf:function(t,n){var r,i=e(this,"length");n===undefined&&(n=0),n<0&&(n+=i);for(r=n;r<i;r++)if(this.objectAt(r,!0)===t)return r;return-1},lastIndexOf:function(t,n){var r,i=e(this,"length");if(n===undefined||n>=i)n=i-1;n<0&&(n+=i);for(r=n;r>=0;r--)if(this.objectAt(r)===t)return r;return-1},addArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s||Ember.propertyWillChange(this,"hasArrayObservers"),Ember.addListener(this,"@array:before",t,r),Ember.addListener(this,"@array:change",t,i),s||Ember.propertyDidChange(this,"hasArrayObservers"),this},removeArrayObserver:function(t,n){var r=n&&n.willChange||"arrayWillChange",i=n&&n.didChange||"arrayDidChange",s=e(this,"hasArrayObservers");return s&&Ember.propertyWillChange(this,"hasArrayObservers"),Ember.removeListener(this,"@array:before",t,r),Ember.removeListener(this,"@array:change",t,i),s&&Ember.propertyDidChange(this,"hasArrayObservers"),this},hasArrayObservers:Ember.computed(function(){return Ember.hasListeners(this,"@array:change")||Ember.hasListeners(this,"@array:before")}),arrayContentWillChange:function(t,n,r){t===undefined?(t=0,n=r=-1):(n===undefined&&(n=-1),r===undefined&&(r=-1)),Ember.isWatching(this,"@each")&&e(this,"@each"),Ember.sendEvent(this,"@array:before",[this,t,n,r]);var i,s;if(t>=0&&n>=0&&e(this,"hasEnumerableObservers")){i=[],s=t+n;for(var o=t;o<s;o++)i.push(this.objectAt(o))}else i=n;return this.enumerableContentWillChange(i,r),this},arrayContentDidChange:function(t,n,i){t===undefined?(t=0,n=i=-1):(n===undefined&&(n=-1),i===undefined&&(i=-1));var s,o;if(t>=0&&i>=0&&e(this,"hasEnumerableObservers")){s=[],o=t+i;for(var u=t;u<o;u++)s.push(this.objectAt(u))}else s=i;this.enumerableContentDidChange(n,s),Ember.sendEvent(this,"@array:change",[this,t,n,i]);var a=e(this,"length"),f=r(this,"firstObject"),l=r(this,"lastObject");return this.objectAt(0)!==f&&(Ember.propertyWillChange(this,"firstObject"),Ember.propertyDidChange(this,"firstObject")),this.objectAt(a-1)!==l&&(Ember.propertyWillChange(this,"lastObject"),Ember.propertyDidChange(this,"lastObject")),this},"@each":Ember.computed(function(){return this.__each||(this.__each=new Ember.EachProxy(this)),this.__each})})}(),function(){Ember.Comparable=Ember.Mixin.create({isComparable:!0,compare:Ember.required(Function)})}(),function(){var e=Ember.get,t=Ember.set;Ember.Copyable=Ember.Mixin.create({copy:Ember.required(Function),frozenCopy:function(){if(Ember.Freezable&&Ember.Freezable.detect(this))return e(this,"isFrozen")?this:this.copy().freeze();throw new Error(Ember.String.fmt("%@ does not support freezing",[this]))}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Freezable=Ember.Mixin.create({isFrozen:!1,freeze:function(){return e(this,"isFrozen")?this:(t(this,"isFrozen",!0),this)}}),Ember.FROZEN_ERROR="Frozen object cannot be modified."}(),function(){var e=Ember.EnumerableUtils.forEach;Ember.MutableEnumerable=Ember.Mixin.create(Ember.Enumerable,{addObject:Ember.required(Function),addObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.addObject(e)},this),Ember.endPropertyChanges(this),this},removeObject:Ember.required(Function),removeObjects:function(t){return Ember.beginPropertyChanges(this),e(t,function(e){this.removeObject(e)},this),Ember.endPropertyChanges(this),this}})}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.MutableArray=Ember.Mixin.create(Ember.Array,Ember.MutableEnumerable,{replace:Ember.required(),clear:function(){var e=n(this,"length");return e===0?this:(this.replace(0,e,t),this)},insertAt:function(t,r){if(t>n(this,"length"))throw new Error(e);return this.replace(t,0,[r]),this},removeAt:function(r,i){if("number"==typeof r){if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1),this.replace(r,i,t)}return this},pushObject:function(e){return this.insertAt(n(this,"length"),e),e},pushObjects:function(e){return this.replace(n(this,"length"),0,e),this},popObject:function(){var e=n(this,"length");if(e===0)return null;var t=this.objectAt(e-1);return this.removeAt(e-1,1),t},shiftObject:function(){if(n(this,"length")===0)return null;var e=this.objectAt(0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=n(this,"length");if(e===0)return this;var t=this.toArray().reverse();return this.replace(0,e,t),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this.replace(0,t,e),this},removeObject:function(e){var t=n(this,"length")||0;while(--t>=0){var r=this.objectAt(t);r===e&&this.removeAt(t)}return this},addObject:function(e){return this.contains(e)||this.pushObject(e),this}})}(),function(){var e=Ember.get,t=Ember.set;Ember.Observable=Ember.Mixin.create({get:function(t){return e(this,t)},getProperties:function(){var t={},n=arguments;arguments.length===1&&Ember.typeOf(arguments[0])==="array"&&(n=arguments[0]);for(var r=0;r<n.length;r++)t[n[r]]=e(this,n[r]);return t},set:function(e,n){return t(this,e,n),this},setProperties:function(e){return Ember.setProperties(this,e)},beginPropertyChanges:function(){return Ember.beginPropertyChanges(),this},endPropertyChanges:function(){return Ember.endPropertyChanges(),this},propertyWillChange:function(e){return Ember.propertyWillChange(this,e),this},propertyDidChange:function(e){return Ember.propertyDidChange(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addBeforeObserver:function(e,t,n){Ember.addBeforeObserver(this,e,t,n)},addObserver:function(e,t,n){Ember.addObserver(this,e,t,n)},removeObserver:function(e,t,n){Ember.removeObserver(this,e,t,n)},hasObserverFor:function(e){return Ember
|
17
|
+
.hasListeners(this,e+":change")},getPath:function(e){return this.get(e)},setPath:function(e,t){return this.set(e,t)},getWithDefault:function(e,t){return Ember.getWithDefault(this,e,t)},incrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)+r),e(this,n)},decrementProperty:function(n,r){return r||(r=1),t(this,n,(e(this,n)||0)-r),e(this,n)},toggleProperty:function(n){return t(this,n,!e(this,n)),e(this,n)},cacheFor:function(e){return Ember.cacheFor(this,e)},observersForKey:function(e){return Ember.observersFor(this,e)}})}(),function(){var e=Ember.get,t=Ember.set;Ember.TargetActionSupport=Ember.Mixin.create({target:null,action:null,targetObject:Ember.computed(function(){var t=e(this,"target");if(Ember.typeOf(t)==="string"){var n=e(this,t);return n===undefined&&(n=e(Ember.lookup,t)),n}return t}).property("target"),triggerAction:function(){var t=e(this,"action"),n=e(this,"targetObject");if(n&&t){var r;return typeof n.send=="function"?r=n.send(t,this):(typeof t=="string"&&(t=n[t]),r=t.call(n,this)),r!==!1&&(r=!0),r}return!1}})}(),function(){Ember.Evented=Ember.Mixin.create({on:function(e,t,n){return Ember.addListener(this,e,t,n),this},one:function(e,t,n){return n||(n=t,t=null),Ember.addListener(this,e,t,n,!0),this},trigger:function(e){var t=[],n,r;for(n=1,r=arguments.length;n<r;n++)t.push(arguments[n]);Ember.sendEvent(this,e,t)},fire:function(e){this.trigger.apply(this,arguments)},off:function(e,t,n){return Ember.removeListener(this,e,t,n),this},has:function(e){return Ember.hasListeners(this,e)}})}(),function(){var e=t("rsvp");e.async=function(e,t){Ember.run.schedule("actions",t,e)};var n=Ember.get;Ember.DeferredMixin=Ember.Mixin.create({then:function(e,t){var r=n(this,"promise");return r.then.apply(r,arguments)},resolve:function(e){n(this,"promise").resolve(e)},reject:function(e){n(this,"promise").reject(e)},promise:Ember.computed(function(){return new e.Promise})})}(),function(){}(),function(){Ember.Container=t("container"),Ember.Container.set=Ember.set}(),function(){function b(){var e=!1,t,s,o=function(){e||o.proto(),r(this,i,y),r(this,"_super",y);var a=u(this);a.proto=this;if(t){var l=t;t=null,this.reopen.apply(this,l)}if(s){var c=s;s=null;var h=this.concatenatedProperties;for(var p=0,v=c.length;p<v;p++){var b=c[p];for(var w in b){if(!b.hasOwnProperty(w))continue;var E=b[w],S=Ember.IS_BINDING;if(S.test(w)){var x=a.bindings;x?a.hasOwnProperty("bindings")||(x=a.bindings=n(a.bindings)):x=a.bindings={},x[w]=E}var T=a.descs[w];if(h&&g(h,w)>=0){var N=this[w];N?"function"==typeof N.concat?E=N.concat(E):E=Ember.makeArray(N).concat(E):E=Ember.makeArray(E)}T?T.set(this,w,E):typeof this.setUnknownProperty!="function"||w in this?m?Ember.defineProperty(this,w,null,E):this[w]=E:this.setUnknownProperty(w,E)}}}d(this,a),delete a.proto,f(this),this.init.apply(this,arguments)};return o.toString=h.prototype.toString,o.willReopen=function(){e&&(o.PrototypeMixin=h.create(o.PrototypeMixin)),e=!1},o._initMixins=function(e){t=e},o._initProperties=function(e){s=e},o.proto=function(){var t=o.superclass;return t&&t.proto(),e||(e=!0,o.PrototypeMixin.applyPartial(o.prototype),a(o.prototype)),this.prototype},o}function E(e){return function(){return e}}var e=Ember.set,t=Ember.get,n=Ember.create,r=Ember.platform.defineProperty,i=Ember.GUID_KEY,s=Ember.guidFor,o=Ember.generateGuid,u=Ember.meta,a=Ember.rewatch,f=Ember.finishChains,l=Ember.destroy,c=Ember.run.schedule,h=Ember.Mixin,p=h._apply,d=h.finishPartial,v=h.prototype.reopen,m=Ember.ENV.MANDATORY_SETTER,g=Ember.EnumerableUtils.indexOf,y={configurable:!0,writable:!0,enumerable:!1,value:undefined},w=b();w.toString=function(){return"Ember.CoreObject"},w.PrototypeMixin=h.create({reopen:function(){return p(this,arguments,!0),this},isInstance:!0,init:function(){},concatenatedProperties:null,isDestroyed:!1,isDestroying:!1,destroy:function(){if(this._didCallDestroy)return;return this.isDestroying=!0,this._didCallDestroy=!0,c("destroy",this,this._scheduledDestroy),this},willDestroy:Ember.K,_scheduledDestroy:function(){this.willDestroy&&this.willDestroy(),l(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 x(){var e=typeof this.toStringExtension=="function",t=e?":"+this.toStringExtension():"",n="<"+this.constructor.toString()+":"+s(this)+t+">";return this.toString=E(n),n}}),w.PrototypeMixin.ownerConstructor=w,Ember.config.overridePrototypeMixin&&Ember.config.overridePrototypeMixin(w.PrototypeMixin),w.__super__=null;var S=h.create({ClassMixin:Ember.required(),PrototypeMixin:Ember.required(),isClass:!0,isMethod:!1,extend:function(){var e=b(),t;return e.ClassMixin=h.create(this.ClassMixin),e.PrototypeMixin=h.create(this.PrototypeMixin),e.ClassMixin.ownerConstructor=e,e.PrototypeMixin.ownerConstructor=e,v.apply(e.PrototypeMixin,arguments),e.superclass=this,e.__super__=this.prototype,t=e.prototype=n(this.prototype),t.constructor=e,o(t,"ember"),u(t).proto=t,e.ClassMixin.apply(e),e},createWithMixins:function(){var e=this;return arguments.length>0&&this._initMixins(arguments),new e},create:function(){var e=this;return arguments.length>0&&this._initProperties(arguments),new e},reopen:function(){return this.willReopen(),v.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return v.apply(this.ClassMixin,arguments),p(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;while(e){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=u(this.proto(),!1).descs[e];return t._meta||{}},eachComputedProperty:function(e,t){var n=this.proto(),r=u(n).descs,i={},s;for(var o in r)s=r[o],s instanceof Ember.ComputedProperty&&e.call(t||this,o,s._meta||i)}});S.ownerConstructor=w,Ember.config.overrideClassMixin&&Ember.config.overrideClassMixin(S),w.ClassMixin=S,S.apply(w),Ember.CoreObject=w}(),function(){Ember.Object=Ember.CoreObject.extend(Ember.Observable),Ember.Object.toString=function(){return"Ember.Object"}}(),function(){function o(e,t,n){var u=e.length;r[e.join(".")]=t;for(var f in t){if(!i.call(t,f))continue;var c=t[f];e[u]=f;if(c&&c.toString===l)c.toString=h(e.join(".")),c[a]=e.join(".");else if(c&&c.isNamespace){if(n[s(c)])continue;n[s(c)]=!0,o(e,c,n)}}e.length=u}function u(){var e=Ember.Namespace,t=Ember.lookup,n,r;if(e.PROCESSED)return;for(var i in t){if(i==="parent"||i==="top"||i==="frameElement")continue;if(i==="globalStorage"&&t.StorageList&&t.globalStorage instanceof t.StorageList)continue;if(t.hasOwnProperty&&!t.hasOwnProperty(i))continue;try{n=Ember.lookup[i],r=n&&n.isNamespace}catch(s){continue}r&&(n[a]=i)}}function f(e){var t=e.superclass;if(t)return t[a]?t[a]:f(t);return}function l(){!Ember.BOOTED&&!this[a]&&c();var e;if(this[a])e=this[a];else{var t=f(this);t?e="(subclass of "+t+")":e="(unknown mixin)",this.toString=h(e)}return e}function c(){var e=!n.PROCESSED,t=Ember.anyUnprocessedMixins;e&&(u(),n.PROCESSED=!0);if(e||t){var r=n.NAMESPACES,i;for(var s=0,a=r.length;s<a;s++)i=r[s],o([i.toString()],i,{});Ember.anyUnprocessedMixins=!1}}function h(e){return function(){return e}}var e=Ember.get,t=Ember.ArrayPolyfills.indexOf,n=Ember.Namespace=Ember.Object.extend({isNamespace:!0,init:function(){Ember.Namespace.NAMESPACES.push(this),Ember.Namespace.PROCESSED=!1},toString:function(){var t=e(this,"name");return t?t:(u(),this[Ember.GUID_KEY+"_name"])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=Ember.Namespace.NAMESPACES;Ember.lookup[this.toString()]=undefined,e.splice(t.call(e,this),1),this._super()}});n.reopenClass({NAMESPACES:[Ember],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:c,byName:function(e){return Ember.BOOTED||c(),r[e]}});var r=n.NAMESPACES_BY_ID,i={}.hasOwnProperty,s=Ember.guidFor,a=Ember.NAME_KEY=Ember.GUID_KEY+"_name";Ember.Mixin.prototype.toString=l}(),function(){Ember.Application=Ember.Namespace.extend()}(),function(){var e="Index out of range",t=[],n=Ember.get,r=Ember.set;Ember.ArrayProxy=Ember.Object.extend(Ember.MutableArray,{content:null,arrangedContent:Ember.computed.alias("content"),objectAtContent:function(e){return n(this,"arrangedContent").objectAt(e)},replaceContent:function(e,t,r){n(this,"content").replace(e,t,r)},_contentWillChange:Ember.beforeObserver(function(){this._teardownContent()},"content"),_teardownContent:function(){var e=n(this,"content");e&&e.removeArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:Ember.K,contentArrayDidChange:Ember.K,_contentDidChange:Ember.observer(function(){var e=n(this,"content");this._setupContent()},"content"),_setupContent:function(){var e=n(this,"content");e&&e.addArrayObserver(this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:Ember.beforeObserver(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,undefined),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)},"arrangedContent"),_arrangedContentDidChange:Ember.observer(function(){var e=n(this,"arrangedContent"),t=e?n(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,undefined,t)},"arrangedContent"),_setupArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.addArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=n(this,"arrangedContent");e&&e.removeArrayObserver(this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:Ember.K,arrangedContentDidChange:Ember.K,objectAt:function(e){return n(this,"content")&&this.objectAtContent(e)},length:Ember.computed(function(){var e=n(this,"arrangedContent");return e?n(e,"length"):0}),_replace:function(e,t,r){var i=n(this,"content");return i&&this.replaceContent(e,t,r),this},replace:function(){if(n(this,"arrangedContent")!==n(this,"content"))throw new Ember.Error("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(t,r){if(t>n(this,"content.length"))throw new Error(e);return this._replace(t,0,[r]),this},insertAt:function(e,t){if(n(this,"arrangedContent")===n(this,"content"))return this._insertAt(e,t);throw new Ember.Error("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(r,i){if("number"==typeof r){var s=n(this,"content"),o=n(this,"arrangedContent"),u=[],a;if(r<0||r>=n(this,"length"))throw new Error(e);i===undefined&&(i=1);for(a=r;a<r+i;a++)u.push(s.indexOf(o.objectAt(a)));u.sort(function(e,t){return t-e}),Ember.beginPropertyChanges();for(a=0;a<u.length;a++)this._replace(u[a],1,t);Ember.endPropertyChanges()}return this},pushObject:function(e){return this._insertAt(n(this,"content.length"),e),e},pushObjects:function(e){return this._replace(n(this,"length"),0,e),this},setObjects:function(e){if(e.length===0)return this.clear();var t=n(this,"length");return this._replace(0,t,e),this},unshiftObject:function(e){return this._insertAt(0,e),e},unshiftObjects:function(e){return this._replace(0,0,e),this},slice:function(){var e=this.toArray();return e.slice.apply(e,arguments)},arrangedContentArrayWillChange:function(e,t,n,r){this.arrayContentWillChange(t,n,r)},arrangedContentArrayDidChange:function(e,t,n,r){this.arrayContentDidChange(t,n,r)},init:function(){this._super(),this._setupContent(),this._setupArrangedContent()},willDestroy:function(){this._teardownArrangedContent(),this._teardownContent()}})}(),function(){function f(e,t){var n=t.slice(8);if(n in this)return;u(this,n)}function l(e,t){var n=t.slice(8);if(n in this)return;a(this,n)}var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.addBeforeObserver,i=Ember.addObserver,s=Ember.removeBeforeObserver,o=Ember.removeObserver,u=Ember.propertyWillChange,a=Ember.propertyDidChange;Ember.ObjectProxy=Ember.Object.extend({content:null,_contentDidChange:Ember.observer(function(){},"content"),isTruthy:Ember.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;r(this,t,null,f),i(this,t,null,l)},didUnwatchProperty:function(e){var t="content."+e;s(this,t,null,f),o(this,t,null,l)},unknownProperty:function(t){var n=e(this,"content");if(n)return e(n,t)},setUnknownProperty:function(n,r){var i=e(this,"content");return t(i,n,r)}}),Ember.ObjectProxy.reopenClass({create:function(){var e,t,n,r,i,s;if(arguments.length){t=this.proto();for(n=0,r=arguments.length;n<r;n++){i=arguments[n];for(s in i){if(!i.hasOwnProperty(s)||s in t)continue;e||(e={}),e[s]=null}}e&&this._initMixins([e])}return this._super.apply(this,arguments)}})}(),function(){function o(e,t,r,i,s){var o=r._objects,u;o||(o=r._objects={});while(--s>=i){var a=e.objectAt(s);a&&(Ember.addBeforeObserver(a,t,r,"contentKeyWillChange"),Ember.addObserver(a,t,r,"contentKeyDidChange"),u=n(a),o[u]||(o[u]=[]),o[u].push(s))}}function u(e,t,r,i,s){var o=r._objects;o||(o=r._objects={});var u,a;while(--s>=i){var f=e.objectAt(s);f&&(Ember.removeBeforeObserver(f,t,r,"contentKeyWillChange"),Ember.removeObserver(f,t,r,"contentKeyDidChange"),a=n(f),u=o[a],u[u.indexOf(s)]=null)}}var e=Ember.set,t=Ember.get,n=Ember.guidFor,r=Ember.EnumerableUtils.forEach,i=Ember.Object.extend(Ember.Array,{init:function(e,t,n){this._super(),this._keyName=t,this._owner=n,this._content=e},objectAt:function(e){var n=this._content.objectAt(e);return n&&t(n,this._keyName)},length:Ember.computed(function(){var e=this._content;return e?t(e,"length"):0})}),s=/^.+:(before|change)$/;Ember.EachProxy=Ember.Object.extend({init:function(e){this._super(),this._content=e,e.addArrayObserver(this),r(Ember.watchedEvents(this),function(e){this.didAddListener(e)},this)},unknownProperty:function(e,t){var n;return n=new i(this._content,e,this),Ember.defineProperty(this,e,null,n),this.beginObservingContentKey(e),n},arrayWillChange:function(e,t,n,r){var i=this._keys,s,o;o=n>0?t+n:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;o>0&&u(e,s,this,t,o),Ember.propertyWillChange(this,s)}Ember.propertyWillChange(this._content,"@each"),Ember.endPropertyChanges(this)},arrayDidChange:function(e,t,n,r){var i=this._keys,s,u;u=r>0?t+r:-1,Ember.beginPropertyChanges(this);for(s in i){if(!i.hasOwnProperty(s))continue;u>0&&o(e,s,this,t,u),Ember.propertyDidChange(this,s)}Ember.propertyDidChange(this._content,"@each"),Ember.endPropertyChanges(this)},didAddListener:function(e){s.test(e)&&this.beginObservingContentKey(e.slice(0,-7))},didRemoveListener:function(e){s.test(e)&&this.stopObservingContentKey(e.slice(0,-7))},beginObservingContentKey:function(e){var n=this._keys;n||(n=this._keys={});if(!n[e]){n[e]=1;var r=this._content,i=t(r,"length");o(r,e,this,0,i)}else n[e]++},stopObservingContentKey:function(e){var n=this._keys;if(n&&n[e]>0&&--n[e]<=0){var r=this._content,i=t(r,"length");u(r,e,this,0,i)}},contentKeyWillChange:function(e,t){Ember.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){Ember.propertyDidChange(this,t)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.Mixin.create(Ember.MutableArray,Ember.Observable,Ember.Copyable,{get:function(e){return e==="length"?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(t,n,r){if(this.isFrozen)throw Ember.FROZEN_ERROR;var i=r?e(r,"length"):0;this.arrayContentWillChange(t,n,i);if(!r||r.length===0)this.splice(t,n);else{var s=[t,n].concat(r);this.splice.apply(this,s)}return this.arrayContentDidChange(t,n,i),this},unknownProperty:function(e,t){var n;return t!==undefined&&n===undefined&&(n=this[e]=t),n},indexOf:function(e,t){var n,r=this.length;t===undefined?t=0:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n<r;n++)if(this[n]===e)return n;return-1},lastIndexOf:function(e,t){var n,r=this.length;t===undefined?t=r-1:t=t<0?Math.ceil(t):Math.floor(t),t<0&&(t+=r);for(n=t;n>=0;n--)if(this[n]===e)return n;return-1},copy:function(e){return e?this.map(function(e){return Ember.copy(e,!0)}):this.slice()}}),r=["length"];Ember.EnumerableUtils.forEach(n.keys(),function(e){Array.prototype[e]&&r.push(e)}),r.length>0&&(n=n.without.apply(n,r)),Ember.NativeArray=n,Ember.A=function(e){return e===undefined&&(e=[]),Ember.Array.detect(e)?e:Ember.NativeArray.apply(e)},Ember.NativeArray.activate=function(){n.apply(Array.prototype),Ember.A=function(e){return e||[]}},(Ember.EXTEND_PROTOTYPES===!0||Ember.EXTEND_PROTOTYPES.Array)&&Ember.NativeArray.activate()}(),function(){var e=Ember.get,t=Ember.set,n=Ember.guidFor,r=Ember.isNone,i=Ember.String.fmt;Ember.Set=Ember.CoreObject.extend(Ember.MutableEnumerable,Ember.Copyable,Ember.Freezable,{length:0,clear:function(){if(this.isFrozen)throw new Error(Ember.FROZEN_ERROR);var r=e(this,"length");if(r===0)return this;var i;this.enumerableContentWillChange(r,0),Ember.propertyWillChange(this,"firstObject"),Ember.propertyWillChange(this,"lastObject");for(var s=0;s<r;s++)i=n(this[s]),delete this[i],delete this[s];return t(this,"length",0),Ember.propertyDidChange(this,"firstObject"),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(r,0),this},isEqual:function(t){if(!Ember.Enumerable.detect(t))return!1;var n=e(this,"length");if(e(t,"length")!==n)return!1;while(--n>=0)if(!t.contains(this[n]))return!1;return!0},add:Ember.aliasMethod("addObject"),remove:Ember.aliasMethod("removeObject"),pop:function(){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);var t=this.length>0?this[this.length-1]:null;return this.remove(t),t},push:Ember.aliasMethod("addObject"),shift:Ember.aliasMethod("pop"),unshift:Ember.aliasMethod("push"),addEach:Ember.aliasMethod("addObjects"),removeEach:Ember.aliasMethod("removeObjects"),init:function(e){this._super(),e&&this.addObjects(e)},nextObject:function(e){return this[e]},firstObject:Ember.computed(function(){return this.length>0?this[0]:undefined}),lastObject:Ember.computed(function(){return this.length>0?this[this.length-1]:undefined}),addObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a;return o>=0&&o<u&&this[o]===i?this:(a=[i],this.enumerableContentWillChange(null,a),Ember.propertyWillChange(this,"lastObject"),u=e(this,"length"),this[s]=u,this[u]=i,t(this,"length",u+1),Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(null,a),this)},removeObject:function(i){if(e(this,"isFrozen"))throw new Error(Ember.FROZEN_ERROR);if(r(i))return this;var s=n(i),o=this[s],u=e(this,"length"),a=o===0,f=o===u-1,l,c;return o>=0&&o<u&&this[o]===i&&(c=[i],this.enumerableContentWillChange(c,null),a&&Ember.propertyWillChange(this,"firstObject"),f&&Ember.propertyWillChange(this,"lastObject"),o<u-1&&(l=this[u-1],this[o]=l,this[n(l)]=o),delete this[s],delete this[u-1],t(this,"length",u-1),a&&Ember.propertyDidChange(this,"firstObject"),f&&Ember.propertyDidChange(this,"lastObject"),this.enumerableContentDidChange(c,null)),this},contains:function(e){return this[n(e)]>=0},copy:function(){var r=this.constructor,i=new r,s=e(this,"length");t(i,"length",s);while(--s>=0)i[s]=this[s],i[n(this[s])]=s;return i},toString:function(){var e=this.length,t,n=[];for(t=0;t<e;t++)n[t]=this[t];return i("Ember.Set<%@>",[n.join(",")])}})}(),function(){var e=Ember.DeferredMixin,t=Ember.get,n=Ember.Object.extend(e);n.reopenClass({promise:function(e,r){var i=n.create();return e.call(r,i),t(i,"promise")}}),Ember.Deferred=n}(),function(){var e=Ember.ENV.EMBER_LOAD_HOOKS||{},t={};Ember.onLoad=function(n,r){var i;e[n]=e[n]||Ember.A(),e[n].pushObject(r),(i=t[n])&&r(i)},Ember.runLoadHooks=function(n,r){var i;t[n]=r,(i=e[n])&&e[n].forEach(function(e){e(r)})}}(),function(){}(),function(){var e=Ember.get;Ember.ControllerMixin=Ember.Mixin.create({isController:!0,target:null,container:null,store:null,model:Ember.computed.alias("content"),send:function(t){var n=[].slice.call(arguments,1),r;this[t]?this[t].apply(this,n):(r=e(this,"target"))&&r.send.apply(r,arguments)}}),Ember.Controller=Ember.Object.extend(Ember.ControllerMixin)}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach;Ember.SortableMixin=Ember.Mixin.create(Ember.MutableEnumerable,{sortProperties:null,sortAscending:!0,orderBy:function(t,r){var i=0,s=e(this,"sortProperties"),o=e(this,"sortAscending");return n(s,function(n){i===0&&(i=Ember.compare(e(t,n),e(r,n)),i!==0&&!o&&(i=-1*i))}),i},destroy:function(){var t=e(this,"content"),r=e(this,"sortProperties");return t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},isSorted:Ember.computed.bool("sortProperties"),arrangedContent:Ember.computed("content","sortProperties.@each",function(t,r){var i=e(this,"content"),s=e(this,"isSorted"),o=e(this,"sortProperties"),u=this;return i&&s?(i=i.slice(),i.sort(function(e,t){return u.orderBy(e,t)}),n(i,function(e){n(o,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),Ember.A(i)):i}),_contentWillChange:Ember.beforeObserver(function(){var t=e(this,"content"),r=e(this,"sortProperties");t&&r&&n(t,function(e){n(r,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this),this._super()},"content"),sortAscendingWillChange:Ember.beforeObserver(function(){this._lastSortAscending=e(this,"sortAscending")},"sortAscending"),sortAscendingDidChange:Ember.observer(function(){if(e(this,"sortAscending")!==this._lastSortAscending){var t=e(this,"arrangedContent");t.reverseObjects()}},"sortAscending"),contentArrayWillChange:function(t,r,i,s){var o=e(this,"isSorted");if(o){var u=e(this,"arrangedContent"),a=t.slice(r,r+i),f=e(this,"sortProperties");n(a,function(e){u.removeObject(e),n(f,function(t){Ember.removeObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},contentArrayDidChange:function(t,r,i,s){var o=e(this,"isSorted"),u=e(this,"sortProperties");if(o){var a=t.slice(r,r+s);n(a,function(e){this.insertItemSorted(e),n(u,function(t){Ember.addObserver(e,t,this,"contentItemSortPropertyDidChange")},this)},this)}return this._super(t,r,i,s)},insertItemSorted:function(t){var n=e(this,"arrangedContent"),r=e(n,"length"),i=this._binarySearch(t,0,r);n.insertAt(i,t)},contentItemSortPropertyDidChange:function(t){var n=e(this,"arrangedContent"),r=n.indexOf(t),i=n.objectAt(r-1),s=n.objectAt(r+1),o=i&&this.orderBy(t,i),u=s&&this.orderBy(t,s);if(o<0||u>0)n.removeObject(t),this.insertItemSorted(t)},_binarySearch:function(t,n,r){var i,s,o,u;return n===r?n:(u=e(this,"arrangedContent"),i=n+Math.floor((r-n)/2),s=u.objectAt(i),o=this.orderBy(s,t),o<0?this._binarySearch(t,i+1,r):o>0?this._binarySearch(t,n,i):i)}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.EnumerableUtils.forEach,r=Ember.EnumerableUtils.replace;Ember.ArrayController=Ember.ArrayProxy.extend(Ember.ControllerMixin,Ember.SortableMixin,{itemController:null,lookupItemController:function(t){return e(this,"itemController")},objectAtContent:function(t){var n=e(this,"length"),r=e(this,"arrangedContent"),i=r&&r.objectAt(t);if(t>=0&&t<n){var s=this.lookupItemController(i);if(s)return this.controllerAt(t,i,s)}return i},arrangedContentDidChange:function(){this._super(),this._resetSubControllers()},arrayContentDidChange:function(t,i,s){var o=e(this,"_subControllers"),u=o.slice(t,t+i);n(u,function(e){e&&e.destroy()}),r(o,t,i,new Array(s)),this._super(t,i,s)},init:function(){this.get("content")||Ember.defineProperty(this,"content",undefined,Ember.A()),this._super(),this.set("_subControllers",Ember.A())},controllerAt:function(t,n,r){var i=e(this,"container"),s=e(this,"_subControllers"),o=s[t];o||(o=i.lookup("controller:"+r,{singleton:!1}),s[t]=o);if(!o)throw new Error('Could not resolve itemController: "'+r+'"');return o.set("target",this),o.set("content",n),o},_subControllers:null,_resetSubControllers:function(){var t=e(this,"_subControllers");n(t,function(e){e&&e.destroy()}),this.set("_subControllers",Ember.A())}})}(),function(){Ember.ObjectController=Ember.ObjectProxy.extend(Ember.ControllerMixin)}(),function(){}(),function(){}(),function(){var e=Ember.get,t=Ember.set;Ember.State=Ember.Object.extend(Ember.Evented,{isState:!0,parentState:null,start:null,name:null,path:Ember.computed(function(){var t=e(this,"parentState.path"),n=e(this,"name");return t&&(n=t+"."+n),n}),trigger:function(e){this[e]&&this[e].apply(this,[].slice.call(arguments,1)),this._super.apply(this,arguments)},init:function(){var n=e(this,"states");t(this,"childStates",Ember.A()),t(this,"eventTransitions",e(this,"eventTransitions")||{});var r,i,s;if(!n){n={};for(r in this){if(r==="constructor")continue;if(i=this[r]){if(s=i.transitionTarget)this.eventTransitions[r]=s;this.setupChild(n,r,i)}}t(this,"states",n)}else for(r in n)this.setupChild(n,r,n[r]);t(this,"pathsCache",{}),t(this,"pathsCacheNoContext",{})},setupChild:function(n,r,i){if(!i)return!1;i.isState?t(i,"name",r):Ember.State.detect(i)&&(i=i.create({name:r}));if(i.isState)return t(i,"parentState",this),e(this,"childStates").pushObject(i),n[r]=i,i},lookupEventTransition:function(e){var t,n=this;while(n&&!t)t=n.eventTransitions[e],n=n.get("parentState");return t},isLeaf:Ember.computed(function(){return!e(this,"childStates").length}),hasContext:!0,setup:Ember.K,enter:Ember.K,exit:Ember.K}),Ember.State.reopenClass({transitionTo:function(e){var t=function(t,n){var r=[],i=Ember.$&&Ember.$.Event;n&&i&&n instanceof i?n.hasOwnProperty("contexts")&&(r=n.contexts.slice()):r=[].slice.call(arguments,1),r.unshift(e),t.transitionTo.apply(t,r)};return t.transitionTarget=e,t}})}(),function(){var e=Ember.get,t=Ember.set,n=Ember.String.fmt,r=Ember.ArrayPolyfills.forEach,i=function(e){this.enterStates=e.enterStates.slice(),this.exitStates=e.exitStates.slice(),this.resolveState=e.resolveState,this.finalState=e.enterStates[e.enterStates.length-1]||e.resolveState};i.prototype={normalize:function(e,t){return this.matchContextsToStates(t),this.addInitialStates(),this.removeUnchangedContexts(e),this},matchContextsToStates:function(t){var n=this.enterStates.length-1,r=[],i,s;while(t.length>0){if(n>=0)i=this.enterStates[n--];else{if(this.enterStates.length){i=e(this.enterStates[0],"parentState");if(!i)throw"Cannot match all contexts to states"}else i=this.resolveState;this.enterStates.unshift(i),this.exitStates.unshift(i)}e(i,"hasContext")?s=t.pop():s=null,r.unshift(s)}this.contexts=r},addInitialStates:function(){var t=this.finalState,n;for(;;){n=e(t,"initialState")||"start",t=e(t,"states."+n);if(!t)break;this.finalState=t,this.enterStates.push(t),this.contexts.push(undefined)}},removeUnchangedContexts:function(e){while(this.enterStates.length>0){if(this.enterStates[0]!==this.exitStates[0])break;if(this.enterStates.length===this.contexts.length){if(e.getStateMeta(this.enterStates[0],"context")!==this.contexts[0])break;this.contexts.shift()}this.resolveState=this.enterStates.shift(),this.exitStates.shift()}}};var s=function(t,r,i){var u=this.enableLogging,a=i?"unhandledEvent":t,f=r[a],l,c,h;l=[].slice.call(arguments,3);if(typeof f=="function")return u&&(i?Ember.Logger.log(n("STATEMANAGER: Unhandled event '%@' being sent to state %@.",[t,e(r,"path")])):Ember.Logger.log(n("STATEMANAGER: Sending event '%@' to state %@.",[t,e(r,"path")]))),h=l,i&&h.unshift(t),h.unshift(this),f.apply(r,h);var p=e(r,"parentState");if(p)return c=l,c.unshift(t,p,i),s.apply(this,c);if(!i)return o.call(this,t,l,!0)},o=function(t,n,r){return n.unshift(t,e(this,"currentState"),r),s.apply(this,n)};Ember.StateManager=Ember.State.extend({init:function(){this._super(),t(this,"stateMeta",Ember.Map.create());var n=e(this,"initialState");!n&&e(this,"states.start")&&(n="start"),n&&this.transitionTo(n)},stateMetaFor:function(t){var n=e(this,"stateMeta"),r=n.get(t);return r||(r={},n.set(t,r)),r},setStateMeta:function(e,n,r){return t(this.stateMetaFor(e),n,r)},getStateMeta:function(t,n){return e(this.stateMetaFor(t),n)},currentState:null,currentPath:Ember.computed.alias("currentState.path"),transitionEvent:"setup",errorOnUnhandledEvent:!0,send:function(e){var t=[].slice.call(arguments,1);return o.call(this,e,t,!1)},unhandledEvent:function(t,n){if(e(this,"errorOnUnhandledEvent"))throw new Ember.Error(this.toString()+" could not respond to event "+n+" in state "+e(this,"currentState.path")+".")},getStateByPath:function(t,n){var r=n.split("."),i=t;for(var s=0,o=r.length;s<o;s++){i=e(e(i,"states"),r[s]);if(!i)break}return i},findStateByPath:function(t,n){var r;while(!r&&t)r=this.getStateByPath(t,n),t=e(t,"parentState");return r},getStatesInPath:function(t,n){if(!n||n==="")return undefined;var r=n.split("."),i=[],s,o;for(var u=0,a=r.length;u<a;u++){s=e(t,"states");if(!s)return undefined;o=e(s,r[u]);if(!o)return undefined;t=o,i.push(o)}return i},goToState:function(){return this.transitionTo.apply(this,arguments)},transitionTo:function(t,n){if(Ember.isEmpty(t))return;var r=n?Array.prototype.slice.call(arguments,1):[],s=e(this,"currentState")||this,o=this.contextFreeTransition(s,t),u=(new i(o)).normalize(this,r);this.enterState(u),this.triggerSetupContext(u)},contextFreeTransition:function(t,n){var r=t.pathsCache[n];if(r)return r;var i=this.getStatesInPath(t,n),s=[],o=t;while(o&&!i){s.unshift(o),o=e(o,"parentState");if(!o){i=this.getStatesInPath(this,n);if(!i)return}i=this.getStatesInPath(o,n)}while(i.length>0&&i[0]===s[0])o=i.shift(),s.shift();var u=t.pathsCache[n]={exitStates:s,enterStates:i,resolveState:o};return u},triggerSetupContext:function(t){var n=t.contexts,i=t.enterStates.length-n.length,s=t.enterStates,o=e(this,"transitionEvent");r.call(s,function(e,t){e.trigger(o,this,n[t-i])},this)},getState:function(t){var n=e(this,t),r=e(this,"parentState");if(n)return n;if(r)return r.getState(t)},enterState:function(n){var i=this.enableLogging,s=n.exitStates.slice(0).reverse();r.call(s,function(e){e.trigger("exit",this)},this),r.call(n.enterStates,function(t){i&&Ember.Logger.log("STATEMANAGER: Entering "+e(t,"path")),t.trigger("enter",this)},this),t(this,"currentState",n.finalState)}})}(),function(){}()})(),typeof location!="undefined"&&(location.hostname==="localhost"||location.hostname==="127.0.0.1")&&console.warn("You are running a production build of Ember on localhost and won't receive detailed error messages. If you want full error messages please use the non-minified build provided on the Ember website.");
|
@@ -477,6 +477,159 @@ if (Ember.ENV.MANDATORY_SETTER && !platform.hasPropertyAccessors) {
|
|
477
477
|
|
478
478
|
|
479
479
|
|
480
|
+
(function() {
|
481
|
+
var utils = Ember.EnumerableUtils = {
|
482
|
+
map: function(obj, callback, thisArg) {
|
483
|
+
return obj.map ? obj.map.call(obj, callback, thisArg) : Array.prototype.map.call(obj, callback, thisArg);
|
484
|
+
},
|
485
|
+
|
486
|
+
forEach: function(obj, callback, thisArg) {
|
487
|
+
return obj.forEach ? obj.forEach.call(obj, callback, thisArg) : Array.prototype.forEach.call(obj, callback, thisArg);
|
488
|
+
},
|
489
|
+
|
490
|
+
indexOf: function(obj, element, index) {
|
491
|
+
return obj.indexOf ? obj.indexOf.call(obj, element, index) : Array.prototype.indexOf.call(obj, element, index);
|
492
|
+
},
|
493
|
+
|
494
|
+
indexesOf: function(obj, elements) {
|
495
|
+
return elements === undefined ? [] : utils.map(elements, function(item) {
|
496
|
+
return utils.indexOf(obj, item);
|
497
|
+
});
|
498
|
+
},
|
499
|
+
|
500
|
+
addObject: function(array, item) {
|
501
|
+
var index = utils.indexOf(array, item);
|
502
|
+
if (index === -1) { array.push(item); }
|
503
|
+
},
|
504
|
+
|
505
|
+
removeObject: function(array, item) {
|
506
|
+
var index = utils.indexOf(array, item);
|
507
|
+
if (index !== -1) { array.splice(index, 1); }
|
508
|
+
},
|
509
|
+
|
510
|
+
replace: function(array, idx, amt, objects) {
|
511
|
+
if (array.replace) {
|
512
|
+
return array.replace(idx, amt, objects);
|
513
|
+
} else {
|
514
|
+
var args = Array.prototype.concat.apply([idx, amt], objects);
|
515
|
+
return array.splice.apply(array, args);
|
516
|
+
}
|
517
|
+
},
|
518
|
+
|
519
|
+
intersection: function(array1, array2) {
|
520
|
+
var intersection = [];
|
521
|
+
|
522
|
+
array1.forEach(function(element) {
|
523
|
+
if (array2.indexOf(element) >= 0) {
|
524
|
+
intersection.push(element);
|
525
|
+
}
|
526
|
+
});
|
527
|
+
|
528
|
+
return intersection;
|
529
|
+
}
|
530
|
+
};
|
531
|
+
|
532
|
+
})();
|
533
|
+
|
534
|
+
|
535
|
+
|
536
|
+
(function() {
|
537
|
+
/*jshint newcap:false*/
|
538
|
+
/**
|
539
|
+
@module ember-metal
|
540
|
+
*/
|
541
|
+
|
542
|
+
// NOTE: There is a bug in jshint that doesn't recognize `Object()` without `new`
|
543
|
+
// as being ok unless both `newcap:false` and not `use strict`.
|
544
|
+
// https://github.com/jshint/jshint/issues/392
|
545
|
+
|
546
|
+
// Testing this is not ideal, but we want to use native functions
|
547
|
+
// if available, but not to use versions created by libraries like Prototype
|
548
|
+
var isNativeFunc = function(func) {
|
549
|
+
// This should probably work in all browsers likely to have ES5 array methods
|
550
|
+
return func && Function.prototype.toString.call(func).indexOf('[native code]') > -1;
|
551
|
+
};
|
552
|
+
|
553
|
+
// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/map
|
554
|
+
var arrayMap = isNativeFunc(Array.prototype.map) ? Array.prototype.map : function(fun /*, thisp */) {
|
555
|
+
//"use strict";
|
556
|
+
|
557
|
+
if (this === void 0 || this === null) {
|
558
|
+
throw new TypeError();
|
559
|
+
}
|
560
|
+
|
561
|
+
var t = Object(this);
|
562
|
+
var len = t.length >>> 0;
|
563
|
+
if (typeof fun !== "function") {
|
564
|
+
throw new TypeError();
|
565
|
+
}
|
566
|
+
|
567
|
+
var res = new Array(len);
|
568
|
+
var thisp = arguments[1];
|
569
|
+
for (var i = 0; i < len; i++) {
|
570
|
+
if (i in t) {
|
571
|
+
res[i] = fun.call(thisp, t[i], i, t);
|
572
|
+
}
|
573
|
+
}
|
574
|
+
|
575
|
+
return res;
|
576
|
+
};
|
577
|
+
|
578
|
+
// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
|
579
|
+
var arrayForEach = isNativeFunc(Array.prototype.forEach) ? Array.prototype.forEach : function(fun /*, thisp */) {
|
580
|
+
//"use strict";
|
581
|
+
|
582
|
+
if (this === void 0 || this === null) {
|
583
|
+
throw new TypeError();
|
584
|
+
}
|
585
|
+
|
586
|
+
var t = Object(this);
|
587
|
+
var len = t.length >>> 0;
|
588
|
+
if (typeof fun !== "function") {
|
589
|
+
throw new TypeError();
|
590
|
+
}
|
591
|
+
|
592
|
+
var thisp = arguments[1];
|
593
|
+
for (var i = 0; i < len; i++) {
|
594
|
+
if (i in t) {
|
595
|
+
fun.call(thisp, t[i], i, t);
|
596
|
+
}
|
597
|
+
}
|
598
|
+
};
|
599
|
+
|
600
|
+
var arrayIndexOf = isNativeFunc(Array.prototype.indexOf) ? Array.prototype.indexOf : function (obj, fromIndex) {
|
601
|
+
if (fromIndex === null || fromIndex === undefined) { fromIndex = 0; }
|
602
|
+
else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); }
|
603
|
+
for (var i = fromIndex, j = this.length; i < j; i++) {
|
604
|
+
if (this[i] === obj) { return i; }
|
605
|
+
}
|
606
|
+
return -1;
|
607
|
+
};
|
608
|
+
|
609
|
+
Ember.ArrayPolyfills = {
|
610
|
+
map: arrayMap,
|
611
|
+
forEach: arrayForEach,
|
612
|
+
indexOf: arrayIndexOf
|
613
|
+
};
|
614
|
+
|
615
|
+
if (Ember.SHIM_ES5) {
|
616
|
+
if (!Array.prototype.map) {
|
617
|
+
Array.prototype.map = arrayMap;
|
618
|
+
}
|
619
|
+
|
620
|
+
if (!Array.prototype.forEach) {
|
621
|
+
Array.prototype.forEach = arrayForEach;
|
622
|
+
}
|
623
|
+
|
624
|
+
if (!Array.prototype.indexOf) {
|
625
|
+
Array.prototype.indexOf = arrayIndexOf;
|
626
|
+
}
|
627
|
+
}
|
628
|
+
|
629
|
+
})();
|
630
|
+
|
631
|
+
|
632
|
+
|
480
633
|
(function() {
|
481
634
|
/**
|
482
635
|
@module ember-metal
|
@@ -879,7 +1032,7 @@ Ember.canInvoke = canInvoke;
|
|
879
1032
|
@param {Object} obj The object to check for the method
|
880
1033
|
@param {String} methodName The method name to check for
|
881
1034
|
@param {Array} [args] The arguments to pass to the method
|
882
|
-
@return {
|
1035
|
+
@return {*} the return value of the invoked method or undefined if it cannot be invoked
|
883
1036
|
*/
|
884
1037
|
Ember.tryInvoke = function(obj, methodName, args) {
|
885
1038
|
if (canInvoke(obj, methodName)) {
|
@@ -910,7 +1063,7 @@ var needsFinallyFix = (function() {
|
|
910
1063
|
@param {Function} tryable The function to run the try callback
|
911
1064
|
@param {Function} finalizer The function to run the finally callback
|
912
1065
|
@param [binding]
|
913
|
-
@return {
|
1066
|
+
@return {*} The return value is the that of the finalizer,
|
914
1067
|
unless that valueis undefined, in which case it is the return value
|
915
1068
|
of the tryable
|
916
1069
|
*/
|
@@ -961,7 +1114,7 @@ if (needsFinallyFix) {
|
|
961
1114
|
@param {Function} catchable The function to run the catchable callback
|
962
1115
|
@param {Function} finalizer The function to run the finally callback
|
963
1116
|
@param [binding]
|
964
|
-
@return {
|
1117
|
+
@return {*} The return value is the that of the finalizer,
|
965
1118
|
unless that value is undefined, in which case it is the return value
|
966
1119
|
of the tryable.
|
967
1120
|
*/
|
@@ -1005,6 +1158,78 @@ if (needsFinallyFix) {
|
|
1005
1158
|
};
|
1006
1159
|
}
|
1007
1160
|
|
1161
|
+
// ........................................
|
1162
|
+
// TYPING & ARRAY MESSAGING
|
1163
|
+
//
|
1164
|
+
|
1165
|
+
var TYPE_MAP = {};
|
1166
|
+
var t = "Boolean Number String Function Array Date RegExp Object".split(" ");
|
1167
|
+
Ember.ArrayPolyfills.forEach.call(t, function(name) {
|
1168
|
+
TYPE_MAP[ "[object " + name + "]" ] = name.toLowerCase();
|
1169
|
+
});
|
1170
|
+
|
1171
|
+
var toString = Object.prototype.toString;
|
1172
|
+
|
1173
|
+
/**
|
1174
|
+
Returns a consistent type for the passed item.
|
1175
|
+
|
1176
|
+
Use this instead of the built-in `typeof` to get the type of an item.
|
1177
|
+
It will return the same result across all browsers and includes a bit
|
1178
|
+
more detail. Here is what will be returned:
|
1179
|
+
|
1180
|
+
| Return Value | Meaning |
|
1181
|
+
|---------------|------------------------------------------------------|
|
1182
|
+
| 'string' | String primitive |
|
1183
|
+
| 'number' | Number primitive |
|
1184
|
+
| 'boolean' | Boolean primitive |
|
1185
|
+
| 'null' | Null value |
|
1186
|
+
| 'undefined' | Undefined value |
|
1187
|
+
| 'function' | A function |
|
1188
|
+
| 'array' | An instance of Array |
|
1189
|
+
| 'class' | An Ember class (created using Ember.Object.extend()) |
|
1190
|
+
| 'instance' | An Ember object instance |
|
1191
|
+
| 'error' | An instance of the Error object |
|
1192
|
+
| 'object' | A JavaScript object not inheriting from Ember.Object |
|
1193
|
+
|
1194
|
+
Examples:
|
1195
|
+
|
1196
|
+
```javascript
|
1197
|
+
Ember.typeOf(); // 'undefined'
|
1198
|
+
Ember.typeOf(null); // 'null'
|
1199
|
+
Ember.typeOf(undefined); // 'undefined'
|
1200
|
+
Ember.typeOf('michael'); // 'string'
|
1201
|
+
Ember.typeOf(101); // 'number'
|
1202
|
+
Ember.typeOf(true); // 'boolean'
|
1203
|
+
Ember.typeOf(Ember.makeArray); // 'function'
|
1204
|
+
Ember.typeOf([1,2,90]); // 'array'
|
1205
|
+
Ember.typeOf(Ember.Object.extend()); // 'class'
|
1206
|
+
Ember.typeOf(Ember.Object.create()); // 'instance'
|
1207
|
+
Ember.typeOf(new Error('teamocil')); // 'error'
|
1208
|
+
|
1209
|
+
// "normal" JavaScript object
|
1210
|
+
Ember.typeOf({a: 'b'}); // 'object'
|
1211
|
+
```
|
1212
|
+
|
1213
|
+
@method typeOf
|
1214
|
+
@for Ember
|
1215
|
+
@param {Object} item the item to check
|
1216
|
+
@return {String} the type
|
1217
|
+
*/
|
1218
|
+
Ember.typeOf = function(item) {
|
1219
|
+
var ret;
|
1220
|
+
|
1221
|
+
ret = (item === null || item === undefined) ? String(item) : TYPE_MAP[toString.call(item)] || 'object';
|
1222
|
+
|
1223
|
+
if (ret === 'function') {
|
1224
|
+
if (Ember.Object && Ember.Object.detect(item)) ret = 'class';
|
1225
|
+
} else if (ret === 'object') {
|
1226
|
+
if (item instanceof Error) ret = 'error';
|
1227
|
+
else if (Ember.Object && item instanceof Ember.Object) ret = 'instance';
|
1228
|
+
else ret = 'object';
|
1229
|
+
}
|
1230
|
+
|
1231
|
+
return ret;
|
1232
|
+
};
|
1008
1233
|
})();
|
1009
1234
|
|
1010
1235
|
|
@@ -1185,178 +1410,25 @@ Ember.subscribe = Ember.Instrumentation.subscribe;
|
|
1185
1410
|
|
1186
1411
|
|
1187
1412
|
(function() {
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
},
|
1413
|
+
/**
|
1414
|
+
@module ember-metal
|
1415
|
+
*/
|
1192
1416
|
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1417
|
+
/*
|
1418
|
+
JavaScript (before ES6) does not have a Map implementation. Objects,
|
1419
|
+
which are often used as dictionaries, may only have Strings as keys.
|
1196
1420
|
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1421
|
+
Because Ember has a way to get a unique identifier for every object
|
1422
|
+
via `Ember.guidFor`, we can implement a performant Map with arbitrary
|
1423
|
+
keys. Because it is commonly used in low-level bookkeeping, Map is
|
1424
|
+
implemented as a pure JavaScript object for performance.
|
1200
1425
|
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
addObject: function(array, item) {
|
1208
|
-
var index = utils.indexOf(array, item);
|
1209
|
-
if (index === -1) { array.push(item); }
|
1210
|
-
},
|
1211
|
-
|
1212
|
-
removeObject: function(array, item) {
|
1213
|
-
var index = utils.indexOf(array, item);
|
1214
|
-
if (index !== -1) { array.splice(index, 1); }
|
1215
|
-
},
|
1216
|
-
|
1217
|
-
replace: function(array, idx, amt, objects) {
|
1218
|
-
if (array.replace) {
|
1219
|
-
return array.replace(idx, amt, objects);
|
1220
|
-
} else {
|
1221
|
-
var args = Array.prototype.concat.apply([idx, amt], objects);
|
1222
|
-
return array.splice.apply(array, args);
|
1223
|
-
}
|
1224
|
-
},
|
1225
|
-
|
1226
|
-
intersection: function(array1, array2) {
|
1227
|
-
var intersection = [];
|
1228
|
-
|
1229
|
-
array1.forEach(function(element) {
|
1230
|
-
if (array2.indexOf(element) >= 0) {
|
1231
|
-
intersection.push(element);
|
1232
|
-
}
|
1233
|
-
});
|
1234
|
-
|
1235
|
-
return intersection;
|
1236
|
-
}
|
1237
|
-
};
|
1238
|
-
|
1239
|
-
})();
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
(function() {
|
1244
|
-
/*jshint newcap:false*/
|
1245
|
-
/**
|
1246
|
-
@module ember-metal
|
1247
|
-
*/
|
1248
|
-
|
1249
|
-
// NOTE: There is a bug in jshint that doesn't recognize `Object()` without `new`
|
1250
|
-
// as being ok unless both `newcap:false` and not `use strict`.
|
1251
|
-
// https://github.com/jshint/jshint/issues/392
|
1252
|
-
|
1253
|
-
// Testing this is not ideal, but we want to use native functions
|
1254
|
-
// if available, but not to use versions created by libraries like Prototype
|
1255
|
-
var isNativeFunc = function(func) {
|
1256
|
-
// This should probably work in all browsers likely to have ES5 array methods
|
1257
|
-
return func && Function.prototype.toString.call(func).indexOf('[native code]') > -1;
|
1258
|
-
};
|
1259
|
-
|
1260
|
-
// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/map
|
1261
|
-
var arrayMap = isNativeFunc(Array.prototype.map) ? Array.prototype.map : function(fun /*, thisp */) {
|
1262
|
-
//"use strict";
|
1263
|
-
|
1264
|
-
if (this === void 0 || this === null) {
|
1265
|
-
throw new TypeError();
|
1266
|
-
}
|
1267
|
-
|
1268
|
-
var t = Object(this);
|
1269
|
-
var len = t.length >>> 0;
|
1270
|
-
if (typeof fun !== "function") {
|
1271
|
-
throw new TypeError();
|
1272
|
-
}
|
1273
|
-
|
1274
|
-
var res = new Array(len);
|
1275
|
-
var thisp = arguments[1];
|
1276
|
-
for (var i = 0; i < len; i++) {
|
1277
|
-
if (i in t) {
|
1278
|
-
res[i] = fun.call(thisp, t[i], i, t);
|
1279
|
-
}
|
1280
|
-
}
|
1281
|
-
|
1282
|
-
return res;
|
1283
|
-
};
|
1284
|
-
|
1285
|
-
// From: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach
|
1286
|
-
var arrayForEach = isNativeFunc(Array.prototype.forEach) ? Array.prototype.forEach : function(fun /*, thisp */) {
|
1287
|
-
//"use strict";
|
1288
|
-
|
1289
|
-
if (this === void 0 || this === null) {
|
1290
|
-
throw new TypeError();
|
1291
|
-
}
|
1292
|
-
|
1293
|
-
var t = Object(this);
|
1294
|
-
var len = t.length >>> 0;
|
1295
|
-
if (typeof fun !== "function") {
|
1296
|
-
throw new TypeError();
|
1297
|
-
}
|
1298
|
-
|
1299
|
-
var thisp = arguments[1];
|
1300
|
-
for (var i = 0; i < len; i++) {
|
1301
|
-
if (i in t) {
|
1302
|
-
fun.call(thisp, t[i], i, t);
|
1303
|
-
}
|
1304
|
-
}
|
1305
|
-
};
|
1306
|
-
|
1307
|
-
var arrayIndexOf = isNativeFunc(Array.prototype.indexOf) ? Array.prototype.indexOf : function (obj, fromIndex) {
|
1308
|
-
if (fromIndex === null || fromIndex === undefined) { fromIndex = 0; }
|
1309
|
-
else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); }
|
1310
|
-
for (var i = fromIndex, j = this.length; i < j; i++) {
|
1311
|
-
if (this[i] === obj) { return i; }
|
1312
|
-
}
|
1313
|
-
return -1;
|
1314
|
-
};
|
1315
|
-
|
1316
|
-
Ember.ArrayPolyfills = {
|
1317
|
-
map: arrayMap,
|
1318
|
-
forEach: arrayForEach,
|
1319
|
-
indexOf: arrayIndexOf
|
1320
|
-
};
|
1321
|
-
|
1322
|
-
if (Ember.SHIM_ES5) {
|
1323
|
-
if (!Array.prototype.map) {
|
1324
|
-
Array.prototype.map = arrayMap;
|
1325
|
-
}
|
1326
|
-
|
1327
|
-
if (!Array.prototype.forEach) {
|
1328
|
-
Array.prototype.forEach = arrayForEach;
|
1329
|
-
}
|
1330
|
-
|
1331
|
-
if (!Array.prototype.indexOf) {
|
1332
|
-
Array.prototype.indexOf = arrayIndexOf;
|
1333
|
-
}
|
1334
|
-
}
|
1335
|
-
|
1336
|
-
})();
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
(function() {
|
1341
|
-
/**
|
1342
|
-
@module ember-metal
|
1343
|
-
*/
|
1344
|
-
|
1345
|
-
/*
|
1346
|
-
JavaScript (before ES6) does not have a Map implementation. Objects,
|
1347
|
-
which are often used as dictionaries, may only have Strings as keys.
|
1348
|
-
|
1349
|
-
Because Ember has a way to get a unique identifier for every object
|
1350
|
-
via `Ember.guidFor`, we can implement a performant Map with arbitrary
|
1351
|
-
keys. Because it is commonly used in low-level bookkeeping, Map is
|
1352
|
-
implemented as a pure JavaScript object for performance.
|
1353
|
-
|
1354
|
-
This implementation follows the current iteration of the ES6 proposal for
|
1355
|
-
maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
|
1356
|
-
with two exceptions. First, because we need our implementation to be pleasant
|
1357
|
-
on older browsers, we do not use the `delete` name (using `remove` instead).
|
1358
|
-
Second, as we do not have the luxury of in-VM iteration, we implement a
|
1359
|
-
forEach method for iteration.
|
1426
|
+
This implementation follows the current iteration of the ES6 proposal for
|
1427
|
+
maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
|
1428
|
+
with two exceptions. First, because we need our implementation to be pleasant
|
1429
|
+
on older browsers, we do not use the `delete` name (using `remove` instead).
|
1430
|
+
Second, as we do not have the luxury of in-VM iteration, we implement a
|
1431
|
+
forEach method for iteration.
|
1360
1432
|
|
1361
1433
|
Map is mocked out to look like an Ember object, so you can do
|
1362
1434
|
`Ember.Map.create()` for symmetry with other Ember classes.
|
@@ -1543,8 +1615,8 @@ Map.prototype = {
|
|
1543
1615
|
Retrieve the value associated with a given key.
|
1544
1616
|
|
1545
1617
|
@method get
|
1546
|
-
@param {
|
1547
|
-
@return {
|
1618
|
+
@param {*} key
|
1619
|
+
@return {*} the value associated with the key, or `undefined`
|
1548
1620
|
*/
|
1549
1621
|
get: function(key) {
|
1550
1622
|
var values = this.values,
|
@@ -1558,8 +1630,8 @@ Map.prototype = {
|
|
1558
1630
|
provided, the new value will replace the old value.
|
1559
1631
|
|
1560
1632
|
@method set
|
1561
|
-
@param {
|
1562
|
-
@param {
|
1633
|
+
@param {*} key
|
1634
|
+
@param {*} value
|
1563
1635
|
*/
|
1564
1636
|
set: function(key, value) {
|
1565
1637
|
var keys = this.keys,
|
@@ -1574,7 +1646,7 @@ Map.prototype = {
|
|
1574
1646
|
Removes a value from the map for an associated key.
|
1575
1647
|
|
1576
1648
|
@method remove
|
1577
|
-
@param {
|
1649
|
+
@param {*} key
|
1578
1650
|
@return {Boolean} true if an item was removed, false otherwise
|
1579
1651
|
*/
|
1580
1652
|
remove: function(key) {
|
@@ -1599,7 +1671,7 @@ Map.prototype = {
|
|
1599
1671
|
Check whether a key is present.
|
1600
1672
|
|
1601
1673
|
@method has
|
1602
|
-
@param {
|
1674
|
+
@param {*} key
|
1603
1675
|
@return {Boolean} true if the item was present, false otherwise
|
1604
1676
|
*/
|
1605
1677
|
has: function(key) {
|
@@ -1617,7 +1689,7 @@ Map.prototype = {
|
|
1617
1689
|
|
1618
1690
|
@method forEach
|
1619
1691
|
@param {Function} callback
|
1620
|
-
@param {
|
1692
|
+
@param {*} self if passed, the `this` value inside the
|
1621
1693
|
callback. By default, `this` is the map.
|
1622
1694
|
*/
|
1623
1695
|
forEach: function(callback, self) {
|
@@ -1646,7 +1718,7 @@ Map.prototype = {
|
|
1646
1718
|
@private
|
1647
1719
|
@constructor
|
1648
1720
|
@param [options]
|
1649
|
-
@param {
|
1721
|
+
@param {*} [options.defaultValue]
|
1650
1722
|
*/
|
1651
1723
|
var MapWithDefault = Ember.MapWithDefault = function(options) {
|
1652
1724
|
Map.call(this);
|
@@ -1657,7 +1729,7 @@ var MapWithDefault = Ember.MapWithDefault = function(options) {
|
|
1657
1729
|
@method create
|
1658
1730
|
@static
|
1659
1731
|
@param [options]
|
1660
|
-
@param {
|
1732
|
+
@param {*} [options.defaultValue]
|
1661
1733
|
@return {Ember.MapWithDefault|Ember.Map} If options are passed, returns
|
1662
1734
|
`Ember.MapWithDefault` otherwise returns `Ember.Map`
|
1663
1735
|
*/
|
@@ -1675,8 +1747,8 @@ MapWithDefault.prototype = Ember.create(Map.prototype);
|
|
1675
1747
|
Retrieve the value associated with a given key.
|
1676
1748
|
|
1677
1749
|
@method get
|
1678
|
-
@param {
|
1679
|
-
@return {
|
1750
|
+
@param {*} key
|
1751
|
+
@return {*} the value associated with the key, or the default value
|
1680
1752
|
*/
|
1681
1753
|
MapWithDefault.prototype.get = function(key) {
|
1682
1754
|
var hasValue = this.has(key);
|
@@ -1709,11 +1781,10 @@ MapWithDefault.prototype.copy = function() {
|
|
1709
1781
|
@module ember-metal
|
1710
1782
|
*/
|
1711
1783
|
|
1712
|
-
var META_KEY = Ember.META_KEY, get
|
1784
|
+
var META_KEY = Ember.META_KEY, get;
|
1713
1785
|
|
1714
1786
|
var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
|
1715
1787
|
|
1716
|
-
var IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/;
|
1717
1788
|
var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.\*]/;
|
1718
1789
|
var HAS_THIS = /^this[\.\*]/;
|
1719
1790
|
var FIRST_KEY = /^([^\.\*]+)/;
|
@@ -1785,89 +1856,11 @@ get = function get(obj, keyName) {
|
|
1785
1856
|
}
|
1786
1857
|
};
|
1787
1858
|
|
1788
|
-
/**
|
1789
|
-
Sets the value of a property on an object, respecting computed properties
|
1790
|
-
and notifying observers and other listeners of the change. If the
|
1791
|
-
property is not defined but the object implements the `unknownProperty`
|
1792
|
-
method then that will be invoked as well.
|
1793
|
-
|
1794
|
-
If you plan to run on IE8 and older browsers then you should use this
|
1795
|
-
method anytime you want to set a property on an object that you don't
|
1796
|
-
know for sure is private. (Properties beginning with an underscore '_'
|
1797
|
-
are considered private.)
|
1798
|
-
|
1799
|
-
On all newer browsers, you only need to use this method to set
|
1800
|
-
properties if the property might not be defined on the object and you want
|
1801
|
-
to respect the `unknownProperty` handler. Otherwise you can ignore this
|
1802
|
-
method.
|
1803
|
-
|
1804
|
-
@method set
|
1805
|
-
@for Ember
|
1806
|
-
@param {Object} obj The object to modify.
|
1807
|
-
@param {String} keyName The property key to set
|
1808
|
-
@param {Object} value The value to set
|
1809
|
-
@return {Object} the passed value.
|
1810
|
-
*/
|
1811
|
-
set = function set(obj, keyName, value, tolerant) {
|
1812
|
-
if (typeof obj === 'string') {
|
1813
|
-
|
1814
|
-
value = keyName;
|
1815
|
-
keyName = obj;
|
1816
|
-
obj = null;
|
1817
|
-
}
|
1818
|
-
|
1819
|
-
if (!obj || keyName.indexOf('.') !== -1) {
|
1820
|
-
return setPath(obj, keyName, value, tolerant);
|
1821
|
-
}
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
|
1826
|
-
isUnknown, currentValue;
|
1827
|
-
if (desc) {
|
1828
|
-
desc.set(obj, keyName, value);
|
1829
|
-
} else {
|
1830
|
-
isUnknown = 'object' === typeof obj && !(keyName in obj);
|
1831
|
-
|
1832
|
-
// setUnknownProperty is called if `obj` is an object,
|
1833
|
-
// the property does not already exist, and the
|
1834
|
-
// `setUnknownProperty` method exists on the object
|
1835
|
-
if (isUnknown && 'function' === typeof obj.setUnknownProperty) {
|
1836
|
-
obj.setUnknownProperty(keyName, value);
|
1837
|
-
} else if (meta && meta.watching[keyName] > 0) {
|
1838
|
-
if (MANDATORY_SETTER) {
|
1839
|
-
currentValue = meta.values[keyName];
|
1840
|
-
} else {
|
1841
|
-
currentValue = obj[keyName];
|
1842
|
-
}
|
1843
|
-
// only trigger a change if the value has changed
|
1844
|
-
if (value !== currentValue) {
|
1845
|
-
Ember.propertyWillChange(obj, keyName);
|
1846
|
-
if (MANDATORY_SETTER) {
|
1847
|
-
if (currentValue === undefined && !(keyName in obj)) {
|
1848
|
-
Ember.defineProperty(obj, keyName, null, value); // setup mandatory setter
|
1849
|
-
} else {
|
1850
|
-
meta.values[keyName] = value;
|
1851
|
-
}
|
1852
|
-
} else {
|
1853
|
-
obj[keyName] = value;
|
1854
|
-
}
|
1855
|
-
Ember.propertyDidChange(obj, keyName);
|
1856
|
-
}
|
1857
|
-
} else {
|
1858
|
-
obj[keyName] = value;
|
1859
|
-
}
|
1860
|
-
}
|
1861
|
-
return value;
|
1862
|
-
};
|
1863
|
-
|
1864
1859
|
// Currently used only by Ember Data tests
|
1865
1860
|
if (Ember.config.overrideAccessors) {
|
1866
1861
|
Ember.get = get;
|
1867
|
-
Ember.set = set;
|
1868
1862
|
Ember.config.overrideAccessors();
|
1869
1863
|
get = Ember.get;
|
1870
|
-
set = Ember.set;
|
1871
1864
|
}
|
1872
1865
|
|
1873
1866
|
function firstKey(path) {
|
@@ -1895,7 +1888,7 @@ function normalizeTuple(target, path) {
|
|
1895
1888
|
return [ target, path ];
|
1896
1889
|
}
|
1897
1890
|
|
1898
|
-
|
1891
|
+
var getPath = Ember._getPath = function(root, path) {
|
1899
1892
|
var hasThis, parts, tuple, idx, len;
|
1900
1893
|
|
1901
1894
|
// If there is no root and path is a key name, return that
|
@@ -1920,52 +1913,25 @@ function getPath(root, path) {
|
|
1920
1913
|
if (root && root.isDestroyed) { return undefined; }
|
1921
1914
|
}
|
1922
1915
|
return root;
|
1923
|
-
}
|
1916
|
+
};
|
1924
1917
|
|
1925
|
-
|
1926
|
-
|
1918
|
+
/**
|
1919
|
+
@private
|
1927
1920
|
|
1928
|
-
|
1929
|
-
|
1921
|
+
Normalizes a target/path pair to reflect that actual target/path that should
|
1922
|
+
be observed, etc. This takes into account passing in global property
|
1923
|
+
paths (i.e. a path beginning with a captial letter not defined on the
|
1924
|
+
target) and * separators.
|
1930
1925
|
|
1931
|
-
|
1932
|
-
|
1933
|
-
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
if (!keyName || keyName.length === 0) {
|
1941
|
-
throw new Error('You passed an empty path');
|
1942
|
-
}
|
1943
|
-
|
1944
|
-
if (!root) {
|
1945
|
-
if (tolerant) { return; }
|
1946
|
-
else { throw new Error('Object in path '+path+' could not be found or was destroyed.'); }
|
1947
|
-
}
|
1948
|
-
|
1949
|
-
return set(root, keyName, value);
|
1950
|
-
}
|
1951
|
-
|
1952
|
-
/**
|
1953
|
-
@private
|
1954
|
-
|
1955
|
-
Normalizes a target/path pair to reflect that actual target/path that should
|
1956
|
-
be observed, etc. This takes into account passing in global property
|
1957
|
-
paths (i.e. a path beginning with a captial letter not defined on the
|
1958
|
-
target) and * separators.
|
1959
|
-
|
1960
|
-
@method normalizeTuple
|
1961
|
-
@for Ember
|
1962
|
-
@param {Object} target The current target. May be `null`.
|
1963
|
-
@param {String} path A path on the target or a global property path.
|
1964
|
-
@return {Array} a temporary array with the normalized target/path pair.
|
1965
|
-
*/
|
1966
|
-
Ember.normalizeTuple = function(target, path) {
|
1967
|
-
return normalizeTuple(target, path);
|
1968
|
-
};
|
1926
|
+
@method normalizeTuple
|
1927
|
+
@for Ember
|
1928
|
+
@param {Object} target The current target. May be `null`.
|
1929
|
+
@param {String} path A path on the target or a global property path.
|
1930
|
+
@return {Array} a temporary array with the normalized target/path pair.
|
1931
|
+
*/
|
1932
|
+
Ember.normalizeTuple = function(target, path) {
|
1933
|
+
return normalizeTuple(target, path);
|
1934
|
+
};
|
1969
1935
|
|
1970
1936
|
Ember.getWithDefault = function(root, key, defaultValue) {
|
1971
1937
|
var value = get(root, key);
|
@@ -1977,215 +1943,393 @@ Ember.getWithDefault = function(root, key, defaultValue) {
|
|
1977
1943
|
|
1978
1944
|
Ember.get = get;
|
1979
1945
|
Ember.getPath = Ember.deprecateFunc('getPath is deprecated since get now supports paths', Ember.get);
|
1946
|
+
})();
|
1947
|
+
|
1980
1948
|
|
1981
|
-
Ember.set = set;
|
1982
|
-
Ember.setPath = Ember.deprecateFunc('setPath is deprecated since set now supports paths', Ember.set);
|
1983
1949
|
|
1950
|
+
(function() {
|
1984
1951
|
/**
|
1985
|
-
|
1986
|
-
|
1952
|
+
@module ember-metal
|
1953
|
+
*/
|
1987
1954
|
|
1988
|
-
|
1989
|
-
|
1955
|
+
var o_create = Ember.create,
|
1956
|
+
metaFor = Ember.meta,
|
1957
|
+
META_KEY = Ember.META_KEY;
|
1990
1958
|
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
@param {Object} value The value to set
|
1996
|
-
*/
|
1997
|
-
Ember.trySet = function(root, path, value) {
|
1998
|
-
return set(root, path, value, true);
|
1999
|
-
};
|
2000
|
-
Ember.trySetPath = Ember.deprecateFunc('trySetPath has been renamed to trySet', Ember.trySet);
|
1959
|
+
/*
|
1960
|
+
The event system uses a series of nested hashes to store listeners on an
|
1961
|
+
object. When a listener is registered, or when an event arrives, these
|
1962
|
+
hashes are consulted to determine which target and action pair to invoke.
|
2001
1963
|
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
1964
|
+
The hashes are stored in the object's meta hash, and look like this:
|
1965
|
+
|
1966
|
+
// Object's meta hash
|
1967
|
+
{
|
1968
|
+
listeners: { // variable name: `listenerSet`
|
1969
|
+
"foo:changed": [ // variable name: `actions`
|
1970
|
+
[target, method, onceFlag, suspendedFlag]
|
1971
|
+
]
|
1972
|
+
}
|
1973
|
+
}
|
2005
1974
|
|
2006
|
-
@method isGlobalPath
|
2007
|
-
@for Ember
|
2008
|
-
@private
|
2009
|
-
@param {String} path
|
2010
|
-
@return Boolean
|
2011
1975
|
*/
|
2012
|
-
Ember.isGlobalPath = function(path) {
|
2013
|
-
return IS_GLOBAL.test(path);
|
2014
|
-
};
|
2015
1976
|
|
1977
|
+
function indexOf(array, target, method) {
|
1978
|
+
var index = -1;
|
1979
|
+
for (var i = 0, l = array.length; i < l; i++) {
|
1980
|
+
if (target === array[i][0] && method === array[i][1]) { index = i; break; }
|
1981
|
+
}
|
1982
|
+
return index;
|
1983
|
+
}
|
2016
1984
|
|
2017
|
-
|
1985
|
+
function actionsFor(obj, eventName) {
|
1986
|
+
var meta = metaFor(obj, true),
|
1987
|
+
actions;
|
2018
1988
|
|
1989
|
+
if (!meta.listeners) { meta.listeners = {}; }
|
2019
1990
|
|
1991
|
+
if (!meta.hasOwnProperty('listeners')) {
|
1992
|
+
// setup inherited copy of the listeners object
|
1993
|
+
meta.listeners = o_create(meta.listeners);
|
1994
|
+
}
|
2020
1995
|
|
2021
|
-
|
2022
|
-
/**
|
2023
|
-
@module ember-metal
|
2024
|
-
*/
|
1996
|
+
actions = meta.listeners[eventName];
|
2025
1997
|
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
1998
|
+
// if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
|
1999
|
+
if (actions && !meta.listeners.hasOwnProperty(eventName)) {
|
2000
|
+
actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
|
2001
|
+
} else if (!actions) {
|
2002
|
+
actions = meta.listeners[eventName] = [];
|
2003
|
+
}
|
2029
2004
|
|
2030
|
-
|
2005
|
+
return actions;
|
2006
|
+
}
|
2031
2007
|
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2008
|
+
function actionsUnion(obj, eventName, otherActions) {
|
2009
|
+
var meta = obj[META_KEY],
|
2010
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
2035
2011
|
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2012
|
+
if (!actions) { return; }
|
2013
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
2014
|
+
var target = actions[i][0],
|
2015
|
+
method = actions[i][1],
|
2016
|
+
once = actions[i][2],
|
2017
|
+
suspended = actions[i][3],
|
2018
|
+
actionIndex = indexOf(otherActions, target, method);
|
2039
2019
|
|
2040
|
-
|
2020
|
+
if (actionIndex === -1) {
|
2021
|
+
otherActions.push([target, method, once, suspended]);
|
2022
|
+
}
|
2023
|
+
}
|
2024
|
+
}
|
2041
2025
|
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2046
|
-
*/
|
2047
|
-
var Descriptor = Ember.Descriptor = function() {};
|
2026
|
+
function actionsDiff(obj, eventName, otherActions) {
|
2027
|
+
var meta = obj[META_KEY],
|
2028
|
+
actions = meta && meta.listeners && meta.listeners[eventName],
|
2029
|
+
diffActions = [];
|
2048
2030
|
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
2031
|
+
if (!actions) { return; }
|
2032
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
2033
|
+
var target = actions[i][0],
|
2034
|
+
method = actions[i][1],
|
2035
|
+
once = actions[i][2],
|
2036
|
+
suspended = actions[i][3],
|
2037
|
+
actionIndex = indexOf(otherActions, target, method);
|
2052
2038
|
|
2053
|
-
|
2039
|
+
if (actionIndex !== -1) { continue; }
|
2054
2040
|
|
2055
|
-
|
2041
|
+
otherActions.push([target, method, once, suspended]);
|
2042
|
+
diffActions.push([target, method, once, suspended]);
|
2043
|
+
}
|
2056
2044
|
|
2057
|
-
|
2058
|
-
|
2059
|
-
var meta = this[META_KEY];
|
2060
|
-
return meta && meta.values[name];
|
2061
|
-
};
|
2062
|
-
};
|
2045
|
+
return diffActions;
|
2046
|
+
}
|
2063
2047
|
|
2064
2048
|
/**
|
2065
|
-
|
2049
|
+
Add an event listener
|
2066
2050
|
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
2051
|
+
@method addListener
|
2052
|
+
@for Ember
|
2053
|
+
@param obj
|
2054
|
+
@param {String} eventName
|
2055
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
2056
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
2057
|
+
@param {Boolean} once A flag whether a function should only be called once
|
2058
|
+
*/
|
2059
|
+
function addListener(obj, eventName, target, method, once) {
|
2070
2060
|
|
2071
|
-
Defines a property on an object. This method works much like the ES5
|
2072
|
-
`Object.defineProperty()` method except that it can also accept computed
|
2073
|
-
properties and other special descriptors.
|
2074
2061
|
|
2075
|
-
|
2076
|
-
|
2077
|
-
|
2078
|
-
|
2062
|
+
if (!method && 'function' === typeof target) {
|
2063
|
+
method = target;
|
2064
|
+
target = null;
|
2065
|
+
}
|
2079
2066
|
|
2080
|
-
|
2067
|
+
var actions = actionsFor(obj, eventName),
|
2068
|
+
actionIndex = indexOf(actions, target, method);
|
2081
2069
|
|
2082
|
-
|
2083
|
-
// ES5 compatible mode
|
2084
|
-
Ember.defineProperty(contact, 'firstName', {
|
2085
|
-
writable: true,
|
2086
|
-
configurable: false,
|
2087
|
-
enumerable: true,
|
2088
|
-
value: 'Charles'
|
2089
|
-
});
|
2070
|
+
if (actionIndex !== -1) { return; }
|
2090
2071
|
|
2091
|
-
|
2092
|
-
Ember.defineProperty(contact, 'lastName', undefined, 'Jolley');
|
2072
|
+
actions.push([target, method, once, undefined]);
|
2093
2073
|
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
```
|
2074
|
+
if ('function' === typeof obj.didAddListener) {
|
2075
|
+
obj.didAddListener(eventName, target, method);
|
2076
|
+
}
|
2077
|
+
}
|
2099
2078
|
|
2100
|
-
|
2079
|
+
/**
|
2080
|
+
Remove an event listener
|
2081
|
+
|
2082
|
+
Arguments should match those passed to {{#crossLink "Ember/addListener"}}{{/crossLink}}
|
2083
|
+
|
2084
|
+
@method removeListener
|
2101
2085
|
@for Ember
|
2102
|
-
@param
|
2103
|
-
@param {String}
|
2104
|
-
@param {
|
2105
|
-
|
2106
|
-
You must provide this or `data` but not both.
|
2107
|
-
@param {anything} [data] something other than a descriptor, that will
|
2108
|
-
become the explicit value of this property.
|
2086
|
+
@param obj
|
2087
|
+
@param {String} eventName
|
2088
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
2089
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
2109
2090
|
*/
|
2110
|
-
|
2111
|
-
var descs, existingDesc, watching, value;
|
2091
|
+
function removeListener(obj, eventName, target, method) {
|
2112
2092
|
|
2113
|
-
if (!meta) meta = metaFor(obj);
|
2114
|
-
descs = meta.descs;
|
2115
|
-
existingDesc = meta.descs[keyName];
|
2116
|
-
watching = meta.watching[keyName] > 0;
|
2117
2093
|
|
2118
|
-
if (
|
2119
|
-
|
2094
|
+
if (!method && 'function' === typeof target) {
|
2095
|
+
method = target;
|
2096
|
+
target = null;
|
2120
2097
|
}
|
2121
2098
|
|
2122
|
-
|
2123
|
-
|
2099
|
+
function _removeListener(target, method, once) {
|
2100
|
+
var actions = actionsFor(obj, eventName),
|
2101
|
+
actionIndex = indexOf(actions, target, method);
|
2124
2102
|
|
2125
|
-
|
2126
|
-
if (
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2130
|
-
|
2131
|
-
|
2132
|
-
});
|
2133
|
-
} else {
|
2134
|
-
obj[keyName] = undefined; // make enumerable
|
2103
|
+
// action doesn't exist, give up silently
|
2104
|
+
if (actionIndex === -1) { return; }
|
2105
|
+
|
2106
|
+
actions.splice(actionIndex, 1);
|
2107
|
+
|
2108
|
+
if ('function' === typeof obj.didRemoveListener) {
|
2109
|
+
obj.didRemoveListener(eventName, target, method);
|
2135
2110
|
}
|
2136
|
-
|
2111
|
+
}
|
2112
|
+
|
2113
|
+
if (method) {
|
2114
|
+
_removeListener(target, method);
|
2137
2115
|
} else {
|
2138
|
-
|
2139
|
-
|
2140
|
-
value = data;
|
2116
|
+
var meta = obj[META_KEY],
|
2117
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
2141
2118
|
|
2142
|
-
|
2143
|
-
|
2144
|
-
|
2145
|
-
|
2146
|
-
|
2147
|
-
|
2148
|
-
get: DEFAULT_GETTER_FUNCTION(keyName)
|
2149
|
-
});
|
2150
|
-
} else {
|
2151
|
-
obj[keyName] = data;
|
2152
|
-
}
|
2153
|
-
} else {
|
2154
|
-
value = desc;
|
2119
|
+
if (!actions) { return; }
|
2120
|
+
for (var i = actions.length - 1; i >= 0; i--) {
|
2121
|
+
_removeListener(actions[i][0], actions[i][1]);
|
2122
|
+
}
|
2123
|
+
}
|
2124
|
+
}
|
2155
2125
|
|
2156
|
-
|
2157
|
-
|
2126
|
+
/**
|
2127
|
+
@private
|
2128
|
+
|
2129
|
+
Suspend listener during callback.
|
2130
|
+
|
2131
|
+
This should only be used by the target of the event listener
|
2132
|
+
when it is taking an action that would cause the event, e.g.
|
2133
|
+
an object might suspend its property change listener while it is
|
2134
|
+
setting that property.
|
2135
|
+
|
2136
|
+
@method suspendListener
|
2137
|
+
@for Ember
|
2138
|
+
@param obj
|
2139
|
+
@param {String} eventName
|
2140
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
2141
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
2142
|
+
@param {Function} callback
|
2143
|
+
*/
|
2144
|
+
function suspendListener(obj, eventName, target, method, callback) {
|
2145
|
+
if (!method && 'function' === typeof target) {
|
2146
|
+
method = target;
|
2147
|
+
target = null;
|
2148
|
+
}
|
2149
|
+
|
2150
|
+
var actions = actionsFor(obj, eventName),
|
2151
|
+
actionIndex = indexOf(actions, target, method),
|
2152
|
+
action;
|
2153
|
+
|
2154
|
+
if (actionIndex !== -1) {
|
2155
|
+
action = actions[actionIndex].slice(); // copy it, otherwise we're modifying a shared object
|
2156
|
+
action[3] = true; // mark the action as suspended
|
2157
|
+
actions[actionIndex] = action; // replace the shared object with our copy
|
2158
|
+
}
|
2159
|
+
|
2160
|
+
function tryable() { return callback.call(target); }
|
2161
|
+
function finalizer() { if (action) { action[3] = undefined; } }
|
2162
|
+
|
2163
|
+
return Ember.tryFinally(tryable, finalizer);
|
2164
|
+
}
|
2165
|
+
|
2166
|
+
/**
|
2167
|
+
@private
|
2168
|
+
|
2169
|
+
Suspend listener during callback.
|
2170
|
+
|
2171
|
+
This should only be used by the target of the event listener
|
2172
|
+
when it is taking an action that would cause the event, e.g.
|
2173
|
+
an object might suspend its property change listener while it is
|
2174
|
+
setting that property.
|
2175
|
+
|
2176
|
+
@method suspendListener
|
2177
|
+
@for Ember
|
2178
|
+
@param obj
|
2179
|
+
@param {Array} eventName Array of event names
|
2180
|
+
@param {Object|Function} targetOrMethod A target object or a function
|
2181
|
+
@param {Function|String} method A function or the name of a function to be called on `target`
|
2182
|
+
@param {Function} callback
|
2183
|
+
*/
|
2184
|
+
function suspendListeners(obj, eventNames, target, method, callback) {
|
2185
|
+
if (!method && 'function' === typeof target) {
|
2186
|
+
method = target;
|
2187
|
+
target = null;
|
2188
|
+
}
|
2189
|
+
|
2190
|
+
var suspendedActions = [],
|
2191
|
+
eventName, actions, action, i, l;
|
2192
|
+
|
2193
|
+
for (i=0, l=eventNames.length; i<l; i++) {
|
2194
|
+
eventName = eventNames[i];
|
2195
|
+
actions = actionsFor(obj, eventName);
|
2196
|
+
var actionIndex = indexOf(actions, target, method);
|
2197
|
+
|
2198
|
+
if (actionIndex !== -1) {
|
2199
|
+
action = actions[actionIndex].slice();
|
2200
|
+
action[3] = true;
|
2201
|
+
actions[actionIndex] = action;
|
2202
|
+
suspendedActions.push(action);
|
2158
2203
|
}
|
2159
2204
|
}
|
2160
2205
|
|
2161
|
-
|
2162
|
-
// were initialized with the prototype
|
2163
|
-
if (watching) { Ember.overrideChains(obj, keyName, meta); }
|
2206
|
+
function tryable() { return callback.call(target); }
|
2164
2207
|
|
2165
|
-
|
2166
|
-
|
2167
|
-
|
2208
|
+
function finalizer() {
|
2209
|
+
for (i = 0, l = suspendedActions.length; i < l; i++) {
|
2210
|
+
suspendedActions[i][3] = undefined;
|
2211
|
+
}
|
2212
|
+
}
|
2168
2213
|
|
2169
|
-
return
|
2170
|
-
}
|
2214
|
+
return Ember.tryFinally(tryable, finalizer);
|
2215
|
+
}
|
2171
2216
|
|
2217
|
+
/**
|
2218
|
+
@private
|
2172
2219
|
|
2173
|
-
|
2220
|
+
Return a list of currently watched events
|
2174
2221
|
|
2222
|
+
@method watchedEvents
|
2223
|
+
@for Ember
|
2224
|
+
@param obj
|
2225
|
+
*/
|
2226
|
+
function watchedEvents(obj) {
|
2227
|
+
var listeners = obj[META_KEY].listeners, ret = [];
|
2175
2228
|
|
2229
|
+
if (listeners) {
|
2230
|
+
for(var eventName in listeners) {
|
2231
|
+
if (listeners[eventName]) { ret.push(eventName); }
|
2232
|
+
}
|
2233
|
+
}
|
2234
|
+
return ret;
|
2235
|
+
}
|
2176
2236
|
|
2177
|
-
(function() {
|
2178
|
-
// Ember.tryFinally
|
2179
2237
|
/**
|
2180
|
-
@
|
2238
|
+
@method sendEvent
|
2239
|
+
@for Ember
|
2240
|
+
@param obj
|
2241
|
+
@param {String} eventName
|
2242
|
+
@param {Array} params
|
2243
|
+
@param {Array} actions
|
2244
|
+
@return true
|
2181
2245
|
*/
|
2246
|
+
function sendEvent(obj, eventName, params, actions) {
|
2247
|
+
// first give object a chance to handle it
|
2248
|
+
if (obj !== Ember && 'function' === typeof obj.sendEvent) {
|
2249
|
+
obj.sendEvent(eventName, params);
|
2250
|
+
}
|
2182
2251
|
|
2183
|
-
|
2184
|
-
var
|
2252
|
+
if (!actions) {
|
2253
|
+
var meta = obj[META_KEY];
|
2254
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
2255
|
+
}
|
2185
2256
|
|
2186
|
-
|
2257
|
+
if (!actions) { return; }
|
2258
|
+
|
2259
|
+
for (var i = actions.length - 1; i >= 0; i--) { // looping in reverse for once listeners
|
2260
|
+
if (!actions[i] || actions[i][3] === true) { continue; }
|
2261
|
+
|
2262
|
+
var target = actions[i][0],
|
2263
|
+
method = actions[i][1],
|
2264
|
+
once = actions[i][2];
|
2265
|
+
|
2266
|
+
if (once) { removeListener(obj, eventName, target, method); }
|
2267
|
+
if (!target) { target = obj; }
|
2268
|
+
if ('string' === typeof method) { method = target[method]; }
|
2269
|
+
if (params) {
|
2270
|
+
method.apply(target, params);
|
2271
|
+
} else {
|
2272
|
+
method.call(target);
|
2273
|
+
}
|
2274
|
+
}
|
2275
|
+
return true;
|
2276
|
+
}
|
2277
|
+
|
2278
|
+
/**
|
2279
|
+
@private
|
2280
|
+
@method hasListeners
|
2281
|
+
@for Ember
|
2282
|
+
@param obj
|
2283
|
+
@param {String} eventName
|
2284
|
+
*/
|
2285
|
+
function hasListeners(obj, eventName) {
|
2286
|
+
var meta = obj[META_KEY],
|
2287
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
2288
|
+
|
2289
|
+
return !!(actions && actions.length);
|
2290
|
+
}
|
2291
|
+
|
2292
|
+
/**
|
2293
|
+
@private
|
2294
|
+
@method listenersFor
|
2295
|
+
@for Ember
|
2296
|
+
@param obj
|
2297
|
+
@param {String} eventName
|
2298
|
+
*/
|
2299
|
+
function listenersFor(obj, eventName) {
|
2300
|
+
var ret = [];
|
2301
|
+
var meta = obj[META_KEY],
|
2302
|
+
actions = meta && meta.listeners && meta.listeners[eventName];
|
2303
|
+
|
2304
|
+
if (!actions) { return ret; }
|
2305
|
+
|
2306
|
+
for (var i = 0, l = actions.length; i < l; i++) {
|
2307
|
+
var target = actions[i][0],
|
2308
|
+
method = actions[i][1];
|
2309
|
+
ret.push([target, method]);
|
2310
|
+
}
|
2311
|
+
|
2312
|
+
return ret;
|
2313
|
+
}
|
2314
|
+
|
2315
|
+
Ember.addListener = addListener;
|
2316
|
+
Ember.removeListener = removeListener;
|
2317
|
+
Ember._suspendListener = suspendListener;
|
2318
|
+
Ember._suspendListeners = suspendListeners;
|
2319
|
+
Ember.sendEvent = sendEvent;
|
2320
|
+
Ember.hasListeners = hasListeners;
|
2321
|
+
Ember.watchedEvents = watchedEvents;
|
2322
|
+
Ember.listenersFor = listenersFor;
|
2323
|
+
Ember.listenersDiff = actionsDiff;
|
2324
|
+
Ember.listenersUnion = actionsUnion;
|
2325
|
+
|
2326
|
+
})();
|
2187
2327
|
|
2188
|
-
|
2328
|
+
|
2329
|
+
|
2330
|
+
(function() {
|
2331
|
+
var guidFor = Ember.guidFor,
|
2332
|
+
sendEvent = Ember.sendEvent;
|
2189
2333
|
|
2190
2334
|
/*
|
2191
2335
|
this.observerSet = {
|
@@ -2205,14 +2349,14 @@ var deferred = 0;
|
|
2205
2349
|
...
|
2206
2350
|
]
|
2207
2351
|
*/
|
2208
|
-
|
2352
|
+
var ObserverSet = Ember._ObserverSet = function() {
|
2209
2353
|
this.clear();
|
2210
|
-
}
|
2354
|
+
};
|
2211
2355
|
|
2212
2356
|
ObserverSet.prototype.add = function(sender, keyName, eventName) {
|
2213
2357
|
var observerSet = this.observerSet,
|
2214
2358
|
observers = this.observers,
|
2215
|
-
senderGuid =
|
2359
|
+
senderGuid = guidFor(sender),
|
2216
2360
|
keySet = observerSet[senderGuid],
|
2217
2361
|
index;
|
2218
2362
|
|
@@ -2239,7 +2383,7 @@ ObserverSet.prototype.flush = function() {
|
|
2239
2383
|
observer = observers[i];
|
2240
2384
|
sender = observer.sender;
|
2241
2385
|
if (sender.isDestroying || sender.isDestroyed) { continue; }
|
2242
|
-
|
2386
|
+
sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners);
|
2243
2387
|
}
|
2244
2388
|
};
|
2245
2389
|
|
@@ -2247,713 +2391,914 @@ ObserverSet.prototype.clear = function() {
|
|
2247
2391
|
this.observerSet = {};
|
2248
2392
|
this.observers = [];
|
2249
2393
|
};
|
2394
|
+
})();
|
2250
2395
|
|
2251
|
-
var beforeObserverSet = new ObserverSet(), observerSet = new ObserverSet();
|
2252
2396
|
|
2253
|
-
/**
|
2254
|
-
@method beginPropertyChanges
|
2255
|
-
@chainable
|
2256
|
-
*/
|
2257
|
-
Ember.beginPropertyChanges = function() {
|
2258
|
-
deferred++;
|
2259
|
-
};
|
2260
2397
|
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
|
2269
|
-
|
2270
|
-
|
2398
|
+
(function() {
|
2399
|
+
var metaFor = Ember.meta,
|
2400
|
+
guidFor = Ember.guidFor,
|
2401
|
+
tryFinally = Ember.tryFinally,
|
2402
|
+
sendEvent = Ember.sendEvent,
|
2403
|
+
listenersUnion = Ember.listenersUnion,
|
2404
|
+
listenersDiff = Ember.listenersDiff,
|
2405
|
+
ObserverSet = Ember._ObserverSet,
|
2406
|
+
beforeObserverSet = new ObserverSet(),
|
2407
|
+
observerSet = new ObserverSet(),
|
2408
|
+
deferred = 0;
|
2409
|
+
|
2410
|
+
// ..........................................................
|
2411
|
+
// PROPERTY CHANGES
|
2412
|
+
//
|
2271
2413
|
|
2272
2414
|
/**
|
2273
|
-
|
2274
|
-
|
2415
|
+
This function is called just before an object property is about to change.
|
2416
|
+
It will notify any before observers and prepare caches among other things.
|
2275
2417
|
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2279
|
-
|
2280
|
-
});
|
2281
|
-
```
|
2418
|
+
Normally you will not need to call this method directly but if for some
|
2419
|
+
reason you can't directly watch a property you can invoke this method
|
2420
|
+
manually along with `Ember.propertyDidChange()` which you should call just
|
2421
|
+
after the property value changes.
|
2282
2422
|
|
2283
|
-
@method
|
2284
|
-
@
|
2285
|
-
@param
|
2423
|
+
@method propertyWillChange
|
2424
|
+
@for Ember
|
2425
|
+
@param {Object} obj The object with the property that will change
|
2426
|
+
@param {String} keyName The property key (or path) that will change.
|
2427
|
+
@return {void}
|
2286
2428
|
*/
|
2287
|
-
Ember.
|
2288
|
-
|
2289
|
-
|
2429
|
+
var propertyWillChange = Ember.propertyWillChange = function(obj, keyName) {
|
2430
|
+
var m = metaFor(obj, false),
|
2431
|
+
watching = m.watching[keyName] > 0 || keyName === 'length',
|
2432
|
+
proto = m.proto,
|
2433
|
+
desc = m.descs[keyName];
|
2434
|
+
|
2435
|
+
if (!watching) { return; }
|
2436
|
+
if (proto === obj) { return; }
|
2437
|
+
if (desc && desc.willChange) { desc.willChange(obj, keyName); }
|
2438
|
+
dependentKeysWillChange(obj, keyName, m);
|
2439
|
+
chainsWillChange(obj, keyName, m);
|
2440
|
+
notifyBeforeObservers(obj, keyName);
|
2290
2441
|
};
|
2291
2442
|
|
2292
2443
|
/**
|
2293
|
-
|
2294
|
-
|
2295
|
-
observers will be buffered.
|
2444
|
+
This function is called just after an object property has changed.
|
2445
|
+
It will notify any observers and clear caches among other things.
|
2296
2446
|
|
2297
|
-
|
2298
|
-
|
2299
|
-
|
2300
|
-
|
2447
|
+
Normally you will not need to call this method directly but if for some
|
2448
|
+
reason you can't directly watch a property you can invoke this method
|
2449
|
+
manually along with `Ember.propertyWilLChange()` which you should call just
|
2450
|
+
before the property value changes.
|
2451
|
+
|
2452
|
+
@method propertyDidChange
|
2453
|
+
@for Ember
|
2454
|
+
@param {Object} obj The object with the property that will change
|
2455
|
+
@param {String} keyName The property key (or path) that will change.
|
2456
|
+
@return {void}
|
2301
2457
|
*/
|
2302
|
-
Ember.
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
return
|
2458
|
+
var propertyDidChange = Ember.propertyDidChange = function(obj, keyName) {
|
2459
|
+
var m = metaFor(obj, false),
|
2460
|
+
watching = m.watching[keyName] > 0 || keyName === 'length',
|
2461
|
+
proto = m.proto,
|
2462
|
+
desc = m.descs[keyName];
|
2463
|
+
|
2464
|
+
if (proto === obj) { return; }
|
2465
|
+
|
2466
|
+
// shouldn't this mean that we're watching this key?
|
2467
|
+
if (desc && desc.didChange) { desc.didChange(obj, keyName); }
|
2468
|
+
if (!watching && keyName !== 'length') { return; }
|
2469
|
+
|
2470
|
+
dependentKeysDidChange(obj, keyName, m);
|
2471
|
+
chainsDidChange(obj, keyName, m);
|
2472
|
+
notifyObservers(obj, keyName);
|
2309
2473
|
};
|
2310
2474
|
|
2475
|
+
var WILL_SEEN, DID_SEEN;
|
2311
2476
|
|
2312
|
-
|
2313
|
-
|
2477
|
+
// called whenever a property is about to change to clear the cache of any dependent keys (and notify those properties of changes, etc...)
|
2478
|
+
function dependentKeysWillChange(obj, depKey, meta) {
|
2479
|
+
if (obj.isDestroying) { return; }
|
2480
|
+
|
2481
|
+
var seen = WILL_SEEN, top = !seen;
|
2482
|
+
if (top) { seen = WILL_SEEN = {}; }
|
2483
|
+
iterDeps(propertyWillChange, obj, depKey, seen, meta);
|
2484
|
+
if (top) { WILL_SEEN = null; }
|
2314
2485
|
}
|
2315
2486
|
|
2316
|
-
|
2317
|
-
|
2487
|
+
// called whenever a property has just changed to update dependent keys
|
2488
|
+
function dependentKeysDidChange(obj, depKey, meta) {
|
2489
|
+
if (obj.isDestroying) { return; }
|
2490
|
+
|
2491
|
+
var seen = DID_SEEN, top = !seen;
|
2492
|
+
if (top) { seen = DID_SEEN = {}; }
|
2493
|
+
iterDeps(propertyDidChange, obj, depKey, seen, meta);
|
2494
|
+
if (top) { DID_SEEN = null; }
|
2318
2495
|
}
|
2319
2496
|
|
2320
|
-
|
2321
|
-
|
2322
|
-
|
2323
|
-
|
2324
|
-
|
2325
|
-
@param {Function|String} [method]
|
2326
|
-
*/
|
2327
|
-
Ember.addObserver = function(obj, path, target, method) {
|
2328
|
-
Ember.addListener(obj, changeEvent(path), target, method);
|
2329
|
-
Ember.watch(obj, path);
|
2330
|
-
return this;
|
2331
|
-
};
|
2497
|
+
function iterDeps(method, obj, depKey, seen, meta) {
|
2498
|
+
var guid = guidFor(obj);
|
2499
|
+
if (!seen[guid]) seen[guid] = {};
|
2500
|
+
if (seen[guid][depKey]) return;
|
2501
|
+
seen[guid][depKey] = true;
|
2332
2502
|
|
2333
|
-
|
2334
|
-
|
2335
|
-
|
2503
|
+
var deps = meta.deps;
|
2504
|
+
deps = deps && deps[depKey];
|
2505
|
+
if (deps) {
|
2506
|
+
for(var key in deps) {
|
2507
|
+
var desc = meta.descs[key];
|
2508
|
+
if (desc && desc._suspended === obj) continue;
|
2509
|
+
method(obj, key);
|
2510
|
+
}
|
2511
|
+
}
|
2512
|
+
}
|
2336
2513
|
|
2337
|
-
|
2338
|
-
|
2339
|
-
@param obj
|
2340
|
-
@param {String} path
|
2341
|
-
@param {Object|Function} targetOrMethod
|
2342
|
-
@param {Function|String} [method]
|
2343
|
-
*/
|
2344
|
-
Ember.removeObserver = function(obj, path, target, method) {
|
2345
|
-
Ember.unwatch(obj, path);
|
2346
|
-
Ember.removeListener(obj, changeEvent(path), target, method);
|
2347
|
-
return this;
|
2348
|
-
};
|
2514
|
+
var chainsWillChange = function(obj, keyName, m, arg) {
|
2515
|
+
if (!m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
|
2349
2516
|
|
2350
|
-
|
2351
|
-
@method addBeforeObserver
|
2352
|
-
@param obj
|
2353
|
-
@param {String} path
|
2354
|
-
@param {Object|Function} targetOrMethod
|
2355
|
-
@param {Function|String} [method]
|
2356
|
-
*/
|
2357
|
-
Ember.addBeforeObserver = function(obj, path, target, method) {
|
2358
|
-
Ember.addListener(obj, beforeEvent(path), target, method);
|
2359
|
-
Ember.watch(obj, path);
|
2360
|
-
return this;
|
2361
|
-
};
|
2517
|
+
var nodes = m.chainWatchers;
|
2362
2518
|
|
2363
|
-
|
2364
|
-
|
2365
|
-
// This should only be used by the target of the observer
|
2366
|
-
// while it is setting the observed path.
|
2367
|
-
Ember._suspendBeforeObserver = function(obj, path, target, method, callback) {
|
2368
|
-
return Ember._suspendListener(obj, beforeEvent(path), target, method, callback);
|
2369
|
-
};
|
2519
|
+
nodes = nodes[keyName];
|
2520
|
+
if (!nodes) { return; }
|
2370
2521
|
|
2371
|
-
|
2372
|
-
|
2522
|
+
for(var i = 0, l = nodes.length; i < l; i++) {
|
2523
|
+
nodes[i].willChange(arg);
|
2524
|
+
}
|
2373
2525
|
};
|
2374
2526
|
|
2375
|
-
var
|
2527
|
+
var chainsDidChange = function(obj, keyName, m, arg) {
|
2528
|
+
if (!m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
|
2376
2529
|
|
2377
|
-
|
2378
|
-
|
2379
|
-
|
2530
|
+
var nodes = m.chainWatchers;
|
2531
|
+
|
2532
|
+
nodes = nodes[keyName];
|
2533
|
+
if (!nodes) { return; }
|
2534
|
+
|
2535
|
+
// looping in reverse because the chainWatchers array can be modified inside didChange
|
2536
|
+
for (var i = nodes.length - 1; i >= 0; i--) {
|
2537
|
+
nodes[i].didChange(arg);
|
2538
|
+
}
|
2380
2539
|
};
|
2381
2540
|
|
2382
|
-
Ember.
|
2383
|
-
|
2384
|
-
return Ember._suspendListeners(obj, events, target, method, callback);
|
2541
|
+
Ember.overrideChains = function(obj, keyName, m) {
|
2542
|
+
chainsDidChange(obj, keyName, m, true);
|
2385
2543
|
};
|
2386
2544
|
|
2387
|
-
|
2388
|
-
|
2545
|
+
/**
|
2546
|
+
@method beginPropertyChanges
|
2547
|
+
@chainable
|
2548
|
+
*/
|
2549
|
+
var beginPropertyChanges = Ember.beginPropertyChanges = function() {
|
2550
|
+
deferred++;
|
2389
2551
|
};
|
2390
2552
|
|
2391
2553
|
/**
|
2392
|
-
@method
|
2393
|
-
@param obj
|
2394
|
-
@param {String} path
|
2395
|
-
@param {Object|Function} targetOrMethod
|
2396
|
-
@param {Function|String} [method]
|
2554
|
+
@method endPropertyChanges
|
2397
2555
|
*/
|
2398
|
-
Ember.
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
2556
|
+
var endPropertyChanges = Ember.endPropertyChanges = function() {
|
2557
|
+
deferred--;
|
2558
|
+
if (deferred<=0) {
|
2559
|
+
beforeObserverSet.clear();
|
2560
|
+
observerSet.flush();
|
2561
|
+
}
|
2562
|
+
};
|
2563
|
+
|
2564
|
+
/**
|
2565
|
+
Make a series of property changes together in an
|
2566
|
+
exception-safe way.
|
2567
|
+
|
2568
|
+
```javascript
|
2569
|
+
Ember.changeProperties(function() {
|
2570
|
+
obj1.set('foo', mayBlowUpWhenSet);
|
2571
|
+
obj2.set('bar', baz);
|
2572
|
+
});
|
2573
|
+
```
|
2574
|
+
|
2575
|
+
@method changePropertiess
|
2576
|
+
@param {Function} callback
|
2577
|
+
@param [binding]
|
2578
|
+
*/
|
2579
|
+
var changeProperties = Ember.changeProperties = function(cb, binding){
|
2580
|
+
beginPropertyChanges();
|
2581
|
+
tryFinally(cb, endPropertyChanges, binding);
|
2402
2582
|
};
|
2403
2583
|
|
2404
|
-
|
2584
|
+
var notifyBeforeObservers = function(obj, keyName) {
|
2405
2585
|
if (obj.isDestroying) { return; }
|
2406
2586
|
|
2407
|
-
var eventName =
|
2587
|
+
var eventName = keyName + ':before', listeners, diff;
|
2408
2588
|
if (deferred) {
|
2409
2589
|
listeners = beforeObserverSet.add(obj, keyName, eventName);
|
2410
|
-
|
2411
|
-
|
2590
|
+
diff = listenersDiff(obj, eventName, listeners);
|
2591
|
+
sendEvent(obj, eventName, [obj, keyName], diff);
|
2412
2592
|
} else {
|
2413
|
-
|
2593
|
+
sendEvent(obj, eventName, [obj, keyName]);
|
2414
2594
|
}
|
2415
2595
|
};
|
2416
2596
|
|
2417
|
-
|
2597
|
+
var notifyObservers = function(obj, keyName) {
|
2418
2598
|
if (obj.isDestroying) { return; }
|
2419
2599
|
|
2420
|
-
var eventName =
|
2600
|
+
var eventName = keyName + ':change', listeners;
|
2421
2601
|
if (deferred) {
|
2422
2602
|
listeners = observerSet.add(obj, keyName, eventName);
|
2423
|
-
|
2603
|
+
listenersUnion(obj, eventName, listeners);
|
2424
2604
|
} else {
|
2425
|
-
|
2605
|
+
sendEvent(obj, eventName, [obj, keyName]);
|
2426
2606
|
}
|
2427
2607
|
};
|
2428
|
-
|
2429
2608
|
})();
|
2430
2609
|
|
2431
2610
|
|
2432
2611
|
|
2433
2612
|
(function() {
|
2434
|
-
|
2435
|
-
|
2436
|
-
|
2613
|
+
// META_KEY
|
2614
|
+
// _getPath
|
2615
|
+
// propertyWillChange, propertyDidChange
|
2437
2616
|
|
2438
|
-
var
|
2439
|
-
|
2440
|
-
|
2441
|
-
|
2442
|
-
|
2443
|
-
|
2444
|
-
META_KEY = Ember.META_KEY, // utils.js
|
2445
|
-
// circular reference observer depends on Ember.watch
|
2446
|
-
// we should move change events to this file or its own property_events.js
|
2447
|
-
forEach = Ember.ArrayPolyfills.forEach, // array.js
|
2448
|
-
FIRST_KEY = /^([^\.\*]+)/,
|
2449
|
-
IS_PATH = /[\.\*]/;
|
2450
|
-
|
2451
|
-
var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
|
2452
|
-
o_defineProperty = Ember.platform.defineProperty;
|
2617
|
+
var META_KEY = Ember.META_KEY,
|
2618
|
+
MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
|
2619
|
+
IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/,
|
2620
|
+
propertyWillChange = Ember.propertyWillChange,
|
2621
|
+
propertyDidChange = Ember.propertyDidChange,
|
2622
|
+
getPath = Ember._getPath;
|
2453
2623
|
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2624
|
+
/**
|
2625
|
+
Sets the value of a property on an object, respecting computed properties
|
2626
|
+
and notifying observers and other listeners of the change. If the
|
2627
|
+
property is not defined but the object implements the `unknownProperty`
|
2628
|
+
method then that will be invoked as well.
|
2457
2629
|
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2630
|
+
If you plan to run on IE8 and older browsers then you should use this
|
2631
|
+
method anytime you want to set a property on an object that you don't
|
2632
|
+
know for sure is private. (Properties beginning with an underscore '_'
|
2633
|
+
are considered private.)
|
2462
2634
|
|
2463
|
-
|
2464
|
-
|
2465
|
-
|
2635
|
+
On all newer browsers, you only need to use this method to set
|
2636
|
+
properties if the property might not be defined on the object and you want
|
2637
|
+
to respect the `unknownProperty` handler. Otherwise you can ignore this
|
2638
|
+
method.
|
2466
2639
|
|
2467
|
-
|
2640
|
+
@method set
|
2641
|
+
@for Ember
|
2642
|
+
@param {Object} obj The object to modify.
|
2643
|
+
@param {String} keyName The property key to set
|
2644
|
+
@param {Object} value The value to set
|
2645
|
+
@return {Object} the passed value.
|
2646
|
+
*/
|
2647
|
+
var set = function set(obj, keyName, value, tolerant) {
|
2648
|
+
if (typeof obj === 'string') {
|
2468
2649
|
|
2469
|
-
|
2470
|
-
|
2471
|
-
|
2472
|
-
|
2650
|
+
value = keyName;
|
2651
|
+
keyName = obj;
|
2652
|
+
obj = null;
|
2653
|
+
}
|
2473
2654
|
|
2474
|
-
|
2475
|
-
|
2476
|
-
if (deps) {
|
2477
|
-
for(var key in deps) {
|
2478
|
-
var desc = meta.descs[key];
|
2479
|
-
if (desc && desc._suspended === obj) continue;
|
2480
|
-
method(obj, key);
|
2481
|
-
}
|
2655
|
+
if (!obj || keyName.indexOf('.') !== -1) {
|
2656
|
+
return setPath(obj, keyName, value, tolerant);
|
2482
2657
|
}
|
2483
|
-
}
|
2484
2658
|
|
2485
2659
|
|
2486
|
-
var WILL_SEEN, DID_SEEN;
|
2487
2660
|
|
2488
|
-
|
2489
|
-
|
2490
|
-
if (
|
2661
|
+
var meta = obj[META_KEY], desc = meta && meta.descs[keyName],
|
2662
|
+
isUnknown, currentValue;
|
2663
|
+
if (desc) {
|
2664
|
+
desc.set(obj, keyName, value);
|
2665
|
+
} else {
|
2666
|
+
isUnknown = 'object' === typeof obj && !(keyName in obj);
|
2491
2667
|
|
2492
|
-
|
2493
|
-
|
2494
|
-
|
2495
|
-
|
2668
|
+
// setUnknownProperty is called if `obj` is an object,
|
2669
|
+
// the property does not already exist, and the
|
2670
|
+
// `setUnknownProperty` method exists on the object
|
2671
|
+
if (isUnknown && 'function' === typeof obj.setUnknownProperty) {
|
2672
|
+
obj.setUnknownProperty(keyName, value);
|
2673
|
+
} else if (meta && meta.watching[keyName] > 0) {
|
2674
|
+
if (MANDATORY_SETTER) {
|
2675
|
+
currentValue = meta.values[keyName];
|
2676
|
+
} else {
|
2677
|
+
currentValue = obj[keyName];
|
2678
|
+
}
|
2679
|
+
// only trigger a change if the value has changed
|
2680
|
+
if (value !== currentValue) {
|
2681
|
+
Ember.propertyWillChange(obj, keyName);
|
2682
|
+
if (MANDATORY_SETTER) {
|
2683
|
+
if (currentValue === undefined && !(keyName in obj)) {
|
2684
|
+
Ember.defineProperty(obj, keyName, null, value); // setup mandatory setter
|
2685
|
+
} else {
|
2686
|
+
meta.values[keyName] = value;
|
2687
|
+
}
|
2688
|
+
} else {
|
2689
|
+
obj[keyName] = value;
|
2690
|
+
}
|
2691
|
+
Ember.propertyDidChange(obj, keyName);
|
2692
|
+
}
|
2693
|
+
} else {
|
2694
|
+
obj[keyName] = value;
|
2695
|
+
}
|
2696
|
+
}
|
2697
|
+
return value;
|
2698
|
+
};
|
2699
|
+
|
2700
|
+
// Currently used only by Ember Data tests
|
2701
|
+
if (Ember.config.overrideAccessors) {
|
2702
|
+
Ember.set = set;
|
2703
|
+
Ember.config.overrideAccessors();
|
2704
|
+
set = Ember.set;
|
2496
2705
|
}
|
2497
2706
|
|
2498
|
-
|
2499
|
-
|
2500
|
-
if (obj.isDestroying) { return; }
|
2707
|
+
function setPath(root, path, value, tolerant) {
|
2708
|
+
var keyName;
|
2501
2709
|
|
2502
|
-
|
2503
|
-
|
2504
|
-
iterDeps(propertyDidChange, obj, depKey, seen, meta);
|
2505
|
-
if (top) { DID_SEEN = null; }
|
2506
|
-
}
|
2710
|
+
// get the last part of the path
|
2711
|
+
keyName = path.slice(path.lastIndexOf('.') + 1);
|
2507
2712
|
|
2508
|
-
//
|
2509
|
-
|
2510
|
-
//
|
2713
|
+
// get the first part of the part
|
2714
|
+
path = path.slice(0, path.length-(keyName.length+1));
|
2511
2715
|
|
2512
|
-
|
2513
|
-
|
2716
|
+
// unless the path is this, look up the first part to
|
2717
|
+
// get the root
|
2718
|
+
if (path !== 'this') {
|
2719
|
+
root = getPath(root, path);
|
2720
|
+
}
|
2514
2721
|
|
2515
|
-
|
2722
|
+
if (!keyName || keyName.length === 0) {
|
2723
|
+
throw new Error('You passed an empty path');
|
2724
|
+
}
|
2516
2725
|
|
2517
|
-
if (!
|
2518
|
-
|
2726
|
+
if (!root) {
|
2727
|
+
if (tolerant) { return; }
|
2728
|
+
else { throw new Error('Object in path '+path+' could not be found or was destroyed.'); }
|
2519
2729
|
}
|
2520
2730
|
|
2521
|
-
|
2522
|
-
nodes[keyName].push(node);
|
2523
|
-
Ember.watch(obj, keyName);
|
2731
|
+
return set(root, keyName, value);
|
2524
2732
|
}
|
2525
2733
|
|
2526
|
-
|
2527
|
-
|
2734
|
+
Ember.set = set;
|
2735
|
+
Ember.setPath = Ember.deprecateFunc('setPath is deprecated since set now supports paths', Ember.set);
|
2528
2736
|
|
2529
|
-
|
2530
|
-
|
2737
|
+
/**
|
2738
|
+
Error-tolerant form of `Ember.set`. Will not blow up if any part of the
|
2739
|
+
chain is `undefined`, `null`, or destroyed.
|
2531
2740
|
|
2532
|
-
|
2741
|
+
This is primarily used when syncing bindings, which may try to update after
|
2742
|
+
an object has been destroyed.
|
2533
2743
|
|
2534
|
-
|
2535
|
-
|
2536
|
-
|
2537
|
-
|
2538
|
-
|
2539
|
-
|
2540
|
-
|
2541
|
-
|
2744
|
+
@method trySet
|
2745
|
+
@for Ember
|
2746
|
+
@param {Object} obj The object to modify.
|
2747
|
+
@param {String} path The property path to set
|
2748
|
+
@param {Object} value The value to set
|
2749
|
+
*/
|
2750
|
+
Ember.trySet = function(root, path, value) {
|
2751
|
+
return set(root, path, value, true);
|
2752
|
+
};
|
2753
|
+
Ember.trySetPath = Ember.deprecateFunc('trySetPath has been renamed to trySet', Ember.trySet);
|
2542
2754
|
|
2543
|
-
|
2755
|
+
})();
|
2544
2756
|
|
2545
|
-
// attempts to add the pendingQueue chains again. If some of them end up
|
2546
|
-
// back in the queue and reschedule is true, schedules a timeout to try
|
2547
|
-
// again.
|
2548
|
-
function flushPendingChains() {
|
2549
|
-
if (pendingQueue.length === 0) { return; } // nothing to do
|
2550
2757
|
|
2551
|
-
var queue = pendingQueue;
|
2552
|
-
pendingQueue = [];
|
2553
2758
|
|
2554
|
-
|
2759
|
+
(function() {
|
2760
|
+
/**
|
2761
|
+
@module ember-metal
|
2762
|
+
*/
|
2555
2763
|
|
2556
|
-
|
2764
|
+
var META_KEY = Ember.META_KEY,
|
2765
|
+
metaFor = Ember.meta,
|
2766
|
+
objectDefineProperty = Ember.platform.defineProperty;
|
2557
2767
|
|
2558
|
-
|
2559
|
-
return metaFor(pvalue, false).proto === pvalue;
|
2560
|
-
}
|
2768
|
+
var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
|
2561
2769
|
|
2562
|
-
//
|
2563
|
-
//
|
2564
|
-
//
|
2565
|
-
var ChainNode = function(parent, key, value) {
|
2566
|
-
var obj;
|
2567
|
-
this._parent = parent;
|
2568
|
-
this._key = key;
|
2770
|
+
// ..........................................................
|
2771
|
+
// DESCRIPTOR
|
2772
|
+
//
|
2569
2773
|
|
2570
|
-
|
2571
|
-
|
2572
|
-
|
2573
|
-
// It is false for the root of a chain (because we have no parent)
|
2574
|
-
// and for global paths (because the parent node is the object with
|
2575
|
-
// the observer on it)
|
2576
|
-
this._watching = value===undefined;
|
2774
|
+
/**
|
2775
|
+
Objects of this type can implement an interface to responds requests to
|
2776
|
+
get and set. The default implementation handles simple properties.
|
2577
2777
|
|
2578
|
-
this.
|
2579
|
-
this._paths = {};
|
2580
|
-
if (this._watching) {
|
2581
|
-
this._object = parent.value();
|
2582
|
-
if (this._object) { addChainWatcher(this._object, this._key, this); }
|
2583
|
-
}
|
2778
|
+
You generally won't need to create or subclass this directly.
|
2584
2779
|
|
2585
|
-
|
2586
|
-
|
2587
|
-
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2591
|
-
this.value();
|
2592
|
-
}
|
2593
|
-
};
|
2780
|
+
@class Descriptor
|
2781
|
+
@namespace Ember
|
2782
|
+
@private
|
2783
|
+
@constructor
|
2784
|
+
*/
|
2785
|
+
var Descriptor = Ember.Descriptor = function() {};
|
2594
2786
|
|
2595
|
-
|
2787
|
+
// ..........................................................
|
2788
|
+
// DEFINING PROPERTIES API
|
2789
|
+
//
|
2596
2790
|
|
2597
|
-
|
2598
|
-
if (this._value === undefined && this._watching) {
|
2599
|
-
var obj = this._parent.value();
|
2600
|
-
this._value = (obj && !isProto(obj)) ? get(obj, this._key) : undefined;
|
2601
|
-
}
|
2602
|
-
return this._value;
|
2603
|
-
};
|
2791
|
+
var MANDATORY_SETTER_FUNCTION = Ember.MANDATORY_SETTER_FUNCTION = function(value) {
|
2604
2792
|
|
2605
|
-
ChainNodePrototype.destroy = function() {
|
2606
|
-
if (this._watching) {
|
2607
|
-
var obj = this._object;
|
2608
|
-
if (obj) { removeChainWatcher(obj, this._key, this); }
|
2609
|
-
this._watching = false; // so future calls do nothing
|
2610
|
-
}
|
2611
2793
|
};
|
2612
2794
|
|
2613
|
-
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
if (paths[path] <= 0) { continue; } // this check will also catch non-number vals.
|
2619
|
-
ret.add(path);
|
2620
|
-
}
|
2621
|
-
return ret;
|
2795
|
+
var DEFAULT_GETTER_FUNCTION = Ember.DEFAULT_GETTER_FUNCTION = function(name) {
|
2796
|
+
return function() {
|
2797
|
+
var meta = this[META_KEY];
|
2798
|
+
return meta && meta.values[name];
|
2799
|
+
};
|
2622
2800
|
};
|
2623
2801
|
|
2624
|
-
|
2625
|
-
|
2626
|
-
ChainNodePrototype.add = function(path) {
|
2627
|
-
var obj, tuple, key, src, paths;
|
2628
|
-
|
2629
|
-
paths = this._paths;
|
2630
|
-
paths[path] = (paths[path] || 0) + 1;
|
2802
|
+
/**
|
2803
|
+
@private
|
2631
2804
|
|
2632
|
-
|
2633
|
-
|
2805
|
+
NOTE: This is a low-level method used by other parts of the API. You almost
|
2806
|
+
never want to call this method directly. Instead you should use
|
2807
|
+
`Ember.mixin()` to define new properties.
|
2634
2808
|
|
2635
|
-
|
2636
|
-
|
2637
|
-
|
2638
|
-
key = firstKey(path);
|
2639
|
-
path = path.slice(key.length+1);
|
2809
|
+
Defines a property on an object. This method works much like the ES5
|
2810
|
+
`Object.defineProperty()` method except that it can also accept computed
|
2811
|
+
properties and other special descriptors.
|
2640
2812
|
|
2641
|
-
|
2642
|
-
|
2643
|
-
|
2644
|
-
|
2645
|
-
tuple.length = 0;
|
2646
|
-
return;
|
2813
|
+
Normally this method takes only three parameters. However if you pass an
|
2814
|
+
instance of `Ember.Descriptor` as the third param then you can pass an
|
2815
|
+
optional value as the fourth parameter. This is often more efficient than
|
2816
|
+
creating new descriptor hashes for each property.
|
2647
2817
|
|
2648
|
-
|
2649
|
-
} else {
|
2650
|
-
src = tuple[0];
|
2651
|
-
key = path.slice(0, 0-(tuple[1].length+1));
|
2652
|
-
path = tuple[1];
|
2653
|
-
}
|
2818
|
+
## Examples
|
2654
2819
|
|
2655
|
-
|
2656
|
-
|
2657
|
-
|
2820
|
+
```javascript
|
2821
|
+
// ES5 compatible mode
|
2822
|
+
Ember.defineProperty(contact, 'firstName', {
|
2823
|
+
writable: true,
|
2824
|
+
configurable: false,
|
2825
|
+
enumerable: true,
|
2826
|
+
value: 'Charles'
|
2827
|
+
});
|
2658
2828
|
|
2659
|
-
//
|
2660
|
-
|
2661
|
-
ChainNodePrototype.remove = function(path) {
|
2662
|
-
var obj, tuple, key, src, paths;
|
2829
|
+
// define a simple property
|
2830
|
+
Ember.defineProperty(contact, 'lastName', undefined, 'Jolley');
|
2663
2831
|
|
2664
|
-
|
2665
|
-
|
2832
|
+
// define a computed property
|
2833
|
+
Ember.defineProperty(contact, 'fullName', Ember.computed(function() {
|
2834
|
+
return this.firstName+' '+this.lastName;
|
2835
|
+
}).property('firstName', 'lastName'));
|
2836
|
+
```
|
2666
2837
|
|
2667
|
-
|
2668
|
-
|
2669
|
-
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2838
|
+
@method defineProperty
|
2839
|
+
@for Ember
|
2840
|
+
@param {Object} obj the object to define this property on. This may be a prototype.
|
2841
|
+
@param {String} keyName the name of the property
|
2842
|
+
@param {Ember.Descriptor} [desc] an instance of `Ember.Descriptor` (typically a
|
2843
|
+
computed property) or an ES5 descriptor.
|
2844
|
+
You must provide this or `data` but not both.
|
2845
|
+
@param {*} [data] something other than a descriptor, that will
|
2846
|
+
become the explicit value of this property.
|
2847
|
+
*/
|
2848
|
+
Ember.defineProperty = function(obj, keyName, desc, data, meta) {
|
2849
|
+
var descs, existingDesc, watching, value;
|
2850
|
+
|
2851
|
+
if (!meta) meta = metaFor(obj);
|
2852
|
+
descs = meta.descs;
|
2853
|
+
existingDesc = meta.descs[keyName];
|
2854
|
+
watching = meta.watching[keyName] > 0;
|
2855
|
+
|
2856
|
+
if (existingDesc instanceof Ember.Descriptor) {
|
2857
|
+
existingDesc.teardown(obj, keyName);
|
2858
|
+
}
|
2859
|
+
|
2860
|
+
if (desc instanceof Ember.Descriptor) {
|
2861
|
+
value = desc;
|
2862
|
+
|
2863
|
+
descs[keyName] = desc;
|
2864
|
+
if (MANDATORY_SETTER && watching) {
|
2865
|
+
objectDefineProperty(obj, keyName, {
|
2866
|
+
configurable: true,
|
2867
|
+
enumerable: true,
|
2868
|
+
writable: true,
|
2869
|
+
value: undefined // make enumerable
|
2870
|
+
});
|
2871
|
+
} else {
|
2872
|
+
obj[keyName] = undefined; // make enumerable
|
2873
|
+
}
|
2874
|
+
desc.setup(obj, keyName);
|
2673
2875
|
} else {
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
2876
|
+
descs[keyName] = undefined; // shadow descriptor in proto
|
2877
|
+
if (desc == null) {
|
2878
|
+
value = data;
|
2879
|
+
|
2880
|
+
if (MANDATORY_SETTER && watching) {
|
2881
|
+
meta.values[keyName] = data;
|
2882
|
+
objectDefineProperty(obj, keyName, {
|
2883
|
+
configurable: true,
|
2884
|
+
enumerable: true,
|
2885
|
+
set: MANDATORY_SETTER_FUNCTION,
|
2886
|
+
get: DEFAULT_GETTER_FUNCTION(keyName)
|
2887
|
+
});
|
2888
|
+
} else {
|
2889
|
+
obj[keyName] = data;
|
2890
|
+
}
|
2891
|
+
} else {
|
2892
|
+
value = desc;
|
2893
|
+
|
2894
|
+
// compatibility with ES5
|
2895
|
+
objectDefineProperty(obj, keyName, desc);
|
2896
|
+
}
|
2677
2897
|
}
|
2678
2898
|
|
2679
|
-
|
2680
|
-
|
2899
|
+
// if key is being watched, override chains that
|
2900
|
+
// were initialized with the prototype
|
2901
|
+
if (watching) { Ember.overrideChains(obj, keyName, meta); }
|
2902
|
+
|
2903
|
+
// The `value` passed to the `didDefineProperty` hook is
|
2904
|
+
// either the descriptor or data, whichever was passed.
|
2905
|
+
if (obj.didDefineProperty) { obj.didDefineProperty(obj, keyName, value); }
|
2906
|
+
|
2907
|
+
return this;
|
2681
2908
|
};
|
2682
2909
|
|
2683
|
-
ChainNodePrototype.count = 0;
|
2684
2910
|
|
2685
|
-
|
2686
|
-
var chains = this._chains, node;
|
2687
|
-
if (!chains) { chains = this._chains = {}; }
|
2911
|
+
})();
|
2688
2912
|
|
2689
|
-
node = chains[key];
|
2690
|
-
if (!node) { node = chains[key] = new ChainNode(this, key, src); }
|
2691
|
-
node.count++; // count chains...
|
2692
2913
|
|
2693
|
-
|
2694
|
-
|
2695
|
-
|
2696
|
-
|
2697
|
-
|
2698
|
-
|
2914
|
+
|
2915
|
+
(function() {
|
2916
|
+
var changeProperties = Ember.changeProperties,
|
2917
|
+
set = Ember.set;
|
2918
|
+
|
2919
|
+
/**
|
2920
|
+
Set a list of properties on an object. These properties are set inside
|
2921
|
+
a single `beginPropertyChanges` and `endPropertyChanges` batch, so
|
2922
|
+
observers will be buffered.
|
2923
|
+
|
2924
|
+
@method setProperties
|
2925
|
+
@param target
|
2926
|
+
@param {Hash} properties
|
2927
|
+
@return target
|
2928
|
+
*/
|
2929
|
+
Ember.setProperties = function(self, hash) {
|
2930
|
+
changeProperties(function(){
|
2931
|
+
for(var prop in hash) {
|
2932
|
+
if (hash.hasOwnProperty(prop)) { set(self, prop, hash[prop]); }
|
2933
|
+
}
|
2934
|
+
});
|
2935
|
+
return self;
|
2699
2936
|
};
|
2937
|
+
})();
|
2700
2938
|
|
2701
|
-
ChainNodePrototype.unchain = function(key, path) {
|
2702
|
-
var chains = this._chains, node = chains[key];
|
2703
2939
|
|
2704
|
-
// unchain rest of path first...
|
2705
|
-
if (path && path.length>1) {
|
2706
|
-
key = firstKey(path);
|
2707
|
-
path = path.slice(key.length+1);
|
2708
|
-
node.unchain(key, path);
|
2709
|
-
}
|
2710
2940
|
|
2711
|
-
|
2712
|
-
|
2713
|
-
|
2714
|
-
|
2715
|
-
|
2716
|
-
}
|
2941
|
+
(function() {
|
2942
|
+
var metaFor = Ember.meta, // utils.js
|
2943
|
+
typeOf = Ember.typeOf, // utils.js
|
2944
|
+
MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
|
2945
|
+
o_defineProperty = Ember.platform.defineProperty;
|
2717
2946
|
|
2718
|
-
|
2947
|
+
Ember.watchKey = function(obj, keyName) {
|
2948
|
+
// can't watch length on Array - it is special...
|
2949
|
+
if (keyName === 'length' && typeOf(obj) === 'array') { return; }
|
2719
2950
|
|
2720
|
-
|
2721
|
-
var chains = this._chains;
|
2722
|
-
if (chains) {
|
2723
|
-
for(var key in chains) {
|
2724
|
-
if (!chains.hasOwnProperty(key)) { continue; }
|
2725
|
-
chains[key].willChange();
|
2726
|
-
}
|
2727
|
-
}
|
2951
|
+
var m = metaFor(obj), watching = m.watching, desc;
|
2728
2952
|
|
2729
|
-
|
2730
|
-
|
2953
|
+
// activate watching first time
|
2954
|
+
if (!watching[keyName]) {
|
2955
|
+
watching[keyName] = 1;
|
2956
|
+
desc = m.descs[keyName];
|
2957
|
+
if (desc && desc.willWatch) { desc.willWatch(obj, keyName); }
|
2731
2958
|
|
2732
|
-
|
2733
|
-
|
2959
|
+
if ('function' === typeof obj.willWatchProperty) {
|
2960
|
+
obj.willWatchProperty(keyName);
|
2961
|
+
}
|
2734
2962
|
|
2735
|
-
|
2736
|
-
|
2963
|
+
if (MANDATORY_SETTER && keyName in obj) {
|
2964
|
+
m.values[keyName] = obj[keyName];
|
2965
|
+
o_defineProperty(obj, keyName, {
|
2966
|
+
configurable: true,
|
2967
|
+
enumerable: true,
|
2968
|
+
set: Ember.MANDATORY_SETTER_FUNCTION,
|
2969
|
+
get: Ember.DEFAULT_GETTER_FUNCTION(keyName)
|
2970
|
+
});
|
2971
|
+
}
|
2737
2972
|
} else {
|
2738
|
-
|
2739
|
-
path = 'this.' + path;
|
2740
|
-
if (this._paths[path] > 0) { Ember.propertyWillChange(this.value(), path); }
|
2973
|
+
watching[keyName] = (watching[keyName] || 0) + 1;
|
2741
2974
|
}
|
2742
2975
|
};
|
2743
2976
|
|
2744
|
-
ChainNodePrototype.chainDidChange = function(chain, path, depth) {
|
2745
|
-
if (this._key) { path = this._key + '.' + path; }
|
2746
|
-
if (this._parent) {
|
2747
|
-
this._parent.chainDidChange(this, path, depth+1);
|
2748
|
-
} else {
|
2749
|
-
if (depth > 1) { Ember.propertyDidChange(this.value(), path); }
|
2750
|
-
path = 'this.' + path;
|
2751
|
-
if (this._paths[path] > 0) { Ember.propertyDidChange(this.value(), path); }
|
2752
|
-
}
|
2753
|
-
};
|
2754
2977
|
|
2755
|
-
|
2756
|
-
|
2757
|
-
if (this._watching) {
|
2758
|
-
var obj = this._parent.value();
|
2759
|
-
if (obj !== this._object) {
|
2760
|
-
removeChainWatcher(this._object, this._key, this);
|
2761
|
-
this._object = obj;
|
2762
|
-
addChainWatcher(obj, this._key, this);
|
2763
|
-
}
|
2764
|
-
this._value = undefined;
|
2978
|
+
Ember.unwatchKey = function(obj, keyName) {
|
2979
|
+
var m = metaFor(obj), watching = m.watching, desc;
|
2765
2980
|
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2769
|
-
this.value();
|
2770
|
-
}
|
2981
|
+
if (watching[keyName] === 1) {
|
2982
|
+
watching[keyName] = 0;
|
2983
|
+
desc = m.descs[keyName];
|
2771
2984
|
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
2985
|
+
if (desc && desc.didUnwatch) { desc.didUnwatch(obj, keyName); }
|
2986
|
+
|
2987
|
+
if ('function' === typeof obj.didUnwatchProperty) {
|
2988
|
+
obj.didUnwatchProperty(keyName);
|
2989
|
+
}
|
2990
|
+
|
2991
|
+
if (MANDATORY_SETTER && keyName in obj) {
|
2992
|
+
o_defineProperty(obj, keyName, {
|
2993
|
+
configurable: true,
|
2994
|
+
enumerable: true,
|
2995
|
+
writable: true,
|
2996
|
+
value: m.values[keyName]
|
2997
|
+
});
|
2998
|
+
delete m.values[keyName];
|
2778
2999
|
}
|
3000
|
+
} else if (watching[keyName] > 1) {
|
3001
|
+
watching[keyName]--;
|
2779
3002
|
}
|
3003
|
+
};
|
3004
|
+
})();
|
2780
3005
|
|
2781
|
-
if (suppressEvent) { return; }
|
2782
3006
|
|
2783
|
-
// and finally tell parent about my path changing...
|
2784
|
-
if (this._parent) { this._parent.chainDidChange(this, this._key, 1); }
|
2785
|
-
};
|
2786
3007
|
|
2787
|
-
|
2788
|
-
|
2789
|
-
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
2793
|
-
|
2794
|
-
|
2795
|
-
|
2796
|
-
|
2797
|
-
|
3008
|
+
(function() {
|
3009
|
+
var metaFor = Ember.meta, // utils.js
|
3010
|
+
get = Ember.get, // property_get.js
|
3011
|
+
normalizeTuple = Ember.normalizeTuple, // property_get.js
|
3012
|
+
forEach = Ember.ArrayPolyfills.forEach, // array.js
|
3013
|
+
warn = Ember.warn,
|
3014
|
+
watchKey = Ember.watchKey,
|
3015
|
+
unwatchKey = Ember.unwatchKey,
|
3016
|
+
propertyWillChange = Ember.propertyWillChange,
|
3017
|
+
propertyDidChange = Ember.propertyDidChange,
|
3018
|
+
FIRST_KEY = /^([^\.\*]+)/;
|
3019
|
+
|
3020
|
+
function firstKey(path) {
|
3021
|
+
return path.match(FIRST_KEY)[0];
|
2798
3022
|
}
|
2799
3023
|
|
2800
|
-
|
2801
|
-
|
3024
|
+
var pendingQueue = [];
|
3025
|
+
|
3026
|
+
// attempts to add the pendingQueue chains again. If some of them end up
|
3027
|
+
// back in the queue and reschedule is true, schedules a timeout to try
|
3028
|
+
// again.
|
3029
|
+
Ember.flushPendingChains = function() {
|
3030
|
+
if (pendingQueue.length === 0) { return; } // nothing to do
|
3031
|
+
|
3032
|
+
var queue = pendingQueue;
|
3033
|
+
pendingQueue = [];
|
3034
|
+
|
3035
|
+
forEach.call(queue, function(q) { q[0].add(q[1]); });
|
3036
|
+
|
3037
|
+
warn('Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
|
2802
3038
|
};
|
2803
3039
|
|
2804
|
-
function chainsWillChange(obj, keyName, m, arg) {
|
2805
|
-
if (!m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
|
2806
3040
|
|
2807
|
-
|
3041
|
+
function addChainWatcher(obj, keyName, node) {
|
3042
|
+
if (!obj || ('object' !== typeof obj)) { return; } // nothing to do
|
2808
3043
|
|
2809
|
-
nodes =
|
2810
|
-
if (!nodes) { return; }
|
3044
|
+
var m = metaFor(obj), nodes = m.chainWatchers;
|
2811
3045
|
|
2812
|
-
|
2813
|
-
nodes
|
3046
|
+
if (!m.hasOwnProperty('chainWatchers')) {
|
3047
|
+
nodes = m.chainWatchers = {};
|
2814
3048
|
}
|
3049
|
+
|
3050
|
+
if (!nodes[keyName]) { nodes[keyName] = []; }
|
3051
|
+
nodes[keyName].push(node);
|
3052
|
+
watchKey(obj, keyName);
|
2815
3053
|
}
|
2816
3054
|
|
2817
|
-
function
|
3055
|
+
var removeChainWatcher = Ember.removeChainWatcher = function(obj, keyName, node) {
|
3056
|
+
if (!obj || 'object' !== typeof obj) { return; } // nothing to do
|
3057
|
+
|
3058
|
+
var m = metaFor(obj, false);
|
2818
3059
|
if (!m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
|
2819
3060
|
|
2820
3061
|
var nodes = m.chainWatchers;
|
2821
3062
|
|
2822
|
-
|
2823
|
-
|
2824
|
-
|
2825
|
-
|
2826
|
-
|
2827
|
-
nodes[i].didChange(arg);
|
3063
|
+
if (nodes[keyName]) {
|
3064
|
+
nodes = nodes[keyName];
|
3065
|
+
for (var i = 0, l = nodes.length; i < l; i++) {
|
3066
|
+
if (nodes[i] === node) { nodes.splice(i, 1); }
|
3067
|
+
}
|
2828
3068
|
}
|
2829
|
-
|
2830
|
-
|
2831
|
-
// ..........................................................
|
2832
|
-
// WATCH
|
2833
|
-
//
|
3069
|
+
unwatchKey(obj, keyName);
|
3070
|
+
};
|
2834
3071
|
|
2835
|
-
|
2836
|
-
|
3072
|
+
function isProto(pvalue) {
|
3073
|
+
return metaFor(pvalue, false).proto === pvalue;
|
3074
|
+
}
|
2837
3075
|
|
2838
|
-
|
2839
|
-
|
2840
|
-
|
2841
|
-
|
2842
|
-
|
3076
|
+
// A ChainNode watches a single key on an object. If you provide a starting
|
3077
|
+
// value for the key then the node won't actually watch it. For a root node
|
3078
|
+
// pass null for parent and key and object for value.
|
3079
|
+
var ChainNode = Ember._ChainNode = function(parent, key, value) {
|
3080
|
+
var obj;
|
3081
|
+
this._parent = parent;
|
3082
|
+
this._key = key;
|
2843
3083
|
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
2850
|
-
|
2851
|
-
if (keyName === 'length' && Ember.typeOf(obj) === 'array') { return this; }
|
3084
|
+
// _watching is true when calling get(this._parent, this._key) will
|
3085
|
+
// return the value of this node.
|
3086
|
+
//
|
3087
|
+
// It is false for the root of a chain (because we have no parent)
|
3088
|
+
// and for global paths (because the parent node is the object with
|
3089
|
+
// the observer on it)
|
3090
|
+
this._watching = value===undefined;
|
2852
3091
|
|
2853
|
-
|
3092
|
+
this._value = value;
|
3093
|
+
this._paths = {};
|
3094
|
+
if (this._watching) {
|
3095
|
+
this._object = parent.value();
|
3096
|
+
if (this._object) { addChainWatcher(this._object, this._key, this); }
|
3097
|
+
}
|
2854
3098
|
|
2855
|
-
//
|
2856
|
-
|
2857
|
-
|
2858
|
-
|
2859
|
-
|
2860
|
-
|
3099
|
+
// Special-case: the EachProxy relies on immediate evaluation to
|
3100
|
+
// establish its observers.
|
3101
|
+
//
|
3102
|
+
// TODO: Replace this with an efficient callback that the EachProxy
|
3103
|
+
// can implement.
|
3104
|
+
if (this._parent && this._parent._key === '@each') {
|
3105
|
+
this.value();
|
3106
|
+
}
|
3107
|
+
};
|
2861
3108
|
|
2862
|
-
|
2863
|
-
obj.willWatchProperty(keyName);
|
2864
|
-
}
|
3109
|
+
var ChainNodePrototype = ChainNode.prototype;
|
2865
3110
|
|
2866
|
-
|
2867
|
-
|
2868
|
-
|
2869
|
-
|
2870
|
-
|
2871
|
-
|
2872
|
-
|
2873
|
-
});
|
2874
|
-
}
|
2875
|
-
} else {
|
2876
|
-
chainsFor(obj).add(keyName);
|
2877
|
-
}
|
3111
|
+
ChainNodePrototype.value = function() {
|
3112
|
+
if (this._value === undefined && this._watching) {
|
3113
|
+
var obj = this._parent.value();
|
3114
|
+
this._value = (obj && !isProto(obj)) ? get(obj, this._key) : undefined;
|
3115
|
+
}
|
3116
|
+
return this._value;
|
3117
|
+
};
|
2878
3118
|
|
2879
|
-
|
2880
|
-
|
3119
|
+
ChainNodePrototype.destroy = function() {
|
3120
|
+
if (this._watching) {
|
3121
|
+
var obj = this._object;
|
3122
|
+
if (obj) { removeChainWatcher(obj, this._key, this); }
|
3123
|
+
this._watching = false; // so future calls do nothing
|
2881
3124
|
}
|
2882
|
-
return this;
|
2883
3125
|
};
|
2884
3126
|
|
2885
|
-
|
2886
|
-
|
2887
|
-
|
3127
|
+
// copies a top level object only
|
3128
|
+
ChainNodePrototype.copy = function(obj) {
|
3129
|
+
var ret = new ChainNode(null, null, obj),
|
3130
|
+
paths = this._paths, path;
|
3131
|
+
for (path in paths) {
|
3132
|
+
if (paths[path] <= 0) { continue; } // this check will also catch non-number vals.
|
3133
|
+
ret.add(path);
|
3134
|
+
}
|
3135
|
+
return ret;
|
2888
3136
|
};
|
2889
3137
|
|
2890
|
-
|
3138
|
+
// called on the root node of a chain to setup watchers on the specified
|
3139
|
+
// path.
|
3140
|
+
ChainNodePrototype.add = function(path) {
|
3141
|
+
var obj, tuple, key, src, paths;
|
2891
3142
|
|
2892
|
-
|
2893
|
-
|
2894
|
-
if (keyName === 'length' && Ember.typeOf(obj) === 'array') { return this; }
|
3143
|
+
paths = this._paths;
|
3144
|
+
paths[path] = (paths[path] || 0) + 1;
|
2895
3145
|
|
2896
|
-
|
3146
|
+
obj = this.value();
|
3147
|
+
tuple = normalizeTuple(obj, path);
|
2897
3148
|
|
2898
|
-
|
2899
|
-
|
3149
|
+
// the path was a local path
|
3150
|
+
if (tuple[0] && tuple[0] === obj) {
|
3151
|
+
path = tuple[1];
|
3152
|
+
key = firstKey(path);
|
3153
|
+
path = path.slice(key.length+1);
|
2900
3154
|
|
2901
|
-
|
2902
|
-
|
2903
|
-
|
3155
|
+
// global path, but object does not exist yet.
|
3156
|
+
// put into a queue and try to connect later.
|
3157
|
+
} else if (!tuple[0]) {
|
3158
|
+
pendingQueue.push([this, path]);
|
3159
|
+
tuple.length = 0;
|
3160
|
+
return;
|
2904
3161
|
|
2905
|
-
|
2906
|
-
|
2907
|
-
|
3162
|
+
// global path, and object already exists
|
3163
|
+
} else {
|
3164
|
+
src = tuple[0];
|
3165
|
+
key = path.slice(0, 0-(tuple[1].length+1));
|
3166
|
+
path = tuple[1];
|
3167
|
+
}
|
2908
3168
|
|
2909
|
-
|
2910
|
-
|
2911
|
-
|
2912
|
-
enumerable: true,
|
2913
|
-
writable: true,
|
2914
|
-
value: m.values[keyName]
|
2915
|
-
});
|
2916
|
-
delete m.values[keyName];
|
2917
|
-
}
|
2918
|
-
} else {
|
2919
|
-
chainsFor(obj).remove(keyName);
|
2920
|
-
}
|
3169
|
+
tuple.length = 0;
|
3170
|
+
this.chain(key, path, src);
|
3171
|
+
};
|
2921
3172
|
|
2922
|
-
|
2923
|
-
|
3173
|
+
// called on the root node of a chain to teardown watcher on the specified
|
3174
|
+
// path
|
3175
|
+
ChainNodePrototype.remove = function(path) {
|
3176
|
+
var obj, tuple, key, src, paths;
|
3177
|
+
|
3178
|
+
paths = this._paths;
|
3179
|
+
if (paths[path] > 0) { paths[path]--; }
|
3180
|
+
|
3181
|
+
obj = this.value();
|
3182
|
+
tuple = normalizeTuple(obj, path);
|
3183
|
+
if (tuple[0] === obj) {
|
3184
|
+
path = tuple[1];
|
3185
|
+
key = firstKey(path);
|
3186
|
+
path = path.slice(key.length+1);
|
3187
|
+
} else {
|
3188
|
+
src = tuple[0];
|
3189
|
+
key = path.slice(0, 0-(tuple[1].length+1));
|
3190
|
+
path = tuple[1];
|
2924
3191
|
}
|
2925
3192
|
|
2926
|
-
|
3193
|
+
tuple.length = 0;
|
3194
|
+
this.unchain(key, path);
|
2927
3195
|
};
|
2928
3196
|
|
2929
|
-
|
2930
|
-
@private
|
3197
|
+
ChainNodePrototype.count = 0;
|
2931
3198
|
|
2932
|
-
|
2933
|
-
|
2934
|
-
|
3199
|
+
ChainNodePrototype.chain = function(key, path, src) {
|
3200
|
+
var chains = this._chains, node;
|
3201
|
+
if (!chains) { chains = this._chains = {}; }
|
2935
3202
|
|
2936
|
-
|
2937
|
-
|
2938
|
-
|
2939
|
-
*/
|
2940
|
-
Ember.rewatch = function(obj) {
|
2941
|
-
var m = metaFor(obj, false), chains = m.chains;
|
3203
|
+
node = chains[key];
|
3204
|
+
if (!node) { node = chains[key] = new ChainNode(this, key, src); }
|
3205
|
+
node.count++; // count chains...
|
2942
3206
|
|
2943
|
-
//
|
2944
|
-
if (
|
2945
|
-
|
3207
|
+
// chain rest of path if there is one
|
3208
|
+
if (path && path.length>0) {
|
3209
|
+
key = firstKey(path);
|
3210
|
+
path = path.slice(key.length+1);
|
3211
|
+
node.chain(key, path); // NOTE: no src means it will observe changes...
|
2946
3212
|
}
|
3213
|
+
};
|
2947
3214
|
|
2948
|
-
|
2949
|
-
|
2950
|
-
|
3215
|
+
ChainNodePrototype.unchain = function(key, path) {
|
3216
|
+
var chains = this._chains, node = chains[key];
|
3217
|
+
|
3218
|
+
// unchain rest of path first...
|
3219
|
+
if (path && path.length>1) {
|
3220
|
+
key = firstKey(path);
|
3221
|
+
path = path.slice(key.length+1);
|
3222
|
+
node.unchain(key, path);
|
3223
|
+
}
|
3224
|
+
|
3225
|
+
// delete node if needed.
|
3226
|
+
node.count--;
|
3227
|
+
if (node.count<=0) {
|
3228
|
+
delete chains[node._key];
|
3229
|
+
node.destroy();
|
2951
3230
|
}
|
2952
3231
|
|
2953
|
-
return this;
|
2954
3232
|
};
|
2955
3233
|
|
2956
|
-
|
3234
|
+
ChainNodePrototype.willChange = function() {
|
3235
|
+
var chains = this._chains;
|
3236
|
+
if (chains) {
|
3237
|
+
for(var key in chains) {
|
3238
|
+
if (!chains.hasOwnProperty(key)) { continue; }
|
3239
|
+
chains[key].willChange();
|
3240
|
+
}
|
3241
|
+
}
|
3242
|
+
|
3243
|
+
if (this._parent) { this._parent.chainWillChange(this, this._key, 1); }
|
3244
|
+
};
|
3245
|
+
|
3246
|
+
ChainNodePrototype.chainWillChange = function(chain, path, depth) {
|
3247
|
+
if (this._key) { path = this._key + '.' + path; }
|
3248
|
+
|
3249
|
+
if (this._parent) {
|
3250
|
+
this._parent.chainWillChange(this, path, depth+1);
|
3251
|
+
} else {
|
3252
|
+
if (depth > 1) { propertyWillChange(this.value(), path); }
|
3253
|
+
path = 'this.' + path;
|
3254
|
+
if (this._paths[path] > 0) { propertyWillChange(this.value(), path); }
|
3255
|
+
}
|
3256
|
+
};
|
3257
|
+
|
3258
|
+
ChainNodePrototype.chainDidChange = function(chain, path, depth) {
|
3259
|
+
if (this._key) { path = this._key + '.' + path; }
|
3260
|
+
if (this._parent) {
|
3261
|
+
this._parent.chainDidChange(this, path, depth+1);
|
3262
|
+
} else {
|
3263
|
+
if (depth > 1) { propertyDidChange(this.value(), path); }
|
3264
|
+
path = 'this.' + path;
|
3265
|
+
if (this._paths[path] > 0) { propertyDidChange(this.value(), path); }
|
3266
|
+
}
|
3267
|
+
};
|
3268
|
+
|
3269
|
+
ChainNodePrototype.didChange = function(suppressEvent) {
|
3270
|
+
// invalidate my own value first.
|
3271
|
+
if (this._watching) {
|
3272
|
+
var obj = this._parent.value();
|
3273
|
+
if (obj !== this._object) {
|
3274
|
+
removeChainWatcher(this._object, this._key, this);
|
3275
|
+
this._object = obj;
|
3276
|
+
addChainWatcher(obj, this._key, this);
|
3277
|
+
}
|
3278
|
+
this._value = undefined;
|
3279
|
+
|
3280
|
+
// Special-case: the EachProxy relies on immediate evaluation to
|
3281
|
+
// establish its observers.
|
3282
|
+
if (this._parent && this._parent._key === '@each')
|
3283
|
+
this.value();
|
3284
|
+
}
|
3285
|
+
|
3286
|
+
// then notify chains...
|
3287
|
+
var chains = this._chains;
|
3288
|
+
if (chains) {
|
3289
|
+
for(var key in chains) {
|
3290
|
+
if (!chains.hasOwnProperty(key)) { continue; }
|
3291
|
+
chains[key].didChange(suppressEvent);
|
3292
|
+
}
|
3293
|
+
}
|
3294
|
+
|
3295
|
+
if (suppressEvent) { return; }
|
3296
|
+
|
3297
|
+
// and finally tell parent about my path changing...
|
3298
|
+
if (this._parent) { this._parent.chainDidChange(this, this._key, 1); }
|
3299
|
+
};
|
3300
|
+
|
3301
|
+
Ember.finishChains = function(obj) {
|
2957
3302
|
var m = metaFor(obj, false), chains = m.chains;
|
2958
3303
|
if (chains) {
|
2959
3304
|
if (chains.value() !== obj) {
|
@@ -2962,75 +3307,145 @@ Ember.finishChains = function(obj) {
|
|
2962
3307
|
chains.didChange(true);
|
2963
3308
|
}
|
2964
3309
|
};
|
3310
|
+
})();
|
2965
3311
|
|
2966
|
-
// ..........................................................
|
2967
|
-
// PROPERTY CHANGES
|
2968
|
-
//
|
2969
3312
|
|
2970
|
-
/**
|
2971
|
-
This function is called just before an object property is about to change.
|
2972
|
-
It will notify any before observers and prepare caches among other things.
|
2973
3313
|
|
2974
|
-
|
2975
|
-
|
2976
|
-
|
2977
|
-
|
3314
|
+
(function() {
|
3315
|
+
var metaFor = Ember.meta, // utils.js
|
3316
|
+
typeOf = Ember.typeOf, // utils.js
|
3317
|
+
ChainNode = Ember._ChainNode; // chains.js
|
2978
3318
|
|
2979
|
-
|
2980
|
-
|
2981
|
-
|
2982
|
-
|
2983
|
-
|
3319
|
+
// get the chains for the current object. If the current object has
|
3320
|
+
// chains inherited from the proto they will be cloned and reconfigured for
|
3321
|
+
// the current object.
|
3322
|
+
function chainsFor(obj) {
|
3323
|
+
var m = metaFor(obj), ret = m.chains;
|
3324
|
+
if (!ret) {
|
3325
|
+
ret = m.chains = new ChainNode(null, null, obj);
|
3326
|
+
} else if (ret.value() !== obj) {
|
3327
|
+
ret = m.chains = ret.copy(obj);
|
3328
|
+
}
|
3329
|
+
return ret;
|
3330
|
+
}
|
3331
|
+
|
3332
|
+
Ember.watchPath = function(obj, keyPath) {
|
3333
|
+
// can't watch length on Array - it is special...
|
3334
|
+
if (keyPath === 'length' && typeOf(obj) === 'array') { return; }
|
3335
|
+
|
3336
|
+
var m = metaFor(obj), watching = m.watching;
|
3337
|
+
|
3338
|
+
if (!watching[keyPath]) { // activate watching first time
|
3339
|
+
watching[keyPath] = 1;
|
3340
|
+
chainsFor(obj).add(keyPath);
|
3341
|
+
} else {
|
3342
|
+
watching[keyPath] = (watching[keyPath] || 0) + 1;
|
3343
|
+
}
|
3344
|
+
};
|
3345
|
+
|
3346
|
+
Ember.unwatchPath = function(obj, keyPath) {
|
3347
|
+
var m = metaFor(obj), watching = m.watching, desc;
|
3348
|
+
|
3349
|
+
if (watching[keyPath] === 1) {
|
3350
|
+
watching[keyPath] = 0;
|
3351
|
+
chainsFor(obj).remove(keyPath);
|
3352
|
+
} else if (watching[keyPath] > 1) {
|
3353
|
+
watching[keyPath]--;
|
3354
|
+
}
|
3355
|
+
};
|
3356
|
+
})();
|
3357
|
+
|
3358
|
+
|
3359
|
+
|
3360
|
+
(function() {
|
3361
|
+
/**
|
3362
|
+
@module ember-metal
|
2984
3363
|
*/
|
2985
|
-
function propertyWillChange(obj, keyName) {
|
2986
|
-
var m = metaFor(obj, false),
|
2987
|
-
watching = m.watching[keyName] > 0 || keyName === 'length',
|
2988
|
-
proto = m.proto,
|
2989
|
-
desc = m.descs[keyName];
|
2990
3364
|
|
2991
|
-
|
2992
|
-
|
2993
|
-
|
2994
|
-
|
2995
|
-
|
2996
|
-
|
2997
|
-
|
3365
|
+
var metaFor = Ember.meta, // utils.js
|
3366
|
+
GUID_KEY = Ember.GUID_KEY, // utils.js
|
3367
|
+
META_KEY = Ember.META_KEY, // utils.js
|
3368
|
+
removeChainWatcher = Ember.removeChainWatcher,
|
3369
|
+
watchKey = Ember.watchKey, // watch_key.js
|
3370
|
+
unwatchKey = Ember.unwatchKey,
|
3371
|
+
watchPath = Ember.watchPath, // watch_path.js
|
3372
|
+
unwatchPath = Ember.unwatchPath,
|
3373
|
+
typeOf = Ember.typeOf, // utils.js
|
3374
|
+
generateGuid = Ember.generateGuid,
|
3375
|
+
IS_PATH = /[\.\*]/;
|
2998
3376
|
|
2999
|
-
|
3377
|
+
// returns true if the passed path is just a keyName
|
3378
|
+
function isKeyName(path) {
|
3379
|
+
return path==='*' || !IS_PATH.test(path);
|
3380
|
+
}
|
3000
3381
|
|
3001
3382
|
/**
|
3002
|
-
|
3003
|
-
It will notify any observers and clear caches among other things.
|
3383
|
+
@private
|
3004
3384
|
|
3005
|
-
|
3006
|
-
|
3007
|
-
|
3008
|
-
|
3385
|
+
Starts watching a property on an object. Whenever the property changes,
|
3386
|
+
invokes `Ember.propertyWillChange` and `Ember.propertyDidChange`. This is the
|
3387
|
+
primitive used by observers and dependent keys; usually you will never call
|
3388
|
+
this method directly but instead use higher level methods like
|
3389
|
+
`Ember.addObserver()`
|
3009
3390
|
|
3010
|
-
@method
|
3391
|
+
@method watch
|
3011
3392
|
@for Ember
|
3012
|
-
@param
|
3013
|
-
@param {String} keyName
|
3014
|
-
@return {void}
|
3393
|
+
@param obj
|
3394
|
+
@param {String} keyName
|
3015
3395
|
*/
|
3016
|
-
function
|
3017
|
-
|
3018
|
-
|
3019
|
-
proto = m.proto,
|
3020
|
-
desc = m.descs[keyName];
|
3396
|
+
Ember.watch = function(obj, keyPath) {
|
3397
|
+
// can't watch length on Array - it is special...
|
3398
|
+
if (keyPath === 'length' && typeOf(obj) === 'array') { return; }
|
3021
3399
|
|
3022
|
-
if (
|
3400
|
+
if (isKeyName(keyPath)) {
|
3401
|
+
watchKey(obj, keyPath);
|
3402
|
+
} else {
|
3403
|
+
watchPath(obj, keyPath);
|
3404
|
+
}
|
3405
|
+
};
|
3023
3406
|
|
3024
|
-
|
3025
|
-
|
3026
|
-
|
3407
|
+
Ember.isWatching = function isWatching(obj, key) {
|
3408
|
+
var meta = obj[META_KEY];
|
3409
|
+
return (meta && meta.watching[key]) > 0;
|
3410
|
+
};
|
3027
3411
|
|
3028
|
-
|
3029
|
-
|
3030
|
-
|
3031
|
-
|
3412
|
+
Ember.watch.flushPending = Ember.flushPendingChains;
|
3413
|
+
|
3414
|
+
Ember.unwatch = function(obj, keyPath) {
|
3415
|
+
// can't watch length on Array - it is special...
|
3416
|
+
if (keyPath === 'length' && typeOf(obj) === 'array') { return; }
|
3417
|
+
|
3418
|
+
if (isKeyName(keyPath)) {
|
3419
|
+
unwatchKey(obj, keyPath);
|
3420
|
+
} else {
|
3421
|
+
unwatchPath(obj, keyPath);
|
3422
|
+
}
|
3423
|
+
};
|
3424
|
+
|
3425
|
+
/**
|
3426
|
+
@private
|
3427
|
+
|
3428
|
+
Call on an object when you first beget it from another object. This will
|
3429
|
+
setup any chained watchers on the object instance as needed. This method is
|
3430
|
+
safe to call multiple times.
|
3431
|
+
|
3432
|
+
@method rewatch
|
3433
|
+
@for Ember
|
3434
|
+
@param obj
|
3435
|
+
*/
|
3436
|
+
Ember.rewatch = function(obj) {
|
3437
|
+
var m = metaFor(obj, false), chains = m.chains;
|
3032
3438
|
|
3033
|
-
|
3439
|
+
// make sure the object has its own guid.
|
3440
|
+
if (GUID_KEY in obj && !obj.hasOwnProperty(GUID_KEY)) {
|
3441
|
+
generateGuid(obj, 'ember');
|
3442
|
+
}
|
3443
|
+
|
3444
|
+
// make sure any chained watchers update.
|
3445
|
+
if (chains && chains.value() !== obj) {
|
3446
|
+
m.chains = chains.copy(obj);
|
3447
|
+
}
|
3448
|
+
};
|
3034
3449
|
|
3035
3450
|
var NODE_STACK = [];
|
3036
3451
|
|
@@ -3508,7 +3923,7 @@ Ember.computed = function(func) {
|
|
3508
3923
|
@param {Object} obj the object whose property you want to check
|
3509
3924
|
@param {String} key the name of the property whose cached value you want
|
3510
3925
|
to return
|
3511
|
-
@return {
|
3926
|
+
@return {*} the cached value
|
3512
3927
|
*/
|
3513
3928
|
Ember.cacheFor = function cacheFor(obj, key) {
|
3514
3929
|
var cache = metaFor(obj, false).cache;
|
@@ -3779,386 +4194,112 @@ Ember.computed.defaultTo = function(defaultPath) {
|
|
3779
4194
|
});
|
3780
4195
|
};
|
3781
4196
|
|
3782
|
-
})();
|
3783
|
-
|
3784
|
-
|
3785
|
-
|
3786
|
-
(function() {
|
3787
|
-
/**
|
3788
|
-
@module ember-metal
|
3789
|
-
*/
|
3790
|
-
|
3791
|
-
var o_create = Ember.create,
|
3792
|
-
metaFor = Ember.meta,
|
3793
|
-
META_KEY = Ember.META_KEY;
|
3794
|
-
|
3795
|
-
/*
|
3796
|
-
The event system uses a series of nested hashes to store listeners on an
|
3797
|
-
object. When a listener is registered, or when an event arrives, these
|
3798
|
-
hashes are consulted to determine which target and action pair to invoke.
|
3799
|
-
|
3800
|
-
The hashes are stored in the object's meta hash, and look like this:
|
3801
|
-
|
3802
|
-
// Object's meta hash
|
3803
|
-
{
|
3804
|
-
listeners: { // variable name: `listenerSet`
|
3805
|
-
"foo:changed": [ // variable name: `actions`
|
3806
|
-
[target, method, onceFlag, suspendedFlag]
|
3807
|
-
]
|
3808
|
-
}
|
3809
|
-
}
|
3810
|
-
|
3811
|
-
*/
|
3812
|
-
|
3813
|
-
function indexOf(array, target, method) {
|
3814
|
-
var index = -1;
|
3815
|
-
for (var i = 0, l = array.length; i < l; i++) {
|
3816
|
-
if (target === array[i][0] && method === array[i][1]) { index = i; break; }
|
3817
|
-
}
|
3818
|
-
return index;
|
3819
|
-
}
|
3820
|
-
|
3821
|
-
function actionsFor(obj, eventName) {
|
3822
|
-
var meta = metaFor(obj, true),
|
3823
|
-
actions;
|
3824
|
-
|
3825
|
-
if (!meta.listeners) { meta.listeners = {}; }
|
3826
|
-
|
3827
|
-
if (!meta.hasOwnProperty('listeners')) {
|
3828
|
-
// setup inherited copy of the listeners object
|
3829
|
-
meta.listeners = o_create(meta.listeners);
|
3830
|
-
}
|
3831
|
-
|
3832
|
-
actions = meta.listeners[eventName];
|
3833
|
-
|
3834
|
-
// if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
|
3835
|
-
if (actions && !meta.listeners.hasOwnProperty(eventName)) {
|
3836
|
-
actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
|
3837
|
-
} else if (!actions) {
|
3838
|
-
actions = meta.listeners[eventName] = [];
|
3839
|
-
}
|
3840
|
-
|
3841
|
-
return actions;
|
3842
|
-
}
|
3843
|
-
|
3844
|
-
function actionsUnion(obj, eventName, otherActions) {
|
3845
|
-
var meta = obj[META_KEY],
|
3846
|
-
actions = meta && meta.listeners && meta.listeners[eventName];
|
3847
|
-
|
3848
|
-
if (!actions) { return; }
|
3849
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
3850
|
-
var target = actions[i][0],
|
3851
|
-
method = actions[i][1],
|
3852
|
-
once = actions[i][2],
|
3853
|
-
suspended = actions[i][3],
|
3854
|
-
actionIndex = indexOf(otherActions, target, method);
|
3855
|
-
|
3856
|
-
if (actionIndex === -1) {
|
3857
|
-
otherActions.push([target, method, once, suspended]);
|
3858
|
-
}
|
3859
|
-
}
|
3860
|
-
}
|
3861
|
-
|
3862
|
-
function actionsDiff(obj, eventName, otherActions) {
|
3863
|
-
var meta = obj[META_KEY],
|
3864
|
-
actions = meta && meta.listeners && meta.listeners[eventName],
|
3865
|
-
diffActions = [];
|
3866
|
-
|
3867
|
-
if (!actions) { return; }
|
3868
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
3869
|
-
var target = actions[i][0],
|
3870
|
-
method = actions[i][1],
|
3871
|
-
once = actions[i][2],
|
3872
|
-
suspended = actions[i][3],
|
3873
|
-
actionIndex = indexOf(otherActions, target, method);
|
3874
|
-
|
3875
|
-
if (actionIndex !== -1) { continue; }
|
3876
|
-
|
3877
|
-
otherActions.push([target, method, once, suspended]);
|
3878
|
-
diffActions.push([target, method, once, suspended]);
|
3879
|
-
}
|
3880
|
-
|
3881
|
-
return diffActions;
|
3882
|
-
}
|
3883
|
-
|
3884
|
-
/**
|
3885
|
-
Add an event listener
|
3886
|
-
|
3887
|
-
@method addListener
|
3888
|
-
@for Ember
|
3889
|
-
@param obj
|
3890
|
-
@param {String} eventName
|
3891
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
3892
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
3893
|
-
@param {Boolean} once A flag whether a function should only be called once
|
3894
|
-
*/
|
3895
|
-
function addListener(obj, eventName, target, method, once) {
|
3896
|
-
|
3897
|
-
|
3898
|
-
if (!method && 'function' === typeof target) {
|
3899
|
-
method = target;
|
3900
|
-
target = null;
|
3901
|
-
}
|
3902
|
-
|
3903
|
-
var actions = actionsFor(obj, eventName),
|
3904
|
-
actionIndex = indexOf(actions, target, method);
|
3905
|
-
|
3906
|
-
if (actionIndex !== -1) { return; }
|
3907
|
-
|
3908
|
-
actions.push([target, method, once, undefined]);
|
3909
|
-
|
3910
|
-
if ('function' === typeof obj.didAddListener) {
|
3911
|
-
obj.didAddListener(eventName, target, method);
|
3912
|
-
}
|
3913
|
-
}
|
3914
|
-
|
3915
|
-
/**
|
3916
|
-
Remove an event listener
|
3917
|
-
|
3918
|
-
Arguments should match those passed to {{#crossLink "Ember/addListener"}}{{/crossLink}}
|
3919
|
-
|
3920
|
-
@method removeListener
|
3921
|
-
@for Ember
|
3922
|
-
@param obj
|
3923
|
-
@param {String} eventName
|
3924
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
3925
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
3926
|
-
*/
|
3927
|
-
function removeListener(obj, eventName, target, method) {
|
3928
|
-
|
3929
|
-
|
3930
|
-
if (!method && 'function' === typeof target) {
|
3931
|
-
method = target;
|
3932
|
-
target = null;
|
3933
|
-
}
|
3934
|
-
|
3935
|
-
function _removeListener(target, method, once) {
|
3936
|
-
var actions = actionsFor(obj, eventName),
|
3937
|
-
actionIndex = indexOf(actions, target, method);
|
3938
|
-
|
3939
|
-
// action doesn't exist, give up silently
|
3940
|
-
if (actionIndex === -1) { return; }
|
3941
|
-
|
3942
|
-
actions.splice(actionIndex, 1);
|
3943
|
-
|
3944
|
-
if ('function' === typeof obj.didRemoveListener) {
|
3945
|
-
obj.didRemoveListener(eventName, target, method);
|
3946
|
-
}
|
3947
|
-
}
|
3948
|
-
|
3949
|
-
if (method) {
|
3950
|
-
_removeListener(target, method);
|
3951
|
-
} else {
|
3952
|
-
var meta = obj[META_KEY],
|
3953
|
-
actions = meta && meta.listeners && meta.listeners[eventName];
|
3954
|
-
|
3955
|
-
if (!actions) { return; }
|
3956
|
-
for (var i = actions.length - 1; i >= 0; i--) {
|
3957
|
-
_removeListener(actions[i][0], actions[i][1]);
|
3958
|
-
}
|
3959
|
-
}
|
3960
|
-
}
|
3961
|
-
|
3962
|
-
/**
|
3963
|
-
@private
|
3964
|
-
|
3965
|
-
Suspend listener during callback.
|
3966
|
-
|
3967
|
-
This should only be used by the target of the event listener
|
3968
|
-
when it is taking an action that would cause the event, e.g.
|
3969
|
-
an object might suspend its property change listener while it is
|
3970
|
-
setting that property.
|
3971
|
-
|
3972
|
-
@method suspendListener
|
3973
|
-
@for Ember
|
3974
|
-
@param obj
|
3975
|
-
@param {String} eventName
|
3976
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
3977
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
3978
|
-
@param {Function} callback
|
3979
|
-
*/
|
3980
|
-
function suspendListener(obj, eventName, target, method, callback) {
|
3981
|
-
if (!method && 'function' === typeof target) {
|
3982
|
-
method = target;
|
3983
|
-
target = null;
|
3984
|
-
}
|
3985
|
-
|
3986
|
-
var actions = actionsFor(obj, eventName),
|
3987
|
-
actionIndex = indexOf(actions, target, method),
|
3988
|
-
action;
|
3989
|
-
|
3990
|
-
if (actionIndex !== -1) {
|
3991
|
-
action = actions[actionIndex].slice(); // copy it, otherwise we're modifying a shared object
|
3992
|
-
action[3] = true; // mark the action as suspended
|
3993
|
-
actions[actionIndex] = action; // replace the shared object with our copy
|
3994
|
-
}
|
3995
|
-
|
3996
|
-
function tryable() { return callback.call(target); }
|
3997
|
-
function finalizer() { if (action) { action[3] = undefined; } }
|
3998
|
-
|
3999
|
-
return Ember.tryFinally(tryable, finalizer);
|
4000
|
-
}
|
4001
|
-
|
4002
|
-
/**
|
4003
|
-
@private
|
4004
|
-
|
4005
|
-
Suspend listener during callback.
|
4006
|
-
|
4007
|
-
This should only be used by the target of the event listener
|
4008
|
-
when it is taking an action that would cause the event, e.g.
|
4009
|
-
an object might suspend its property change listener while it is
|
4010
|
-
setting that property.
|
4011
|
-
|
4012
|
-
@method suspendListener
|
4013
|
-
@for Ember
|
4014
|
-
@param obj
|
4015
|
-
@param {Array} eventName Array of event names
|
4016
|
-
@param {Object|Function} targetOrMethod A target object or a function
|
4017
|
-
@param {Function|String} method A function or the name of a function to be called on `target`
|
4018
|
-
@param {Function} callback
|
4019
|
-
*/
|
4020
|
-
function suspendListeners(obj, eventNames, target, method, callback) {
|
4021
|
-
if (!method && 'function' === typeof target) {
|
4022
|
-
method = target;
|
4023
|
-
target = null;
|
4024
|
-
}
|
4025
|
-
|
4026
|
-
var suspendedActions = [],
|
4027
|
-
eventName, actions, action, i, l;
|
4028
|
-
|
4029
|
-
for (i=0, l=eventNames.length; i<l; i++) {
|
4030
|
-
eventName = eventNames[i];
|
4031
|
-
actions = actionsFor(obj, eventName);
|
4032
|
-
var actionIndex = indexOf(actions, target, method);
|
4033
|
-
|
4034
|
-
if (actionIndex !== -1) {
|
4035
|
-
action = actions[actionIndex].slice();
|
4036
|
-
action[3] = true;
|
4037
|
-
actions[actionIndex] = action;
|
4038
|
-
suspendedActions.push(action);
|
4039
|
-
}
|
4040
|
-
}
|
4041
|
-
|
4042
|
-
function tryable() { return callback.call(target); }
|
4043
|
-
|
4044
|
-
function finalizer() {
|
4045
|
-
for (i = 0, l = suspendedActions.length; i < l; i++) {
|
4046
|
-
suspendedActions[i][3] = undefined;
|
4047
|
-
}
|
4048
|
-
}
|
4049
|
-
|
4050
|
-
return Ember.tryFinally(tryable, finalizer);
|
4051
|
-
}
|
4052
|
-
|
4053
|
-
/**
|
4054
|
-
@private
|
4055
|
-
|
4056
|
-
Return a list of currently watched events
|
4057
|
-
|
4058
|
-
@method watchedEvents
|
4059
|
-
@for Ember
|
4060
|
-
@param obj
|
4061
|
-
*/
|
4062
|
-
function watchedEvents(obj) {
|
4063
|
-
var listeners = obj[META_KEY].listeners, ret = [];
|
4197
|
+
})();
|
4064
4198
|
|
4065
|
-
if (listeners) {
|
4066
|
-
for(var eventName in listeners) {
|
4067
|
-
if (listeners[eventName]) { ret.push(eventName); }
|
4068
|
-
}
|
4069
|
-
}
|
4070
|
-
return ret;
|
4071
|
-
}
|
4072
4199
|
|
4200
|
+
|
4201
|
+
(function() {
|
4202
|
+
// Ember.tryFinally
|
4073
4203
|
/**
|
4074
|
-
|
4075
|
-
@for Ember
|
4076
|
-
@param obj
|
4077
|
-
@param {String} eventName
|
4078
|
-
@param {Array} params
|
4079
|
-
@param {Array} actions
|
4080
|
-
@return true
|
4204
|
+
@module ember-metal
|
4081
4205
|
*/
|
4082
|
-
function sendEvent(obj, eventName, params, actions) {
|
4083
|
-
// first give object a chance to handle it
|
4084
|
-
if (obj !== Ember && 'function' === typeof obj.sendEvent) {
|
4085
|
-
obj.sendEvent(eventName, params);
|
4086
|
-
}
|
4087
4206
|
|
4088
|
-
|
4089
|
-
|
4090
|
-
actions = meta && meta.listeners && meta.listeners[eventName];
|
4091
|
-
}
|
4092
|
-
|
4093
|
-
if (!actions) { return; }
|
4207
|
+
var AFTER_OBSERVERS = ':change';
|
4208
|
+
var BEFORE_OBSERVERS = ':before';
|
4094
4209
|
|
4095
|
-
|
4096
|
-
if (!actions[i] || actions[i][3] === true) { continue; }
|
4210
|
+
var guidFor = Ember.guidFor;
|
4097
4211
|
|
4098
|
-
|
4099
|
-
|
4100
|
-
|
4212
|
+
function changeEvent(keyName) {
|
4213
|
+
return keyName+AFTER_OBSERVERS;
|
4214
|
+
}
|
4101
4215
|
|
4102
|
-
|
4103
|
-
|
4104
|
-
if ('string' === typeof method) { method = target[method]; }
|
4105
|
-
if (params) {
|
4106
|
-
method.apply(target, params);
|
4107
|
-
} else {
|
4108
|
-
method.call(target);
|
4109
|
-
}
|
4110
|
-
}
|
4111
|
-
return true;
|
4216
|
+
function beforeEvent(keyName) {
|
4217
|
+
return keyName+BEFORE_OBSERVERS;
|
4112
4218
|
}
|
4113
4219
|
|
4114
4220
|
/**
|
4115
|
-
@
|
4116
|
-
@method hasListeners
|
4117
|
-
@for Ember
|
4221
|
+
@method addObserver
|
4118
4222
|
@param obj
|
4119
|
-
@param {String}
|
4223
|
+
@param {String} path
|
4224
|
+
@param {Object|Function} targetOrMethod
|
4225
|
+
@param {Function|String} [method]
|
4120
4226
|
*/
|
4121
|
-
function
|
4122
|
-
|
4123
|
-
|
4227
|
+
Ember.addObserver = function(obj, path, target, method) {
|
4228
|
+
Ember.addListener(obj, changeEvent(path), target, method);
|
4229
|
+
Ember.watch(obj, path);
|
4230
|
+
return this;
|
4231
|
+
};
|
4124
4232
|
|
4125
|
-
|
4126
|
-
|
4233
|
+
Ember.observersFor = function(obj, path) {
|
4234
|
+
return Ember.listenersFor(obj, changeEvent(path));
|
4235
|
+
};
|
4127
4236
|
|
4128
4237
|
/**
|
4129
|
-
@
|
4130
|
-
@method listenersFor
|
4131
|
-
@for Ember
|
4238
|
+
@method removeObserver
|
4132
4239
|
@param obj
|
4133
|
-
@param {String}
|
4240
|
+
@param {String} path
|
4241
|
+
@param {Object|Function} targetOrMethod
|
4242
|
+
@param {Function|String} [method]
|
4134
4243
|
*/
|
4135
|
-
function
|
4136
|
-
|
4137
|
-
|
4138
|
-
|
4244
|
+
Ember.removeObserver = function(obj, path, target, method) {
|
4245
|
+
Ember.unwatch(obj, path);
|
4246
|
+
Ember.removeListener(obj, changeEvent(path), target, method);
|
4247
|
+
return this;
|
4248
|
+
};
|
4139
4249
|
|
4140
|
-
|
4250
|
+
/**
|
4251
|
+
@method addBeforeObserver
|
4252
|
+
@param obj
|
4253
|
+
@param {String} path
|
4254
|
+
@param {Object|Function} targetOrMethod
|
4255
|
+
@param {Function|String} [method]
|
4256
|
+
*/
|
4257
|
+
Ember.addBeforeObserver = function(obj, path, target, method) {
|
4258
|
+
Ember.addListener(obj, beforeEvent(path), target, method);
|
4259
|
+
Ember.watch(obj, path);
|
4260
|
+
return this;
|
4261
|
+
};
|
4141
4262
|
|
4142
|
-
|
4143
|
-
|
4144
|
-
|
4145
|
-
|
4146
|
-
|
4263
|
+
// Suspend observer during callback.
|
4264
|
+
//
|
4265
|
+
// This should only be used by the target of the observer
|
4266
|
+
// while it is setting the observed path.
|
4267
|
+
Ember._suspendBeforeObserver = function(obj, path, target, method, callback) {
|
4268
|
+
return Ember._suspendListener(obj, beforeEvent(path), target, method, callback);
|
4269
|
+
};
|
4147
4270
|
|
4148
|
-
|
4149
|
-
|
4271
|
+
Ember._suspendObserver = function(obj, path, target, method, callback) {
|
4272
|
+
return Ember._suspendListener(obj, changeEvent(path), target, method, callback);
|
4273
|
+
};
|
4150
4274
|
|
4151
|
-
|
4152
|
-
|
4153
|
-
Ember.
|
4154
|
-
|
4155
|
-
Ember.
|
4156
|
-
|
4157
|
-
|
4158
|
-
Ember.
|
4159
|
-
|
4160
|
-
Ember.
|
4275
|
+
var map = Ember.ArrayPolyfills.map;
|
4276
|
+
|
4277
|
+
Ember._suspendBeforeObservers = function(obj, paths, target, method, callback) {
|
4278
|
+
var events = map.call(paths, beforeEvent);
|
4279
|
+
return Ember._suspendListeners(obj, events, target, method, callback);
|
4280
|
+
};
|
4281
|
+
|
4282
|
+
Ember._suspendObservers = function(obj, paths, target, method, callback) {
|
4283
|
+
var events = map.call(paths, changeEvent);
|
4284
|
+
return Ember._suspendListeners(obj, events, target, method, callback);
|
4285
|
+
};
|
4286
|
+
|
4287
|
+
Ember.beforeObserversFor = function(obj, path) {
|
4288
|
+
return Ember.listenersFor(obj, beforeEvent(path));
|
4289
|
+
};
|
4161
4290
|
|
4291
|
+
/**
|
4292
|
+
@method removeBeforeObserver
|
4293
|
+
@param obj
|
4294
|
+
@param {String} path
|
4295
|
+
@param {Object|Function} targetOrMethod
|
4296
|
+
@param {Function|String} [method]
|
4297
|
+
*/
|
4298
|
+
Ember.removeBeforeObserver = function(obj, path, target, method) {
|
4299
|
+
Ember.unwatch(obj, path);
|
4300
|
+
Ember.removeListener(obj, beforeEvent(path), target, method);
|
4301
|
+
return this;
|
4302
|
+
};
|
4162
4303
|
})();
|
4163
4304
|
|
4164
4305
|
|
@@ -4830,8 +4971,9 @@ Ember.run.cancel = function(timer) {
|
|
4830
4971
|
|
4831
4972
|
(function() {
|
4832
4973
|
// Ember.Logger
|
4833
|
-
// get
|
4834
|
-
//
|
4974
|
+
// get
|
4975
|
+
// set
|
4976
|
+
// guidFor, meta
|
4835
4977
|
// addObserver, removeObserver
|
4836
4978
|
// Ember.run.schedule
|
4837
4979
|
/**
|
@@ -4857,8 +4999,21 @@ Ember.LOG_BINDINGS = false || !!Ember.ENV.LOG_BINDINGS;
|
|
4857
4999
|
var get = Ember.get,
|
4858
5000
|
set = Ember.set,
|
4859
5001
|
guidFor = Ember.guidFor,
|
4860
|
-
|
5002
|
+
IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/;
|
5003
|
+
|
5004
|
+
/**
|
5005
|
+
Returns true if the provided path is global (e.g., `MyApp.fooController.bar`)
|
5006
|
+
instead of local (`foo.bar.baz`).
|
4861
5007
|
|
5008
|
+
@method isGlobalPath
|
5009
|
+
@for Ember
|
5010
|
+
@private
|
5011
|
+
@param {String} path
|
5012
|
+
@return Boolean
|
5013
|
+
*/
|
5014
|
+
var isGlobalPath = Ember.isGlobalPath = function(path) {
|
5015
|
+
return IS_GLOBAL.test(path);
|
5016
|
+
};
|
4862
5017
|
|
4863
5018
|
function getWithGlobals(obj, path) {
|
4864
5019
|
return get(isGlobalPath(path) ? Ember.lookup : obj, path);
|
@@ -5450,7 +5605,7 @@ function addNormalizedProperty(base, key, value, meta, descs, values, concats) {
|
|
5450
5605
|
}
|
5451
5606
|
}
|
5452
5607
|
|
5453
|
-
function mergeMixins(mixins, m, descs, values, base) {
|
5608
|
+
function mergeMixins(mixins, m, descs, values, base, keys) {
|
5454
5609
|
var mixin, props, key, concats, meta;
|
5455
5610
|
|
5456
5611
|
function removeKeys(keyName) {
|
@@ -5471,13 +5626,14 @@ function mergeMixins(mixins, m, descs, values, base) {
|
|
5471
5626
|
|
5472
5627
|
for (key in props) {
|
5473
5628
|
if (!props.hasOwnProperty(key)) { continue; }
|
5629
|
+
keys.push(key);
|
5474
5630
|
addNormalizedProperty(base, key, props[key], meta, descs, values, concats);
|
5475
5631
|
}
|
5476
5632
|
|
5477
5633
|
// manually copy toString() because some JS engines do not enumerate it
|
5478
5634
|
if (props.hasOwnProperty('toString')) { base.toString = props.toString; }
|
5479
5635
|
} else if (mixin.mixins) {
|
5480
|
-
mergeMixins(mixin.mixins, m, descs, values, base);
|
5636
|
+
mergeMixins(mixin.mixins, m, descs, values, base, keys);
|
5481
5637
|
if (mixin._without) { a_forEach.call(mixin._without, removeKeys); }
|
5482
5638
|
}
|
5483
5639
|
}
|
@@ -5573,7 +5729,7 @@ function replaceObservers(obj, key, observer) {
|
|
5573
5729
|
|
5574
5730
|
function applyMixin(obj, mixins, partial) {
|
5575
5731
|
var descs = {}, values = {}, m = Ember.meta(obj),
|
5576
|
-
key, value, desc;
|
5732
|
+
key, value, desc, keys = [];
|
5577
5733
|
|
5578
5734
|
// Go through all mixins and hashes passed in, and:
|
5579
5735
|
//
|
@@ -5581,10 +5737,11 @@ function applyMixin(obj, mixins, partial) {
|
|
5581
5737
|
// * Set up _super wrapping if necessary
|
5582
5738
|
// * Set up computed property descriptors
|
5583
5739
|
// * Copying `toString` in broken browsers
|
5584
|
-
mergeMixins(mixins, mixinsMeta(obj), descs, values, obj);
|
5740
|
+
mergeMixins(mixins, mixinsMeta(obj), descs, values, obj, keys);
|
5585
5741
|
|
5586
|
-
for(
|
5587
|
-
|
5742
|
+
for(var i = 0, l = keys.length; i < l; i++) {
|
5743
|
+
key = keys[i];
|
5744
|
+
if (key === 'constructor' || !values.hasOwnProperty(key)) { continue; }
|
5588
5745
|
|
5589
5746
|
desc = descs[key];
|
5590
5747
|
value = values[key];
|
@@ -5638,7 +5795,7 @@ Ember.mixin = function(obj) {
|
|
5638
5795
|
});
|
5639
5796
|
|
5640
5797
|
// Mix mixins into classes by passing them as the first arguments to
|
5641
|
-
// .extend
|
5798
|
+
// .extend.
|
5642
5799
|
App.CommentView = Ember.View.extend(App.Editable, {
|
5643
5800
|
template: Ember.Handlebars.compile('{{#if isEditing}}...{{else}}...{{/if}}')
|
5644
5801
|
});
|
@@ -5657,6 +5814,12 @@ Ember.Mixin = function() { return initMixin(this, arguments); };
|
|
5657
5814
|
|
5658
5815
|
Mixin = Ember.Mixin;
|
5659
5816
|
|
5817
|
+
Mixin.prototype = {
|
5818
|
+
properties: null,
|
5819
|
+
mixins: null,
|
5820
|
+
ownerConstructor: null
|
5821
|
+
};
|
5822
|
+
|
5660
5823
|
Mixin._apply = applyMixin;
|
5661
5824
|
|
5662
5825
|
Mixin.applyPartial = function(obj) {
|
@@ -6547,79 +6710,6 @@ define("container",
|
|
6547
6710
|
|
6548
6711
|
var indexOf = Ember.EnumerableUtils.indexOf;
|
6549
6712
|
|
6550
|
-
// ........................................
|
6551
|
-
// TYPING & ARRAY MESSAGING
|
6552
|
-
//
|
6553
|
-
|
6554
|
-
var TYPE_MAP = {};
|
6555
|
-
var t = "Boolean Number String Function Array Date RegExp Object".split(" ");
|
6556
|
-
Ember.ArrayPolyfills.forEach.call(t, function(name) {
|
6557
|
-
TYPE_MAP[ "[object " + name + "]" ] = name.toLowerCase();
|
6558
|
-
});
|
6559
|
-
|
6560
|
-
var toString = Object.prototype.toString;
|
6561
|
-
|
6562
|
-
/**
|
6563
|
-
Returns a consistent type for the passed item.
|
6564
|
-
|
6565
|
-
Use this instead of the built-in `typeof` to get the type of an item.
|
6566
|
-
It will return the same result across all browsers and includes a bit
|
6567
|
-
more detail. Here is what will be returned:
|
6568
|
-
|
6569
|
-
| Return Value | Meaning |
|
6570
|
-
|---------------|------------------------------------------------------|
|
6571
|
-
| 'string' | String primitive |
|
6572
|
-
| 'number' | Number primitive |
|
6573
|
-
| 'boolean' | Boolean primitive |
|
6574
|
-
| 'null' | Null value |
|
6575
|
-
| 'undefined' | Undefined value |
|
6576
|
-
| 'function' | A function |
|
6577
|
-
| 'array' | An instance of Array |
|
6578
|
-
| 'class' | An Ember class (created using Ember.Object.extend()) |
|
6579
|
-
| 'instance' | An Ember object instance |
|
6580
|
-
| 'error' | An instance of the Error object |
|
6581
|
-
| 'object' | A JavaScript object not inheriting from Ember.Object |
|
6582
|
-
|
6583
|
-
Examples:
|
6584
|
-
|
6585
|
-
```javascript
|
6586
|
-
Ember.typeOf(); // 'undefined'
|
6587
|
-
Ember.typeOf(null); // 'null'
|
6588
|
-
Ember.typeOf(undefined); // 'undefined'
|
6589
|
-
Ember.typeOf('michael'); // 'string'
|
6590
|
-
Ember.typeOf(101); // 'number'
|
6591
|
-
Ember.typeOf(true); // 'boolean'
|
6592
|
-
Ember.typeOf(Ember.makeArray); // 'function'
|
6593
|
-
Ember.typeOf([1,2,90]); // 'array'
|
6594
|
-
Ember.typeOf(Ember.Object.extend()); // 'class'
|
6595
|
-
Ember.typeOf(Ember.Object.create()); // 'instance'
|
6596
|
-
Ember.typeOf(new Error('teamocil')); // 'error'
|
6597
|
-
|
6598
|
-
// "normal" JavaScript object
|
6599
|
-
Ember.typeOf({a: 'b'}); // 'object'
|
6600
|
-
```
|
6601
|
-
|
6602
|
-
@method typeOf
|
6603
|
-
@for Ember
|
6604
|
-
@param {Object} item the item to check
|
6605
|
-
@return {String} the type
|
6606
|
-
*/
|
6607
|
-
Ember.typeOf = function(item) {
|
6608
|
-
var ret;
|
6609
|
-
|
6610
|
-
ret = (item === null || item === undefined) ? String(item) : TYPE_MAP[toString.call(item)] || 'object';
|
6611
|
-
|
6612
|
-
if (ret === 'function') {
|
6613
|
-
if (Ember.Object && Ember.Object.detect(item)) ret = 'class';
|
6614
|
-
} else if (ret === 'object') {
|
6615
|
-
if (item instanceof Error) ret = 'error';
|
6616
|
-
else if (Ember.Object && item instanceof Ember.Object) ret = 'instance';
|
6617
|
-
else ret = 'object';
|
6618
|
-
}
|
6619
|
-
|
6620
|
-
return ret;
|
6621
|
-
};
|
6622
|
-
|
6623
6713
|
/**
|
6624
6714
|
This will compare two javascript values of possibly different types.
|
6625
6715
|
It will tell you which one is greater than the other by returning:
|
@@ -8380,7 +8470,7 @@ Ember.Array = Ember.Mixin.create(Ember.Enumerable, /** @scope Ember.Array.protot
|
|
8380
8470
|
|
8381
8471
|
@method objectAt
|
8382
8472
|
@param {Number} idx The index of the item to return.
|
8383
|
-
@return {
|
8473
|
+
@return {*} item at index or undefined
|
8384
8474
|
*/
|
8385
8475
|
objectAt: function(idx) {
|
8386
8476
|
if ((idx < 0) || (idx>=get(this, 'length'))) return undefined ;
|
@@ -9189,8 +9279,8 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,
|
|
9189
9279
|
```
|
9190
9280
|
|
9191
9281
|
@method pushObject
|
9192
|
-
@param {
|
9193
|
-
@return {
|
9282
|
+
@param {*} obj object to push
|
9283
|
+
@return {*} the same obj passed as param
|
9194
9284
|
*/
|
9195
9285
|
pushObject: function(obj) {
|
9196
9286
|
this.insertAt(get(this, 'length'), obj) ;
|
@@ -9269,8 +9359,8 @@ Ember.MutableArray = Ember.Mixin.create(Ember.Array, Ember.MutableEnumerable,
|
|
9269
9359
|
```
|
9270
9360
|
|
9271
9361
|
@method unshiftObject
|
9272
|
-
@param {
|
9273
|
-
@return {
|
9362
|
+
@param {*} obj object to unshift
|
9363
|
+
@return {*} the same obj passed as param
|
9274
9364
|
*/
|
9275
9365
|
unshiftObject: function(obj) {
|
9276
9366
|
this.insertAt(0, obj) ;
|
@@ -10231,6 +10321,8 @@ function makeCtor() {
|
|
10231
10321
|
|
10232
10322
|
for (var i = 0, l = props.length; i < l; i++) {
|
10233
10323
|
var properties = props[i];
|
10324
|
+
|
10325
|
+
|
10234
10326
|
for (var keyName in properties) {
|
10235
10327
|
if (!properties.hasOwnProperty(keyName)) { continue; }
|
10236
10328
|
|
@@ -10351,8 +10443,6 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10351
10443
|
do important setup work, and you'll see strange behavior in your
|
10352
10444
|
application.
|
10353
10445
|
|
10354
|
-
```
|
10355
|
-
|
10356
10446
|
@method init
|
10357
10447
|
*/
|
10358
10448
|
init: function() {},
|
@@ -10463,12 +10553,12 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10463
10553
|
this.isDestroying = true;
|
10464
10554
|
this._didCallDestroy = true;
|
10465
10555
|
|
10466
|
-
if (this.willDestroy) { this.willDestroy(); }
|
10467
|
-
|
10468
10556
|
schedule('destroy', this, this._scheduledDestroy);
|
10469
10557
|
return this;
|
10470
10558
|
},
|
10471
10559
|
|
10560
|
+
willDestroy: Ember.K,
|
10561
|
+
|
10472
10562
|
/**
|
10473
10563
|
@private
|
10474
10564
|
|
@@ -10478,9 +10568,9 @@ CoreObject.PrototypeMixin = Mixin.create({
|
|
10478
10568
|
@method _scheduledDestroy
|
10479
10569
|
*/
|
10480
10570
|
_scheduledDestroy: function() {
|
10571
|
+
if (this.willDestroy) { this.willDestroy(); }
|
10481
10572
|
destroy(this);
|
10482
|
-
|
10483
|
-
|
10573
|
+
this.isDestroyed = true;
|
10484
10574
|
if (this.didDestroy) { this.didDestroy(); }
|
10485
10575
|
},
|
10486
10576
|
|
@@ -11513,7 +11603,7 @@ Ember.EachProxy = Ember.Object.extend({
|
|
11513
11603
|
|
11514
11604
|
@method unknownProperty
|
11515
11605
|
@param keyName {String}
|
11516
|
-
@param value {
|
11606
|
+
@param value {*}
|
11517
11607
|
*/
|
11518
11608
|
unknownProperty: function(keyName, value) {
|
11519
11609
|
var ret;
|
@@ -12800,8 +12890,8 @@ Ember.ArrayController = Ember.ArrayProxy.extend(Ember.ControllerMixin,
|
|
12800
12890
|
},
|
12801
12891
|
|
12802
12892
|
init: function() {
|
12803
|
-
this._super();
|
12804
12893
|
if (!this.get('content')) { Ember.defineProperty(this, 'content', undefined, Ember.A()); }
|
12894
|
+
this._super();
|
12805
12895
|
this.set('_subControllers', Ember.A());
|
12806
12896
|
},
|
12807
12897
|
|