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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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);