ember-source 2.4.0.beta.2 → 2.4.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +253 -133
- data/dist/ember-template-compiler.js +142 -59
- data/dist/ember-testing.js +2 -2
- data/dist/ember.debug.js +304 -159
- data/dist/ember.js +304 -159
- data/dist/ember.min.js +15 -15
- data/dist/ember.prod.js +298 -159
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: db9ffc0eaf20f0b6dcd04c3e75fafb1e3494a2e2
         | 
| 4 | 
            +
              data.tar.gz: 696528ff7f1a389f8ed677ab0e640f3ac0c0ccbd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 64d226462e1309659a8d3ec01b6c728a2ebf7258eb72c2420e22c73ceadc28c30a232f79bf137d346d344d288530d7ceb3de06fac2ec0b7f4c0ed8e0f53c74bc
         | 
| 7 | 
            +
              data.tar.gz: 68adc98fd7983493c1f03f84cb81a4df9238f75bb00d3142239d8c9b4ef896a4de216cee820595b8f33ccc8e72a6cd5141e9360c3749ad3a5be51bcbf9d39c61
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.4.0-beta. | 
| 1 | 
            +
            2.4.0-beta.3
         | 
    
        data/dist/ember-runtime.js
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            ;(function() {
         | 
| 2 2 | 
             
            /*!
         | 
| 3 3 | 
             
             * @overview  Ember - JavaScript Application Framework
         | 
| 4 | 
            -
             * @copyright Copyright 2011- | 
| 4 | 
            +
             * @copyright Copyright 2011-2016 Tilde Inc. and contributors
         | 
| 5 5 | 
             
             *            Portions Copyright 2006-2011 Strobe Inc.
         | 
| 6 6 | 
             
             *            Portions Copyright 2008-2011 Apple Inc. All rights reserved.
         | 
| 7 7 | 
             
             * @license   Licensed under MIT license
         | 
| 8 8 | 
             
             *            See https://raw.github.com/emberjs/ember.js/master/LICENSE
         | 
| 9 | 
            -
             * @version   2.4.0-beta. | 
| 9 | 
            +
             * @version   2.4.0-beta.3
         | 
| 10 10 | 
             
             */
         | 
| 11 11 |  | 
| 12 12 | 
             
            var enifed, requireModule, require, requirejs, Ember;
         | 
| @@ -212,20 +212,24 @@ enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'bac | |
| 212 212 | 
             
            enifed('backburner/platform', ['exports'], function (exports) {
         | 
| 213 213 | 
             
              'use strict';
         | 
| 214 214 |  | 
| 215 | 
            -
              var  | 
| 215 | 
            +
              var GlobalContext;
         | 
| 216 216 |  | 
| 217 217 | 
             
              /* global self */
         | 
| 218 218 | 
             
              if (typeof self === 'object') {
         | 
| 219 | 
            -
                 | 
| 219 | 
            +
                GlobalContext = self;
         | 
| 220 220 |  | 
| 221 221 | 
             
                /* global global */
         | 
| 222 222 | 
             
              } else if (typeof global === 'object') {
         | 
| 223 | 
            -
                   | 
| 224 | 
            -
                } else {
         | 
| 225 | 
            -
                  throw new Error('no global: `self` or `global` found');
         | 
| 226 | 
            -
                }
         | 
| 223 | 
            +
                  GlobalContext = global;
         | 
| 227 224 |  | 
| 228 | 
            -
             | 
| 225 | 
            +
                  /* global window */
         | 
| 226 | 
            +
                } else if (typeof window === 'object') {
         | 
| 227 | 
            +
                    GlobalContext = window;
         | 
| 228 | 
            +
                  } else {
         | 
| 229 | 
            +
                    throw new Error('no global: `self`, `global` nor `window` was found');
         | 
| 230 | 
            +
                  }
         | 
| 231 | 
            +
             | 
| 232 | 
            +
              exports.default = GlobalContext;
         | 
| 229 233 | 
             
            });
         | 
| 230 234 | 
             
            enifed('backburner/queue', ['exports', 'backburner/utils'], function (exports, _backburnerUtils) {
         | 
| 231 235 | 
             
              'use strict';
         | 
| @@ -468,7 +472,6 @@ enifed('backburner/utils', ['exports'], function (exports) { | |
| 468 472 | 
             
              exports.isFunction = isFunction;
         | 
| 469 473 | 
             
              exports.isNumber = isNumber;
         | 
| 470 474 | 
             
              exports.isCoercableNumber = isCoercableNumber;
         | 
| 471 | 
            -
              exports.wrapInTryCatch = wrapInTryCatch;
         | 
| 472 475 | 
             
              var NUMBER = /\d+/;
         | 
| 473 476 |  | 
| 474 477 | 
             
              function each(collection, callback) {
         | 
| @@ -477,14 +480,6 @@ enifed('backburner/utils', ['exports'], function (exports) { | |
| 477 480 | 
             
                }
         | 
| 478 481 | 
             
              }
         | 
| 479 482 |  | 
| 480 | 
            -
              // Date.now is not available in browsers < IE9
         | 
| 481 | 
            -
              // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
         | 
| 482 | 
            -
              var now = Date.now || function () {
         | 
| 483 | 
            -
                return new Date().getTime();
         | 
| 484 | 
            -
              };
         | 
| 485 | 
            -
             | 
| 486 | 
            -
              exports.now = now;
         | 
| 487 | 
            -
             | 
| 488 483 | 
             
              function isString(suspect) {
         | 
| 489 484 | 
             
                return typeof suspect === 'string';
         | 
| 490 485 | 
             
              }
         | 
| @@ -500,16 +495,6 @@ enifed('backburner/utils', ['exports'], function (exports) { | |
| 500 495 | 
             
              function isCoercableNumber(number) {
         | 
| 501 496 | 
             
                return isNumber(number) || NUMBER.test(number);
         | 
| 502 497 | 
             
              }
         | 
| 503 | 
            -
             | 
| 504 | 
            -
              function wrapInTryCatch(func) {
         | 
| 505 | 
            -
                return function () {
         | 
| 506 | 
            -
                  try {
         | 
| 507 | 
            -
                    return func.apply(this, arguments);
         | 
| 508 | 
            -
                  } catch (e) {
         | 
| 509 | 
            -
                    throw e;
         | 
| 510 | 
            -
                  }
         | 
| 511 | 
            -
                };
         | 
| 512 | 
            -
              }
         | 
| 513 498 | 
             
            });
         | 
| 514 499 | 
             
            enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) {
         | 
| 515 500 | 
             
              'use strict';
         | 
| @@ -530,10 +515,16 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 530 515 | 
             
                  begin: []
         | 
| 531 516 | 
             
                };
         | 
| 532 517 |  | 
| 518 | 
            +
                var _this = this;
         | 
| 519 | 
            +
                this._boundClearItems = function () {
         | 
| 520 | 
            +
                  clearItems();
         | 
| 521 | 
            +
                };
         | 
| 522 | 
            +
             | 
| 533 523 | 
             
                this._timerTimeoutId = undefined;
         | 
| 534 524 | 
             
                this._timers = [];
         | 
| 535 525 |  | 
| 536 | 
            -
                 | 
| 526 | 
            +
                this._platform = this.options._platform || _backburnerPlatform.default;
         | 
| 527 | 
            +
             | 
| 537 528 | 
             
                this._boundRunExpiredTimers = function () {
         | 
| 538 529 | 
             
                  _this._runExpiredTimers();
         | 
| 539 530 | 
             
                };
         | 
| @@ -870,7 +861,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 870 861 | 
             
                    }
         | 
| 871 862 | 
             
                  }
         | 
| 872 863 |  | 
| 873 | 
            -
                  var executeAt =  | 
| 864 | 
            +
                  var executeAt = Date.now() + parseInt(wait, 10);
         | 
| 874 865 |  | 
| 875 866 | 
             
                  if (_backburnerUtils.isString(method)) {
         | 
| 876 867 | 
             
                    method = target[method];
         | 
| @@ -936,7 +927,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 936 927 | 
             
                    return this._throttlers[index];
         | 
| 937 928 | 
             
                  } // throttled
         | 
| 938 929 |  | 
| 939 | 
            -
                  timer =  | 
| 930 | 
            +
                  timer = this._platform.setTimeout(function () {
         | 
| 940 931 | 
             
                    if (!immediate) {
         | 
| 941 932 | 
             
                      backburner.run.apply(backburner, args);
         | 
| 942 933 | 
             
                    }
         | 
| @@ -981,10 +972,10 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 981 972 | 
             
                  if (index > -1) {
         | 
| 982 973 | 
             
                    debouncee = this._debouncees[index];
         | 
| 983 974 | 
             
                    this._debouncees.splice(index, 1);
         | 
| 984 | 
            -
                    clearTimeout(debouncee[2]);
         | 
| 975 | 
            +
                    this._platform.clearTimeout(debouncee[2]);
         | 
| 985 976 | 
             
                  }
         | 
| 986 977 |  | 
| 987 | 
            -
                  timer =  | 
| 978 | 
            +
                  timer = this._platform.setTimeout(function () {
         | 
| 988 979 | 
             
                    if (!immediate) {
         | 
| 989 980 | 
             
                      backburner.run.apply(backburner, args);
         | 
| 990 981 | 
             
                    }
         | 
| @@ -1006,17 +997,17 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1006 997 | 
             
                },
         | 
| 1007 998 |  | 
| 1008 999 | 
             
                cancelTimers: function () {
         | 
| 1009 | 
            -
                  _backburnerUtils.each(this._throttlers,  | 
| 1000 | 
            +
                  _backburnerUtils.each(this._throttlers, this._boundClearItems);
         | 
| 1010 1001 | 
             
                  this._throttlers = [];
         | 
| 1011 1002 |  | 
| 1012 | 
            -
                  _backburnerUtils.each(this._debouncees,  | 
| 1003 | 
            +
                  _backburnerUtils.each(this._debouncees, this._boundClearItems);
         | 
| 1013 1004 | 
             
                  this._debouncees = [];
         | 
| 1014 1005 |  | 
| 1015 1006 | 
             
                  this._clearTimerTimeout();
         | 
| 1016 1007 | 
             
                  this._timers = [];
         | 
| 1017 1008 |  | 
| 1018 1009 | 
             
                  if (this._autorun) {
         | 
| 1019 | 
            -
                    clearTimeout(this._autorun);
         | 
| 1010 | 
            +
                    this._platform.clearTimeout(this._autorun);
         | 
| 1020 1011 | 
             
                    this._autorun = null;
         | 
| 1021 1012 | 
             
                  }
         | 
| 1022 1013 | 
             
                },
         | 
| @@ -1065,7 +1056,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1065 1056 |  | 
| 1066 1057 | 
             
                    if (item[2] === timer[2]) {
         | 
| 1067 1058 | 
             
                      array.splice(index, 1);
         | 
| 1068 | 
            -
                      clearTimeout(timer[2]);
         | 
| 1059 | 
            +
                      this._platform.clearTimeout(timer[2]);
         | 
| 1069 1060 | 
             
                      return true;
         | 
| 1070 1061 | 
             
                    }
         | 
| 1071 1062 | 
             
                  }
         | 
| @@ -1079,7 +1070,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1079 1070 | 
             
                },
         | 
| 1080 1071 |  | 
| 1081 1072 | 
             
                _scheduleExpiredTimers: function () {
         | 
| 1082 | 
            -
                  var n =  | 
| 1073 | 
            +
                  var n = Date.now();
         | 
| 1083 1074 | 
             
                  var timers = this._timers;
         | 
| 1084 1075 | 
             
                  var i = 0;
         | 
| 1085 1076 | 
             
                  var l = timers.length;
         | 
| @@ -1105,7 +1096,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1105 1096 | 
             
                  if (!this._timerTimeoutId) {
         | 
| 1106 1097 | 
             
                    return;
         | 
| 1107 1098 | 
             
                  }
         | 
| 1108 | 
            -
                  clearTimeout(this._timerTimeoutId);
         | 
| 1099 | 
            +
                  this._platform.clearTimeout(this._timerTimeoutId);
         | 
| 1109 1100 | 
             
                  this._timerTimeoutId = undefined;
         | 
| 1110 1101 | 
             
                },
         | 
| 1111 1102 |  | 
| @@ -1114,9 +1105,9 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1114 1105 | 
             
                    return;
         | 
| 1115 1106 | 
             
                  }
         | 
| 1116 1107 | 
             
                  var minExpiresAt = this._timers[0];
         | 
| 1117 | 
            -
                  var n =  | 
| 1108 | 
            +
                  var n = Date.now();
         | 
| 1118 1109 | 
             
                  var wait = Math.max(0, minExpiresAt - n);
         | 
| 1119 | 
            -
                  this._timerTimeoutId = setTimeout(this._boundRunExpiredTimers, wait);
         | 
| 1110 | 
            +
                  this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
         | 
| 1120 1111 | 
             
                }
         | 
| 1121 1112 | 
             
              };
         | 
| 1122 1113 |  | 
| @@ -1130,7 +1121,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1130 1121 |  | 
| 1131 1122 | 
             
              function createAutorun(backburner) {
         | 
| 1132 1123 | 
             
                backburner.begin();
         | 
| 1133 | 
            -
                backburner._autorun =  | 
| 1124 | 
            +
                backburner._autorun = backburner._platform.setTimeout(function () {
         | 
| 1134 1125 | 
             
                  backburner._autorun = null;
         | 
| 1135 1126 | 
             
                  backburner.end();
         | 
| 1136 1127 | 
             
                });
         | 
| @@ -1160,7 +1151,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac | |
| 1160 1151 | 
             
              }
         | 
| 1161 1152 |  | 
| 1162 1153 | 
             
              function clearItems(item) {
         | 
| 1163 | 
            -
                clearTimeout(item[2]);
         | 
| 1154 | 
            +
                this._platform.clearTimeout(item[2]);
         | 
| 1164 1155 | 
             
              }
         | 
| 1165 1156 | 
             
            });
         | 
| 1166 1157 | 
             
            enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/features', 'container/owner', 'ember-runtime/mixins/container_proxy', 'ember-metal/symbol'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalDictionary, _emberMetalFeatures, _containerOwner, _emberRuntimeMixinsContainer_proxy, _emberMetalSymbol) {
         | 
| @@ -4884,7 +4875,7 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require) | |
| 4884 4875 |  | 
| 4885 4876 | 
             
                @class Ember
         | 
