ember-source 1.7.0.beta.1 → 1.7.0.beta.2

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.7.0-beta.1
8
+ * @version 1.7.0-beta.2
9
9
  */
10
10
 
11
11
  (function() {
@@ -1854,7 +1854,7 @@ define("ember-application",
1854
1854
 
1855
1855
  var DAG = __dependency3__["default"];
1856
1856
  var Resolver = __dependency4__.Resolver;
1857
- var DefaultResolver = __dependency4__.default;
1857
+ var DefaultResolver = __dependency4__["default"];
1858
1858
  var Application = __dependency5__["default"];
1859
1859
  // side effect of extending ControllerMixin
1860
1860
 
@@ -7482,7 +7482,7 @@ define("ember-handlebars/helpers/binding",
7482
7482
  localizedOptions.hash.keywordPath = contextPath;
7483
7483
 
7484
7484
  bindContext = this;
7485
- context = path;
7485
+ context = contextPath;
7486
7486
  options = localizedOptions;
7487
7487
  preserveContext = true;
7488
7488
  } else {
@@ -9441,11 +9441,11 @@ define("ember-handlebars/helpers/view",
9441
9441
  Ember.assert("The view helper only takes a single argument", arguments.length <= 2);
9442
9442
 
9443
9443
  // If no path is provided, treat path param as options
9444
- // and get an instance of the registered `view:default`
9444
+ // and get an instance of the registered `view:toplevel`
9445
9445
  if (path && path.data && path.data.isRenderData) {
9446
9446
  options = path;
9447
9447
  Ember.assert('{{view}} helper requires parent view to have a container but none was found. This usually happens when you are manually-managing views.', !!options.data.view.container);
9448
- path = options.data.view.container.lookupFactory('view:default');
9448
+ path = options.data.view.container.lookupFactory('view:toplevel');
9449
9449
  }
9450
9450
 
9451
9451
  options.helperName = options.helperName || 'view';
@@ -10218,8 +10218,8 @@ define("ember-handlebars/views/metamorph_view",
10218
10218
  __exports__._SimpleMetamorphView = _SimpleMetamorphView;__exports__["default"] = View.extend(_Metamorph);
10219
10219
  });
10220
10220
  define("ember-metal",
10221
- ["ember-metal/core","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/array","ember-metal/logger","ember-metal/property_get","ember-metal/events","ember-metal/observer_set","ember-metal/property_events","ember-metal/properties","ember-metal/property_set","ember-metal/map","ember-metal/get_properties","ember-metal/set_properties","ember-metal/watch_key","ember-metal/chains","ember-metal/watch_path","ember-metal/watching","ember-metal/expand_properties","ember-metal/computed","ember-metal/observer","ember-metal/mixin","ember-metal/binding","ember-metal/run_loop","ember-metal/libraries","ember-metal/is_none","ember-metal/is_empty","ember-metal/is_blank","exports"],
10222
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __exports__) {
10221
+ ["ember-metal/core","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/array","ember-metal/logger","ember-metal/property_get","ember-metal/events","ember-metal/observer_set","ember-metal/property_events","ember-metal/properties","ember-metal/property_set","ember-metal/map","ember-metal/get_properties","ember-metal/set_properties","ember-metal/watch_key","ember-metal/chains","ember-metal/watch_path","ember-metal/watching","ember-metal/expand_properties","ember-metal/computed","ember-metal/computed_macros","ember-metal/observer","ember-metal/mixin","ember-metal/binding","ember-metal/run_loop","ember-metal/libraries","ember-metal/is_none","ember-metal/is_empty","ember-metal/is_blank","exports"],
10222
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __dependency33__, __exports__) {
10223
10223
  "use strict";
10224
10224
  /**
10225
10225
  Ember Metal
@@ -10321,35 +10321,37 @@ define("ember-metal",
10321
10321
  var computed = __dependency24__.computed;
10322
10322
  var cacheFor = __dependency24__.cacheFor;
10323
10323
 
10324
- var addObserver = __dependency25__.addObserver;
10325
- var observersFor = __dependency25__.observersFor;
10326
- var removeObserver = __dependency25__.removeObserver;
10327
- var addBeforeObserver = __dependency25__.addBeforeObserver;
10328
- var _suspendBeforeObserver = __dependency25__._suspendBeforeObserver;
10329
- var _suspendObserver = __dependency25__._suspendObserver;
10330
- var _suspendBeforeObservers = __dependency25__._suspendBeforeObservers;
10331
- var _suspendObservers = __dependency25__._suspendObservers;
10332
- var beforeObserversFor = __dependency25__.beforeObserversFor;
10333
- var removeBeforeObserver = __dependency25__.removeBeforeObserver;
10334
- var IS_BINDING = __dependency26__.IS_BINDING;
10335
- var mixin = __dependency26__.mixin;
10336
- var Mixin = __dependency26__.Mixin;
10337
- var required = __dependency26__.required;
10338
- var aliasMethod = __dependency26__.aliasMethod;
10339
- var observer = __dependency26__.observer;
10340
- var immediateObserver = __dependency26__.immediateObserver;
10341
- var beforeObserver = __dependency26__.beforeObserver;
10342
- var Binding = __dependency27__.Binding;
10343
- var isGlobalPath = __dependency27__.isGlobalPath;
10344
- var bind = __dependency27__.bind;
10345
- var oneWay = __dependency27__.oneWay;
10346
- var run = __dependency28__["default"];
10347
- var libraries = __dependency29__["default"];
10348
- var isNone = __dependency30__.isNone;
10349
- var none = __dependency30__.none;
10350
- var isEmpty = __dependency31__.isEmpty;
10351
- var empty = __dependency31__.empty;
10352
- var isBlank = __dependency32__["default"];
10324
+ // side effect of defining the computed.* macros
10325
+
10326
+ var addObserver = __dependency26__.addObserver;
10327
+ var observersFor = __dependency26__.observersFor;
10328
+ var removeObserver = __dependency26__.removeObserver;
10329
+ var addBeforeObserver = __dependency26__.addBeforeObserver;
10330
+ var _suspendBeforeObserver = __dependency26__._suspendBeforeObserver;
10331
+ var _suspendObserver = __dependency26__._suspendObserver;
10332
+ var _suspendBeforeObservers = __dependency26__._suspendBeforeObservers;
10333
+ var _suspendObservers = __dependency26__._suspendObservers;
10334
+ var beforeObserversFor = __dependency26__.beforeObserversFor;
10335
+ var removeBeforeObserver = __dependency26__.removeBeforeObserver;
10336
+ var IS_BINDING = __dependency27__.IS_BINDING;
10337
+ var mixin = __dependency27__.mixin;
10338
+ var Mixin = __dependency27__.Mixin;
10339
+ var required = __dependency27__.required;
10340
+ var aliasMethod = __dependency27__.aliasMethod;
10341
+ var observer = __dependency27__.observer;
10342
+ var immediateObserver = __dependency27__.immediateObserver;
10343
+ var beforeObserver = __dependency27__.beforeObserver;
10344
+ var Binding = __dependency28__.Binding;
10345
+ var isGlobalPath = __dependency28__.isGlobalPath;
10346
+ var bind = __dependency28__.bind;
10347
+ var oneWay = __dependency28__.oneWay;
10348
+ var run = __dependency29__["default"];
10349
+ var libraries = __dependency30__["default"];
10350
+ var isNone = __dependency31__.isNone;
10351
+ var none = __dependency31__.none;
10352
+ var isEmpty = __dependency32__.isEmpty;
10353
+ var empty = __dependency32__.empty;
10354
+ var isBlank = __dependency33__["default"];
10353
10355
  // END IMPORTS
10354
10356
 
10355
10357
  // BEGIN EXPORTS
@@ -10532,6 +10534,81 @@ define("ember-metal",
10532
10534
 
10533
10535
  __exports__["default"] = Ember;
10534
10536
  });
10537
+ define("ember-metal/alias",
10538
+ ["ember-metal/property_get","ember-metal/property_set","ember-metal/error","ember-metal/properties","ember-metal/platform","ember-metal/utils","ember-metal/dependent_keys","exports"],
10539
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
10540
+ "use strict";
10541
+ var get = __dependency1__.get;
10542
+ var set = __dependency2__.set;
10543
+ var EmberError = __dependency3__["default"];
10544
+ var Descriptor = __dependency4__.Descriptor;
10545
+ var defineProperty = __dependency4__.defineProperty;
10546
+ var create = __dependency5__.create;
10547
+ var meta = __dependency6__.meta;
10548
+ var inspect = __dependency6__.inspect;
10549
+ var addDependentKeys = __dependency7__.addDependentKeys;
10550
+ var removeDependentKeys = __dependency7__.removeDependentKeys;
10551
+
10552
+ function alias(altKey) {
10553
+ return new AliasedProperty(altKey);
10554
+ }
10555
+
10556
+ __exports__.alias = alias;function AliasedProperty(altKey) {
10557
+ this.altKey = altKey;
10558
+ this._dependentKeys = [ altKey ];
10559
+ }
10560
+
10561
+ __exports__.AliasedProperty = AliasedProperty;AliasedProperty.prototype = create(Descriptor.prototype);
10562
+
10563
+ AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) {
10564
+ return get(obj, this.altKey);
10565
+ };
10566
+
10567
+ AliasedProperty.prototype.set = function AliasedProperty_set(obj, keyName, value) {
10568
+ return set(obj, this.altKey, value);
10569
+ };
10570
+
10571
+ AliasedProperty.prototype.willWatch = function(obj, keyName) {
10572
+ addDependentKeys(this, obj, keyName, meta(obj));
10573
+ };
10574
+
10575
+ AliasedProperty.prototype.didUnwatch = function(obj, keyName) {
10576
+ removeDependentKeys(this, obj, keyName, meta(obj));
10577
+ };
10578
+
10579
+ AliasedProperty.prototype.setup = function(obj, keyName) {
10580
+ var m = meta(obj);
10581
+ if (m.watching[keyName]) {
10582
+ addDependentKeys(this, obj, keyName, m);
10583
+ }
10584
+ };
10585
+
10586
+ AliasedProperty.prototype.teardown = function(obj, keyName) {
10587
+ var m = meta(obj);
10588
+ if (m.watching[keyName]) {
10589
+ removeDependentKeys(this, obj, keyName, m);
10590
+ }
10591
+ };
10592
+
10593
+ AliasedProperty.prototype.readOnly = function() {
10594
+ this.set = AliasedProperty_readOnlySet;
10595
+ return this;
10596
+ };
10597
+
10598
+ function AliasedProperty_readOnlySet(obj, keyName, value) {
10599
+ throw new EmberError('Cannot set read-only property "' + keyName + '" on object: ' + inspect(obj));
10600
+ }
10601
+
10602
+ AliasedProperty.prototype.oneWay = function() {
10603
+ this.set = AliasedProperty_oneWaySet;
10604
+ return this;
10605
+ };
10606
+
10607
+ function AliasedProperty_oneWaySet(obj, keyName, value) {
10608
+ defineProperty(obj, keyName, null);
10609
+ return set(obj, keyName, value);
10610
+ }
10611
+ });
10535
10612
  define("ember-metal/array",
10536
10613
  ["exports"],
10537
10614
  function(__exports__) {
@@ -11479,29 +11556,23 @@ define("ember-metal/chains",
11479
11556
  __exports__.ChainNode = ChainNode;
11480
11557
  });
11481
11558
  define("ember-metal/computed",
11482
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/watching","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/is_empty","ember-metal/is_none","exports"],
11483
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
11559
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys","exports"],
11560
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
11484
11561
  "use strict";
11485
11562
  var Ember = __dependency1__["default"];
11486
11563
  var get = __dependency2__.get;
11487
11564
  var set = __dependency3__.set;
11488
11565
  var meta = __dependency4__.meta;
11489
11566
  var META_KEY = __dependency4__.META_KEY;
11490
- var guidFor = __dependency4__.guidFor;
11491
- var typeOf = __dependency4__.typeOf;
11492
11567
  var inspect = __dependency4__.inspect;
11493
- var EnumerableUtils = __dependency5__["default"];
11494
- var create = __dependency6__.create;
11495
- var watch = __dependency7__.watch;
11496
- var unwatch = __dependency7__.unwatch;
11497
- var expandProperties = __dependency8__["default"];
11498
- var EmberError = __dependency9__["default"];
11499
- var Descriptor = __dependency10__.Descriptor;
11500
- var defineProperty = __dependency10__.defineProperty;
11501
- var propertyWillChange = __dependency11__.propertyWillChange;
11502
- var propertyDidChange = __dependency11__.propertyDidChange;
11503
- var isEmpty = __dependency12__["default"];
11504
- var isNone = __dependency13__.isNone;
11568
+ var expandProperties = __dependency5__["default"];
11569
+ var EmberError = __dependency6__["default"];
11570
+ var Descriptor = __dependency7__.Descriptor;
11571
+ var defineProperty = __dependency7__.defineProperty;
11572
+ var propertyWillChange = __dependency8__.propertyWillChange;
11573
+ var propertyDidChange = __dependency8__.propertyDidChange;
11574
+ var addDependentKeys = __dependency9__.addDependentKeys;
11575
+ var removeDependentKeys = __dependency9__.removeDependentKeys;
11505
11576
 
11506
11577
  /**
11507
11578
  @module ember-metal
@@ -11511,84 +11582,10 @@ define("ember-metal/computed",
11511
11582
 
11512
11583
 
11513
11584
  var metaFor = meta,
11514
- a_slice = [].slice,
11515
- o_create = create;
11585
+ a_slice = [].slice;
11516
11586
 
11517
11587
  function UNDEFINED() { }
11518
11588
 
11519
- var lengthPattern = /\.(length|\[\])$/;
11520
-
11521
- // ..........................................................
11522
- // DEPENDENT KEYS
11523
- //
11524
-
11525
- // data structure:
11526
- // meta.deps = {
11527
- // 'depKey': {
11528
- // 'keyName': count,
11529
- // }
11530
- // }
11531
-
11532
- /*
11533
- This function returns a map of unique dependencies for a
11534
- given object and key.
11535
- */
11536
- function keysForDep(depsMeta, depKey) {
11537
- var keys = depsMeta[depKey];
11538
- if (!keys) {
11539
- // if there are no dependencies yet for a the given key
11540
- // create a new empty list of dependencies for the key
11541
- keys = depsMeta[depKey] = {};
11542
- } else if (!depsMeta.hasOwnProperty(depKey)) {
11543
- // otherwise if the dependency list is inherited from
11544
- // a superclass, clone the hash
11545
- keys = depsMeta[depKey] = o_create(keys);
11546
- }
11547
- return keys;
11548
- }
11549
-
11550
- function metaForDeps(meta) {
11551
- return keysForDep(meta, 'deps');
11552
- }
11553
-
11554
- function addDependentKeys(desc, obj, keyName, meta) {
11555
- // the descriptor has a list of dependent keys, so
11556
- // add all of its dependent keys.
11557
- var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
11558
- if (!depKeys) return;
11559
-
11560
- depsMeta = metaForDeps(meta);
11561
-
11562
- for(idx = 0, len = depKeys.length; idx < len; idx++) {
11563
- depKey = depKeys[idx];
11564
- // Lookup keys meta for depKey
11565
- keys = keysForDep(depsMeta, depKey);
11566
- // Increment the number of times depKey depends on keyName.
11567
- keys[keyName] = (keys[keyName] || 0) + 1;
11568
- // Watch the depKey
11569
- watch(obj, depKey, meta);
11570
- }
11571
- }
11572
-
11573
- function removeDependentKeys(desc, obj, keyName, meta) {
11574
- // the descriptor has a list of dependent keys, so
11575
- // remove all of its dependent keys.
11576
- var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
11577
- if (!depKeys) return;
11578
-
11579
- depsMeta = metaForDeps(meta);
11580
-
11581
- for(idx = 0, len = depKeys.length; idx < len; idx++) {
11582
- depKey = depKeys[idx];
11583
- // Lookup keys meta for depKey
11584
- keys = keysForDep(depsMeta, depKey);
11585
- // Decrement the number of times depKey depends on keyName.
11586
- keys[keyName] = (keys[keyName] || 0) - 1;
11587
- // Unwatch the depKey
11588
- unwatch(obj, depKey, meta);
11589
- }
11590
- }
11591
-
11592
11589
  // ..........................................................
11593
11590
  // COMPUTED PROPERTY
11594
11591
  //
@@ -11726,7 +11723,7 @@ define("ember-metal/computed",
11726
11723
  @return {Ember.ComputedProperty} this
11727
11724
  @chainable
11728
11725
  */
11729
- ComputedPropertyPrototype.volatile = function() {
11726
+ ComputedPropertyPrototype["volatile"] = function() {
11730
11727
  return this.cacheable(false);
11731
11728
  };
11732
11729
 
@@ -12082,6 +12079,28 @@ define("ember-metal/computed",
12082
12079
  cache[key] = undefined;
12083
12080
  };
12084
12081
 
12082
+ __exports__.ComputedProperty = ComputedProperty;
12083
+ __exports__.computed = computed;
12084
+ __exports__.cacheFor = cacheFor;
12085
+ });
12086
+ define("ember-metal/computed_macros",
12087
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/computed","ember-metal/is_empty","ember-metal/is_none","ember-metal/alias"],
12088
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
12089
+ "use strict";
12090
+ var Ember = __dependency1__["default"];
12091
+ var get = __dependency2__.get;
12092
+ var set = __dependency3__.set;
12093
+ var computed = __dependency4__.computed;
12094
+ var isEmpty = __dependency5__["default"];
12095
+ var isNone = __dependency6__.isNone;
12096
+ var alias = __dependency7__.alias;
12097
+
12098
+ /**
12099
+ @module ember-metal
12100
+ */
12101
+
12102
+ var a_slice = [].slice;
12103
+
12085
12104
  function getProperties(self, propertyNames) {
12086
12105
  var ret = {};
12087
12106
  for(var i = 0; i < propertyNames.length; i++) {
@@ -12619,15 +12638,7 @@ define("ember-metal/computed",
12619
12638
  @return {Ember.ComputedProperty} computed property which creates an
12620
12639
  alias to the original value for property.
12621
12640
  */
12622
- computed.alias = function(dependentKey) {
12623
- return computed(dependentKey, function(key, value) {
12624
- if (arguments.length > 1) {
12625
- set(this, dependentKey, value);
12626
- }
12627
-
12628
- return get(this, dependentKey);
12629
- });
12630
- };
12641
+ computed.alias = alias;
12631
12642
 
12632
12643
  /**
12633
12644
  Where `computed.alias` aliases `get` and `set`, and allows for bidirectional
@@ -12662,9 +12673,7 @@ define("ember-metal/computed",
12662
12673
  one way computed property to the original value for property.
12663
12674
  */
12664
12675
  computed.oneWay = function(dependentKey) {
12665
- return computed(dependentKey, function() {
12666
- return get(this, dependentKey);
12667
- });
12676
+ return alias(dependentKey).oneWay();
12668
12677
  };
12669
12678
 
12670
12679
 
@@ -12716,9 +12725,7 @@ define("ember-metal/computed",
12716
12725
  @since 1.5.0
12717
12726
  */
12718
12727
  computed.readOnly = function(dependentKey) {
12719
- return computed(dependentKey, function() {
12720
- return get(this, dependentKey);
12721
- }).readOnly();
12728
+ return alias(dependentKey).readOnly();
12722
12729
  };
12723
12730
  /**
12724
12731
  A computed property that acts like a standard getter and setter,
@@ -12780,10 +12787,6 @@ define("ember-metal/computed",
12780
12787
  }
12781
12788
  });
12782
12789
  };
12783
-
12784
- __exports__.ComputedProperty = ComputedProperty;
12785
- __exports__.computed = computed;
12786
- __exports__.cacheFor = cacheFor;
12787
12790
  });
12788
12791
  define("ember-metal/core",
12789
12792
  ["exports"],
@@ -12813,7 +12816,7 @@ define("ember-metal/core",
12813
12816
 
12814
12817
  @class Ember
12815
12818
  @static
12816
- @version 1.7.0-beta.1
12819
+ @version 1.7.0-beta.2
12817
12820
  */
12818
12821
 
12819
12822
  if ('undefined' === typeof Ember) {
@@ -12840,10 +12843,10 @@ define("ember-metal/core",
12840
12843
  /**
12841
12844
  @property VERSION
12842
12845
  @type String
12843
- @default '1.7.0-beta.1'
12846
+ @default '1.7.0-beta.2'
12844
12847
  @static
12845
12848
  */
12846
- Ember.VERSION = '1.7.0-beta.1';
12849
+ Ember.VERSION = '1.7.0-beta.2';
12847
12850
 
12848
12851
  /**
12849
12852
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -13000,6 +13003,92 @@ define("ember-metal/core",
13000
13003
 
13001
13004
  __exports__["default"] = Ember;
13002
13005
  });
13006
+ define("ember-metal/dependent_keys",
13007
+ ["ember-metal/platform","ember-metal/watching","exports"],
13008
+ function(__dependency1__, __dependency2__, __exports__) {
13009
+ "use strict";
13010
+ var create = __dependency1__.create;
13011
+ var watch = __dependency2__.watch;
13012
+ var unwatch = __dependency2__.unwatch;
13013
+
13014
+ /**
13015
+ @module ember-metal
13016
+ */
13017
+
13018
+ var o_create = create;
13019
+
13020
+ // ..........................................................
13021
+ // DEPENDENT KEYS
13022
+ //
13023
+
13024
+ // data structure:
13025
+ // meta.deps = {
13026
+ // 'depKey': {
13027
+ // 'keyName': count,
13028
+ // }
13029
+ // }
13030
+
13031
+ /*
13032
+ This function returns a map of unique dependencies for a
13033
+ given object and key.
13034
+ */
13035
+ function keysForDep(depsMeta, depKey) {
13036
+ var keys = depsMeta[depKey];
13037
+ if (!keys) {
13038
+ // if there are no dependencies yet for a the given key
13039
+ // create a new empty list of dependencies for the key
13040
+ keys = depsMeta[depKey] = {};
13041
+ } else if (!depsMeta.hasOwnProperty(depKey)) {
13042
+ // otherwise if the dependency list is inherited from
13043
+ // a superclass, clone the hash
13044
+ keys = depsMeta[depKey] = o_create(keys);
13045
+ }
13046
+ return keys;
13047
+ }
13048
+
13049
+ function metaForDeps(meta) {
13050
+ return keysForDep(meta, 'deps');
13051
+ }
13052
+
13053
+ function addDependentKeys(desc, obj, keyName, meta) {
13054
+ // the descriptor has a list of dependent keys, so
13055
+ // add all of its dependent keys.
13056
+ var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
13057
+ if (!depKeys) return;
13058
+
13059
+ depsMeta = metaForDeps(meta);
13060
+
13061
+ for(idx = 0, len = depKeys.length; idx < len; idx++) {
13062
+ depKey = depKeys[idx];
13063
+ // Lookup keys meta for depKey
13064
+ keys = keysForDep(depsMeta, depKey);
13065
+ // Increment the number of times depKey depends on keyName.
13066
+ keys[keyName] = (keys[keyName] || 0) + 1;
13067
+ // Watch the depKey
13068
+ watch(obj, depKey, meta);
13069
+ }
13070
+ }
13071
+
13072
+ __exports__.addDependentKeys = addDependentKeys;function removeDependentKeys(desc, obj, keyName, meta) {
13073
+ // the descriptor has a list of dependent keys, so
13074
+ // remove all of its dependent keys.
13075
+ var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
13076
+ if (!depKeys) return;
13077
+
13078
+ depsMeta = metaForDeps(meta);
13079
+
13080
+ for(idx = 0, len = depKeys.length; idx < len; idx++) {
13081
+ depKey = depKeys[idx];
13082
+ // Lookup keys meta for depKey
13083
+ keys = keysForDep(depsMeta, depKey);
13084
+ // Decrement the number of times depKey depends on keyName.
13085
+ keys[keyName] = (keys[keyName] || 0) - 1;
13086
+ // Unwatch the depKey
13087
+ unwatch(obj, depKey, meta);
13088
+ }
13089
+ }
13090
+ __exports__.removeDependentKeys = removeDependentKeys;
13091
+ });
13003
13092
  define("ember-metal/enumerable_utils",
13004
13093
  ["ember-metal/array","exports"],
13005
13094
  function(__dependency1__, __exports__) {
@@ -16033,6 +16122,7 @@ define("ember-metal/properties",
16033
16122
  } else {
16034
16123
  obj[keyName] = undefined; // make enumerable
16035
16124
  }
16125
+ if (desc.setup) { desc.setup(obj, keyName); }
16036
16126
  } else {
16037
16127
  descs[keyName] = undefined; // shadow descriptor in proto
16038
16128
  if (desc == null) {
@@ -18149,6 +18239,9 @@ define("ember-metal/watch_key",
18149
18239
  if (!watching[keyName]) {
18150
18240
  watching[keyName] = 1;
18151
18241
 
18242
+ var desc = m.descs[keyName];
18243
+ if (desc && desc.willWatch) { desc.willWatch(obj, keyName); }
18244
+
18152
18245
  if ('function' === typeof obj.willWatchProperty) {
18153
18246
  obj.willWatchProperty(keyName);
18154
18247
  }
@@ -18173,6 +18266,9 @@ define("ember-metal/watch_key",
18173
18266
  if (watching[keyName] === 1) {
18174
18267
  watching[keyName] = 0;
18175
18268
 
18269
+ var desc = m.descs[keyName];
18270
+ if (desc && desc.didUnwatch) { desc.didUnwatch(obj, keyName); }
18271
+
18176
18272
  if ('function' === typeof obj.didUnwatchProperty) {
18177
18273
  obj.didUnwatchProperty(keyName);
18178
18274
  }
@@ -19845,7 +19941,7 @@ define("ember-routing-handlebars/helpers/render",
19845
19941
  var set = __dependency4__.set;
19846
19942
  var camelize = __dependency5__.camelize;
19847
19943
  var generateControllerFactory = __dependency6__.generateControllerFactory;
19848
- var generateController = __dependency6__.default;
19944
+ var generateController = __dependency6__["default"];
19849
19945
  var handlebarsGet = __dependency7__.handlebarsGet;
19850
19946
  var viewHelper = __dependency8__.viewHelper;
19851
19947
 
@@ -20108,8 +20204,8 @@ define("ember-routing-handlebars/helpers/shared",
20108
20204
  __exports__.resolvePaths = resolvePaths;
20109
20205
  });
20110
20206
  define("ember-routing",
20111
- ["ember-handlebars","ember-metal/core","ember-routing/ext/run_loop","ember-routing/ext/controller","ember-routing/ext/view","ember-routing/location/api","ember-routing/location/none_location","ember-routing/location/hash_location","ember-routing/location/history_location","ember-routing/location/auto_location","ember-routing/system/controller_for","ember-routing/system/dsl","ember-routing/system/router","ember-routing/system/route","exports"],
20112
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __exports__) {
20207
+ ["ember-handlebars","ember-metal/core","ember-routing/ext/run_loop","ember-routing/ext/controller","ember-routing/ext/view","ember-routing/location/api","ember-routing/location/none_location","ember-routing/location/hash_location","ember-routing/location/history_location","ember-routing/location/auto_location","ember-routing/system/generate_controller","ember-routing/system/controller_for","ember-routing/system/dsl","ember-routing/system/router","ember-routing/system/route","exports"],
20208
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) {
20113
20209
  "use strict";
20114
20210
  /**
20115
20211
  Ember Routing
@@ -20130,12 +20226,12 @@ define("ember-routing",
20130
20226
  var HistoryLocation = __dependency9__["default"];
20131
20227
  var AutoLocation = __dependency10__["default"];
20132
20228
 
20133
- var controllerFor = __dependency11__.controllerFor;
20134
20229
  var generateControllerFactory = __dependency11__.generateControllerFactory;
20135
- var generateController = __dependency11__.generateController;
20136
- var RouterDSL = __dependency12__["default"];
20137
- var Router = __dependency13__["default"];
20138
- var Route = __dependency14__["default"];
20230
+ var generateController = __dependency11__["default"];
20231
+ var controllerFor = __dependency12__["default"];
20232
+ var RouterDSL = __dependency13__["default"];
20233
+ var Router = __dependency14__["default"];
20234
+ var Route = __dependency15__["default"];
20139
20235
 
20140
20236
  Ember.Location = EmberLocation;
20141
20237
  Ember.AutoLocation = AutoLocation;
@@ -23233,55 +23329,122 @@ define("ember-routing/system/route",
23233
23329
  },
23234
23330
 
23235
23331
  /**
23236
- Renders a template into an outlet.
23332
+ `render` is used to render a template into a region of another template
23333
+ (indicated by an `{{outlet}}`). `render` is used both during the entry
23334
+ phase of routing (via the `renderTemplate` hook) and later in response to
23335
+ user interaction.
23237
23336
 
23238
- This method has a number of defaults, based on the name of the
23239
- route specified in the router.
23337
+ For example, given the following minimal router and templates:
23240
23338
 
23241
- For example:
23339
+ ```js
23340
+ Router.map(function() {
23341
+ this.resource('photos');
23342
+ });
23343
+ ```
23344
+
23345
+ ```handlebars
23346
+ <!-- application.hbs -->
23347
+ <div class='something-in-the-app-hbs'>
23348
+ {{outlet "anOutletName"}}
23349
+ </div>
23350
+ ```
23351
+
23352
+ ```handlebars
23353
+ <!-- photos.hbs -->
23354
+ <h1>Photos</h1>
23355
+ ```
23356
+
23357
+ You can render `photos.hbs` into the `"anOutletName"` outlet of
23358
+ `application.hbs` by calling `render`:
23242
23359
 
23243
23360
  ```js
23244
- App.Router.map(function() {
23245
- this.route('index');
23246
- this.resource('post', {path: '/posts/:post_id'});
23361
+ // posts route
23362
+ Ember.Route.extend({
23363
+ renderTemplate: function(){
23364
+ this.render('posts', {
23365
+ into: 'application',
23366
+ outlet: 'anOutletName'
23367
+ })
23368
+ }
23247
23369
  });
23370
+ ```
23248
23371
 
23249
- App.PostRoute = App.Route.extend({
23250
- renderTemplate: function() {
23251
- this.render();
23372
+ `render` additionally allows you to supply which `view`, `controller`, and
23373
+ `model` objects should be loaded and associated with the rendered template.
23374
+
23375
+
23376
+ ```js
23377
+ // posts route
23378
+ Ember.Route.extend({
23379
+ renderTemplate: function(controller, model){
23380
+ this.render('posts', { // the template to render, referenced by name
23381
+ into: 'application', // the template to render into, referenced by name
23382
+ outlet: 'anOutletName', // the outlet inside `options.template` to render into.
23383
+ view: 'aViewName', // the view to use for this template, referenced by name
23384
+ controller: 'someControllerName', // the controller to use for this template, referenced by name
23385
+ model: model // the model to set on `options.controller`.
23386
+ })
23252
23387
  }
23253
23388
  });
23254
23389
  ```
23255
23390
 
23256
- The name of the `PostRoute`, as defined by the router, is `post`.
23391
+ The string values provided for the template name, view, and controller
23392
+ will eventually pass through to the resolver for lookup. See
23393
+ Ember.Resolver for how these are mapped to JavaScript objects in your
23394
+ application.
23257
23395
 
23258
- By default, render will:
23396
+ Not all options need to be passed to `render`. Default values will be used
23397
+ based on the name of the route specified in the router or the Route's
23398
+ `controllerName`, `viewName` and and `templateName` properties.
23259
23399
 
23260
- * render the `post` template
23261
- * with the `post` view (`PostView`) for event handling, if one exists
23262
- * and the `post` controller (`PostController`), if one exists
23263
- * into the `main` outlet of the `application` template
23400
+ For example:
23264
23401
 
23265
- You can override this behavior:
23402
+ ```js
23403
+ // router
23404
+ Router.map(function() {
23405
+ this.route('index');
23406
+ this.resource('post', {path: '/posts/:post_id'});
23407
+ });
23408
+ ```
23266
23409
 
23267
23410
  ```js
23268
- App.PostRoute = App.Route.extend({
23411
+ // post route
23412
+ PostRoute = App.Route.extend({
23269
23413
  renderTemplate: function() {
23270
- this.render('myPost', { // the template to render
23271
- into: 'index', // the template to render into
23272
- outlet: 'detail', // the name of the outlet in that template
23273
- controller: 'blogPost' // the controller to use for the template
23274
- });
23414
+ this.render(); // all defaults apply
23275
23415
  }
23276
23416
  });
23277
23417
  ```
23278
23418
 
23279
- Remember that the controller's `model` will be the route's model. In
23280
- this case, the default model will be `App.Post.find(params.post_id)`.
23419
+ The name of the `PostRoute`, defined by the router, is `post`.
23420
+
23421
+ The following equivalent default options will be applied when
23422
+ the Route calls `render`:
23423
+
23424
+ ```js
23425
+ //
23426
+ this.render('post', { // the template name associated with 'post' Route
23427
+ into: 'application', // the parent route to 'post' Route
23428
+ outlet: 'main', // {{outlet}} and {{outlet 'main' are synonymous}},
23429
+ view: 'post', // the view associated with the 'post' Route
23430
+ controller: 'post', // the controller associated with the 'post' Route
23431
+ })
23432
+ ```
23433
+
23434
+ By default the controller's `model` will be the route's model, so it does not
23435
+ need to be passed unless you wish to change which model is being used.
23281
23436
 
23282
23437
  @method render
23283
23438
  @param {String} name the name of the template to render
23284
23439
  @param {Object} options the options
23440
+ @param {String} options.into the template to render into,
23441
+ referenced by name. Defaults to the parent template
23442
+ @param {String} options.outlet the outlet inside `options.template` to render into.
23443
+ Defaults to 'main'
23444
+ @param {String} options.controller the controller to use for this template,
23445
+ referenced by name. Defaults to the Route's paired controller
23446
+ @param {String} options.model the model object to set on `options.controller`
23447
+ Defaults to the return value of the Route's model hook
23285
23448
  */
23286
23449
  render: function(name, options) {
23287
23450
  Ember.assert("The name in the given arguments is undefined", arguments.length > 0 ? !isNone(arguments[0]) : true);
@@ -23294,6 +23457,7 @@ define("ember-routing/system/route",
23294
23457
  }
23295
23458
 
23296
23459
  options = options || {};
23460
+ options.namePassed = namePassed;
23297
23461
 
23298
23462
  var templateName;
23299
23463
 
@@ -23723,10 +23887,10 @@ define("ember-routing/system/route",
23723
23887
 
23724
23888
  if (options.controller) {
23725
23889
  controller = options.controller;
23726
- } else if (namedController = route.container.lookup('controller:' + name)) {
23727
- controller = namedController;
23890
+ } else if (options.namePassed) {
23891
+ controller = route.container.lookup('controller:' + name) || route.controllerName || route.routeName;
23728
23892
  } else {
23729
- controller = route.controllerName || route.routeName;
23893
+ controller = route.controllerName || route.container.lookup('controller:' + name);
23730
23894
  }
23731
23895
 
23732
23896
  if (typeof controller === 'string') {
@@ -24095,7 +24259,7 @@ define("ember-routing/system/router",
24095
24259
  var location = get(this, 'location');
24096
24260
  var rootURL = get(this, 'rootURL');
24097
24261
 
24098
- if (rootURL && !this.container.has('-location-setting:root-url')) {
24262
+ if (rootURL && this.container && !this.container.has('-location-setting:root-url')) {
24099
24263
  this.container.register('-location-setting:root-url', rootURL, { instantiate: false });
24100
24264
  }
24101
24265
 
@@ -24417,16 +24581,7 @@ define("ember-routing/system/router",
24417
24581
  return;
24418
24582
  }
24419
24583
 
24420
- var errorArgs = ['Error while processing route: ' + transition.targetName];
24421
-
24422
- if (error) {
24423
- if (error.message) { errorArgs.push(error.message); }
24424
- if (error.stack) { errorArgs.push(error.stack); }
24425
-
24426
- if (typeof error === "string") { errorArgs.push(error); }
24427
- }
24428
-
24429
- Ember.Logger.error.apply(this, errorArgs);
24584
+ logError(error, 'Error while processing route: ' + transition.targetName);
24430
24585
  },
24431
24586
 
24432
24587
  loading: function(transition, originRoute) {
@@ -24457,6 +24612,21 @@ define("ember-routing/system/router",
24457
24612
  }
24458
24613
  };
24459
24614
 
24615
+ function logError(error, initialMessage) {
24616
+ var errorArgs = [];
24617
+
24618
+ if (initialMessage) { errorArgs.push(initialMessage); }
24619
+
24620
+ if (error) {
24621
+ if (error.message) { errorArgs.push(error.message); }
24622
+ if (error.stack) { errorArgs.push(error.stack); }
24623
+
24624
+ if (typeof error === "string") { errorArgs.push(error); }
24625
+ }
24626
+
24627
+ Ember.Logger.error.apply(this, errorArgs);
24628
+ }
24629
+
24460
24630
  function findChildRouteName(parentRoute, originatingChildRoute, name) {
24461
24631
  var router = parentRoute.router;
24462
24632
  var childName;
@@ -24629,7 +24799,7 @@ define("ember-routing/system/router",
24629
24799
  } else if (error.name === 'TransitionAborted') {
24630
24800
  // just ignore TransitionAborted here
24631
24801
  } else {
24632
- throw error;
24802
+ logError(error);
24633
24803
  }
24634
24804
 
24635
24805
  return error;
@@ -35173,11 +35343,11 @@ define("ember-testing/helpers",
35173
35343
  run(app, app.handleURL, url);
35174
35344
  }
35175
35345
 
35176
- return wait(app);
35346
+ return app.testHelpers.wait();
35177
35347
  }
35178
35348
 
35179
35349
  function click(app, selector, context) {
35180
- var $el = findWithAssert(app, selector, context);
35350
+ var $el = app.testHelpers.findWithAssert(selector, context);
35181
35351
  run($el, 'mousedown');
35182
35352
 
35183
35353
  if ($el.is(':input')) {
@@ -35199,11 +35369,12 @@ define("ember-testing/helpers",
35199
35369
  run($el, 'mouseup');
35200
35370
  run($el, 'click');
35201
35371
 
35202
- return wait(app);
35372
+ return app.testHelpers.wait();
35203
35373
  }
35204
35374
 
35205
35375
  function triggerEvent(app, selector, context, type, options){
35206
35376
  if (arguments.length === 3) {
35377
+ options = type;
35207
35378
  type = context;
35208
35379
  context = null;
35209
35380
  }
@@ -35212,13 +35383,13 @@ define("ember-testing/helpers",
35212
35383
  options = {};
35213
35384
  }
35214
35385
 
35215
- var $el = findWithAssert(app, selector, context);
35386
+ var $el = app.testHelpers.findWithAssert(selector, context);
35216
35387
 
35217
35388
  var event = jQuery.Event(type, options);
35218
35389
 
35219
35390
  run($el, 'trigger', event);
35220
35391
 
35221
- return wait(app);
35392
+ return app.testHelpers.wait();
35222
35393
  }
35223
35394
 
35224
35395
  function keyEvent(app, selector, context, type, keyCode) {
@@ -35228,7 +35399,7 @@ define("ember-testing/helpers",
35228
35399
  context = null;
35229
35400
  }
35230
35401
 
35231
- return triggerEvent(app, selector, context, type, { keyCode: keyCode, which: keyCode });
35402
+ return app.testHelpers.triggerEvent(selector, context, type, { keyCode: keyCode, which: keyCode });
35232
35403
  }
35233
35404
 
35234
35405
  function fillIn(app, selector, context, text) {
@@ -35237,15 +35408,15 @@ define("ember-testing/helpers",
35237
35408
  text = context;
35238
35409
  context = null;
35239
35410
  }
35240
- $el = findWithAssert(app, selector, context);
35411
+ $el = app.testHelpers.findWithAssert(selector, context);
35241
35412
  run(function() {
35242
35413
  $el.val(text).change();
35243
35414
  });
35244
- return wait(app);
35415
+ return app.testHelpers.wait();
35245
35416
  }
35246
35417
 
35247
35418
  function findWithAssert(app, selector, context) {
35248
- var $el = find(app, selector, context);
35419
+ var $el = app.testHelpers.find(selector, context);
35249
35420
  if ($el.length === 0) {
35250
35421
  throw new EmberError("Element " + selector + " not found.");
35251
35422
  }
@@ -35261,7 +35432,7 @@ define("ember-testing/helpers",
35261
35432
  }
35262
35433
 
35263
35434
  function andThen(app, callback) {
35264
- return wait(app, callback(app));
35435
+ return app.testHelpers.wait(callback(app));
35265
35436
  }
35266
35437
 
35267
35438
  function wait(app, value) {
@@ -35428,7 +35599,7 @@ define("ember-testing/helpers",
35428
35599
  .fillIn('#password', username)
35429
35600
  .click('.submit')
35430
35601
 
35431
- return wait();
35602
+ return app.testHelpers.wait();
35432
35603
  });
35433
35604
 
35434
35605
  @method wait
@@ -35497,7 +35668,7 @@ define("ember-testing/helpers",
35497
35668
  helper('currentURL', currentURL);
35498
35669
 
35499
35670
  /**
35500
- Triggers the given event on the element identified by the provided selector.
35671
+ Triggers the given DOM event on the element identified by the provided selector.
35501
35672
 
35502
35673
  Example:
35503
35674
 
@@ -35513,8 +35684,10 @@ define("ember-testing/helpers",
35513
35684
 
35514
35685
  @method triggerEvent
35515
35686
  @param {String} selector jQuery selector for finding element on the DOM
35687
+ @param {String} [context] jQuery selector that will limit the selector
35688
+ argument to find only within the context's children
35516
35689
  @param {String} type The event type to be triggered.
35517
- @param {String} options The options to be passed to jQuery.Event.
35690
+ @param {Object} options The options to be passed to jQuery.Event.
35518
35691
  @return {RSVP.Promise}
35519
35692
  @since 1.5.0
35520
35693
  */
@@ -35689,6 +35862,13 @@ define("ember-testing/test",
35689
35862
  @namespace Ember
35690
35863
  */
35691
35864
  var Test = {
35865
+ /**
35866
+ Hash containing all known test helpers.
35867
+
35868
+ @property _helpers
35869
+ @private
35870
+ */
35871
+ _helpers: helpers,
35692
35872
 
35693
35873
  /**
35694
35874
  `registerHelper` is used to register a test helper that will be injected
@@ -38387,7 +38567,7 @@ define("ember-views/views/container_view",
38387
38567
 
38388
38568
  length: computed(function () {
38389
38569
  return this._childViews.length;
38390
- }).volatile(),
38570
+ })["volatile"](),
38391
38571
 
38392
38572
  /**
38393
38573
  Instructs each child view to render to the passed render buffer.
@@ -40040,7 +40220,7 @@ define("ember-views/views/view",
40040
40220
  } else {
40041
40221
  return get(this, '_context');
40042
40222
  }
40043
- }).volatile(),
40223
+ })["volatile"](),
40044
40224
 
40045
40225
  /**
40046
40226
  Private copy of the view's template context. This can be set directly
@@ -41594,7 +41774,12 @@ define("ember-views/views/view",
41594
41774
  if (isNone(value) || value === false) {
41595
41775
  // `null`, `undefined` or `false` should remove attribute
41596
41776
  elem.removeAttr(name);
41597
- elem.prop(name, '');
41777
+ // In IE8 `prop` couldn't remove attribute when name is `required`.
41778
+ if (name === 'required') {
41779
+ elem.removeProp(name);
41780
+ } else {
41781
+ elem.prop(name, '');
41782
+ }
41598
41783
  } else if (value !== elem.prop(name)) {
41599
41784
  // value should always be properties
41600
41785
  elem.prop(name, value);
@@ -43824,7 +44009,7 @@ define("router/router",
43824
44009
  // Resolve with the final handler.
43825
44010
  return handlerInfos[handlerInfos.length - 1].handler;
43826
44011
  } catch(e) {
43827
- if (!(e instanceof TransitionAborted)) {
44012
+ if (!((e instanceof TransitionAborted))) {
43828
44013
  //var erroneousHandler = handlerInfos.pop();
43829
44014
  var infos = transition.state.handlerInfos;
43830
44015
  transition.trigger(true, 'error', e, transition, infos[infos.length-1].handler);