ember-source 1.8.0.beta.3 → 1.8.0.beta.4

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.8.0-beta.3
8
+ * @version 1.8.0-beta.4
9
9
  */
10
10
 
11
11
  (function() {
@@ -82,6 +82,7 @@ define("backburner",
82
82
  var isNumber = __dependency1__.isNumber;
83
83
  var isCoercableNumber = __dependency1__.isCoercableNumber;
84
84
  var wrapInTryCatch = __dependency1__.wrapInTryCatch;
85
+ var now = __dependency1__.now;
85
86
 
86
87
  var needsIETryCatchFix = __dependency2__.needsIETryCatchFix;
87
88
 
@@ -251,9 +252,11 @@ define("backburner",
251
252
  setTimeout: function() {
252
253
  var l = arguments.length;
253
254
  var args = new Array(l);
255
+
254
256
  for (var x = 0; x < l; x++) {
255
257
  args[x] = arguments[x];
256
258
  }
259
+
257
260
  var length = args.length,
258
261
  method, wait, target,
259
262
  methodOrTarget, methodOrWait, methodOrArgs;
@@ -300,7 +303,7 @@ define("backburner",
300
303
  }
301
304
  }
302
305
 
303
- var executeAt = (+new Date()) + parseInt(wait, 10);
306
+ var executeAt = now() + parseInt(wait, 10);
304
307
 
305
308
  if (isString(method)) {
306
309
  method = target[method];
@@ -331,7 +334,7 @@ define("backburner",
331
334
  },
332
335
 
333
336
  throttle: function(target, method /* , args, wait, [immediate] */) {
334
- var self = this;
337
+ var backburner = this;
335
338
  var args = arguments;
336
339
  var immediate = pop.call(args);
337
340
  var wait, throttler, index, timer;
@@ -350,16 +353,16 @@ define("backburner",
350
353
 
351
354
  timer = global.setTimeout(function() {
352
355
  if (!immediate) {
353
- self.run.apply(self, args);
356
+ backburner.run.apply(backburner, args);
354
357
  }
355
- var index = findThrottler(target, method, self._throttlers);
358
+ var index = findThrottler(target, method, backburner._throttlers);
356
359
  if (index > -1) {
357
- self._throttlers.splice(index, 1);
360
+ backburner._throttlers.splice(index, 1);
358
361
  }
359
362
  }, wait);
360
363
 
361
364
  if (immediate) {
362
- self.run.apply(self, args);
365
+ this.run.apply(this, args);
363
366
  }
364
367
 
365
368
  throttler = [target, method, timer];
@@ -370,7 +373,7 @@ define("backburner",
370
373
  },
371
374
 
372
375
  debounce: function(target, method /* , args, wait, [immediate] */) {
373
- var self = this;
376
+ var backburner = this;
374
377
  var args = arguments;
375
378
  var immediate = pop.call(args);
376
379
  var wait, index, debouncee, timer;
@@ -394,16 +397,16 @@ define("backburner",
394
397
 
395
398
  timer = global.setTimeout(function() {
396
399
  if (!immediate) {
397
- self.run.apply(self, args);
400
+ backburner.run.apply(backburner, args);
398
401
  }
399
- var index = findDebouncee(target, method, self._debouncees);
402
+ var index = findDebouncee(target, method, backburner._debouncees);
400
403
  if (index > -1) {
401
- self._debouncees.splice(index, 1);
404
+ backburner._debouncees.splice(index, 1);
402
405
  }
403
406
  }, wait);
404
407
 
405
408
  if (immediate && index === -1) {
406
- self.run.apply(self, args);
409
+ backburner.run.apply(backburner, args);
407
410
  }
408
411
 
409
412
  debouncee = [
@@ -412,7 +415,7 @@ define("backburner",
412
415
  timer
413
416
  ];
414
417
 
415
- self._debouncees.push(debouncee);
418
+ backburner._debouncees.push(debouncee);
416
419
 
417
420
  return debouncee;
418
421
  },
@@ -459,7 +462,7 @@ define("backburner",
459
462
  this._laterTimer = null;
460
463
  }
461
464
  if (this._timers.length > 0) { // Update to next available timer when available
462
- updateLaterTimer(this, this._timers[0], this._timers[0] - (+new Date()));
465
+ updateLaterTimer(this, this._timers[0], this._timers[0] - now());
463
466
  }
464
467
  }
465
468
  return true;
@@ -519,48 +522,48 @@ define("backburner",
519
522
  });
520
523
  }
521
524
 
522
- function updateLaterTimer(self, executeAt, wait) {
523
- var now = (+new Date());
524
- if (!self._laterTimer || executeAt < self._laterTimerExpiresAt || self._laterTimerExpiresAt < now) {
525
+ function updateLaterTimer(backburner, executeAt, wait) {
526
+ var n = now();
527
+ if (!backburner._laterTimer || executeAt < backburner._laterTimerExpiresAt || backburner._laterTimerExpiresAt < n) {
525
528
 
526
- if (self._laterTimer) {
529
+ if (backburner._laterTimer) {
527
530
  // Clear when:
528
531
  // - Already expired
529
532
  // - New timer is earlier
530
- clearTimeout(self._laterTimer);
533
+ clearTimeout(backburner._laterTimer);
531
534
 
532
- if (self._laterTimerExpiresAt < now) { // If timer was never triggered
535
+ if (backburner._laterTimerExpiresAt < n) { // If timer was never triggered
533
536
  // Calculate the left-over wait-time
534
- wait = Math.max(0, executeAt - now);
537
+ wait = Math.max(0, executeAt - n);
535
538
  }
536
539
  }
537
540
 
538
- self._laterTimer = global.setTimeout(function() {
539
- self._laterTimer = null;
540
- self._laterTimerExpiresAt = null;
541
- executeTimers(self);
541
+ backburner._laterTimer = global.setTimeout(function() {
542
+ backburner._laterTimer = null;
543
+ backburner._laterTimerExpiresAt = null;
544
+ executeTimers(backburner);
542
545
  }, wait);
543
546
 
544
- self._laterTimerExpiresAt = now + wait;
547
+ backburner._laterTimerExpiresAt = n + wait;
545
548
  }
546
549
  }
547
550
 
548
- function executeTimers(self) {
549
- var now = +new Date();
551
+ function executeTimers(backburner) {
552
+ var n = now();
550
553
  var fns, i, l;
551
554
 
552
- self.run(function() {
553
- i = searchTimer(now, self._timers);
555
+ backburner.run(function() {
556
+ i = searchTimer(n, backburner._timers);
554
557
 
555
- fns = self._timers.splice(0, i);
558
+ fns = backburner._timers.splice(0, i);
556
559
 
557
560
  for (i = 1, l = fns.length; i < l; i += 2) {
558
- self.schedule(self.options.defaultQueue, null, fns[i]);
561
+ backburner.schedule(backburner.options.defaultQueue, null, fns[i]);
559
562
  }
560
563
  });
561
564
 
562
- if (self._timers.length) {
563
- updateLaterTimer(self, self._timers[0], self._timers[0] - now);
565
+ if (backburner._timers.length) {
566
+ updateLaterTimer(backburner, backburner._timers[0], backburner._timers[0] - n);
564
567
  }
565
568
  }
566
569
 
@@ -713,7 +716,9 @@ define("backburner/deferred-action-queues",
713
716
  var queueIndex = 0;
714
717
  var numberOfQueueItems = queueItems.length;
715
718
 
716
- if (numberOfQueueItems && before) { before(); }
719
+ if (numberOfQueueItems && before) {
720
+ before();
721
+ }
717
722
 
718
723
  while (queueIndex < numberOfQueueItems) {
719
724
  target = queueItems[queueIndex];
@@ -721,10 +726,26 @@ define("backburner/deferred-action-queues",
721
726
  args = queueItems[queueIndex+2];
722
727
  errorRecordedForStack = queueItems[queueIndex+3]; // Debugging assistance
723
728
 
724
- if (isString(method)) { method = target[method]; }
729
+ //
730
+
731
+ if (isString(method)) {
732
+ method = target[method];
733
+ }
725
734
 
726
735
  // method could have been nullified / canceled during flush
727
736
  if (method) {
737
+ //
738
+ // ** Attention intrepid developer **
739
+ //
740
+ // To find out the stack of this task when it was scheduled onto
741
+ // the run loop, add the following to your app.js:
742
+ //
743
+ // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
744
+ //
745
+ // Once that is in place, when you are at a breakpoint and navigate
746
+ // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
747
+ // which will be the captured stack when this job was scheduled.
748
+ //
728
749
  invoke(target, method, args, onError, errorRecordedForStack);
729
750
  }
730
751
 
@@ -732,7 +753,9 @@ define("backburner/deferred-action-queues",
732
753
  }
733
754
 
734
755
  queue._queueBeingFlushed = null;
735
- if (numberOfQueueItems && after) { after(); }
756
+ if (numberOfQueueItems && after) {
757
+ after();
758
+ }
736
759
 
737
760
  if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
738
761
  queueNameIndex = priorQueueNameIndex;
@@ -927,12 +950,28 @@ define("backburner/queue",
927
950
 
928
951
  cancel: function(actionToCancel) {
929
952
  var queue = this._queue, currentTarget, currentMethod, i, l;
953
+ var target = actionToCancel.target;
954
+ var method = actionToCancel.method;
955
+ var GUID_KEY = this.globalOptions.GUID_KEY;
956
+
957
+ if (GUID_KEY && this.targetQueues && target) {
958
+ var targetQueue = this.targetQueues[target[GUID_KEY]];
959
+
960
+ if (targetQueue) {
961
+ for (i = 0, l = targetQueue.length; i < l; i++) {
962
+ if (targetQueue[i] === method) {
963
+ targetQueue.splice(i, 1);
964
+ }
965
+ }
966
+ }
967
+ }
930
968
 
931
969
  for (i = 0, l = queue.length; i < l; i += 4) {
932
970
  currentTarget = queue[i];
933
971
  currentMethod = queue[i+1];
934
972
 
935
- if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
973
+ if (currentTarget === target &&
974
+ currentMethod === method) {
936
975
  queue.splice(i, 4);
937
976
  return true;
938
977
  }
@@ -948,7 +987,8 @@ define("backburner/queue",
948
987
  currentTarget = queue[i];
949
988
  currentMethod = queue[i+1];
950
989
 
951
- if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
990
+ if (currentTarget === target &&
991
+ currentMethod === method) {
952
992
  // don't mess with array during flush
953
993
  // just nullify the method
954
994
  queue[i+1] = null;
@@ -972,7 +1012,11 @@ define("backburner/utils",
972
1012
  }
973
1013
  }
974
1014
 
975
- __exports__.each = each;function isString(suspect) {
1015
+ __exports__.each = each;// Date.now is not available in browsers < IE9
1016
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
1017
+ var now = Date.now || function() { return new Date().getTime(); };
1018
+ __exports__.now = now;
1019
+ function isString(suspect) {
976
1020
  return typeof suspect === 'string';
977
1021
  }
978
1022
 
@@ -8513,6 +8557,8 @@ define("ember-handlebars/helpers/collection",
8513
8557
  var viewOptions = ViewHelper.propertiesFromHTMLOptions({ data: data, hash: itemHash }, this);
8514
8558
  hash.itemViewClass = itemViewClass.extend(viewOptions);
8515
8559
 
8560
+ options.helperName = options.helperName || 'collection';
8561
+
8516
8562
  return helpers.view.call(this, collectionClass, options);
8517
8563
  }
8518
8564
 
@@ -9126,24 +9172,29 @@ define("ember-handlebars/helpers/loc",
9126
9172
  @submodule ember-handlebars
9127
9173
  */
9128
9174
 
9129
- // ES6TODO:
9130
- // Pretty sure this can be expressed as
9131
- // var locHelper EmberStringUtils.loc ?
9132
-
9133
9175
  /**
9134
9176
  Calls [Ember.String.loc](/api/classes/Ember.String.html#method_loc) with the
9135
9177
  provided string.
9136
9178
 
9137
- This is a convenient way to localize text. For example:
9179
+ This is a convenient way to localize text within a template:
9138
9180
 
9139
- ```html
9140
- <script type="text/x-handlebars" data-template-name="home">
9141
- {{loc "welcome"}}
9142
- </script>
9181
+ ```javascript
9182
+ Ember.STRINGS = {
9183
+ '_welcome_': 'Bonjour'
9184
+ };
9185
+ ```
9186
+
9187
+ ```handlebars
9188
+ <div class='message'>
9189
+ {{loc '_welcome_'}}
9190
+ </div>
9143
9191
  ```
9144
9192
 
9145
- Take note that `"welcome"` is a string and not an object
9146
- reference.
9193
+ ```html
9194
+ <div class='message'>
9195
+ Bonjour
9196
+ </div>
9197
+ ```
9147
9198
 
9148
9199
  See [Ember.String.loc](/api/classes/Ember.String.html#method_loc) for how to
9149
9200
  set up localized string references.
@@ -9153,9 +9204,7 @@ define("ember-handlebars/helpers/loc",
9153
9204
  @param {String} str The string to format
9154
9205
  @see {Ember.String#loc}
9155
9206
  */
9156
- __exports__["default"] = function locHelper(str) {
9157
- return loc(str);
9158
- }
9207
+ __exports__["default"] = loc;
9159
9208
  });
9160
9209
  define("ember-handlebars/helpers/partial",
9161
9210
  ["ember-metal/core","ember-metal/is_none","ember-handlebars/ext","ember-handlebars/helpers/binding","exports"],
@@ -9292,7 +9341,7 @@ define("ember-handlebars/helpers/template",
9292
9341
  function(__dependency1__, __dependency2__, __exports__) {
9293
9342
  "use strict";
9294
9343
  var Ember = __dependency1__["default"];
9295
- // var emberDeprecate = Ember.deprecate;
9344
+ // Ember.deprecate;
9296
9345
 
9297
9346
  var EmberHandlebars = __dependency2__["default"];
9298
9347
  var helpers = EmberHandlebars.helpers;
@@ -9302,43 +9351,6 @@ define("ember-handlebars/helpers/template",
9302
9351
  */
9303
9352
 
9304
9353
  /**
9305
- `template` allows you to render a template from inside another template.
9306
- This allows you to re-use the same template in multiple places. For example:
9307
-
9308
- ```html
9309
- <script type="text/x-handlebars" data-template-name="logged_in_user">
9310
- {{#with loggedInUser}}
9311
- Last Login: {{lastLogin}}
9312
- User Info: {{template "user_info"}}
9313
- {{/with}}
9314
- </script>
9315
- ```
9316
-
9317
- ```html
9318
- <script type="text/x-handlebars" data-template-name="user_info">
9319
- Name: <em>{{name}}</em>
9320
- Karma: <em>{{karma}}</em>
9321
- </script>
9322
- ```
9323
-
9324
- ```handlebars
9325
- {{#if isUser}}
9326
- {{template "user_info"}}
9327
- {{else}}
9328
- {{template "unlogged_user_info"}}
9329
- {{/if}}
9330
- ```
9331
-
9332
- This helper looks for templates in the global `Ember.TEMPLATES` hash. If you
9333
- add `<script>` tags to your page with the `data-template-name` attribute set,
9334
- they will be compiled and placed in this hash automatically.
9335
-
9336
- You can also manually register templates by adding them to the hash:
9337
-
9338
- ```javascript
9339
- Ember.TEMPLATES["my_cool_template"] = Ember.Handlebars.compile('<b>{{user}}</b>');
9340
- ```
9341
-
9342
9354
  @deprecated
9343
9355
  @method template
9344
9356
  @for Ember.Handlebars.helpers
@@ -9473,13 +9485,13 @@ define("ember-handlebars/helpers/view",
9473
9485
 
9474
9486
  var ViewHelper = EmberObject.create({
9475
9487
  propertiesFromHTMLOptions: function(options) {
9476
- var hash = options.hash;
9477
- var data = options.data;
9488
+ var hash = options.hash;
9489
+ var data = options.data;
9490
+ var classes = hash['class'];
9491
+
9478
9492
  var extensions = {
9479
- classNameBindings: [],
9480
- helperName: options.helperName || ''
9493
+ helperName: options.helperName || ''
9481
9494
  };
9482
- var classes = hash['class'];
9483
9495
 
9484
9496
  if (hash.id) {
9485
9497
  extensions.elementId = hash.id;
@@ -9499,6 +9511,9 @@ define("ember-handlebars/helpers/view",
9499
9511
  }
9500
9512
 
9501
9513
  if (hash.classNameBindings) {
9514
+ if (extensions.classNameBindings === undefined) {
9515
+ extensions.classNameBindings = [];
9516
+ }
9502
9517
  extensions.classNameBindings = extensions.classNameBindings.concat(hash.classNameBindings.split(' '));
9503
9518
  }
9504
9519
 
@@ -9530,26 +9545,25 @@ define("ember-handlebars/helpers/view",
9530
9545
  }
9531
9546
  }
9532
9547
 
9533
- // Evaluate the context of class name bindings:
9534
- var classNameBindingsKeys = keys(extensions.classNameBindings);
9535
-
9536
- for (var j = 0, k = classNameBindingsKeys.length; j < k; j++) {
9537
- var classKey = classNameBindingsKeys[j];
9538
- var full = extensions.classNameBindings[classKey];
9539
-
9540
- if (typeof full === 'string') {
9541
- // Contextualize the path of classNameBinding so this:
9542
- //
9543
- // classNameBinding="isGreen:green"
9544
- //
9545
- // is converted to this:
9546
- //
9547
- // classNameBinding="_parentView.context.isGreen:green"
9548
- var parsedPath = View._parsePropertyPath(full);
9549
- if (parsedPath.path !== '') {
9550
- path = this.contextualizeBindingPath(parsedPath.path, data);
9551
- if (path) {
9552
- extensions.classNameBindings[classKey] = path + parsedPath.classNames;
9548
+ if (extensions.classNameBindings) {
9549
+ // Evaluate the context of class name bindings:
9550
+ for (var j = 0, k = extensions.classNameBindings.length; j < k; j++) {
9551
+ var full = extensions.classNameBindings[j];
9552
+
9553
+ if (typeof full === 'string') {
9554
+ // Contextualize the path of classNameBinding so this:
9555
+ //
9556
+ // classNameBinding="isGreen:green"
9557
+ //
9558
+ // is converted to this:
9559
+ //
9560
+ // classNameBinding="_parentView.context.isGreen:green"
9561
+ var parsedPath = View._parsePropertyPath(full);
9562
+ if (parsedPath.path !== '') {
9563
+ path = this.contextualizeBindingPath(parsedPath.path, data);
9564
+ if (path) {
9565
+ extensions.classNameBindings[j] = path + parsedPath.classNames;
9566
+ }
9553
9567
  }
9554
9568
  }
9555
9569
  }
@@ -11350,7 +11364,7 @@ define("ember-metal/binding",
11350
11364
  var set = __dependency3__.set;
11351
11365
  var trySet = __dependency3__.trySet;
11352
11366
  var guidFor = __dependency4__.guidFor;
11353
- var Map = __dependency5__.Map;
11367
+ var Map = __dependency5__["default"];
11354
11368
  var addObserver = __dependency6__.addObserver;
11355
11369
  var removeObserver = __dependency6__.removeObserver;
11356
11370
  var _suspendObserver = __dependency6__._suspendObserver;
@@ -11402,7 +11416,7 @@ define("ember-metal/binding",
11402
11416
  this._direction = 'fwd';
11403
11417
  this._from = fromPath;
11404
11418
  this._to = toPath;
11405
- this._directionMap = Map.create();
11419
+ this._directionMap = new Map();
11406
11420
  this._readyToSync = undefined;
11407
11421
  this._oneWay = undefined;
11408
11422
  }
@@ -11588,7 +11602,7 @@ define("ember-metal/binding",
11588
11602
  var fromPath = this._from;
11589
11603
  var toPath = this._to;
11590
11604
 
11591
- directionMap.remove(obj);
11605
+ directionMap["delete"](obj);
11592
11606
 
11593
11607
  // if we're synchronizing from the remote object...
11594
11608
  if (direction === 'fwd') {
@@ -11883,7 +11897,7 @@ define("ember-metal/cache",
11883
11897
  value = this.set(key, this.func(key));
11884
11898
  } else if (value === UNDEFINED) {
11885
11899
  this.hits ++;
11886
- value = UNDEFINED;
11900
+ value = undefined;
11887
11901
  } else {
11888
11902
  this.hits ++;
11889
11903
  // nothing to translate
@@ -13602,7 +13616,7 @@ define("ember-metal/core",
13602
13616
 
13603
13617
  @class Ember
13604
13618
  @static
13605
- @version 1.8.0-beta.3
13619
+ @version 1.8.0-beta.4
13606
13620
  */
13607
13621
 
13608
13622
  if ('undefined' === typeof Ember) {
@@ -13629,10 +13643,10 @@ define("ember-metal/core",
13629
13643
  /**
13630
13644
  @property VERSION
13631
13645
  @type String
13632
- @default '1.8.0-beta.3'
13646
+ @default '1.8.0-beta.4'
13633
13647
  @static
13634
13648
  */
13635
- Ember.VERSION = '1.8.0-beta.3';
13649
+ Ember.VERSION = '1.8.0-beta.4';
13636
13650
 
13637
13651
  /**
13638
13652
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -15418,8 +15432,8 @@ define("ember-metal/logger",
15418
15432
  };
15419
15433
  });
15420
15434
  define("ember-metal/map",
15421
- ["ember-metal/utils","ember-metal/array","ember-metal/platform","exports"],
15422
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
15435
+ ["ember-metal/utils","ember-metal/array","ember-metal/platform","ember-metal/deprecate_property","exports"],
15436
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
15423
15437
  "use strict";
15424
15438
  /**
15425
15439
  @module ember-metal
@@ -15436,9 +15450,7 @@ define("ember-metal/map",
15436
15450
 
15437
15451
  This implementation follows the current iteration of the ES6 proposal for
15438
15452
  maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
15439
- with two exceptions. First, because we need our implementation to be pleasant
15440
- on older browsers, we do not use the `delete` name (using `remove` instead).
15441
- Second, as we do not have the luxury of in-VM iteration, we implement a
15453
+ with one exception: as we do not have the luxury of in-VM iteration, we implement a
15442
15454
  forEach method for iteration.
15443
15455
 
15444
15456
  Map is mocked out to look like an Ember object, so you can do
@@ -15448,6 +15460,7 @@ define("ember-metal/map",
15448
15460
  var guidFor = __dependency1__.guidFor;
15449
15461
  var indexOf = __dependency2__.indexOf;
15450
15462
  var create = __dependency3__.create;
15463
+ var deprecateProperty = __dependency4__.deprecateProperty;
15451
15464
 
15452
15465
  function missingFunction(fn) {
15453
15466
  throw new TypeError('' + Object.prototype.toString.call(fn) + " is not a function");
@@ -15493,6 +15506,7 @@ define("ember-metal/map",
15493
15506
 
15494
15507
  if (this instanceof OrderedSet) {
15495
15508
  this.clear();
15509
+ this._silenceRemoveDeprecation = false;
15496
15510
  } else {
15497
15511
  missingNew("OrderedSet");
15498
15512
  }
@@ -15551,7 +15565,9 @@ define("ember-metal/map",
15551
15565
  @return {Boolean}
15552
15566
  */
15553
15567
  remove: function(obj, _guid) {
15554
- return this['delete'](obj, _guid);
15568
+ Ember.deprecate('Calling `OrderedSet.prototype.remove` has been deprecated, please use `OrderedSet.prototype.delete` instead.', this._silenceRemoveDeprecation);
15569
+
15570
+ return this["delete"](obj, _guid);
15555
15571
  },
15556
15572
 
15557
15573
  /**
@@ -15560,7 +15576,7 @@ define("ember-metal/map",
15560
15576
  @param _guid (optional and for internal use only)
15561
15577
  @return {Boolean}
15562
15578
  */
15563
- 'delete': function(obj, _guid) {
15579
+ "delete": function(obj, _guid) {
15564
15580
  var guid = _guid || guidFor(obj);
15565
15581
  var presenceSet = this.presenceSet;
15566
15582
  var list = this.list;
@@ -15592,6 +15608,8 @@ define("ember-metal/map",
15592
15608
  @return {Boolean}
15593
15609
  */
15594
15610
  has: function(obj) {
15611
+ if (this.size === 0) { return false; }
15612
+
15595
15613
  var guid = guidFor(obj);
15596
15614
  var presenceSet = this.presenceSet;
15597
15615
 
@@ -15603,14 +15621,20 @@ define("ember-metal/map",
15603
15621
  @param {Function} fn
15604
15622
  @param self
15605
15623
  */
15606
- forEach: function(fn, thisArg) {
15624
+ forEach: function(fn /*, thisArg*/) {
15625
+ if (typeof fn !== 'function') {
15626
+ missingFunction(fn);
15627
+ }
15628
+
15629
+ if (this.size === 0) { return; }
15630
+
15607
15631
  var list = this.list;
15608
15632
  var length = arguments.length;
15609
15633
  var i;
15610
15634
 
15611
15635
  if (length === 2) {
15612
15636
  for (i = 0; i < list.length; i++) {
15613
- fn.call(thisArg, list[i]);
15637
+ fn.call(arguments[1], list[i]);
15614
15638
  }
15615
15639
  } else {
15616
15640
  for (i = 0; i < list.length; i++) {
@@ -15635,13 +15659,17 @@ define("ember-metal/map",
15635
15659
  var Constructor = this.constructor;
15636
15660
  var set = new Constructor();
15637
15661
 
15662
+ set._silenceRemoveDeprecation = this._silenceRemoveDeprecation;
15638
15663
  set.presenceSet = copyNull(this.presenceSet);
15639
15664
  set.list = this.toArray();
15665
+ set.size = this.size;
15640
15666
 
15641
15667
  return set;
15642
15668
  }
15643
15669
  };
15644
15670
 
15671
+ deprecateProperty(OrderedSet.prototype, 'length', 'size');
15672
+
15645
15673
  /**
15646
15674
  A Map stores values indexed by keys. Unlike JavaScript's
15647
15675
  default Objects, the keys of a Map can be any JavaScript
@@ -15665,6 +15693,7 @@ define("ember-metal/map",
15665
15693
  function Map() {
15666
15694
  if (this instanceof this.constructor) {
15667
15695
  this.keys = OrderedSet.create();
15696
+ this.keys._silenceRemoveDeprecation = true;
15668
15697
  this.values = Object.create(null);
15669
15698
  this.size = 0;
15670
15699
  } else {
@@ -15703,6 +15732,8 @@ define("ember-metal/map",
15703
15732
  @return {*} the value associated with the key, or `undefined`
15704
15733
  */
15705
15734
  get: function(key) {
15735
+ if (this.size === 0) { return; }
15736
+
15706
15737
  var values = this.values;
15707
15738
  var guid = guidFor(key);
15708
15739
 
@@ -15723,7 +15754,11 @@ define("ember-metal/map",
15723
15754
  var values = this.values;
15724
15755
  var guid = guidFor(key);
15725
15756
 
15726
- keys.add(key, guid);
15757
+ // ensure we don't store -0
15758
+ var k = key === -0 ? 0 : key;
15759
+
15760
+ keys.add(k, guid);
15761
+
15727
15762
  values[guid] = value;
15728
15763
 
15729
15764
  this.size = keys.size;
@@ -15740,7 +15775,9 @@ define("ember-metal/map",
15740
15775
  @return {Boolean} true if an item was removed, false otherwise
15741
15776
  */
15742
15777
  remove: function(key) {
15743
- return this['delete'](key);
15778
+ Ember.deprecate('Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.');
15779
+
15780
+ return this["delete"](key);
15744
15781
  },
15745
15782
 
15746
15783
  /**
@@ -15750,7 +15787,8 @@ define("ember-metal/map",
15750
15787
  @param {*} key
15751
15788
  @return {Boolean} true if an item was removed, false otherwise
15752
15789
  */
15753
- 'delete': function(key) {
15790
+ "delete": function(key) {
15791
+ if (this.size === 0) { return false; }
15754
15792
  // don't use ES6 "delete" because it will be annoying
15755
15793
  // to use in browsers that are not ES6 friendly;
15756
15794
  var keys = this.keys;
@@ -15758,7 +15796,7 @@ define("ember-metal/map",
15758
15796
  var guid = guidFor(key);
15759
15797
 
15760
15798
  if (values[guid]) {
15761
- keys.remove(key, guid);
15799
+ keys["delete"](key, guid);
15762
15800
  delete values[guid];
15763
15801
  this.size = keys.size;
15764
15802
  return true;
@@ -15775,6 +15813,7 @@ define("ember-metal/map",
15775
15813
  @return {Boolean} true if the item was present, false otherwise
15776
15814
  */
15777
15815
  has: function(key) {
15816
+ if (this.size === 0) { return false; }
15778
15817
  return this.keys.has(key);
15779
15818
  },
15780
15819
 
@@ -15789,16 +15828,19 @@ define("ember-metal/map",
15789
15828
  @param {*} self if passed, the `this` value inside the
15790
15829
  callback. By default, `this` is the map.
15791
15830
  */
15792
- forEach: function(callback, thisArg) {
15831
+ forEach: function(callback /*, thisArg*/) {
15793
15832
  if (typeof callback !== 'function') {
15794
15833
  missingFunction(callback);
15795
15834
  }
15796
15835
 
15836
+ if (this.size === 0) { return; }
15837
+
15797
15838
  var length = arguments.length;
15798
15839
  var map = this;
15799
- var cb;
15840
+ var cb, thisArg;
15800
15841
 
15801
15842
  if (length === 2) {
15843
+ thisArg = arguments[1];
15802
15844
  cb = function(key) {
15803
15845
  callback.call(thisArg, map.get(key), key);
15804
15846
  };
@@ -15811,6 +15853,15 @@ define("ember-metal/map",
15811
15853
  this.keys.forEach(cb);
15812
15854
  },
15813
15855
 
15856
+ /**
15857
+ @method clear
15858
+ */
15859
+ clear: function() {
15860
+ this.keys.clear();
15861
+ this.values = Object.create(null);
15862
+ this.size = 0;
15863
+ },
15864
+
15814
15865
  /**
15815
15866
  @method copy
15816
15867
  @return {Ember.Map}
@@ -15820,6 +15871,8 @@ define("ember-metal/map",
15820
15871
  }
15821
15872
  };
15822
15873
 
15874
+ deprecateProperty(Map.prototype, 'length', 'size');
15875
+
15823
15876
  /**
15824
15877
  @class MapWithDefault
15825
15878
  @namespace Ember
@@ -15885,6 +15938,8 @@ define("ember-metal/map",
15885
15938
  }));
15886
15939
  };
15887
15940
 
15941
+ __exports__["default"] = Map;
15942
+
15888
15943
  __exports__.OrderedSet = OrderedSet;
15889
15944
  __exports__.Map = Map;
15890
15945
  __exports__.MapWithDefault = MapWithDefault;
@@ -18298,8 +18353,7 @@ define("ember-metal/run_loop",
18298
18353
  target at the time the method is invoked.
18299
18354
  @param {Object} [args*] Optional arguments to pass to the timeout.
18300
18355
  @param {Number} wait Number of milliseconds to wait.
18301
- @return {String} a string you can use to cancel the timer in
18302
- `run.cancel` later.
18356
+ @return {Object} Timer information for use in cancelling, see `run.cancel`.
18303
18357
  */
18304
18358
  run.later = function(target, method) {
18305
18359
  return apply(backburner, backburner.later, arguments);
@@ -18615,11 +18669,12 @@ define("ember-metal/run_loop",
18615
18669
  };
18616
18670
  });
18617
18671
  define("ember-metal/set_properties",
18618
- ["ember-metal/property_events","ember-metal/property_set","exports"],
18619
- function(__dependency1__, __dependency2__, __exports__) {
18672
+ ["ember-metal/property_events","ember-metal/property_set","ember-metal/keys","exports"],
18673
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
18620
18674
  "use strict";
18621
18675
  var changeProperties = __dependency1__.changeProperties;
18622
18676
  var set = __dependency2__.set;
18677
+ var keys = __dependency3__["default"];
18623
18678
 
18624
18679
  /**
18625
18680
  Set a list of properties on an object. These properties are set inside
@@ -18643,8 +18698,13 @@ define("ember-metal/set_properties",
18643
18698
  */
18644
18699
  __exports__["default"] = function setProperties(self, hash) {
18645
18700
  changeProperties(function() {
18646
- for(var prop in hash) {
18647
- if (hash.hasOwnProperty(prop)) { set(self, prop, hash[prop]); }
18701
+ var props = keys(hash);
18702
+ var prop;
18703
+
18704
+ for (var i = 0, l = props.length; i < l; i++) {
18705
+ prop = props[i];
18706
+
18707
+ set(self, prop, hash[prop]);
18648
18708
  }
18649
18709
  });
18650
18710
  return self;
@@ -39072,15 +39132,15 @@ define("ember-views/system/render_buffer",
39072
39132
  tagString = tagName;
39073
39133
  }
39074
39134
 
39075
- var element = this.dom.createElement(tagString);
39135
+ var element = this.dom.createElement(tagString, this._contextualElement);
39076
39136
  var $element = jQuery(element);
39077
39137
 
39078
39138
  if (id) {
39079
- $element.attr('id', id);
39139
+ this.dom.setAttribute(element, 'id', id);
39080
39140
  this.elementId = null;
39081
39141
  }
39082
39142
  if (classes) {
39083
- $element.attr('class', classes.join(' '));
39143
+ this.dom.setAttribute(element, 'class', classes.join(' '));
39084
39144
  this.classes = null;
39085
39145
  this.elementClasses = null;
39086
39146
  }
@@ -39092,7 +39152,7 @@ define("ember-views/system/render_buffer",
39092
39152
  }
39093
39153
  }
39094
39154
 
39095
- $element.attr('style', styleBuffer);
39155
+ this.dom.setAttribute(element, 'style', styleBuffer);
39096
39156
 
39097
39157
  this.elementStyle = null;
39098
39158
  }
@@ -39100,7 +39160,7 @@ define("ember-views/system/render_buffer",
39100
39160
  if (attrs) {
39101
39161
  for (attr in attrs) {
39102
39162
  if (attrs.hasOwnProperty(attr)) {
39103
- $element.attr(attr, attrs[attr]);
39163
+ this.dom.setAttribute(element, attr, attrs[attr]);
39104
39164
  }
39105
39165
  }
39106
39166
 
@@ -39135,6 +39195,7 @@ define("ember-views/system/render_buffer",
39135
39195
  var nodes;
39136
39196
  if (this._element) {
39137
39197
  if (html) {
39198
+ this.dom.detectNamespace(this._element);
39138
39199
  nodes = this.dom.parseHTML(html, this._element);
39139
39200
  while (nodes[0]) {
39140
39201
  this._element.appendChild(nodes[0]);
@@ -39145,6 +39206,7 @@ define("ember-views/system/render_buffer",
39145
39206
  if (html) {
39146
39207
  var omittedStartTag = detectOmittedStartTag(html, this._contextualElement);
39147
39208
  var contextualElement = omittedStartTag || this._contextualElement;
39209
+ this.dom.detectNamespace(contextualElement);
39148
39210
  nodes = this.dom.parseHTML(html, contextualElement);
39149
39211
  var frag = this._element = document.createDocumentFragment();
39150
39212
  while (nodes[0]) {
@@ -43205,6 +43267,8 @@ define("morph/dom-helper",
43205
43267
  "use strict";
43206
43268
  var Morph = __dependency1__["default"];
43207
43269
  var buildHTMLDOM = __dependency2__.buildHTMLDOM;
43270
+ var svgNamespace = __dependency2__.svgNamespace;
43271
+ var svgHTMLIntegrationPoints = __dependency2__.svgHTMLIntegrationPoints;
43208
43272
 
43209
43273
  var deletesBlankTextNodes = (function(){
43210
43274
  var element = document.createElement('div');
@@ -43220,9 +43284,6 @@ define("morph/dom-helper",
43220
43284
  return !clonedElement.checked;
43221
43285
  })();
43222
43286
 
43223
- var svgNamespace = 'http://www.w3.org/2000/svg',
43224
- svgHTMLIntegrationPoints = {foreignObject: 1, desc: 1, title: 1};
43225
-
43226
43287
  function isSVG(ns){
43227
43288
  return ns === svgNamespace;
43228
43289
  }
@@ -43329,9 +43390,19 @@ define("morph/dom-helper",
43329
43390
  };
43330
43391
 
43331
43392
  if (document.createElementNS) {
43332
- prototype.createElement = function(tagName) {
43333
- if (this.namespace) {
43334
- return this.document.createElementNS(this.namespace, tagName);
43393
+ // Only opt into namespace detection if a contextualElement
43394
+ // is passed.
43395
+ prototype.createElement = function(tagName, contextualElement) {
43396
+ var namespace = this.namespace;
43397
+ if (contextualElement) {
43398
+ if (tagName === 'svg') {
43399
+ namespace = svgNamespace;
43400
+ } else {
43401
+ namespace = interiorNamespace(contextualElement);
43402
+ }
43403
+ }
43404
+ if (namespace) {
43405
+ return this.document.createElementNS(namespace, tagName);
43335
43406
  } else {
43336
43407
  return this.document.createElement(tagName);
43337
43408
  }
@@ -43441,6 +43512,17 @@ define("morph/dom-helper/build-html-dom",
43441
43512
  ["exports"],
43442
43513
  function(__exports__) {
43443
43514
  "use strict";
43515
+ var svgHTMLIntegrationPoints = {foreignObject: 1, desc: 1, title: 1};
43516
+ __exports__.svgHTMLIntegrationPoints = svgHTMLIntegrationPoints;var svgNamespace = 'http://www.w3.org/2000/svg';
43517
+ __exports__.svgNamespace = svgNamespace;
43518
+ // Safari does not like using innerHTML on SVG HTML integration
43519
+ // points.
43520
+ var needsIntegrationPointFix = document.createElementNS && (function() {
43521
+ var testEl = document.createElementNS(svgNamespace, 'foreignObject');
43522
+ testEl.innerHTML = "<div></div>";
43523
+ return testEl.childNodes.length === 0;
43524
+ })();
43525
+
43444
43526
  // Internet Explorer prior to 9 does not allow setting innerHTML if the first element
43445
43527
  // is a "zero-scope" element. This problem can be worked around by making
43446
43528
  // the first node an invisible text node. We, like Modernizr, use &shy;
@@ -43560,15 +43642,25 @@ define("morph/dom-helper/build-html-dom",
43560
43642
  return element ? element.childNodes : [];
43561
43643
  }
43562
43644
 
43563
- function buildDOM(html, contextualElement, dom){
43564
- contextualElement = dom.cloneNode(contextualElement, false);
43565
- scriptSafeInnerHTML(contextualElement, html);
43566
- return contextualElement.childNodes;
43645
+ var buildDOM;
43646
+ if (needsShy) {
43647
+ buildDOM = function buildDOM(html, contextualElement, dom){
43648
+ contextualElement = dom.cloneNode(contextualElement, false);
43649
+ scriptSafeInnerHTML(contextualElement, html);
43650
+ return contextualElement.childNodes;
43651
+ };
43652
+ } else {
43653
+ buildDOM = function buildDOM(html, contextualElement, dom){
43654
+ contextualElement = dom.cloneNode(contextualElement, false);
43655
+ contextualElement.innerHTML = html;
43656
+ return contextualElement.childNodes;
43657
+ };
43567
43658
  }
43568
43659
 
43660
+
43569
43661
  var buildHTMLDOM;
43570
43662
  // Really, this just means IE8 and IE9 get a slower buildHTMLDOM
43571
- if (tagNamesRequiringInnerHTMLFix.length > 0 || needsShy || movesWhitespace) {
43663
+ if (tagNamesRequiringInnerHTMLFix.length > 0 || movesWhitespace) {
43572
43664
  buildHTMLDOM = function buildHTMLDOM(html, contextualElement, dom) {
43573
43665
  // Make a list of the leading text on script nodes. Include
43574
43666
  // script tags without any whitespace for easier processing later.
@@ -43629,6 +43721,14 @@ define("morph/dom-helper/build-html-dom",
43629
43721
 
43630
43722
  return nodes;
43631
43723
  };
43724
+ } else if (needsIntegrationPointFix) {
43725
+ buildHTMLDOM = function buildHTMLDOM(html, contextualElement, dom){
43726
+ if (svgHTMLIntegrationPoints[contextualElement.tagName]) {
43727
+ return buildDOM(html, document.createElement('div'), dom);
43728
+ } else {
43729
+ return buildDOM(html, contextualElement, dom);
43730
+ }
43731
+ };
43632
43732
  } else {
43633
43733
  buildHTMLDOM = buildDOM;
43634
43734
  }
@@ -46758,10 +46858,10 @@ define("rsvp.umd",
46758
46858
  };
46759
46859
 
46760
46860
  /* global define:true module:true window: true */
46761
- if (typeof define === 'function' && define.amd) {
46861
+ if (typeof define === 'function' && define['amd']) {
46762
46862
  define(function() { return RSVP; });
46763
- } else if (typeof module !== 'undefined' && module.exports) {
46764
- module.exports = RSVP;
46863
+ } else if (typeof module !== 'undefined' && module['exports']) {
46864
+ module['exports'] = RSVP;
46765
46865
  } else if (typeof this !== 'undefined') {
46766
46866
  this['RSVP'] = RSVP;
46767
46867
  }
@@ -46777,6 +46877,10 @@ define("rsvp/-internal",
46777
46877
 
46778
46878
  var config = __dependency3__.config;
46779
46879
 
46880
+ function withOwnPromise() {
46881
+ return new TypeError('A promises callback cannot return that same promise.');
46882
+ }
46883
+
46780
46884
  function noop() {}
46781
46885
 
46782
46886
  var PENDING = void 0;
@@ -46976,7 +47080,7 @@ define("rsvp/-internal",
46976
47080
  }
46977
47081
 
46978
47082
  if (promise === value) {
46979
- reject(promise, new TypeError('A promises callback cannot return that same promise.'));
47083
+ reject(promise, withOwnPromise());
46980
47084
  return;
46981
47085
  }
46982
47086
 
@@ -47137,7 +47241,8 @@ define("rsvp/asap",
47137
47241
  }
47138
47242
  }
47139
47243
 
47140
- var browserGlobal = (typeof window !== 'undefined') ? window : {};
47244
+ var browserWindow = (typeof window !== 'undefined') ? window : undefined
47245
+ var browserGlobal = browserWindow || {};
47141
47246
  var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
47142
47247
 
47143
47248
  // test for web worker but not in IE10
@@ -47152,6 +47257,13 @@ define("rsvp/asap",
47152
47257
  };
47153
47258
  }
47154
47259
 
47260
+ // vertx
47261
+ function useVertxTimer() {
47262
+ return function() {
47263
+ vertxNext(flush);
47264
+ };
47265
+ }
47266
+
47155
47267
  function useMutationObserver() {
47156
47268
  var iterations = 0;
47157
47269
  var observer = new BrowserMutationObserver(flush);
@@ -47193,8 +47305,17 @@ define("rsvp/asap",
47193
47305
  len = 0;
47194
47306
  }
47195
47307
 
47196
- var scheduleFlush;
47308
+ function attemptVertex() {
47309
+ try {
47310
+ var vertx = require('vertx');
47311
+ var vertxNext = vertx.runOnLoop || vertx.runOnContext;
47312
+ return useVertxTimer();
47313
+ } catch(e) {
47314
+ return useSetTimeout();
47315
+ }
47316
+ }
47197
47317
 
47318
+ var scheduleFlush;
47198
47319
  // Decide what async method to use to triggering processing of queued callbacks:
47199
47320
  if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
47200
47321
  scheduleFlush = useNextTick();
@@ -47202,6 +47323,8 @@ define("rsvp/asap",
47202
47323
  scheduleFlush = useMutationObserver();
47203
47324
  } else if (isWorker) {
47204
47325
  scheduleFlush = useMessageChannel();
47326
+ } else if (browserWindow === undefined && typeof require === 'function') {
47327
+ scheduleFlush = attemptVertex();
47205
47328
  } else {
47206
47329
  scheduleFlush = useSetTimeout();
47207
47330
  }
@@ -47279,9 +47402,9 @@ define("rsvp/defer",
47279
47402
  __exports__["default"] = function defer(label) {
47280
47403
  var deferred = { };
47281
47404
 
47282
- deferred.promise = new Promise(function(resolve, reject) {
47283
- deferred.resolve = resolve;
47284
- deferred.reject = reject;
47405
+ deferred['promise'] = new Promise(function(resolve, reject) {
47406
+ deferred['resolve'] = resolve;
47407
+ deferred['reject'] = reject;
47285
47408
  }, label);
47286
47409
 
47287
47410
  return deferred;
@@ -47977,27 +48100,40 @@ define("rsvp/instrument",
47977
48100
 
47978
48101
  var queue = [];
47979
48102
 
48103
+ function scheduleFlush() {
48104
+ setTimeout(function() {
48105
+ var entry;
48106
+ for (var i = 0; i < queue.length; i++) {
48107
+ entry = queue[i];
48108
+
48109
+ var payload = entry.payload;
48110
+
48111
+ payload.guid = payload.key + payload.id;
48112
+ payload.childGuid = payload.key + payload.childId;
48113
+ if (payload.error) {
48114
+ payload.stack = payload.error.stack;
48115
+ }
48116
+
48117
+ config.trigger(entry.name, entry.payload);
48118
+ }
48119
+ queue.length = 0;
48120
+ }, 50);
48121
+ }
48122
+
47980
48123
  __exports__["default"] = function instrument(eventName, promise, child) {
47981
48124
  if (1 === queue.push({
47982
48125
  name: eventName,
47983
48126
  payload: {
47984
- guid: promise._guidKey + promise._id,
48127
+ key: promise._guidKey,
48128
+ id: promise._id,
47985
48129
  eventName: eventName,
47986
48130
  detail: promise._result,
47987
- childGuid: child && promise._guidKey + child._id,
48131
+ childId: child && child._id,
47988
48132
  label: promise._label,
47989
48133
  timeStamp: now(),
47990
- stack: new Error(promise._label).stack
48134
+ error: config["instrument-with-stack"] ? new Error(promise._label) : null
47991
48135
  }})) {
47992
-
47993
- setTimeout(function() {
47994
- var entry;
47995
- for (var i = 0; i < queue.length; i++) {
47996
- entry = queue[i];
47997
- config.trigger(entry.name, entry.payload);
47998
- }
47999
- queue.length = 0;
48000
- }, 50);
48136
+ scheduleFlush();
48001
48137
  }
48002
48138
  }
48003
48139
  });