| 4886 4877 | 
             
                @static
         | 
| 4887 | 
            -
                @version 2.4.0-beta. | 
| 4878 | 
            +
                @version 2.4.0-beta.3
         | 
| 4888 4879 | 
             
                @public
         | 
| 4889 4880 | 
             
              */
         | 
| 4890 4881 |  | 
| @@ -4926,11 +4917,11 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require) | |
| 4926 4917 |  | 
| 4927 4918 | 
             
                @property VERSION
         | 
| 4928 4919 | 
             
                @type String
         | 
| 4929 | 
            -
                @default '2.4.0-beta. | 
| 4920 | 
            +
                @default '2.4.0-beta.3'
         | 
| 4930 4921 | 
             
                @static
         | 
| 4931 4922 | 
             
                @public
         | 
| 4932 4923 | 
             
              */
         | 
| 4933 | 
            -
              Ember.VERSION = '2.4.0-beta. | 
| 4924 | 
            +
              Ember.VERSION = '2.4.0-beta.3';
         | 
| 4934 4925 |  | 
| 4935 4926 | 
             
              /**
         | 
| 4936 4927 | 
             
                The hash of environment variables used to control various configuration
         | 
| @@ -7311,6 +7302,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta | |
| 7311 7302 | 
             
              */
         | 
