ember-source 1.8.0.beta.5 → 1.8.0

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f30bc696893c2069707688aabc68af377e5ee6a0
4
- data.tar.gz: ba5e80a8ef7488147776338c8b12fc23d6abf958
3
+ metadata.gz: b33e35e9eb1cef3a2c37e7598bd1081ad6ef83ef
4
+ data.tar.gz: a500e9683ba0cef746f2feea7807019b5db6e36b
5
5
  SHA512:
6
- metadata.gz: b8d4d2db19c645fd03e9060125e94f290ef54184d4f88132226a46fb4bcd3e77852e8ea17f905c174ac823be8d228909e573c71487c589c64625279568211771
7
- data.tar.gz: 99ca05ee6df42a141f1a2b7c48142d8ab0d2c68c107019fb022fded5ec9f07bbb06b98ed48b02a2e9f7b24e6e6e1eb22d2a78a2ebc74334db00594049365e46c
6
+ metadata.gz: d5cfd0c87e7a02252582b429549eb05372100a5fc63154543532381d18df4e972188570f3725118f74304d56d077835c8ea80d975ca927054a339f682d927494
7
+ data.tar.gz: c06fb64e52782641d053e753020a547fe847bcb1f52d08049f0963428a3728ececdcac94c2a43e504d0a9faf81b257b75482ab769776385975525f5e723c6f58
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.0-beta.5
1
+ 1.8.0
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.8.0-beta.5
8
+ * @version 1.8.0
9
9
  */
10
10
 
