ember-source 1.6.0.beta.4 → 1.6.0.beta.5

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.
@@ -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.6.0-beta.4
8
+ * @version 1.6.0-beta.5
9
9
  */
10
10
 
11
11
 
@@ -1681,6 +1681,7 @@ define("ember-metal/computed",
1681
1681
  todoList.get('done'); // true
1682
1682
  ```
1683
1683
 
1684
+ @since 1.6.0
1684
1685
  @method computed.empty
1685
1686
  @for Ember
1686
1687
  @param {String} dependentKey
@@ -2172,7 +2173,7 @@ define("ember-metal/computed",
2172
2173
  return computed(dependentKey, function(key, value) {
2173
2174
  if (arguments.length > 1) {
2174
2175
  set(this, dependentKey, value);
2175
- return value;
2176
+ return get(this, dependentKey);
2176
2177
  } else {
2177
2178
  return get(this, dependentKey);
2178
2179
  }
@@ -2325,7 +2326,7 @@ define("ember-metal/core",
2325
2326
 
2326
2327
  @class Ember
2327
2328
  @static
2328
- @version 1.6.0-beta.4
2329
+ @version 1.6.0-beta.5
2329
2330
  */
2330
2331
 
2331
2332
  if ('undefined' === typeof Ember) {
@@ -2352,10 +2353,10 @@ define("ember-metal/core",
2352
2353
  /**
2353
2354
  @property VERSION
2354
2355
  @type String
2355
- @default '1.6.0-beta.4'
2356
+ @default '1.6.0-beta.5'
2356
2357
  @static
2357
2358
  */
2358
- Ember.VERSION = '1.6.0-beta.4';
2359
+ Ember.VERSION = '1.6.0-beta.5';
2359
2360
 
2360
2361
  /**
2361
2362
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -2440,7 +2441,7 @@ define("ember-metal/core",
2440
2441
  //
2441
2442
 
2442
2443
  /**
2443
- Determines whether Ember should enhances some built-in object prototypes to
2444
+ Determines whether Ember should enhance some built-in object prototypes to
2444
2445
  provide a more friendly API. If enabled, a few methods will be added to
2445
2446
  `Function`, `String`, and `Array`. `Object.prototype` will not be enhanced,
2446
2447
  which is the one that causes most trouble for people.
@@ -3216,24 +3217,25 @@ define("ember-metal/events",
3216
3217
  __exports__.listenersUnion = listenersUnion;
3217
3218
  });
3218
3219
  define("ember-metal/expand_properties",
3219
- ["ember-metal/enumerable_utils","exports"],
3220
- function(__dependency1__, __exports__) {
3220
+ ["ember-metal/error","ember-metal/enumerable_utils","exports"],
3221
+ function(__dependency1__, __dependency2__, __exports__) {
3221
3222
  "use strict";
3222
- var EnumerableUtils = __dependency1__["default"];
3223
+ var EmberError = __dependency1__["default"];
3224
+ var EnumerableUtils = __dependency2__["default"];
3223
3225
 
3224
3226
  /**
3225
3227
  @module ember-metal
3226
3228
  */
3227
3229
 
3228
3230
  var forEach = EnumerableUtils.forEach,
3229
- BRACE_EXPANSION = /^((?:[^\.]*\.)*)\{(.*)\}$/;
3231
+ BRACE_EXPANSION = /^((?:[^\.]*\.)*)\{(.*)\}$/;
3230
3232
 
3231
3233
  /**
3232
3234
  Expands `pattern`, invoking `callback` for each expansion.
3233
3235
 
3234
3236
  The only pattern supported is brace-expansion, anything else will be passed
3235
3237
  once to `callback` directly. Brace expansion can only appear at the end of a
3236
- pattern, for example as the last item in a chain.
3238
+ pattern, for an example see the last call below.
3237
3239
 
3238
3240
  Example
3239
3241
  ```js
@@ -3254,12 +3256,17 @@ define("ember-metal/expand_properties",
3254
3256
  function expandProperties(pattern, callback) {
3255
3257
  var match, prefix, list;
3256
3258
 
3259
+ if (pattern.indexOf(' ') > -1) {
3260
+ throw new EmberError('Brace expanded properties cannot contain spaces, ' +
3261
+ 'e.g. `user.{firstName, lastName}` should be `user.{firstName,lastName}`');
3262
+ }
3263
+
3257
3264
  if (match = BRACE_EXPANSION.exec(pattern)) {
3258
3265
  prefix = match[1];
3259
3266
  list = match[2];
3260
3267
 
3261
3268
  forEach(list.split(','), function (suffix) {
3262
- callback(prefix + suffix);
3269
+ callback(prefix + suffix);
3263
3270
  });
3264
3271
  } else {
3265
3272
  callback(pattern);
@@ -6922,7 +6929,7 @@ define("ember-metal/run_loop",
6922
6929
 
6923
6930
  /**
6924
6931
  Ensure that the target method is never called more frequently than
6925
- the specified spacing period.
6932
+ the specified spacing period. The target method is called immediately.
6926
6933
 
6927
6934
  ```javascript
6928
6935
  var myFunc = function() { console.log(this.name + ' ran.'); };
@@ -6930,6 +6937,7 @@ define("ember-metal/run_loop",
6930
6937
 
6931
6938
  run.throttle(myContext, myFunc, 150);
6932
6939
  // myFunc is invoked with context myContext
6940
+ // console logs 'throttle ran.'
6933
6941
 
6934
6942
  // 50ms passes
6935
6943
  run.throttle(myContext, myFunc, 150);
@@ -6940,7 +6948,7 @@ define("ember-metal/run_loop",
6940
6948
  // 150ms passes
6941
6949
  run.throttle(myContext, myFunc, 150);
6942
6950
  // myFunc is invoked with context myContext
6943
- // console logs 'throttle ran.' twice, 250ms apart.
6951
+ // console logs 'throttle ran.'
6944
6952
  ```
6945
6953
 
6946
6954
  @method throttle
@@ -6950,6 +6958,8 @@ define("ember-metal/run_loop",
6950
6958
  then it will be looked up on the passed target.
6951
6959
  @param {Object} [args*] Optional arguments to pass to the timeout.
6952
6960
  @param {Number} spacing Number of milliseconds to space out requests.
6961
+ @param {Boolean} immediate Trigger the function on the leading instead
6962
+ of the trailing edge of the wait interval. Defaults to true.
6953
6963
  @return {Array} Timer information for use in cancelling, see `run.cancel`.
6954
6964
  */
6955
6965
  run.throttle = function() {
@@ -7400,7 +7410,7 @@ define("ember-metal/utils",
7400
7410
  */
7401
7411
  // ES6TODO: Move up to runtime? This is only use in ember-metal by concatenatedProperties
7402
7412
  function isArray(obj) {
7403
- var modulePath;
7413
+ var modulePath, type;
7404
7414
 
7405
7415
  if (typeof EmberArray === "undefined") {
7406
7416
  modulePath = 'ember-runtime/mixins/array';
@@ -7412,7 +7422,10 @@ define("ember-metal/utils",
7412
7422
  if (!obj || obj.setInterval) { return false; }
7413
7423
  if (Array.isArray && Array.isArray(obj)) { return true; }
7414
7424
  if (EmberArray && EmberArray.detect(obj)) { return true; }
7415
- if ((obj.length !== undefined) && 'object'=== typeOf(obj)) { return true; }
7425
+
7426
+ type = typeOf(obj);
7427
+ if ('array' === type) { return true; }
7428
+ if ((obj.length !== undefined) && 'object' === type) { return true; }
7416
7429
  return false;
7417
7430
  };
7418
7431
 
@@ -7817,18 +7830,20 @@ define("ember-metal/utils",
7817
7830
  __exports__.applyStr = applyStr;
7818
7831
  __exports__.apply = apply;
7819
7832
  });
7820
- define("backburner",
7821
- ["backburner/deferred_action_queues","exports"],
7822
- function(__dependency1__, __exports__) {
7833
+ define("backburner",
7834
+ ["backburner/utils","backburner/deferred_action_queues","exports"],
7835
+ function(__dependency1__, __dependency2__, __exports__) {
7823
7836
  "use strict";
7824
- var DeferredActionQueues = __dependency1__.DeferredActionQueues;
7837
+ var Utils = __dependency1__["default"];
7838
+ var DeferredActionQueues = __dependency2__.DeferredActionQueues;
7825
7839
 
7826
7840
  var slice = [].slice,
7827
7841
  pop = [].pop,
7828
- throttlers = [],
7829
- debouncees = [],
7842
+ each = Utils.each,
7843
+ isString = Utils.isString,
7844
+ isFunction = Utils.isFunction,
7845
+ isNumber = Utils.isNumber,
7830
7846
  timers = [],
7831
- autorun, laterTimer, laterTimerExpiresAt,
7832
7847
  global = this,
7833
7848
  NUMBER = /\d+/;
7834
7849
 
@@ -7842,7 +7857,7 @@ define("backburner",
7842
7857
  })();
7843
7858
 
7844
7859
  function isCoercableNumber(number) {
7845
- return typeof number === 'number' || NUMBER.test(number);
7860
+ return isNumber(number) || NUMBER.test(number);
7846
7861
  }
7847
7862
 
7848
7863
  function Backburner(queueNames, options) {
@@ -7852,6 +7867,8 @@ define("backburner",
7852
7867
  this.options.defaultQueue = queueNames[0];
7853
7868
  }
7854
7869
  this.instanceStack = [];
7870
+ this._debouncees = [];
7871
+ this._throttlers = [];
7855
7872
  }
7856
7873
 
7857
7874
  Backburner.prototype = {
@@ -7905,8 +7922,7 @@ define("backburner",
7905
7922
  },
7906
7923
 
7907
7924
  run: function(target, method /*, args */) {
7908
- var options = this.options,
7909
- ret, length = arguments.length;
7925
+ var onError = getOnError(this.options);
7910
7926
 
7911
7927
  this.begin();
7912
7928
 
@@ -7915,11 +7931,10 @@ define("backburner",
7915
7931
  target = null;
7916
7932
  }
7917
7933
 
7918
- if (typeof method === 'string') {
7934
+ if (isString(method)) {
7919
7935
  method = target[method];
7920
7936
  }
7921
7937
 
7922
- var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
7923
7938
  var args = slice.call(arguments, 2);
7924
7939
 
7925
7940
  // guard against Safari 6's double-finally bug
@@ -7954,7 +7969,7 @@ define("backburner",
7954
7969
  target = null;
7955
7970
  }
7956
7971
 
7957
- if (typeof method === 'string') {
7972
+ if (isString(method)) {
7958
7973
  method = target[method];
7959
7974
  }
7960
7975
 
@@ -7970,7 +7985,7 @@ define("backburner",
7970
7985
  target = null;
7971
7986
  }
7972
7987
 
7973
- if (typeof method === 'string') {
7988
+ if (isString(method)) {
7974
7989
  method = target[method];
7975
7990
  }
7976
7991
 
@@ -7981,12 +7996,10 @@ define("backburner",
7981
7996
  },
7982
7997
 
7983
7998
  setTimeout: function() {
7984
- var args = slice.call(arguments);
7985
- var length = args.length;
7986
- var method, wait, target;
7987
- var self = this;
7988
- var methodOrTarget, methodOrWait, methodOrArgs;
7989
- var options = this.options;
7999
+ var args = slice.call(arguments),
8000
+ length = args.length,
8001
+ method, wait, target,
8002
+ methodOrTarget, methodOrWait, methodOrArgs;
7990
8003
 
7991
8004
  if (length === 0) {
7992
8005
  return;
@@ -7997,7 +8010,7 @@ define("backburner",
7997
8010
  methodOrTarget = args[0];
7998
8011
  methodOrWait = args[1];
7999
8012
 
8000
- if (typeof methodOrWait === 'function' || typeof methodOrTarget[methodOrWait] === 'function') {
8013
+ if (isFunction(methodOrWait) || isFunction(methodOrTarget[methodOrWait])) {
8001
8014
  target = args.shift();
8002
8015
  method = args.shift();
8003
8016
  wait = 0;
@@ -8020,9 +8033,9 @@ define("backburner",
8020
8033
  methodOrTarget = args[0];
8021
8034
  methodOrArgs = args[1];
8022
8035
 
8023
- if (typeof methodOrArgs === 'function' || (typeof methodOrArgs === 'string' &&
8024
- methodOrTarget !== null &&
8025
- methodOrArgs in methodOrTarget)) {
8036
+ if (isFunction(methodOrArgs) || (isString(methodOrArgs) &&
8037
+ methodOrTarget !== null &&
8038
+ methodOrArgs in methodOrTarget)) {
8026
8039
  target = args.shift();
8027
8040
  method = args.shift();
8028
8041
  } else {
@@ -8032,11 +8045,11 @@ define("backburner",
8032
8045
 
8033
8046
  var executeAt = (+new Date()) + parseInt(wait, 10);
8034
8047
 
8035
- if (typeof method === 'string') {
8048
+ if (isString(method)) {
8036
8049
  method = target[method];
8037
8050
  }
8038
8051
 
8039
- var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
8052
+ var onError = getOnError(this.options);
8040
8053
 
8041
8054
  function fn() {
8042
8055
  if (onError) {
@@ -8055,7 +8068,7 @@ define("backburner",
8055
8068
 
8056
8069
  timers.splice(i, 0, executeAt, fn);
8057
8070
 
8058
- updateLaterTimer(self, executeAt, wait);
8071
+ updateLaterTimer(this, executeAt, wait);
8059
8072
 
8060
8073
  return fn;
8061
8074
  },
@@ -8069,7 +8082,7 @@ define("backburner",
8069
8082
  index,
8070
8083
  timer;
8071
8084
 
8072
- if (typeof immediate === "number" || typeof immediate === "string") {
8085
+ if (isNumber(immediate) || isString(immediate)) {
8073
8086
  wait = immediate;
8074
8087
  immediate = true;
8075
8088
  } else {
@@ -8078,15 +8091,17 @@ define("backburner",
8078
8091
 
8079
8092
  wait = parseInt(wait, 10);
8080
8093
 
8081
- index = findThrottler(target, method);
8082
- if (index > -1) { return throttlers[index]; } // throttled
8094
+ index = findThrottler(target, method, this._throttlers);
8095
+ if (index > -1) { return this._throttlers[index]; } // throttled
8083
8096
 
8084
8097
  timer = global.setTimeout(function() {
8085
8098
  if (!immediate) {
8086
8099
  self.run.apply(self, args);
8087
8100
  }
8088
- var index = findThrottler(target, method);
8089
- if (index > -1) { throttlers.splice(index, 1); }
8101
+ var index = findThrottler(target, method, self._throttlers);
8102
+ if (index > -1) {
8103
+ self._throttlers.splice(index, 1);
8104
+ }
8090
8105
  }, wait);
8091
8106
 
8092
8107
  if (immediate) {
@@ -8095,7 +8110,7 @@ define("backburner",
8095
8110
 
8096
8111
  throttler = [target, method, timer];
8097
8112
 
8098
- throttlers.push(throttler);
8113
+ this._throttlers.push(throttler);
8099
8114
 
8100
8115
  return throttler;
8101
8116
  },
@@ -8109,7 +8124,7 @@ define("backburner",
8109
8124
  debouncee,
8110
8125
  timer;
8111
8126
 
8112
- if (typeof immediate === "number" || typeof immediate === "string") {
8127
+ if (isNumber(immediate) || isString(immediate)) {
8113
8128
  wait = immediate;
8114
8129
  immediate = false;
8115
8130
  } else {
@@ -8118,11 +8133,11 @@ define("backburner",
8118
8133
 
8119
8134
  wait = parseInt(wait, 10);
8120
8135
  // Remove debouncee
8121
- index = findDebouncee(target, method);
8136
+ index = findDebouncee(target, method, this._debouncees);
8122
8137
 
8123
8138
  if (index > -1) {
8124
- debouncee = debouncees[index];
8125
- debouncees.splice(index, 1);
8139
+ debouncee = this._debouncees[index];
8140
+ this._debouncees.splice(index, 1);
8126
8141
  clearTimeout(debouncee[2]);
8127
8142
  }
8128
8143
 
@@ -8130,9 +8145,9 @@ define("backburner",
8130
8145
  if (!immediate) {
8131
8146
  self.run.apply(self, args);
8132
8147
  }
8133
- var index = findDebouncee(target, method);
8148
+ var index = findDebouncee(target, method, self._debouncees);
8134
8149
  if (index > -1) {
8135
- debouncees.splice(index, 1);
8150
+ self._debouncees.splice(index, 1);
8136
8151
  }
8137
8152
  }, wait);
8138
8153
 
@@ -8142,38 +8157,36 @@ define("backburner",
8142
8157
 
8143
8158
  debouncee = [target, method, timer];
8144
8159
 
8145
- debouncees.push(debouncee);
8160
+ self._debouncees.push(debouncee);
8146
8161
 
8147
8162
  return debouncee;
8148
8163
  },
8149
8164
 
8150
8165
  cancelTimers: function() {
8151
- var i, len;
8166
+ var clearItems = function(item) {
8167
+ clearTimeout(item[2]);
8168
+ };
8152
8169
 
8153
- for (i = 0, len = throttlers.length; i < len; i++) {
8154
- clearTimeout(throttlers[i][2]);
8155
- }
8156
- throttlers = [];
8170
+ each(this._throttlers, clearItems);
8171
+ this._throttlers = [];
8157
8172
 
8158
- for (i = 0, len = debouncees.length; i < len; i++) {
8159
- clearTimeout(debouncees[i][2]);
8160
- }
8161
- debouncees = [];
8173
+ each(this._debouncees, clearItems);
8174
+ this._debouncees = [];
8162
8175
 
8163
- if (laterTimer) {
8164
- clearTimeout(laterTimer);
8165
- laterTimer = null;
8176
+ if (this._laterTimer) {
8177
+ clearTimeout(this._laterTimer);
8178
+ this._laterTimer = null;
8166
8179
  }
8167
8180
  timers = [];
8168
8181
 
8169
- if (autorun) {
8170
- clearTimeout(autorun);
8171
- autorun = null;
8182
+ if (this._autorun) {
8183
+ clearTimeout(this._autorun);
8184
+ this._autorun = null;
8172
8185
  }
8173
8186
  },
8174
8187
 
8175
8188
  hasTimers: function() {
8176
- return !!timers.length || !!debouncees.length || !!throttlers.length || autorun;
8189
+ return !!timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun;
8177
8190
  },
8178
8191
 
8179
8192
  cancel: function(timer) {
@@ -8189,8 +8202,8 @@ define("backburner",
8189
8202
  }
8190
8203
  }
8191
8204
  } else if (Object.prototype.toString.call(timer) === "[object Array]"){ // we're cancelling a throttle or debounce
8192
- return this._cancelItem(findThrottler, throttlers, timer) ||
8193
- this._cancelItem(findDebouncee, debouncees, timer);
8205
+ return this._cancelItem(findThrottler, this._throttlers, timer) ||
8206
+ this._cancelItem(findDebouncee, this._debouncees, timer);
8194
8207
  } else {
8195
8208
  return; // timer was null or not a timer
8196
8209
  }
@@ -8202,7 +8215,7 @@ define("backburner",
8202
8215
 
8203
8216
  if (timer.length < 3) { return false; }
8204
8217
 
8205
- index = findMethod(timer[0], timer[1]);
8218
+ index = findMethod(timer[0], timer[1], array);
8206
8219
 
8207
8220
  if(index > -1) {
8208
8221
 
@@ -8225,44 +8238,43 @@ define("backburner",
8225
8238
 
8226
8239
  if (needsIETryCatchFix) {
8227
8240
  var originalRun = Backburner.prototype.run;
8228
- Backburner.prototype.run = function() {
8229
- try {
8230
- originalRun.apply(this, arguments);
8231
- } catch (e) {
8232
- throw e;
8233
- }
8234
- };
8241
+ Backburner.prototype.run = wrapInTryCatch(originalRun);
8235
8242
 
8236
8243
  var originalEnd = Backburner.prototype.end;
8237
- Backburner.prototype.end = function() {
8244
+ Backburner.prototype.end = wrapInTryCatch(originalEnd);
8245
+ }
8246
+
8247
+ function wrapInTryCatch(func) {
8248
+ return function () {
8238
8249
  try {
8239
- originalEnd.apply(this, arguments);
8250
+ return func.apply(this, arguments);
8240
8251
  } catch (e) {
8241
8252
  throw e;
8242
8253
  }
8243
8254
  };
8244
8255
  }
8245
8256
 
8257
+ function getOnError(options) {
8258
+ return options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
8259
+ }
8260
+
8246
8261
 
8247
8262
  function createAutorun(backburner) {
8248
8263
  backburner.begin();
8249
- autorun = global.setTimeout(function() {
8250
- autorun = null;
8264
+ backburner._autorun = global.setTimeout(function() {
8265
+ backburner._autorun = null;
8251
8266
  backburner.end();
8252
8267
  });
8253
8268
  }
8254
8269
 
8255
8270
  function updateLaterTimer(self, executeAt, wait) {
8256
- if (!laterTimer || executeAt < laterTimerExpiresAt) {
8257
- if (laterTimer) {
8258
- clearTimeout(laterTimer);
8259
- }
8260
- laterTimer = global.setTimeout(function() {
8261
- laterTimer = null;
8262
- laterTimerExpiresAt = null;
8271
+ if (!self._laterTimer || executeAt < self._laterTimerExpiresAt) {
8272
+ self._laterTimer = global.setTimeout(function() {
8273
+ self._laterTimer = null;
8274
+ self._laterTimerExpiresAt = null;
8263
8275
  executeTimers(self);
8264
8276
  }, wait);
8265
- laterTimerExpiresAt = executeAt;
8277
+ self._laterTimerExpiresAt = executeAt;
8266
8278
  }
8267
8279
  }
8268
8280
 
@@ -8285,28 +8297,21 @@ define("backburner",
8285
8297
  }
8286
8298
  }
8287
8299
 
8288
- function findDebouncee(target, method) {
8289
- var debouncee,
8290
- index = -1;
8291
-
8292
- for (var i = 0, l = debouncees.length; i < l; i++) {
8293
- debouncee = debouncees[i];
8294
- if (debouncee[0] === target && debouncee[1] === method) {
8295
- index = i;
8296
- break;
8297
- }
8298
- }
8300
+ function findDebouncee(target, method, debouncees) {
8301
+ return findItem(target, method, debouncees);
8302
+ }
8299
8303
 
8300
- return index;
8304
+ function findThrottler(target, method, throttlers) {
8305
+ return findItem(target, method, throttlers);
8301
8306
  }
8302
8307
 
8303
- function findThrottler(target, method) {
8304
- var throttler,
8308
+ function findItem(target, method, collection) {
8309
+ var item,
8305
8310
  index = -1;
8306
8311
 
8307
- for (var i = 0, l = throttlers.length; i < l; i++) {
8308
- throttler = throttlers[i];
8309
- if (throttler[0] === target && throttler[1] === method) {
8312
+ for (var i = 0, l = collection.length; i < l; i++) {
8313
+ item = collection[i];
8314
+ if (item[0] === target && item[1] === method) {
8310
8315
  index = i;
8311
8316
  break;
8312
8317
  }
@@ -8341,11 +8346,15 @@ define("backburner",
8341
8346
 
8342
8347
  __exports__.Backburner = Backburner;
8343
8348
  });
8344
- define("backburner/deferred_action_queues",
8345
- ["backburner/queue","exports"],
8346
- function(__dependency1__, __exports__) {
8349
+ define("backburner/deferred_action_queues",
8350
+ ["backburner/utils","backburner/queue","exports"],
8351
+ function(__dependency1__, __dependency2__, __exports__) {
8347
8352
  "use strict";
8348
- var Queue = __dependency1__.Queue;
8353
+ var Utils = __dependency1__["default"];
8354
+ var Queue = __dependency2__.Queue;
8355
+
8356
+ var each = Utils.each,
8357
+ isString = Utils.isString;
8349
8358
 
8350
8359
  function DeferredActionQueues(queueNames, options) {
8351
8360
  var queues = this.queues = {};
@@ -8353,11 +8362,9 @@ define("backburner/deferred_action_queues",
8353
8362
 
8354
8363
  this.options = options;
8355
8364
 
8356
- var queueName;
8357
- for (var i = 0, l = queueNames.length; i < l; i++) {
8358
- queueName = queueNames[i];
8359
- queues[queueName] = new Queue(this, queueName, this.options);
8360
- }
8365
+ each(queueNames, function(queueName) {
8366
+ queues[queueName] = new Queue(this, queueName, options);
8367
+ });
8361
8368
  }
8362
8369
 
8363
8370
  DeferredActionQueues.prototype = {
@@ -8428,7 +8435,7 @@ define("backburner/deferred_action_queues",
8428
8435
  args = queueItems[queueIndex+2];
8429
8436
  stack = queueItems[queueIndex+3]; // Debugging assistance
8430
8437
 
8431
- if (typeof method === 'string') { method = target[method]; }
8438
+ if (isString(method)) { method = target[method]; }
8432
8439
 
8433
8440
  // method could have been nullified / canceled during flush
8434
8441
  if (method) {
@@ -8465,7 +8472,7 @@ define("backburner/deferred_action_queues",
8465
8472
 
8466
8473
  __exports__.DeferredActionQueues = DeferredActionQueues;
8467
8474
  });
8468
- define("backburner/queue",
8475
+ define("backburner/queue",
8469
8476
  ["exports"],
8470
8477
  function(__exports__) {
8471
8478
  "use strict";
@@ -8504,7 +8511,7 @@ define("backburner/queue",
8504
8511
  }
8505
8512
  }
8506
8513
 
8507
- this._queue.push(target, method, args, stack);
8514
+ queue.push(target, method, args, stack);
8508
8515
  return {queue: this, target: target, method: method};
8509
8516
  },
8510
8517
 
@@ -8594,6 +8601,31 @@ define("backburner/queue",
8594
8601
 
8595
8602
  __exports__.Queue = Queue;
8596
8603
  });
8604
+ define("backburner/utils",
8605
+ ["exports"],
8606
+ function(__exports__) {
8607
+ "use strict";
8608
+ __exports__["default"] = {
8609
+ each: function(collection, callback) {
8610
+ for (var i = 0; i < collection.length; i++) {
8611
+ callback(collection[i]);
8612
+ }
8613
+ },
8614
+
8615
+ isString: function(suspect) {
8616
+ return typeof suspect === 'string';
8617
+ },
8618
+
8619
+ isFunction: function(suspect) {
8620
+ return typeof suspect === 'function';
8621
+ },
8622
+
8623
+ isNumber: function(suspect) {
8624
+ return typeof suspect === 'number';
8625
+ }
8626
+ };
8627
+ });
8628
+
8597
8629
  define("ember-metal/watch_key",
8598
8630
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],
8599
8631
  function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
@@ -14133,7 +14165,7 @@ define("ember-runtime/controllers/array_controller",
14133
14165
  init: function() {
14134
14166
  this._super();
14135
14167
 
14136
- this.set('_subControllers', Ember.A());
14168
+ this.set('_subControllers', [ ]);
14137
14169
  },
14138
14170
 
14139
14171
  content: computed(function () {
@@ -14183,13 +14215,23 @@ define("ember-runtime/controllers/array_controller",
14183
14215
 
14184
14216
  _resetSubControllers: function() {
14185
14217
  var subControllers = get(this, '_subControllers');
14186
- if (subControllers) {
14187
- forEach(subControllers, function(subController) {
14188
- if (subController) { subController.destroy(); }
14189
- });
14218
+ var controller;
14219
+
14220
+ if (subControllers.length) {
14221
+ for (var i = 0, length = subControllers.length; length > i; i++) {
14222
+ controller = subControllers[i];
14223
+ if (controller) {
14224
+ controller.destroy();
14225
+ }
14226
+ }
14227
+
14228
+ subControllers.length = 0;
14190
14229
  }
14230
+ },
14191
14231
 
14192
- this.set('_subControllers', Ember.A());
14232
+ willDestroy: function() {
14233
+ this._resetSubControllers();
14234
+ this._super();
14193
14235
  }
14194
14236
  });
14195
14237
 
@@ -17649,7 +17691,9 @@ define("ember-runtime/mixins/mutable_enumerable",
17649
17691
  */
17650
17692
  removeObjects: function(objects) {
17651
17693
  beginPropertyChanges(this);
17652
- forEach(objects, function(obj) { this.removeObject(obj); }, this);
17694
+ for (var i = objects.length - 1; i >= 0; i--) {
17695
+ this.removeObject(objects[i]);
17696
+ }
17653
17697
  endPropertyChanges(this);
17654
17698
  return this;
17655
17699
  }