| 7312 7303 | 
             
              var members = {
         | 
| 7313 7304 | 
             
                cache: ownMap,
         | 
| 7305 | 
            +
                weak: ownMap,
         | 
| 7314 7306 | 
             
                watching: inheritedMap,
         | 
| 7315 7307 | 
             
                mixins: inheritedMap,
         | 
| 7316 7308 | 
             
                bindings: inheritedMap,
         | 
| @@ -7325,6 +7317,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta | |
| 7325 7317 |  | 
| 7326 7318 | 
             
              function Meta(obj, parentMeta) {
         | 
| 7327 7319 | 
             
                this._cache = undefined;
         | 
| 7320 | 
            +
                this._weak = undefined;
         | 
| 7328 7321 | 
             
                this._watching = undefined;
         | 
| 7329 7322 | 
             
                this._mixins = undefined;
         | 
| 7330 7323 | 
             
                this._bindings = undefined;
         | 
| @@ -7409,7 +7402,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta | |
| 7409 7402 | 
             
                };
         | 
| 7410 7403 |  | 
| 7411 7404 | 
             
                Meta.prototype['clear' + capitalized] = function () {
         | 
| 7412 | 
            -
                  this[key] =  | 
| 7405 | 
            +
                  this[key] = undefined;
         | 
| 7413 7406 | 
             
                };
         | 
| 7414 7407 |  | 
| 7415 7408 | 
             
                Meta.prototype['deleteFrom' + capitalized] = function (subkey) {
         | 
| @@ -8469,11 +8462,10 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error', | |
| 8469 8462 | 
             
                seen[_emberMetalUtils.guidFor(mixin)] = true;
         | 
| 8470 8463 |  | 
| 8471 8464 | 
             
                if (mixin.properties) {
         | 
| 8472 | 
            -
                  var props = mixin.properties;
         | 
| 8473 | 
            -
                  for (var  | 
| 8474 | 
            -
                     | 
| 8475 | 
            -
             | 
| 8476 | 
            -
                    }
         | 
| 8465 | 
            +
                  var props = Object.keys(mixin.properties);
         | 
| 8466 | 
            +
                  for (var i = 0; i < props.length; i++) {
         | 
| 8467 | 
            +
                    var key = props[i];
         | 
| 8468 | 
            +
                    ret[key] = true;
         | 
| 8477 8469 | 
             
                  }
         | 
| 8478 8470 | 
             
                } else if (mixin.mixins) {
         | 
| 8479 8471 | 
             
                  mixin.mixins.forEach(function (x) {
         | 
| @@ -8485,13 +8477,9 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error', | |
| 8485 8477 | 
             
              MixinPrototype.keys = function () {
         | 
| 8486 8478 | 
             
                var keys = {};
         | 
| 8487 8479 | 
             
                var seen = {};
         | 
| 8488 | 
            -
             | 
| 8480 | 
            +
             | 
| 8489 8481 | 
             
                _keys(keys, this, seen);
         | 
| 8490 | 
            -
                 | 
| 8491 | 
            -
                  if (keys.hasOwnProperty(key)) {
         | 
| 8492 | 
            -
                    ret.push(key);
         | 
| 8493 | 
            -
                  }
         | 
| 8494 | 
            -
                }
         | 
| 8482 | 
            +
                var ret = Object.keys(keys);
         | 
| 8495 8483 | 
             
                return ret;
         | 
| 8496 8484 | 
             
              };
         | 
| 8497 8485 |  | 
| @@ -12459,6 +12447,101 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa | |
| 12459 12447 | 
             
                }
         | 
| 12460 12448 | 
             
              }
         | 
| 12461 12449 | 
             
            });
         | 