11
11
  (function() {
@@ -2012,11 +2012,11 @@ define("ember-metal",
2012
2012
  var EnumerableUtils = __dependency6__["default"];
2013
2013
  var Cache = __dependency7__["default"];
2014
2014
  var create = __dependency8__.create;
2015
- var platform = __dependency8__.platform;
2016
- var map = __dependency9__.map;
2017
- var forEach = __dependency9__.forEach;
2015
+ var hasPropertyAccessors = __dependency8__.hasPropertyAccessors;
2018
2016
  var filter = __dependency9__.filter;
2017
+ var forEach = __dependency9__.forEach;
2019
2018
  var indexOf = __dependency9__.indexOf;
2019
+ var map = __dependency9__.map;
2020
2020
  var Logger = __dependency10__["default"];
2021
2021
 
2022
2022
  var get = __dependency11__.get;
@@ -2125,7 +2125,10 @@ define("ember-metal",
2125
2125
  Ember.GUID_KEY = GUID_KEY;
2126
2126
  Ember.create = create;
2127
2127
  Ember.keys = keys;
2128
- Ember.platform = platform;
2128
+ Ember.platform = {
2129
+ defineProperty: defineProperty,
2130
+ hasPropertyAccessors: hasPropertyAccessors
2131
+ };
2129
2132
 
2130
2133
  var EmberArrayPolyfills = Ember.ArrayPolyfills = {};
2131
2134
 
@@ -4762,7 +4765,7 @@ define("ember-metal/core",
4762
4765
 
4763
4766
  @class Ember
4764
4767
  @static
4765
- @version 1.8.0-beta.5
4768
+ @version 1.8.0
4766
4769
  */
4767
4770
 
4768
4771
  if ('undefined' === typeof Ember) {
@@ -4789,10 +4792,10 @@ define("ember-metal/core",
4789
4792
  /**
4790
4793
  @property VERSION
4791
4794
  @type String
4792
- @default '1.8.0-beta.5'
4795
+ @default '1.8.0'
4793
4796
  @static
4794
4797
  */
4795
- Ember.VERSION = '1.8.0-beta.5';
4798
+ Ember.VERSION = '1.8.0';
4796
4799
 
4797
4800
  /**
4798
4801
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -5081,16 +5084,18 @@ define("ember-metal/deprecate_property",
5081
5084
  __exports__.deprecateProperty = deprecateProperty;
5082
5085
  });
5083
5086
  define("ember-metal/dictionary",
5084
- ["exports"],
5085
- function(__exports__) {
5087
+ ["ember-metal/platform","exports"],
5088
+ function(__dependency1__, __exports__) {
5086
5089
  "use strict";
5090
+ var create = __dependency1__.create;
5091
+
5087
5092
  // the delete is meant to hint at runtimes that this object should remain in
5088
5093
  // dictionary mode. This is clearly a runtime specific hack, but currently it
5089
5094
  // appears worthwile in some usecases. Please note, these deletes do increase
5090
5095
  // the cost of creation dramatically over a plain Object.create. And as this
5091
5096
  // only makes sense for long-lived dictionaries that aren't instantiated often.
5092
5097
  __exports__["default"] = function makeDictionary(parent) {
5093
- var dict = Object.create(parent);
5098
+ var dict = create(parent);
5094
5099
  dict['_dict'] = null;
5095
5100
  delete dict['_dict'];
5096
5101
  return dict;
@@ -5128,7 +5133,7 @@ define("ember-metal/enumerable_utils",
5128
5133
  * @return {Array} An array of mapped values.
5129
5134
  */
5130
5135
  function map(obj, callback, thisArg) {
5131
- return obj.map ? obj.map.call(obj, callback, thisArg) : _map.call(obj, callback, thisArg);
5136
+ return obj.map ? obj.map(callback, thisArg) : _map.call(obj, callback, thisArg);
5132
5137
  }
5133
5138
 
5134
5139
  __exports__.map = map;/**
@@ -5142,7 +5147,7 @@ define("ember-metal/enumerable_utils",
5142
5147
  *
5143
5148
  */
5144
5149
  function forEach(obj, callback, thisArg) {
5145
- return obj.forEach ? obj.forEach.call(obj, callback, thisArg) : a_forEach.call(obj, callback, thisArg);
5150
+ return obj.forEach ? obj.forEach(callback, thisArg) : a_forEach.call(obj, callback, thisArg);
5146
5151
  }
5147
5152
 
5148
5153
  __exports__.forEach = forEach;/**
@@ -5158,7 +5163,7 @@ define("ember-metal/enumerable_utils",
5158
5163
  * @since 1.4.0
5159
5164
  */
5160
5165
  function filter(obj, callback, thisArg) {
5161
- return obj.filter ? obj.filter.call(obj, callback, thisArg) : _filter.call(obj, callback, thisArg);
5166
+ return obj.filter ? obj.filter(callback, thisArg) : _filter.call(obj, callback, thisArg);
5162
5167
  }
5163
5168
 
5164
5169
  __exports__.filter = filter;/**
@@ -5172,7 +5177,7 @@ define("ember-metal/enumerable_utils",
5172
5177
  *
5173
5178
  */
5174
5179
  function indexOf(obj, element, index) {
5175
- return obj.indexOf ? obj.indexOf.call(obj, element, index) : _indexOf.call(obj, element, index);
5180
+ return obj.indexOf ? obj.indexOf(element, index) : _indexOf.call(obj, element, index);
5176
5181
  }
5177
5182
 
5178
5183
  __exports__.indexOf = indexOf;/**
@@ -6216,7 +6221,7 @@ define("ember-metal/is_empty",
6216
6221
  Verifies that a value is `null` or an empty string, empty array,
6217
6222
  or empty function.
6218
6223
 
6219
- Constrains the rules on `Ember.isNone` by returning false for empty
6224
+ Constrains the rules on `Ember.isNone` by returning true for empty
6220
6225
  string and empty arrays.
6221
6226
 
6222
6227
  ```javascript
@@ -6235,7 +6240,36 @@ define("ember-metal/is_empty",
6235
6240
  @return {Boolean}
6236
6241
  */
6237
6242
  function isEmpty(obj) {
6238
- return isNone(obj) || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && get(obj, 'length') === 0);
6243
+ var none = isNone(obj);
6244
+ if (none) {
6245
+ return none;
6246
+ }
6247
+
6248
+ if (typeof obj.size === 'number') {
6249
+ return !obj.size;
6250
+ }
6251
+
6252
+ var objectType = typeof obj;
6253
+
6254
+ if (objectType === 'object') {
6255
+ var size = get(obj, 'size');
6256
+ if (typeof size === 'number') {
6257
+ return !size;
6258
+ }
6259
+ }
6260
+
6261
+ if (typeof obj.length === 'number' && objectType !== 'function') {
6262
+ return !obj.length;
6263
+ }
6264
+
6265
+ if (objectType === 'object') {
6266
+ var length = get(obj, 'length');
6267
+ if (typeof length === 'number') {
6268
+ return !length;
6269
+ }
6270
+ }
6271
+
6272
+ return false;
6239
6273
  }
6240
6274
 
6241
6275
  var empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", isEmpty);
@@ -6617,7 +6651,7 @@ define("ember-metal/map",
6617
6651
  }
6618
6652
 
6619
6653
  function copyNull(obj) {
6620
- var output = Object.create(null);
6654
+ var output = create(null);
6621
6655
 
6622
6656
  for (var prop in obj) {
6623
6657
  // hasOwnPropery is not needed because obj is Object.create(null);
@@ -6675,7 +6709,7 @@ define("ember-metal/map",
6675
6709
  @method clear
6676
6710
  */
6677
6711
  clear: function() {
6678
- this.presenceSet = Object.create(null);
6712
+ this.presenceSet = create(null);
6679
6713
  this.list = [];
6680
6714
  this.size = 0;
6681
6715
  },
@@ -6839,7 +6873,7 @@ define("ember-metal/map",
6839
6873
  if (this instanceof this.constructor) {
6840
6874
  this.keys = OrderedSet.create();
6841
6875
  this.keys._silenceRemoveDeprecation = true;
6842
- this.values = Object.create(null);
6876
+ this.values = create(null);
6843
6877
  this.size = 0;
6844
6878
  } else {
6845
6879
  missingNew("OrderedSet");
@@ -7001,7 +7035,7 @@ define("ember-metal/map",
7001
7035
  */
7002
7036
  clear: function() {
7003
7037
  this.keys.clear();
7004
- this.values = Object.create(null);
7038
+ this.values = create(null);
7005
7039
  this.size = 0;
7006
7040
  },
7007
7041
 
@@ -7146,6 +7180,7 @@ define("ember-metal/mixin",
7146
7180
  var wrap = __dependency5__.wrap;
7147
7181
  var makeArray = __dependency5__.makeArray;
7148
7182
  var apply = __dependency5__.apply;
7183
+ var isArray = __dependency5__.isArray;
7149
7184
  var expandProperties = __dependency6__["default"];
7150
7185
  var Descriptor = __dependency7__.Descriptor;
7151
7186
  var defineProperty = __dependency7__.defineProperty;
@@ -7305,6 +7340,9 @@ define("ember-metal/mixin",
7305
7340
  function applyMergedProperties(obj, key, value, values) {
7306
7341
  var baseValue = values[key] || obj[key];
7307
7342
 
7343
+ Ember.assert("You passed in `" + JSON.stringify(value) + "` as the value for `" + key +
7344
+ "` but `" + key + "` cannot be an Array", !isArray(value));
7345
+
7308
7346
  if (!baseValue) { return value; }
7309
7347
 
7310
7348
  var newBase = merge({}, baseValue);
@@ -8197,108 +8235,48 @@ define("ember-metal/path_cache",
8197
8235
  __exports__.isPath = isPath;
8198
8236
  });
8199
8237
  define("ember-metal/platform",
8200
- ["exports"],
8201
- function(__exports__) {
8238
+ ["ember-metal/platform/define_property","ember-metal/platform/define_properties","ember-metal/platform/create","exports"],
8239
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
8202
8240
  "use strict";
8203
- /*globals Node */
8241
+ var hasES5CompliantDefineProperty = __dependency1__.hasES5CompliantDefineProperty;
8242
+ var defineProperty = __dependency1__.defineProperty;
8243
+ var defineProperties = __dependency2__["default"];
8244
+ var create = __dependency3__["default"];
8204
8245
 
8205
8246
  /**
8206
8247
  @module ember-metal
8207
8248
  */
8208
- var defineProperty = (function checkCompliance(defineProperty) {
8209
- if (!defineProperty) return;
8210
- try {
8211
- var a = 5;
8212
- var obj = {};
8213
- defineProperty(obj, 'a', {
8214
- configurable: true,
8215
- enumerable: true,
8216
- get: function () {
8217
- return a;
8218
- },
8219
- set: function (v) {
8220
- a = v;
8221
- }
8222
- });
8223
- if (obj.a !== 5) return;
8224
- obj.a = 10;
8225
- if (a !== 10) return;
8226
-
8227
- // check non-enumerability
8228
- defineProperty(obj, 'a', {
8229
- configurable: true,
8230
- enumerable: false,
8231
- writable: true,
8232
- value: true
8233
- });
8234
- for (var key in obj) {
8235
- if (key === 'a') return;
8236
- }
8237
-
8238
- // Detects a bug in Android <3.2 where you cannot redefine a property using
8239
- // Object.defineProperty once accessors have already been set.
8240
- if (obj.a !== true) return;
8241
-
8242
- // defineProperty is compliant
8243
- return defineProperty;
8244
- } catch (e) {
8245
- // IE8 defines Object.defineProperty but calling it on an Object throws
8246
- return;
8247
- }
8248
- })(Object.defineProperty);
8249
-
8250
- var hasES5CompliantDefineProperty = !!defineProperty;
8251
-
8252
- if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
8253
- // This is for Safari 5.0, which supports Object.defineProperty, but not
8254
- // on DOM nodes.
8255
- var canDefinePropertyOnDOM = (function() {
8256
- try {
8257
- defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
8258
- return true;
8259
- } catch(e) { }
8260
8249
 
8261
- return false;
8262
- })();
8263
-
8264
- if (!canDefinePropertyOnDOM) {
8265
- defineProperty = function(obj, keyName, desc) {
8266
- var isNode;
8250
+ var hasPropertyAccessors = hasES5CompliantDefineProperty;
8251
+ var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8267
8252
 
8268
- if (typeof Node === "object") {
8269
- isNode = obj instanceof Node;
8270
- } else {
8271
- isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
8272
- }
8253
+ /**
8254
+ Platform specific methods and feature detectors needed by the framework.
8273
8255
 
8274
- if (isNode) {
8275
- // TODO: Should we have a warning here?
8276
- return (obj[keyName] = desc.value);
8277
- } else {
8278
- return Object.defineProperty(obj, keyName, desc);
8279
- }
8280
- };
8281
- }
8282
- }
8256
+ @class platform
8257
+ @namespace Ember
8258
+ @static
8259
+ */
8283
8260
 
8284
- if (!hasES5CompliantDefineProperty) {
8285
- defineProperty = function defineProperty(obj, keyName, desc) {
8286
- if (!desc.get) { obj[keyName] = desc.value; }
8287
- };
8288
- }
8261
+ __exports__.create = create;
8262
+ __exports__.defineProperty = defineProperty;
8263
+ __exports__.defineProperties = defineProperties;
8264
+ __exports__.hasPropertyAccessors = hasPropertyAccessors;
8265
+ __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8266
+ });
8267
+ define("ember-metal/platform/create",
8268
+ ["exports"],
8269
+ function(__exports__) {
8270
+ // Remove "use strict"; from transpiled module until
8271
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
8272
+ //
8273
+ // REMOVE_USE_STRICT: true
8289
8274
 
8290
- // ES5 15.2.3.7
8291
- // http://es5.github.com/#x15.2.3.7
8292
- if (!Object.defineProperties) {
8293
- Object.defineProperties = function defineProperties(object, properties) {
8294
- for (var property in properties) {
8295
- if (properties.hasOwnProperty(property) && property !== "__proto__") {
8296
- defineProperty(object, property, properties[property]);
8297
- }
8298
- }
8299
- return object;
8300
- };
8301
- }
8275
+ /**
8276
+ @class platform
8277
+ @namespace Ember
8278
+ @static
8279
+ */
8302
8280
 
8303
8281
  /**
8304
8282
  Identical to `Object.create()`. Implements if not available natively.
@@ -8386,23 +8364,51 @@ define("ember-metal/platform",
8386
8364
  create = Object.create;
8387
8365
  }
8388
8366
 
8389
- var hasPropertyAccessors = hasES5CompliantDefineProperty;
8390
- var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8367
+ __exports__["default"] = create;
8368
+ });
8369
+ define("ember-metal/platform/define_properties",
8370
+ ["ember-metal/platform/define_property","exports"],
8371
+ function(__dependency1__, __exports__) {
8372
+ "use strict";
8373
+ var defineProperty = __dependency1__.defineProperty;
8374
+
8375
+ var defineProperties = Object.defineProperties;
8376
+
8377
+ // ES5 15.2.3.7
8378
+ // http://es5.github.com/#x15.2.3.7
8379
+ if (!defineProperties) {
8380
+ defineProperties = function defineProperties(object, properties) {
8381
+ for (var property in properties) {
8382
+ if (properties.hasOwnProperty(property) && property !== "__proto__") {
8383
+ defineProperty(object, property, properties[property]);
8384
+ }
8385
+ }
8386
+ return object;
8387
+ };
8388
+
8389
+ Object.defineProperties = defineProperties;
8390
+ }
8391
+
8392
+ __exports__["default"] = defineProperties;
8393
+ });
8394
+ define("ember-metal/platform/define_property",
8395
+ ["exports"],
8396
+ function(__exports__) {
8397
+ "use strict";
8398
+ /*globals Node */
8391
8399
 
8392
8400
  /**
8393
8401
  @class platform
8394
8402
  @namespace Ember
8403
+ @static
8395
8404
  */
8396
8405
 
8397
8406
  /**
8398
- Platform specific methods and feature detectors needed by the framework.
8407
+ Set to true if the platform supports native getters and setters.
8399
8408
 
8400
- @class platform
8401
- @namespace Ember
8402
- @static
8409
+ @property hasPropertyAccessors
8410
+ @final
8403
8411
  */
8404
- // TODO remove this
8405
- var platform = {};
8406
8412
 
8407
8413
  /**
8408
8414
  Identical to `Object.defineProperty()`. Implements as much functionality
@@ -8414,21 +8420,90 @@ define("ember-metal/platform",
8414
8420
  @param {Object} desc descriptor hash
8415
8421
  @return {void}
8416
8422
  */
8417
- platform.defineProperty = defineProperty;
8423
+ var defineProperty = (function checkCompliance(defineProperty) {
8424
+ if (!defineProperty) return;
8425
+ try {
8426
+ var a = 5;
8427
+ var obj = {};
8428
+ defineProperty(obj, 'a', {
8429
+ configurable: true,
8430
+ enumerable: true,
8431
+ get: function () {
8432
+ return a;
8433
+ },
8434
+ set: function (v) {
8435
+ a = v;
8436
+ }
8437
+ });
8438
+ if (obj.a !== 5) return;
8439
+ obj.a = 10;
8440
+ if (a !== 10) return;
8418
8441
 
8419
- /**
8420
- Set to true if the platform supports native getters and setters.
8442
+ // check non-enumerability
8443
+ defineProperty(obj, 'a', {
8444
+ configurable: true,
8445
+ enumerable: false,
8446
+ writable: true,
8447
+ value: true
8448
+ });
8449
+ for (var key in obj) {
8450
+ if (key === 'a') return;
8451
+ }
8421
8452
 
8422
- @property hasPropertyAccessors
8423
- @final
8424
- */
8425
- platform.hasPropertyAccessors = hasPropertyAccessors;
8453
+ // Detects a bug in Android <3.2 where you cannot redefine a property using
8454
+ // Object.defineProperty once accessors have already been set.
8455
+ if (obj.a !== true) return;
8426
8456
 
8427
- __exports__.create = create;
8457
+ // defineProperty is compliant
8458
+ return defineProperty;
8459
+ } catch (e) {
8460
+ // IE8 defines Object.defineProperty but calling it on an Object throws
8461
+ return;
8462
+ }
8463
+ })(Object.defineProperty);
8464
+
8465
+ var hasES5CompliantDefineProperty = !!defineProperty;
8466
+
8467
+ if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
8468
+ // This is for Safari 5.0, which supports Object.defineProperty, but not
8469
+ // on DOM nodes.
8470
+ var canDefinePropertyOnDOM = (function() {
8471
+ try {
8472
+ defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
8473
+ return true;
8474
+ } catch(e) { }
8475
+
8476
+ return false;
8477
+ })();
8478
+
8479
+ if (!canDefinePropertyOnDOM) {
8480
+ defineProperty = function(obj, keyName, desc) {
8481
+ var isNode;
8482
+
8483
+ if (typeof Node === "object") {
8484
+ isNode = obj instanceof Node;
8485
+ } else {
8486
+ isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
8487
+ }
8488
+
8489
+ if (isNode) {
8490
+ // TODO: Should we have a warning here?
8491
+ return (obj[keyName] = desc.value);
8492
+ } else {
8493
+ return Object.defineProperty(obj, keyName, desc);
8494
+ }
8495
+ };
8496
+ }
8497
+ }
8498
+
8499
+ if (!hasES5CompliantDefineProperty) {
8500
+ defineProperty = function defineProperty(obj, keyName, desc) {
8501
+ if (!desc.get) { obj[keyName] = desc.value; }
8502
+ };
8503
+ }
8504
+
8505
+ __exports__.hasES5CompliantDefineProperty = hasES5CompliantDefineProperty;
8428
8506
  __exports__.defineProperty = defineProperty;
8429
- __exports__.hasPropertyAccessors = hasPropertyAccessors;
8430
- __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8431
- __exports__.platform = platform;
8432
8507
  });
8433
8508
  define("ember-metal/properties",
8434
8509
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/property_events","exports"],
@@ -8464,8 +8539,10 @@ define("ember-metal/properties",
8464
8539
  // DEFINING PROPERTIES API
8465
8540
  //
8466
8541
 
8467
- function MANDATORY_SETTER_FUNCTION(value) {
8468
- Ember.assert("You must use Ember.set() to access this property (of " + this + ")", false);
8542
+ function MANDATORY_SETTER_FUNCTION(name) {
8543
+ return function SETTER_FUNCTION(value) {
8544
+ Ember.assert("You must use Ember.set() to set the `" + name + "` property (of " + this + ") to `" + value + "`.", false);
8545
+ };
8469
8546
  }
8470
8547
 
8471
8548
  __exports__.MANDATORY_SETTER_FUNCTION = MANDATORY_SETTER_FUNCTION;function DEFAULT_GETTER_FUNCTION(name) {
@@ -8561,7 +8638,7 @@ define("ember-metal/properties",
8561
8638
  objectDefineProperty(obj, keyName, {
8562
8639
  configurable: true,
8563
8640
  enumerable: true,
8564
- set: MANDATORY_SETTER_FUNCTION,
8641
+ set: MANDATORY_SETTER_FUNCTION(keyName),
8565
8642
  get: DEFAULT_GETTER_FUNCTION(keyName)
8566
8643
  });
8567
8644
  } else {
@@ -9250,7 +9327,7 @@ define("ember-metal/run_loop",
9250
9327
  */
9251
9328
  __exports__["default"] = run;
9252
9329
  function run() {
9253
- return apply(backburner, backburner.run, arguments);
9330
+ return backburner.run.apply(backburner, arguments);
9254
9331
  }
9255
9332
 
9256
9333
  /**
@@ -9292,12 +9369,12 @@ define("ember-metal/run_loop",
9292
9369
  */
9293
9370
  run.join = function(target, method /* args */) {
9294
9371
  if (!run.currentRunLoop) {
9295
- return apply(Ember, run, arguments);
9372
+ return Ember.run.apply(Ember, arguments);
9296
9373
  }
9297
9374
 
9298
9375
  var args = slice.call(arguments);
9299
9376
  args.unshift('actions');
9300
- apply(run, run.schedule, args);
9377
+ run.schedule.apply(run, args);
9301
9378
  };
9302
9379
 
9303
9380
  /**
@@ -9344,7 +9421,7 @@ define("ember-metal/run_loop",
9344
9421
  run.bind = function(target, method /* args*/) {
9345
9422
  var args = slice.call(arguments);
9346
9423
  return function() {
9347
- return apply(run, run.join, args.concat(slice.call(arguments)));
9424
+ return run.join.apply(run, args.concat(slice.call(arguments)));
9348
9425
  };
9349
9426
  };
9350
9427
 
@@ -9438,7 +9515,7 @@ define("ember-metal/run_loop",
9438
9515
  */
9439
9516
  run.schedule = function(queue, target, method) {
9440
9517
  checkAutoRun();
9441
- apply(backburner, backburner.schedule, arguments);
9518
+ backburner.schedule.apply(backburner, arguments);
9442
9519
  };
9443
9520
 
9444
9521
  // Used by global test teardown
@@ -9498,8 +9575,8 @@ define("ember-metal/run_loop",
9498
9575
  @param {Number} wait Number of milliseconds to wait.
9499
9576
  @return {Object} Timer information for use in cancelling, see `run.cancel`.
9500
9577
  */
9501
- run.later = function(target, method) {
9502
- return apply(backburner, backburner.later, arguments);
9578
+ run.later = function(/*target, method*/) {
9579
+ return backburner.later.apply(backburner, arguments);
9503
9580
  };
9504
9581
 
9505
9582
  /**
@@ -9565,9 +9642,9 @@ define("ember-metal/run_loop",
9565
9642
  @param {Object} [args*] Optional arguments to pass to the timeout.
9566
9643
  @return {Object} Timer information for use in cancelling, see `run.cancel`.
9567
9644
  */
9568
- run.scheduleOnce = function(queue, target, method) {
9645
+ run.scheduleOnce = function(/*queue, target, method*/) {
9569
9646
  checkAutoRun();
9570
- return apply(backburner, backburner.scheduleOnce, arguments);
9647
+ return backburner.scheduleOnce.apply(backburner, arguments);
9571
9648
  };
9572
9649
 
9573
9650
  /**
@@ -9746,7 +9823,7 @@ define("ember-metal/run_loop",
9746
9823
  @return {Array} Timer information for use in cancelling, see `run.cancel`.
9747
9824
  */
9748
9825
  run.debounce = function() {
9749
- return apply(backburner, backburner.debounce, arguments);
9826
+ return backburner.debounce.apply(backburner, arguments);
9750
9827
  };
9751
9828
 
9752
9829
  /**
@@ -9785,7 +9862,7 @@ define("ember-metal/run_loop",
9785
9862
  @return {Array} Timer information for use in cancelling, see `run.cancel`.
9786
9863
  */
9787
9864
  run.throttle = function() {
9788
- return apply(backburner, backburner.throttle, arguments);
9865
+ return backburner.throttle.apply(backburner, arguments);
9789
9866
  };
9790
9867
 
9791
9868
  // Make sure it's not an autorun during testing
@@ -9835,22 +9912,23 @@ define("ember-metal/set_properties",
9835
9912
  ```
9836
9913
 
9837
9914
  @method setProperties
9838
- @param self
9839
- @param {Object} hash
9840
- @return self
9915
+ @param obj
9916
+ @param {Object} properties
9917
+ @return obj
9841
9918
  */
9842
- __exports__["default"] = function setProperties(self, hash) {
9919
+ __exports__["default"] = function setProperties(obj, properties) {
9920
+ if (!properties || typeof properties !== "object") { return obj; }
9843
9921
  changeProperties(function() {
9844
- var props = keys(hash);
9845
- var prop;
9922
+ var props = keys(properties);
9923
+ var propertyName;
9846
9924
 
9847
9925
  for (var i = 0, l = props.length; i < l; i++) {
9848
- prop = props[i];
9926
+ propertyName = props[i];
9849
9927
 
9850
- set(self, prop, hash[prop]);
9928
+ set(obj, propertyName, properties[propertyName]);
9851
9929
  }
9852
9930
  });
9853
- return self;
9931
+ return obj;
9854
9932
  }
9855
9933
  });
9856
9934
  define("ember-metal/utils",
@@ -10778,7 +10856,7 @@ define("ember-metal/watch_key",
10778
10856
  o_defineProperty(obj, keyName, {
10779
10857
  configurable: true,
10780
10858
  enumerable: obj.propertyIsEnumerable(keyName),
10781
- set: MANDATORY_SETTER_FUNCTION,
10859
+ set: MANDATORY_SETTER_FUNCTION(keyName),
10782
10860
  get: DEFAULT_GETTER_FUNCTION(keyName)
10783
10861
  });
10784
10862
  }
@@ -11766,6 +11844,7 @@ define("ember-runtime/computed/reduce_computed",
11766
11844
  this.setValue(removedItem.call(
11767
11845
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
11768
11846
  }
11847
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
11769
11848
  },
11770
11849
 
11771
11850
  dependentArrayDidChange: function (dependentArray, index, removedCount, addedCount) {
@@ -11797,7 +11876,7 @@ define("ember-runtime/computed/reduce_computed",
11797
11876
  this.setValue(addedItem.call(
11798
11877
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
11799
11878
  }, this);
11800
-
11879
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
11801
11880
  this.trackAdd(dependentKey, normalizedIndex, observerContexts);
11802
11881
  },
11803
11882
 
@@ -11841,6 +11920,7 @@ define("ember-runtime/computed/reduce_computed",
11841
11920
  }
11842
11921
 
11843
11922
  this.changedItems = {};
11923
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
11844
11924
  }
11845
11925
  };
11846
11926
 
@@ -11877,6 +11957,7 @@ define("ember-runtime/computed/reduce_computed",
11877
11957
  meta.setValue( callbacks.addedItem.call(
11878
11958
  this, meta.getValue(), item, new ChangeMeta(dependentArray, item, index, propertyName, cp, dependentArray.length), meta.sugarMeta));
11879
11959
  }, this);
11960
+ callbacks.flushedChanges.call(this, meta.getValue(), meta.sugarMeta);
11880
11961
  }
11881
11962
 
11882
11963
  function reset(cp, propertyName) {
@@ -12054,7 +12135,8 @@ define("ember-runtime/computed/reduce_computed",
12054
12135
 
12055
12136
  this.callbacks = {
12056
12137
  removedItem: options.removedItem || defaultCallback,
12057
- addedItem: options.addedItem || defaultCallback
12138
+ addedItem: options.addedItem || defaultCallback,
12139
+ flushedChanges: options.flushedChanges || defaultCallback
12058
12140
  };
12059
12141
  }
12060
12142
 
@@ -12347,8 +12429,8 @@ define("ember-runtime/computed/reduce_computed",
12347
12429
  __exports__.reduceComputed = reduceComputed;
12348
12430
  });
12349
12431
  define("ember-runtime/computed/reduce_computed_macros",
12350
- ["ember-metal/core","ember-metal/merge","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/run_loop","ember-metal/observer","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/system/object_proxy","ember-runtime/system/subarray","ember-metal/keys","ember-runtime/compare","exports"],
12351
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) {
12432
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/run_loop","ember-metal/observer","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/system/subarray","ember-metal/keys","ember-runtime/compare","exports"],
12433
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
12352
12434
  "use strict";
12353
12435
  /**
12354
12436
  @module ember
@@ -12357,21 +12439,19 @@ define("ember-runtime/computed/reduce_computed_macros",
12357
12439
 
12358
12440
  var Ember = __dependency1__["default"];
12359
12441
  // Ember.assert
12360
- var merge = __dependency2__["default"];
12361
- var get = __dependency3__.get;
12362
- var set = __dependency4__.set;
12363
- var isArray = __dependency5__.isArray;
12364
- var guidFor = __dependency5__.guidFor;
12365
- var EmberError = __dependency6__["default"];
12366
- var forEach = __dependency7__.forEach;
12367
- var run = __dependency8__["default"];
12368
- var addObserver = __dependency9__.addObserver;
12369
- var arrayComputed = __dependency10__.arrayComputed;
12370
- var reduceComputed = __dependency11__.reduceComputed;
12371
- var ObjectProxy = __dependency12__["default"];
12372
- var SubArray = __dependency13__["default"];
12373
- var keys = __dependency14__["default"];
12374
- var compare = __dependency15__["default"];
12442
+ var get = __dependency2__.get;
12443
+ var set = __dependency3__.set;
12444
+ var isArray = __dependency4__.isArray;
12445
+ var guidFor = __dependency4__.guidFor;
12446
+ var EmberError = __dependency5__["default"];
12447
+ var forEach = __dependency6__.forEach;
12448
+ var run = __dependency7__["default"];
12449
+ var addObserver = __dependency8__.addObserver;
12450
+ var arrayComputed = __dependency9__.arrayComputed;
12451
+ var reduceComputed = __dependency10__.reduceComputed;
12452
+ var SubArray = __dependency11__["default"];
12453
+ var keys = __dependency12__["default"];
12454
+ var compare = __dependency13__["default"];
12375
12455
 
12376
12456
  var a_slice = [].slice;
12377
12457
 
@@ -12951,8 +13031,8 @@ define("ember-runtime/computed/reduce_computed_macros",
12951
13031
  mid = low + Math.floor((high - low) / 2);
12952
13032
  midItem = array.objectAt(mid);
12953
13033
 
12954
- guidMid = _guidFor(midItem);
12955
- guidItem = _guidFor(item);
13034
+ guidMid = guidFor(midItem);
13035
+ guidItem = guidFor(item);
12956
13036
 
12957
13037
  if (guidMid === guidItem) {
12958
13038
  return mid;
@@ -12972,19 +13052,9 @@ define("ember-runtime/computed/reduce_computed_macros",
12972
13052
  }
12973
13053
 
12974
13054
  return mid;
12975
-
12976
- function _guidFor(item) {
12977
- if (SearchProxy.detectInstance(item)) {
12978
- return guidFor(get(item, 'content'));
12979
- }
12980
-
12981
- return guidFor(item);
12982
- }
12983
13055
  }
12984
13056
 
12985
13057
 
12986
- var SearchProxy = ObjectProxy.extend();
12987
-
12988
13058
  /**
12989
13059
  A computed property which returns a new array with all the
12990
13060
  properties from the first dependent array sorted based on a property
@@ -13053,17 +13123,53 @@ define("ember-runtime/computed/reduce_computed_macros",
13053
13123
  Ember.assert('Ember.computed.sort requires two arguments: an array key to sort and ' +
13054
13124
  'either a sort properties key or sort function', arguments.length === 2);
13055
13125
 
13056
- var initFn, sortPropertiesKey;
13057
-
13058
13126
  if (typeof sortDefinition === 'function') {
13059
- initFn = function (array, changeMeta, instanceMeta) {
13060
- instanceMeta.order = sortDefinition;
13061
- instanceMeta.binarySearch = binarySearch;
13062
- };
13127
+ return customSort(itemsKey, sortDefinition);
13063
13128
  } else {
13064
- sortPropertiesKey = sortDefinition;
13129
+ return propertySort(itemsKey, sortDefinition);
13130
+ }
13131
+ }
13065
13132
 
13066
- initFn = function (array, changeMeta, instanceMeta) {
13133
+ __exports__.sort = sort;function customSort(itemsKey, comparator) {
13134
+ return arrayComputed(itemsKey, {
13135
+ initialize: function (array, changeMeta, instanceMeta) {
13136
+ instanceMeta.order = comparator;
13137
+ instanceMeta.binarySearch = binarySearch;
13138
+ instanceMeta.waitingInsertions = [];
13139
+ instanceMeta.insertWaiting = function() {
13140
+ var index, item;
13141
+ var waiting = instanceMeta.waitingInsertions;
13142
+ instanceMeta.waitingInsertions = [];
13143
+ for (var i=0; i<waiting.length; i++) {
13144
+ item = waiting[i];
13145
+ index = instanceMeta.binarySearch(array, item);
13146
+ array.insertAt(index, item);
13147
+ }
13148
+ };
13149
+ instanceMeta.insertLater = function(item) {
13150
+ this.waitingInsertions.push(item);
13151
+ };
13152
+ },
13153
+
13154
+ addedItem: function (array, item, changeMeta, instanceMeta) {
13155
+ instanceMeta.insertLater(item);
13156
+ return array;
13157
+ },
13158
+
13159
+ removedItem: function (array, item, changeMeta, instanceMeta) {
13160
+ array.removeObject(item);
13161
+ return array;
13162
+ },
13163
+
13164
+ flushedChanges: function(array, instanceMeta) {
13165
+ instanceMeta.insertWaiting();
13166
+ }
13167
+ });
13168
+ }
13169
+
13170
+ function propertySort(itemsKey, sortPropertiesKey) {
13171
+ return arrayComputed(itemsKey, {
13172
+ initialize: function (array, changeMeta, instanceMeta) {
13067
13173
  function setupSortProperties() {
13068
13174
  var sortPropertyDefinitions = get(this, sortPropertiesKey);
13069
13175
  var sortProperties = instanceMeta.sortProperties = [];
@@ -13071,7 +13177,7 @@ define("ember-runtime/computed/reduce_computed_macros",
13071
13177
  var sortProperty, idx, asc;
13072
13178
 
13073
13179
  Ember.assert('Cannot sort: \'' + sortPropertiesKey + '\' is not an array.',
13074
- isArray(sortPropertyDefinitions));
13180
+ isArray(sortPropertyDefinitions));
13075
13181
 
13076
13182
  changeMeta.property.clearItemPropertyKeys(itemsKey);
13077
13183
 
@@ -13105,12 +13211,14 @@ define("ember-runtime/computed/reduce_computed_macros",
13105
13211
  setupSortProperties.call(this);
13106
13212
 
13107
13213
  instanceMeta.order = function (itemA, itemB) {
13108
- var isProxy = itemB instanceof SearchProxy;
13109
13214
  var sortProperty, result, asc;
13215
+ var keyA = this.keyFor(itemA);
13216
+ var keyB = this.keyFor(itemB);
13110
13217
 
13111
13218
  for (var i = 0; i < this.sortProperties.length; ++i) {
13112
13219
  sortProperty = this.sortProperties[i];
13113
- result = compare(get(itemA, sortProperty), isProxy ? itemB[sortProperty] : get(itemB, sortProperty));
13220
+
13221
+ result = compare(keyA[sortProperty], keyB[sortProperty]);
13114
13222
 
13115
13223
  if (result !== 0) {
13116
13224
  asc = this.sortPropertyAscending[sortProperty];
@@ -13122,39 +13230,46 @@ define("ember-runtime/computed/reduce_computed_macros",
13122
13230
  };
13123
13231
 
13124
13232
  instanceMeta.binarySearch = binarySearch;
13125
- };
13126
- }
13127
-
13128
- return arrayComputed(itemsKey, {
13129
- initialize: initFn,
13233
+ setupKeyCache(instanceMeta);
13234
+ },
13130
13235
 
13131
13236
  addedItem: function (array, item, changeMeta, instanceMeta) {
13132
13237
  var index = instanceMeta.binarySearch(array, item);
13133
13238
  array.insertAt(index, item);
13134
-
13135
13239
  return array;
13136
13240
  },
13137
13241
 
13138
13242
  removedItem: function (array, item, changeMeta, instanceMeta) {
13139
- var proxyProperties, index, searchItem;
13140
-
13141
- if (changeMeta.previousValues) {
13142
- proxyProperties = merge({ content: item }, changeMeta.previousValues);
13143
-
13144
- searchItem = SearchProxy.create(proxyProperties);
13145
- } else {
13146
- searchItem = item;
13147
- }
13148
-
13149
- index = instanceMeta.binarySearch(array, searchItem);
13243
+ var index = instanceMeta.binarySearch(array, item);
13150
13244
  array.removeAt(index);
13151
-
13245
+ instanceMeta.dropKeyFor(item);
13152
13246
  return array;
13153
13247
  }
13154
13248
  });
13155
13249
  }
13156
13250
 
13157
- __exports__.sort = sort;
13251
+ function setupKeyCache(instanceMeta) {
13252
+ instanceMeta.keyFor = function(item) {
13253
+ var guid = guidFor(item);
13254
+ if (this.keyCache[guid]) {
13255
+ return this.keyCache[guid];
13256
+ }
13257
+ var sortProperty;
13258
+ var key = {};
13259
+ for (var i = 0; i < this.sortProperties.length; ++i) {
13260
+ sortProperty = this.sortProperties[i];
13261
+ key[sortProperty] = get(item, sortProperty);
13262
+ }
13263
+ return this.keyCache[guid] = key;
13264
+ };
13265
+
13266
+ instanceMeta.dropKeyFor = function(item) {
13267
+ var guid = guidFor(item);
13268
+ this.keyCache[guid] = null;
13269
+ };
13270
+
13271
+ instanceMeta.keyCache = {};
13272
+ }
13158
13273
  });
13159
13274
  define("ember-runtime/controllers/array_controller",
13160
13275
  ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/enumerable_utils","ember-runtime/system/array_proxy","ember-runtime/mixins/sortable","ember-runtime/mixins/controller","ember-metal/computed","ember-metal/error","exports"],
@@ -18549,7 +18664,11 @@ define("ember-runtime/system/container",
18549
18664
  define("ember-runtime/system/core_object",
18550
18665
  ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/platform","ember-metal/watching","ember-metal/chains","ember-metal/events","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/error","ember-metal/keys","ember-runtime/mixins/action_handler","ember-metal/properties","ember-metal/binding","ember-metal/computed","ember-metal/run_loop","exports"],
18551
18666
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __exports__) {
18552
- "use strict";
18667
+ // Remove "use strict"; from transpiled module until
18668
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
18669
+ //
18670
+ // REMOVE_USE_STRICT: true
18671
+
18553
18672
  /**
18554
18673
  @module ember
18555
18674
  @submodule ember-runtime