ember-source 1.8.0.beta.5 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

checksums.yaml 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