| 12450 | 
            +
            enifed('ember-metal/weak_map', ['exports', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/meta'], function (exports, _emberMetalDebug, _emberMetalUtils, _emberMetalMeta) {
         | 
| 12451 | 
            +
              'use strict';
         | 
| 12452 | 
            +
             | 
| 12453 | 
            +
              exports.default = WeakMap;
         | 
| 12454 | 
            +
             | 
| 12455 | 
            +
              var id = 0;
         | 
| 12456 | 
            +
              function UNDEFINED() {}
         | 
| 12457 | 
            +
             | 
| 12458 | 
            +
              /*
         | 
| 12459 | 
            +
               * @private
         | 
| 12460 | 
            +
               * @class Ember.WeakMap
         | 
| 12461 | 
            +
               *
         | 
| 12462 | 
            +
               * A partial polyfill for [WeakMap](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects).
         | 
| 12463 | 
            +
               *
         | 
| 12464 | 
            +
               * There is a small but important caveat. This implementation assumes that the
         | 
| 12465 | 
            +
               * weak map will live longer (in the sense of garbage collection) than all of its
         | 
| 12466 | 
            +
               * keys, otherwise it is possible to leak the values stored in the weak map. In
         | 
| 12467 | 
            +
               * practice, most use cases satisfy this limitation which is why it is included
         | 
| 12468 | 
            +
               * in ember-metal.
         | 
| 12469 | 
            +
               */
         | 
| 12470 | 
            +
             | 
| 12471 | 
            +
              function WeakMap() {
         | 
| 12472 | 
            +
                _emberMetalDebug.assert('Invoking the WeakMap constructor with arguments is not supported at this time', arguments.length === 0);
         | 
| 12473 | 
            +
             | 
| 12474 | 
            +
                this._id = _emberMetalUtils.GUID_KEY + id++;
         | 
| 12475 | 
            +
              }
         | 
| 12476 | 
            +
             | 
| 12477 | 
            +
              /*
         | 
| 12478 | 
            +
               * @method get
         | 
| 12479 | 
            +
               * @param key {Object | Function}
         | 
| 12480 | 
            +
               * @return {Any} stored value
         | 
| 12481 | 
            +
               */
         | 
| 12482 | 
            +
              WeakMap.prototype.get = function (obj) {
         | 
| 12483 | 
            +
                var meta = _emberMetalMeta.peekMeta(obj);
         | 
| 12484 | 
            +
                if (meta) {
         | 
| 12485 | 
            +
                  var map = meta.readableWeak();
         | 
| 12486 | 
            +
                  if (map) {
         | 
| 12487 | 
            +
                    if (map[this._id] === UNDEFINED) {
         | 
| 12488 | 
            +
                      return undefined;
         | 
| 12489 | 
            +
                    }
         | 
| 12490 | 
            +
             | 
| 12491 | 
            +
                    return map[this._id];
         | 
| 12492 | 
            +
                  }
         | 
| 12493 | 
            +
                }
         | 
| 12494 | 
            +
              };
         | 
| 12495 | 
            +
             | 
| 12496 | 
            +
              /*
         | 
| 12497 | 
            +
               * @method set
         | 
| 12498 | 
            +
               * @param key {Object | Function}
         | 
| 12499 | 
            +
               * @param value {Any}
         | 
| 12500 | 
            +
               * @return {WeakMap} the weak map
         | 
| 12501 | 
            +
               */
         | 
| 12502 | 
            +
              WeakMap.prototype.set = function (obj, value) {
         | 
| 12503 | 
            +
                _emberMetalDebug.assert('Uncaught TypeError: Invalid value used as weak map key', obj && (typeof obj === 'object' || typeof obj === 'function'));
         | 
| 12504 | 
            +
             | 
| 12505 | 
            +
                if (value === undefined) {
         | 
| 12506 | 
            +
                  value = UNDEFINED;
         | 
| 12507 | 
            +
                }
         | 
| 12508 | 
            +
             | 
| 12509 | 
            +
                _emberMetalMeta.meta(obj).writableWeak()[this._id] = value;
         | 
| 12510 | 
            +
             | 
| 12511 | 
            +
                return this;
         | 
| 12512 | 
            +
              };
         | 
| 12513 | 
            +
             | 
| 12514 | 
            +
              /*
         | 
| 12515 | 
            +
               * @method has
         | 
| 12516 | 
            +
               * @param key {Object | Function}
         | 
| 12517 | 
            +
               * @return {boolean} if the key exists
         | 
| 12518 | 
            +
               */
         | 
| 12519 | 
            +
              WeakMap.prototype.has = function (obj) {
         | 
| 12520 | 
            +
                var meta = _emberMetalMeta.peekMeta(obj);
         | 
| 12521 | 
            +
                if (meta) {
         | 
| 12522 | 
            +
                  var map = meta.readableWeak();
         | 
| 12523 | 
            +
                  if (map) {
         | 
| 12524 | 
            +
                    return map[this._id] !== undefined;
         | 
| 12525 | 
            +
                  }
         | 
| 12526 | 
            +
                }
         | 
| 12527 | 
            +
             | 
| 12528 | 
            +
                return false;
         | 
| 12529 | 
            +
              };
         | 
| 12530 | 
            +
             | 
| 12531 | 
            +
              /*
         | 
| 12532 | 
            +
               * @method delete
         | 
| 12533 | 
            +
               * @param key {Object | Function}
         | 
| 12534 | 
            +
               * @return {boolean} if the key was deleted
         | 
| 12535 | 
            +
               */
         | 
| 12536 | 
            +
              WeakMap.prototype.delete = function (obj) {
         | 
| 12537 | 
            +
                if (this.has(obj)) {
         | 
| 12538 | 
            +
                  delete _emberMetalMeta.meta(obj).writableWeak()[this._id];
         | 
| 12539 | 
            +
                  return true;
         | 
| 12540 | 
            +
                } else {
         | 
| 12541 | 
            +
                  return false;
         | 
| 12542 | 
            +
                }
         | 
| 12543 | 
            +
              };
         | 
| 12544 | 
            +
            });
         | 
| 12462 12545 | 
             
            enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtime/mixins/comparable'], function (exports, _emberRuntimeUtils, _emberRuntimeMixinsComparable) {
         | 
| 12463 12546 | 
             
              'use strict';
         | 
| 12464 12547 |  | 
| @@ -12605,7 +12688,7 @@ enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtim | |
| 12605 12688 | 
             
                }
         | 
| 12606 12689 | 
             
              }
         | 
| 12607 12690 | 
             
            });
         | 
| 12608 | 
            -
            enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/compare', 'ember-runtime/utils', 'ember-runtime/system/native_array', 'ember-metal/is_none', 'ember-metal/get_properties'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalError, _emberMetalComputed, _emberMetalObserver, _emberRuntimeCompare, _emberRuntimeUtils, _emberRuntimeSystemNative_array, _emberMetalIs_none, _emberMetalGet_properties) {
         | 
| 12691 | 
            +
            enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/compare', 'ember-runtime/utils', 'ember-runtime/system/native_array', 'ember-metal/is_none', 'ember-metal/get_properties', 'ember-metal/weak_map'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalError, _emberMetalComputed, _emberMetalObserver, _emberRuntimeCompare, _emberRuntimeUtils, _emberRuntimeSystemNative_array, _emberMetalIs_none, _emberMetalGet_properties, _emberMetalWeak_map) {
         | 
| 12609 12692 | 
             
              /**
         | 
| 12610 12693 | 
             
              @module ember
         | 
| 12611 12694 | 
             
              @submodule ember-runtime
         | 
| @@ -12675,7 +12758,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal | |
| 12675 12758 | 
             
              }
         | 
| 12676 12759 |  | 
| 12677 12760 | 
             
              /**
         | 
| 12678 | 
            -
                A computed property that returns the sum of the  | 
| 12761 | 
            +
                A computed property that returns the sum of the values
         | 
| 12679 12762 | 
             
                in the dependent array.
         | 
| 12680 12763 |  | 
| 12681 12764 | 
             
                @method sum
         | 
| @@ -13268,67 +13351,83 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal | |
| 13268 13351 | 
             
                var cp = new _emberMetalComputed.ComputedProperty(function (key) {
         | 
| 13269 13352 | 
             
                  var _this5 = this;
         | 
| 13270 13353 |  | 
| 13271 | 
            -
                   | 
| 13272 | 
            -
                    this.notifyPropertyChange(key);
         | 
| 13273 | 
            -
                  }
         | 
| 13274 | 
            -
             | 
| 13275 | 
            -
                  var items = itemsKey === '@this' ? this : _emberMetalProperty_get.get(this, itemsKey);
         | 
| 13354 | 
            +
                  var itemsKeyIsAtThis = itemsKey === '@this';
         | 
| 13276 13355 | 
             
                  var sortProperties = _emberMetalProperty_get.get(this, sortPropertiesKey);
         | 
| 13277 13356 |  | 
| 13278 | 
            -
                   | 
| 13279 | 
            -
                    return  | 
| 13280 | 
            -
                  }
         | 
| 13357 | 
            +
                  _emberMetalDebug.assert('The sort definition for \'' + key + '\' on ' + this + ' must be a function or an array of strings', _emberRuntimeUtils.isArray(sortProperties) && sortProperties.every(function (s) {
         | 
| 13358 | 
            +
                    return typeof s === 'string';
         | 
| 13359 | 
            +
                  }));
         | 
| 13281 13360 |  | 
| 13282 | 
            -
                   | 
| 13283 | 
            -
             | 
| 13284 | 
            -
             | 
| 13285 | 
            -
             | 
| 13361 | 
            +
                  var normalizedSortProperties = normalizeSortProperties(sortProperties);
         | 
| 13362 | 
            +
             | 
| 13363 | 
            +
                  // Add/remove property observers as required.
         | 
| 13364 | 
            +
                  var activeObserversMap = cp._activeObserverMap || (cp._activeObserverMap = new _emberMetalWeak_map.default());
         | 
| 13365 | 
            +
                  var activeObservers = activeObserversMap.get(this);
         | 
| 13366 | 
            +
             | 
| 13367 | 
            +
                  if (activeObservers) {
         | 
| 13368 | 
            +
                    activeObservers.forEach(function (args) {
         | 
| 13369 | 
            +
                      _emberMetalObserver.removeObserver.apply(null, args);
         | 
| 13286 13370 | 
             
                    });
         | 
| 13287 13371 | 
             
                  }
         | 
| 13288 13372 |  | 
| 13289 | 
            -
                   | 
| 13290 | 
            -
             | 
| 13291 | 
            -
                  if (!_emberRuntimeUtils.isArray(sortProperties)) {
         | 
| 13292 | 
            -
                    return items;
         | 
| 13373 | 
            +
                  function sortPropertyDidChange() {
         | 
| 13374 | 
            +
                    this.notifyPropertyChange(key);
         | 
| 13293 13375 | 
             
                  }
         | 
| 13294 13376 |  | 
| 13295 | 
            -
                   | 
| 13296 | 
            -
             | 
| 13297 | 
            -
                    var _p$split = p.split(':');
         | 
| 13377 | 
            +
                  activeObservers = normalizedSortProperties.map(function (_ref) {
         | 
| 13378 | 
            +
                    var prop = _ref[0];
         | 
| 13298 13379 |  | 
| 13299 | 
            -
                    var  | 
| 13300 | 
            -
                    var  | 
| 13380 | 
            +
                    var path = itemsKeyIsAtThis ? '@each.' + prop : itemsKey + '.@each.' + prop;
         | 
| 13381 | 
            +
                    var args = [_this5, path, sortPropertyDidChange];
         | 
| 13382 | 
            +
                    _emberMetalObserver.addObserver.apply(null, args);
         | 
| 13383 | 
            +
                    return args;
         | 
| 13384 | 
            +
                  });
         | 
| 13301 13385 |  | 
| 13302 | 
            -
             | 
| 13386 | 
            +
                  activeObserversMap.set(this, activeObservers);
         | 
| 13303 13387 |  | 
| 13304 | 
            -
             | 
| 13305 | 
            -
                   | 
| 13388 | 
            +
                  // Sort and return the array.
         | 
| 13389 | 
            +
                  var items = itemsKeyIsAtThis ? this : _emberMetalProperty_get.get(this, itemsKey);
         | 
| 13306 13390 |  | 
| 13307 | 
            -
                   | 
| 13308 | 
            -
             | 
| 13309 | 
            -
                   | 
| 13310 | 
            -
                     | 
| 13311 | 
            -
             | 
| 13312 | 
            -
             | 
| 13313 | 
            -
                  });
         | 
| 13391 | 
            +
                  if (_emberRuntimeUtils.isArray(items)) {
         | 
| 13392 | 
            +
                    return sortByNormalizedSortProperties(items, normalizedSortProperties);
         | 
| 13393 | 
            +
                  } else {
         | 
| 13394 | 
            +
                    return _emberRuntimeSystemNative_array.A();
         | 
| 13395 | 
            +
                  }
         | 
| 13396 | 
            +
                });
         | 
| 13314 13397 |  | 
| 13315 | 
            -
             | 
| 13316 | 
            -
                    for (var i = 0; i < normalizedSort.length; ++i) {
         | 
| 13317 | 
            -
                      var _normalizedSort$i = normalizedSort[i];
         | 
| 13318 | 
            -
                      var prop = _normalizedSort$i[0];
         | 
| 13319 | 
            -
                      var direction = _normalizedSort$i[1];
         | 
| 13398 | 
            +
                cp._activeObserverMap = undefined;
         | 
| 13320 13399 |  | 
| 13321 | 
            -
             | 
| 13322 | 
            -
             | 
| 13323 | 
            -
                        return direction === 'desc' ? -1 * result : result;
         | 
| 13324 | 
            -
                      }
         | 
| 13325 | 
            -
                    }
         | 
| 13400 | 
            +
                return cp.property(sortPropertiesKey + '.[]').readOnly();
         | 
| 13401 | 
            +
              }
         | 
| 13326 13402 |  | 
| 13327 | 
            -
             | 
| 13328 | 
            -
             | 
| 13403 | 
            +
              function normalizeSortProperties(sortProperties) {
         | 
| 13404 | 
            +
                return sortProperties.map(function (p) {
         | 
| 13405 | 
            +
                  var _p$split = p.split(':');
         | 
| 13406 | 
            +
             | 
| 13407 | 
            +
                  var prop = _p$split[0];
         | 
| 13408 | 
            +
                  var direction = _p$split[1];
         | 
| 13409 | 
            +
             | 
| 13410 | 
            +
                  direction = direction || 'asc';
         | 
| 13411 | 
            +
             | 
| 13412 | 
            +
                  return [prop, direction];
         | 
| 13329 13413 | 
             
                });
         | 
| 13414 | 
            +
              }
         | 
| 13415 | 
            +
             | 
| 13416 | 
            +
              function sortByNormalizedSortProperties(items, normalizedSortProperties) {
         | 
| 13417 | 
            +
                return _emberRuntimeSystemNative_array.A(items.slice().sort(function (itemA, itemB) {
         | 
| 13418 | 
            +
                  for (var i = 0; i < normalizedSortProperties.length; i++) {
         | 
| 13419 | 
            +
                    var _normalizedSortProperties$i = normalizedSortProperties[i];
         | 
| 13420 | 
            +
                    var prop = _normalizedSortProperties$i[0];
         | 
| 13421 | 
            +
                    var direction = _normalizedSortProperties$i[1];
         | 
| 13422 | 
            +
             | 
| 13423 | 
            +
                    var result = _emberRuntimeCompare.default(_emberMetalProperty_get.get(itemA, prop), _emberMetalProperty_get.get(itemB, prop));
         | 
| 13424 | 
            +
                    if (result !== 0) {
         | 
| 13425 | 
            +
                      return direction === 'desc' ? -1 * result : result;
         | 
| 13426 | 
            +
                    }
         | 
| 13427 | 
            +
                  }
         | 
| 13330 13428 |  | 
| 13331 | 
            -
             | 
| 13429 | 
            +
                  return 0;
         | 
| 13430 | 
            +
                }));
         | 
| 13332 13431 | 
             
              }
         | 
| 13333 13432 | 
             
            });
         | 
| 13334 13433 | 
             
            enifed('ember-runtime/controllers/controller', ['exports', 'ember-metal/debug', 'ember-runtime/system/object', 'ember-runtime/mixins/controller', 'ember-runtime/inject', 'ember-runtime/mixins/action_handler'], function (exports, _emberMetalDebug, _emberRuntimeSystemObject, _emberRuntimeMixinsController, _emberRuntimeInject, _emberRuntimeMixinsAction_handler) {
         | 
| @@ -14395,6 +14494,10 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14395 14494 | 
             
              //
         | 
| 14396 14495 | 
             
              'use strict';
         | 
| 14397 14496 |  | 
| 14497 | 
            +
              exports.addArrayObserver = addArrayObserver;
         | 
| 14498 | 
            +
              exports.removeArrayObserver = removeArrayObserver;
         | 
| 14499 | 
            +
              exports.objectAt = objectAt;
         | 
| 14500 | 
            +
             | 
| 14398 14501 | 
             
              function arrayObserversHelper(obj, target, opts, operation, notify) {
         | 
| 14399 14502 | 
             
                var willChange = opts && opts.willChange || 'arrayWillChange';
         | 
| 14400 14503 | 
             
                var didChange = opts && opts.didChange || 'arrayDidChange';
         | 
| @@ -14414,6 +14517,22 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14414 14517 | 
             
                return obj;
         | 
| 14415 14518 | 
             
              }
         | 
| 14416 14519 |  | 
| 14520 | 
            +
              function addArrayObserver(array, target, opts) {
         | 
| 14521 | 
            +
                return arrayObserversHelper(array, target, opts, _emberMetalEvents.addListener, false);
         | 
| 14522 | 
            +
              }
         | 
| 14523 | 
            +
             | 
| 14524 | 
            +
              function removeArrayObserver(array, target, opts) {
         | 
| 14525 | 
            +
                return arrayObserversHelper(array, target, opts, _emberMetalEvents.removeListener, true);
         | 
| 14526 | 
            +
              }
         | 
| 14527 | 
            +
             | 
| 14528 | 
            +
              function objectAt(content, idx) {
         | 
| 14529 | 
            +
                if (content.objectAt) {
         | 
| 14530 | 
            +
                  return content.objectAt(idx);
         | 
| 14531 | 
            +
                }
         | 
| 14532 | 
            +
             | 
| 14533 | 
            +
                return content[idx];
         | 
| 14534 | 
            +
              }
         | 
| 14535 | 
            +
             | 
| 14417 14536 | 
             
              // ..........................................................
         | 
| 14418 14537 | 
             
              // ARRAY
         | 
| 14419 14538 | 
             
              //
         | 
| @@ -14506,16 +14625,16 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14506 14625 | 
             
                  @public
         | 
| 14507 14626 | 
             
                 */
         | 
| 14508 14627 | 
             
                objectsAt: function (indexes) {
         | 
| 14509 | 
            -
                  var  | 
| 14628 | 
            +
                  var _this = this;
         | 
| 14510 14629 |  | 
| 14511 14630 | 
             
                  return indexes.map(function (idx) {
         | 
| 14512 | 
            -
                    return  | 
| 14631 | 
            +
                    return objectAt(_this, idx);
         | 
| 14513 14632 | 
             
                  });
         | 
| 14514 14633 | 
             
                },
         | 
| 14515 14634 |  | 
| 14516 14635 | 
             
                // overrides Ember.Enumerable version
         | 
| 14517 14636 | 
             
                nextObject: function (idx) {
         | 
| 14518 | 
            -
                  return  | 
| 14637 | 
            +
                  return objectAt(this, idx);
         | 
| 14519 14638 | 
             
                },
         | 
| 14520 14639 |  | 
| 14521 14640 | 
             
                /**
         | 
| @@ -14538,11 +14657,11 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14538 14657 | 
             
                }),
         | 
| 14539 14658 |  | 
| 14540 14659 | 
             
                firstObject: _emberMetalComputed.computed(function () {
         | 
| 14541 | 
            -
                  return  | 
| 14660 | 
            +
                  return objectAt(this, 0);
         | 
| 14542 14661 | 
             
                }),
         | 
| 14543 14662 |  | 
| 14544 14663 | 
             
                lastObject: _emberMetalComputed.computed(function () {
         | 
| 14545 | 
            -
                  return  | 
| 14664 | 
            +
                  return objectAt(this, _emberMetalProperty_get.get(this, 'length') - 1);
         | 
| 14546 14665 | 
             
                }),
         | 
| 14547 14666 |  | 
| 14548 14667 | 
             
                // optimized version from Enumerable
         | 
| @@ -14588,7 +14707,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14588 14707 | 
             
                  }
         | 
| 14589 14708 |  | 
| 14590 14709 | 
             
                  while (beginIndex < endIndex) {
         | 
| 14591 | 
            -
                    ret[ret.length] =  | 
| 14710 | 
            +
                    ret[ret.length] = objectAt(this, beginIndex++);
         | 
| 14592 14711 | 
             
                  }
         | 
| 14593 14712 |  | 
| 14594 14713 | 
             
                  return ret;
         | 
| @@ -14627,7 +14746,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14627 14746 | 
             
                  }
         | 
| 14628 14747 |  | 
| 14629 14748 | 
             
                  for (idx = startAt; idx < len; idx++) {
         | 
| 14630 | 
            -
                    if ( | 
| 14749 | 
            +
                    if (objectAt(this, idx) === object) {
         | 
| 14631 14750 | 
             
                      return idx;
         | 
| 14632 14751 | 
             
                    }
         | 
| 14633 14752 | 
             
                  }
         | 
| @@ -14668,7 +14787,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14668 14787 | 
             
                  }
         | 
| 14669 14788 |  | 
| 14670 14789 | 
             
                  for (idx = startAt; idx >= 0; idx--) {
         | 
| 14671 | 
            -
                    if ( | 
| 14790 | 
            +
                    if (objectAt(this, idx) === object) {
         | 
| 14672 14791 | 
             
                      return idx;
         | 
| 14673 14792 | 
             
                    }
         | 
| 14674 14793 | 
             
                  }
         | 
| @@ -14703,7 +14822,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14703 14822 | 
             
                */
         | 
| 14704 14823 |  | 
| 14705 14824 | 
             
                addArrayObserver: function (target, opts) {
         | 
| 14706 | 
            -
                  return  | 
| 14825 | 
            +
                  return addArrayObserver(this, target, opts);
         | 
| 14707 14826 | 
             
                },
         | 
| 14708 14827 |  | 
| 14709 14828 | 
             
                /**
         | 
| @@ -14718,7 +14837,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14718 14837 | 
             
                  @public
         | 
| 14719 14838 | 
             
                */
         | 
| 14720 14839 | 
             
                removeArrayObserver: function (target, opts) {
         | 
| 14721 | 
            -
                  return  | 
| 14840 | 
            +
                  return removeArrayObserver(this, target, opts);
         | 
| 14722 14841 | 
             
                },
         | 
| 14723 14842 |  | 
| 14724 14843 | 
             
                /**
         | 
| @@ -14773,7 +14892,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14773 14892 | 
             
                    lim = startIdx + removeAmt;
         | 
| 14774 14893 |  | 
| 14775 14894 | 
             
                    for (var idx = startIdx; idx < lim; idx++) {
         | 
| 14776 | 
            -
                      removing.push( | 
| 14895 | 
            +
                      removing.push(objectAt(this, idx));
         | 
| 14777 14896 | 
             
                    }
         | 
| 14778 14897 | 
             
                  } else {
         | 
| 14779 14898 | 
             
                    removing = removeAmt;
         | 
| @@ -14820,7 +14939,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14820 14939 | 
             
                    lim = startIdx + addAmt;
         | 
| 14821 14940 |  | 
| 14822 14941 | 
             
                    for (var idx = startIdx; idx < lim; idx++) {
         | 
| 14823 | 
            -
                      adding.push( | 
| 14942 | 
            +
                      adding.push(objectAt(this, idx));
         | 
| 14824 14943 | 
             
                    }
         | 
| 14825 14944 | 
             
                  } else {
         | 
| 14826 14945 | 
             
                    adding = addAmt;
         | 
| @@ -14838,12 +14957,12 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta | |
| 14838 14957 | 
             
                  var cachedFirst = _emberMetalComputed.cacheFor(this, 'firstObject');
         | 
| 14839 14958 | 
             
                  var cachedLast = _emberMetalComputed.cacheFor(this, 'lastObject');
         | 
| 14840 14959 |  | 
| 14841 | 
            -
                  if ( | 
| 14960 | 
            +
                  if (objectAt(this, 0) !== cachedFirst) {
         | 
| 14842 14961 | 
             
                    _emberMetalProperty_events.propertyWillChange(this, 'firstObject');
         | 
| 14843 14962 | 
             
                    _emberMetalProperty_events.propertyDidChange(this, 'firstObject');
         | 
| 14844 14963 | 
             
                  }
         | 
| 14845 14964 |  | 
| 14846 | 
            -
                  if ( | 
| 14965 | 
            +
                  if (objectAt(this, length - 1) !== cachedLast) {
         | 
| 14847 14966 | 
             
                    _emberMetalProperty_events.propertyWillChange(this, 'lastObject');
         | 
| 14848 14967 | 
             
                    _emberMetalProperty_events.propertyDidChange(this, 'lastObject');
         | 
| 14849 14968 | 
             
                  }
         | 
| @@ -16606,7 +16725,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g | |
| 16606 16725 | 
             
                    return null;
         | 
| 16607 16726 | 
             
                  }
         | 
| 16608 16727 |  | 
| 16609 | 
            -
                  var ret =  | 
| 16728 | 
            +
                  var ret = _emberRuntimeMixinsArray.objectAt(this, len - 1);
         | 
| 16610 16729 | 
             
                  this.removeAt(len - 1, 1);
         | 
| 16611 16730 | 
             
                  return ret;
         | 
| 16612 16731 | 
             
                },
         | 
| @@ -16628,7 +16747,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g | |
| 16628 16747 | 
             
                    return null;
         | 
| 16629 16748 | 
             
                  }
         | 
| 16630 16749 |  | 
| 16631 | 
            -
                  var ret =  | 
| 16750 | 
            +
                  var ret = _emberRuntimeMixinsArray.objectAt(this, 0);
         | 
| 16632 16751 | 
             
                  this.removeAt(0);
         | 
| 16633 16752 | 
             
                  return ret;
         | 
| 16634 16753 | 
             
                },
         | 
| @@ -16731,7 +16850,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g | |
| 16731 16850 | 
             
                removeObject: function (obj) {
         | 
| 16732 16851 | 
             
                  var loc = _emberMetalProperty_get.get(this, 'length') || 0;
         | 
| 16733 16852 | 
             
                  while (--loc >= 0) {
         | 
| 16734 | 
            -
                    var curObject =  | 
| 16853 | 
            +
                    var curObject = _emberRuntimeMixinsArray.objectAt(this, loc);
         | 
| 16735 16854 |  | 
| 16736 16855 | 
             
                    if (curObject === obj) {
         | 
| 16737 16856 | 
             
                      this.removeAt(loc);
         | 
| @@ -16913,8 +17032,9 @@ enifed('ember-runtime/mixins/observable', ['exports', 'ember-metal/debug', 'embe | |
| 16913 17032 |  | 
| 16914 17033 | 
             
                ## Observing Property Changes
         | 
| 16915 17034 |  | 
| 16916 | 
            -
                You typically observe property changes simply by  | 
| 16917 | 
            -
                 | 
| 17035 | 
            +
                You typically observe property changes simply by using the `Ember.observer`
         | 
| 17036 | 
            +
                function in classes that you write.
         | 
| 17037 | 
            +
              
         | 
| 16918 17038 | 
             
                For example:
         | 
| 16919 17039 |  | 
| 16920 17040 | 
             
                ```javascript
         | 
| @@ -17939,7 +18059,7 @@ enifed('ember-runtime/system/application', ['exports', 'ember-runtime/system/nam | |
| 17939 18059 |  | 
| 17940 18060 | 
             
              exports.default = _emberRuntimeSystemNamespace.default.extend();
         | 
| 17941 18061 | 
             
            });
         | 
| 17942 | 
            -
            enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/utils', 'ember-metal/computed', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/error', 'ember-runtime/system/object', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/enumerable', 'ember-metal/alias'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeUtils, _emberMetalComputed, _emberMetalMixin, _emberMetalProperty_events, _emberMetalError, _emberRuntimeSystemObject, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsEnumerable, _emberMetalAlias) {
         | 
| 18062 | 
            +
            enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/utils', 'ember-metal/computed', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/error', 'ember-runtime/system/object', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/enumerable', 'ember-metal/alias', 'ember-runtime/mixins/array'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeUtils, _emberMetalComputed, _emberMetalMixin, _emberMetalProperty_events, _emberMetalError, _emberRuntimeSystemObject, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsEnumerable, _emberMetalAlias, _emberRuntimeMixinsArray) {
         | 
| 17943 18063 | 
             
              'use strict';
         | 
| 17944 18064 |  | 
| 17945 18065 | 
             
              /**
         | 
| @@ -18024,7 +18144,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18024 18144 | 
             
                  @private
         | 
| 18025 18145 | 
             
                */
         | 
| 18026 18146 | 
             
                objectAtContent: function (idx) {
         | 
| 18027 | 
            -
                  return _emberMetalProperty_get.get(this, 'arrangedContent') | 
| 18147 | 
            +
                  return _emberRuntimeMixinsArray.objectAt(_emberMetalProperty_get.get(this, 'arrangedContent'), idx);
         | 
| 18028 18148 | 
             
                },
         | 
| 18029 18149 |  | 
| 18030 18150 | 
             
                /**
         | 
| @@ -18058,7 +18178,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18058 18178 | 
             
                  var content = _emberMetalProperty_get.get(this, 'content');
         | 
| 18059 18179 |  | 
| 18060 18180 | 
             
                  if (content) {
         | 
| 18061 | 
            -
                     | 
| 18181 | 
            +
                    _emberRuntimeMixinsArray.removeArrayObserver(content, this, {
         | 
| 18062 18182 | 
             
                      willChange: 'contentArrayWillChange',
         | 
| 18063 18183 | 
             
                      didChange: 'contentArrayDidChange'
         | 
| 18064 18184 | 
             
                    });
         | 
| @@ -18106,7 +18226,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18106 18226 | 
             
                  if (content) {
         | 
| 18107 18227 | 
             
                    _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof content, _emberRuntimeUtils.isArray(content) || content.isDestroyed);
         | 
| 18108 18228 |  | 
| 18109 | 
            -
                     | 
| 18229 | 
            +
                    _emberRuntimeMixinsArray.addArrayObserver(content, this, {
         | 
| 18110 18230 | 
             
                      willChange: 'contentArrayWillChange',
         | 
| 18111 18231 | 
             
                      didChange: 'contentArrayDidChange'
         | 
| 18112 18232 | 
             
                    });
         | 
| @@ -18141,7 +18261,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18141 18261 | 
             
                  if (arrangedContent) {
         | 
| 18142 18262 | 
             
                    _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof arrangedContent, _emberRuntimeUtils.isArray(arrangedContent) || arrangedContent.isDestroyed);
         | 
| 18143 18263 |  | 
| 18144 | 
            -
                     | 
| 18264 | 
            +
                    _emberRuntimeMixinsArray.addArrayObserver(arrangedContent, this, {
         | 
| 18145 18265 | 
             
                      willChange: 'arrangedContentArrayWillChange',
         | 
| 18146 18266 | 
             
                      didChange: 'arrangedContentArrayDidChange'
         | 
| 18147 18267 | 
             
                    });
         | 
| @@ -18152,7 +18272,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18152 18272 | 
             
                  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
         | 
| 18153 18273 |  | 
| 18154 18274 | 
             
                  if (arrangedContent) {
         | 
| 18155 | 
            -
                     | 
| 18275 | 
            +
                    _emberRuntimeMixinsArray.removeArrayObserver(arrangedContent, this, {
         | 
| 18156 18276 | 
             
                      willChange: 'arrangedContentArrayWillChange',
         | 
| 18157 18277 | 
             
                      didChange: 'arrangedContentArrayDidChange'
         | 
| 18158 18278 | 
             
                    });
         | 
| @@ -18225,7 +18345,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb | |
| 18225 18345 | 
             
                    // Get a list of indices in original content to remove
         | 
| 18226 18346 | 
             
                    for (i = start; i < start + len; i++) {
         | 
| 18227 18347 | 
             
                      // Use arrangedContent here so we avoid confusion with objects transformed by objectAtContent
         | 
| 18228 | 
            -
                      indices.push(content.indexOf( | 
| 18348 | 
            +
                      indices.push(content.indexOf(_emberRuntimeMixinsArray.objectAt(arrangedContent, i)));
         | 
| 18229 18349 | 
             
                    }
         | 
| 18230 18350 |  | 
| 18231 18351 | 
             
                    // Replace in reverse order since indices will change
         | 
| @@ -19142,7 +19262,7 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb | |
| 19142 19262 | 
             
              @return {String} string representation
         | 
| 19143 19263 | 
             
              @public
         | 
| 19144 19264 | 
             
            */
         | 
| 19145 | 
            -
            enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/empty_object'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalObserver, _emberMetalProperty_events, _emberMetalEmpty_object) {
         | 
| 19265 | 
            +
            enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/empty_object', 'ember-runtime/mixins/array'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalObserver, _emberMetalProperty_events, _emberMetalEmpty_object, _emberRuntimeMixinsArray) {
         | 
| 19146 19266 | 
             
              'use strict';
         | 
| 19147 19267 |  | 
| 19148 19268 | 
             
              /**
         | 
| @@ -19243,7 +19363,7 @@ enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'embe | |
| 19243 19363 |  | 
| 19244 19364 | 
             
              function addObserverForContentKey(content, keyName, proxy, idx, loc) {
         | 
| 19245 19365 | 
             
                while (--loc >= idx) {
         | 
| 19246 | 
            -
                  var item =  | 
| 19366 | 
            +
                  var item = _emberRuntimeMixinsArray.objectAt(content, loc);
         | 
| 19247 19367 | 
             
                  if (item) {
         | 
| 19248 19368 | 
             
                    _emberMetalDebug.assert('When using @each to observe the array ' + content + ', the array must return an object', typeof item === 'object');
         | 
| 19249 19369 | 
             
                    _emberMetalObserver._addBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
         | 
| @@ -19254,7 +19374,7 @@ enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'embe | |
| 19254 19374 |  | 
| 19255 19375 | 
             
              function removeObserverForContentKey(content, keyName, proxy, idx, loc) {
         | 
| 19256 19376 | 
             
                while (--loc >= idx) {
         | 
| 19257 | 
            -
                  var item =  | 
| 19377 | 
            +
                  var item = _emberRuntimeMixinsArray.objectAt(content, loc);
         | 
| 19258 19378 | 
             
                  if (item) {
         | 
| 19259 19379 | 
             
                    _emberMetalObserver._removeBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
         | 
| 19260 19380 | 
             
                    _emberMetalObserver.removeObserver(item, keyName, proxy, 'contentKeyDidChange');
         |