ember-source 1.9.0.beta.1.1 → 1.9.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ember-source might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +219 -116
- data/dist/ember-testing.js +1 -1
- data/dist/ember-tests.js +1380 -612
- data/dist/ember-tests.prod.js +1380 -612
- data/dist/ember.js +325 -227
- data/dist/ember.min.js +12 -12
- data/dist/ember.prod.js +321 -228
- metadata +2 -2
data/dist/ember.js
CHANGED
@@ -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.9.0-beta.
|
8
|
+
* @version 1.9.0-beta.3
|
9
9
|
*/
|
10
10
|
|
11
11
|
(function() {
|
@@ -193,6 +193,23 @@ enifed("backburner",
|
|
193
193
|
}
|
194
194
|
},
|
195
195
|
|
196
|
+
join: function(target, method /*, args */) {
|
197
|
+
if (this.currentInstance) {
|
198
|
+
if (!method) {
|
199
|
+
method = target;
|
200
|
+
target = null;
|
201
|
+
}
|
202
|
+
|
203
|
+
if (isString(method)) {
|
204
|
+
method = target[method];
|
205
|
+
}
|
206
|
+
|
207
|
+
return method.apply(target, slice.call(arguments, 2));
|
208
|
+
} else {
|
209
|
+
return this.run.apply(this, arguments);
|
210
|
+
}
|
211
|
+
},
|
212
|
+
|
196
213
|
defer: function(queueName, target, method /* , args */) {
|
197
214
|
if (!method) {
|
198
215
|
method = target;
|
@@ -1178,20 +1195,6 @@ enifed("container/container",
|
|
1178
1195
|
return container;
|
1179
1196
|
},
|
1180
1197
|
|
1181
|
-
/**
|
1182
|
-
Sets a key-value pair on the current container. If a parent container,
|
1183
|
-
has the same key, once set on a child, the parent and child will diverge
|
1184
|
-
as expected.
|
1185
|
-
|
1186
|
-
@method set
|
1187
|
-
@param {Object} object
|
1188
|
-
@param {String} key
|
1189
|
-
@param {any} value
|
1190
|
-
*/
|
1191
|
-
set: function(object, key, value) {
|
1192
|
-
object[key] = value;
|
1193
|
-
},
|
1194
|
-
|
1195
1198
|
/**
|
1196
1199
|
Registers a factory for later injection.
|
1197
1200
|
|
@@ -1447,11 +1450,13 @@ enifed("container/container",
|
|
1447
1450
|
|
1448
1451
|
/**
|
1449
1452
|
@method options
|
1450
|
-
@param {String}
|
1453
|
+
@param {String} fullName
|
1451
1454
|
@param {Object} options
|
1452
1455
|
*/
|
1453
|
-
options: function(
|
1454
|
-
|
1456
|
+
options: function(fullName, options) {
|
1457
|
+
options = options || {};
|
1458
|
+
var normalizedName = this.normalize(fullName);
|
1459
|
+
this._options[normalizedName] = options;
|
1455
1460
|
},
|
1456
1461
|
|
1457
1462
|
/**
|
@@ -2491,10 +2496,10 @@ enifed("ember-application/system/application",
|
|
2491
2496
|
names by setting the application's `customEvents` property:
|
2492
2497
|
|
2493
2498
|
```javascript
|
2494
|
-
App = Ember.Application.create({
|
2499
|
+
var App = Ember.Application.create({
|
2495
2500
|
customEvents: {
|
2496
2501
|
// add support for the paste event
|
2497
|
-
paste:
|
2502
|
+
paste: 'paste'
|
2498
2503
|
}
|
2499
2504
|
});
|
2500
2505
|
```
|
@@ -2508,7 +2513,7 @@ enifed("ember-application/system/application",
|
|
2508
2513
|
should be delegated, set your application's `rootElement` property:
|
2509
2514
|
|
2510
2515
|
```javascript
|
2511
|
-
|
2516
|
+
var App = Ember.Application.create({
|
2512
2517
|
rootElement: '#ember-app'
|
2513
2518
|
});
|
2514
2519
|
```
|
@@ -2551,7 +2556,7 @@ enifed("ember-application/system/application",
|
|
2551
2556
|
the `LOG_TRANSITIONS_INTERNAL` flag:
|
2552
2557
|
|
2553
2558
|
```javascript
|
2554
|
-
|
2559
|
+
var App = Ember.Application.create({
|
2555
2560
|
LOG_TRANSITIONS: true, // basic logging of successful transitions
|
2556
2561
|
LOG_TRANSITIONS_INTERNAL: true // detailed logging of all routing steps
|
2557
2562
|
});
|
@@ -2620,10 +2625,10 @@ enifed("ember-application/system/application",
|
|
2620
2625
|
corresponding view method name as the value. For example:
|
2621
2626
|
|
2622
2627
|
```javascript
|
2623
|
-
App = Ember.Application.create({
|
2628
|
+
var App = Ember.Application.create({
|
2624
2629
|
customEvents: {
|
2625
2630
|
// add support for the paste event
|
2626
|
-
paste:
|
2631
|
+
paste: 'paste'
|
2627
2632
|
}
|
2628
2633
|
});
|
2629
2634
|
```
|
@@ -2753,10 +2758,11 @@ enifed("ember-application/system/application",
|
|
2753
2758
|
Example:
|
2754
2759
|
|
2755
2760
|
```javascript
|
2756
|
-
App = Ember.Application.create();
|
2761
|
+
var App = Ember.Application.create();
|
2762
|
+
|
2757
2763
|
App.deferReadiness();
|
2758
|
-
|
2759
|
-
|
2764
|
+
// Ember.$ is a reference to the jQuery object/function
|
2765
|
+
Ember.$.getJSON('/auth-token', function(token) {
|
2760
2766
|
App.token = token;
|
2761
2767
|
App.advanceReadiness();
|
2762
2768
|
});
|
@@ -2802,7 +2808,8 @@ enifed("ember-application/system/application",
|
|
2802
2808
|
|
2803
2809
|
```javascript
|
2804
2810
|
var App = Ember.Application.create();
|
2805
|
-
|
2811
|
+
|
2812
|
+
App.Orange = Ember.Object.extend();
|
2806
2813
|
App.register('fruit:favorite', App.Orange);
|
2807
2814
|
```
|
2808
2815
|
|
@@ -2813,8 +2820,8 @@ enifed("ember-application/system/application",
|
|
2813
2820
|
An example of registering a controller with a non-standard name:
|
2814
2821
|
|
2815
2822
|
```javascript
|
2816
|
-
var App = Ember.Application.create()
|
2817
|
-
|
2823
|
+
var App = Ember.Application.create();
|
2824
|
+
var Session = Ember.Controller.extend();
|
2818
2825
|
|
2819
2826
|
App.register('controller:session', Session);
|
2820
2827
|
|
@@ -2839,10 +2846,10 @@ enifed("ember-application/system/application",
|
|
2839
2846
|
App.Email = Ember.Object.extend();
|
2840
2847
|
App.session = Ember.Object.create();
|
2841
2848
|
|
2842
|
-
App.register('model:user', App.Person, {singleton: false });
|
2849
|
+
App.register('model:user', App.Person, { singleton: false });
|
2843
2850
|
App.register('fruit:favorite', App.Orange);
|
2844
|
-
App.register('communication:main', App.Email, {singleton: false});
|
2845
|
-
App.register('session', App.session, {instantiate: false});
|
2851
|
+
App.register('communication:main', App.Email, { singleton: false });
|
2852
|
+
App.register('session', App.session, { instantiate: false });
|
2846
2853
|
```
|
2847
2854
|
|
2848
2855
|
@method register
|
@@ -2866,8 +2873,8 @@ enifed("ember-application/system/application",
|
|
2866
2873
|
An example of providing a session object to all controllers:
|
2867
2874
|
|
2868
2875
|
```javascript
|
2869
|
-
var App = Ember.Application.create()
|
2870
|
-
|
2876
|
+
var App = Ember.Application.create();
|
2877
|
+
var Session = Ember.Object.extend({ isAuthenticated: false });
|
2871
2878
|
|
2872
2879
|
// A factory must be registered before it can be injected
|
2873
2880
|
App.register('session:main', Session);
|
@@ -2894,7 +2901,7 @@ enifed("ember-application/system/application",
|
|
2894
2901
|
directly (via `create` or `new`) bypasses the dependency injection
|
2895
2902
|
system.
|
2896
2903
|
|
2897
|
-
Ember-Data instantiates its models in a unique manner, and consequently
|
2904
|
+
**Note:** Ember-Data instantiates its models in a unique manner, and consequently
|
2898
2905
|
injections onto models (or all models) will not work as expected. Injections
|
2899
2906
|
on models can be enabled by setting `Ember.MODEL_FACTORY_INJECTIONS`
|
2900
2907
|
to `true`.
|
@@ -2966,24 +2973,23 @@ enifed("ember-application/system/application",
|
|
2966
2973
|
Typical Example:
|
2967
2974
|
|
2968
2975
|
```javascript
|
2969
|
-
|
2970
2976
|
var App;
|
2971
2977
|
|
2972
2978
|
run(function() {
|
2973
2979
|
App = Ember.Application.create();
|
2974
2980
|
});
|
2975
2981
|
|
2976
|
-
module(
|
2982
|
+
module('acceptance test', {
|
2977
2983
|
setup: function() {
|
2978
2984
|
App.reset();
|
2979
2985
|
}
|
2980
2986
|
});
|
2981
2987
|
|
2982
|
-
test(
|
2988
|
+
test('first test', function() {
|
2983
2989
|
// App is freshly reset
|
2984
2990
|
});
|
2985
2991
|
|
2986
|
-
test(
|
2992
|
+
test('second test', function() {
|
2987
2993
|
// App is again freshly reset
|
2988
2994
|
});
|
2989
2995
|
```
|
@@ -2995,14 +3001,13 @@ enifed("ember-application/system/application",
|
|
2995
3001
|
to the app becoming ready.
|
2996
3002
|
|
2997
3003
|
```javascript
|
2998
|
-
|
2999
3004
|
var App;
|
3000
3005
|
|
3001
3006
|
run(function() {
|
3002
3007
|
App = Ember.Application.create();
|
3003
3008
|
});
|
3004
3009
|
|
3005
|
-
module(
|
3010
|
+
module('acceptance test', {
|
3006
3011
|
setup: function() {
|
3007
3012
|
run(function() {
|
3008
3013
|
App.reset();
|
@@ -3011,12 +3016,13 @@ enifed("ember-application/system/application",
|
|
3011
3016
|
}
|
3012
3017
|
});
|
3013
3018
|
|
3014
|
-
test(
|
3019
|
+
test('first test', function() {
|
3015
3020
|
ok(true, 'something before app is initialized');
|
3016
3021
|
|
3017
3022
|
run(function() {
|
3018
3023
|
App.advanceReadiness();
|
3019
3024
|
});
|
3025
|
+
|
3020
3026
|
ok(true, 'something after app is initialized');
|
3021
3027
|
});
|
3022
3028
|
```
|
@@ -3185,8 +3191,9 @@ enifed("ember-application/system/application",
|
|
3185
3191
|
```javascript
|
3186
3192
|
Ember.Application.initializer({
|
3187
3193
|
name: 'namedInitializer',
|
3194
|
+
|
3188
3195
|
initialize: function(container, application) {
|
3189
|
-
Ember.debug(
|
3196
|
+
Ember.debug('Running namedInitializer!');
|
3190
3197
|
}
|
3191
3198
|
});
|
3192
3199
|
```
|
@@ -3200,8 +3207,9 @@ enifed("ember-application/system/application",
|
|
3200
3207
|
```javascript
|
3201
3208
|
Ember.Application.initializer({
|
3202
3209
|
name: 'first',
|
3210
|
+
|
3203
3211
|
initialize: function(container, application) {
|
3204
|
-
Ember.debug(
|
3212
|
+
Ember.debug('First initializer!');
|
3205
3213
|
}
|
3206
3214
|
});
|
3207
3215
|
|
@@ -3217,7 +3225,7 @@ enifed("ember-application/system/application",
|
|
3217
3225
|
after: 'first',
|
3218
3226
|
|
3219
3227
|
initialize: function(container, application) {
|
3220
|
-
Ember.debug(
|
3228
|
+
Ember.debug('Second initializer!');
|
3221
3229
|
}
|
3222
3230
|
});
|
3223
3231
|
|
@@ -3234,7 +3242,7 @@ enifed("ember-application/system/application",
|
|
3234
3242
|
before: 'first',
|
3235
3243
|
|
3236
3244
|
initialize: function(container, application) {
|
3237
|
-
Ember.debug(
|
3245
|
+
Ember.debug('Pre initializer!');
|
3238
3246
|
}
|
3239
3247
|
});
|
3240
3248
|
|
@@ -3252,7 +3260,7 @@ enifed("ember-application/system/application",
|
|
3252
3260
|
after: ['first', 'second'],
|
3253
3261
|
|
3254
3262
|
initialize: function(container, application) {
|
3255
|
-
Ember.debug(
|
3263
|
+
Ember.debug('Post initializer!');
|
3256
3264
|
}
|
3257
3265
|
});
|
3258
3266
|
|
@@ -3269,10 +3277,11 @@ enifed("ember-application/system/application",
|
|
3269
3277
|
|
3270
3278
|
```javascript
|
3271
3279
|
Ember.Application.initializer({
|
3272
|
-
name:
|
3280
|
+
name: 'preload-data',
|
3273
3281
|
|
3274
3282
|
initialize: function(container, application) {
|
3275
3283
|
var store = container.lookup('store:main');
|
3284
|
+
|
3276
3285
|
store.pushPayload(preloadedData);
|
3277
3286
|
}
|
3278
3287
|
});
|
@@ -3306,6 +3315,7 @@ enifed("ember-application/system/application",
|
|
3306
3315
|
|
3307
3316
|
Ember.assert("The initializer '" + initializer.name + "' has already been registered", !this.initializers[initializer.name]);
|
3308
3317
|
Ember.assert("An initializer cannot be registered without an initialize function", canInvoke(initializer, 'initialize'));
|
3318
|
+
Ember.assert("An initializer cannot be registered without a name property", initializer.name !== undefined);
|
3309
3319
|
|
3310
3320
|
this.initializers[initializer.name] = initializer;
|
3311
3321
|
},
|
@@ -6001,24 +6011,24 @@ enifed("ember-handlebars/controls/select",
|
|
6001
6011
|
return buffer;
|
6002
6012
|
},"3":function(depth0,helpers,partials,data) {
|
6003
6013
|
var stack1;
|
6004
|
-
stack1 = helpers.each.call(depth0, "view.groupedContent", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(4, data),"inverse":this.noop,"types":["ID"],"contexts":[depth0],"data":data});
|
6014
|
+
stack1 = helpers.each.call(depth0, "group", "in", "view.groupedContent", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(4, data),"inverse":this.noop,"types":["ID","ID","ID"],"contexts":[depth0,depth0,depth0],"data":data});
|
6005
6015
|
if (stack1 != null) { data.buffer.push(stack1); }
|
6006
6016
|
else { data.buffer.push(''); }
|
6007
6017
|
},"4":function(depth0,helpers,partials,data) {
|
6008
6018
|
var escapeExpression=this.escapeExpression;
|
6009
6019
|
data.buffer.push(escapeExpression(helpers.view.call(depth0, "view.groupView", {"name":"view","hash":{
|
6010
|
-
'label': ("label"),
|
6011
|
-
'content': ("content")
|
6020
|
+
'label': ("group.label"),
|
6021
|
+
'content': ("group.content")
|
6012
6022
|
},"hashTypes":{'label': "ID",'content': "ID"},"hashContexts":{'label': depth0,'content': depth0},"types":["ID"],"contexts":[depth0],"data":data})));
|
6013
6023
|
},"6":function(depth0,helpers,partials,data) {
|
6014
6024
|
var stack1;
|
6015
|
-
stack1 = helpers.each.call(depth0, "view.content", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(7, data),"inverse":this.noop,"types":["ID"],"contexts":[depth0],"data":data});
|
6025
|
+
stack1 = helpers.each.call(depth0, "item", "in", "view.content", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(7, data),"inverse":this.noop,"types":["ID","ID","ID"],"contexts":[depth0,depth0,depth0],"data":data});
|
6016
6026
|
if (stack1 != null) { data.buffer.push(stack1); }
|
6017
6027
|
else { data.buffer.push(''); }
|
6018
6028
|
},"7":function(depth0,helpers,partials,data) {
|
6019
6029
|
var escapeExpression=this.escapeExpression;
|
6020
6030
|
data.buffer.push(escapeExpression(helpers.view.call(depth0, "view.optionView", {"name":"view","hash":{
|
6021
|
-
'content': ("")
|
6031
|
+
'content': ("item")
|
6022
6032
|
},"hashTypes":{'content': "ID"},"hashContexts":{'content': depth0},"types":["ID"],"contexts":[depth0],"data":data})));
|
6023
6033
|
},"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
|
6024
6034
|
var stack1, buffer = '';
|
@@ -6887,7 +6897,7 @@ enifed("ember-handlebars/ext",
|
|
6887
6897
|
resolveHelper = requireModule('ember-handlebars/helpers/binding')['resolveHelper'];
|
6888
6898
|
} // ES6TODO: stupid circular dep
|
6889
6899
|
|
6890
|
-
var error, view = "";
|
6900
|
+
var error, fmtError, view = "";
|
6891
6901
|
|
6892
6902
|
var options = arguments[arguments.length - 1];
|
6893
6903
|
|
@@ -6897,11 +6907,19 @@ enifed("ember-handlebars/ext",
|
|
6897
6907
|
return helper.apply(this, arguments);
|
6898
6908
|
}
|
6899
6909
|
|
6900
|
-
error = "%@ Handlebars error: Could not find property '%@' on object %@.";
|
6901
6910
|
if (options.data) {
|
6902
6911
|
view = options.data.view;
|
6903
6912
|
}
|
6904
|
-
|
6913
|
+
|
6914
|
+
if (options.name.match(/-/)) {
|
6915
|
+
error = "%@ Handlebars error: Could not find component or helper named '%@'";
|
6916
|
+
fmtError = fmt(error, [view, options.name]);
|
6917
|
+
} else {
|
6918
|
+
error = "%@ Handlebars error: Could not find property '%@' on object %@.";
|
6919
|
+
fmtError = fmt(error, [view, options.name, this]);
|
6920
|
+
}
|
6921
|
+
|
6922
|
+
throw new EmberError(fmtError);
|
6905
6923
|
}
|
6906
6924
|
|
6907
6925
|
__exports__.helperMissingHelper = helperMissingHelper;/**
|
@@ -8221,22 +8239,12 @@ enifed("ember-handlebars/helpers/each",
|
|
8221
8239
|
of the base Handlebars `{{#each}}` helper.
|
8222
8240
|
|
8223
8241
|
The default behavior of `{{#each}}` is to yield its inner block once for every
|
8224
|
-
item in an array.
|
8242
|
+
item in an array.
|
8225
8243
|
|
8226
8244
|
```javascript
|
8227
8245
|
var developers = [{name: 'Yehuda'},{name: 'Tom'}, {name: 'Paul'}];
|
8228
8246
|
```
|
8229
8247
|
|
8230
|
-
```handlebars
|
8231
|
-
{{#each developers}}
|
8232
|
-
{{name}}
|
8233
|
-
{{! `this` is each developer }}
|
8234
|
-
{{/each}}
|
8235
|
-
```
|
8236
|
-
|
8237
|
-
`{{#each}}` supports an alternative syntax with element naming. This preserves
|
8238
|
-
context of the yielded block:
|
8239
|
-
|
8240
8248
|
```handlebars
|
8241
8249
|
{{#each person in developers}}
|
8242
8250
|
{{person.name}}
|
@@ -8252,8 +8260,8 @@ enifed("ember-handlebars/helpers/each",
|
|
8252
8260
|
```
|
8253
8261
|
|
8254
8262
|
```handlebars
|
8255
|
-
{{#each developerNames}}
|
8256
|
-
{{
|
8263
|
+
{{#each name in developerNames}}
|
8264
|
+
{{name}}
|
8257
8265
|
{{/each}}
|
8258
8266
|
```
|
8259
8267
|
|
@@ -8279,8 +8287,8 @@ enifed("ember-handlebars/helpers/each",
|
|
8279
8287
|
|
8280
8288
|
```handlebars
|
8281
8289
|
<ul>
|
8282
|
-
{{#each developers itemViewClass="person"}}
|
8283
|
-
{{name}}
|
8290
|
+
{{#each developer in developers itemViewClass="person"}}
|
8291
|
+
{{developer.name}}
|
8284
8292
|
{{/each}}
|
8285
8293
|
</ul>
|
8286
8294
|
```
|
@@ -8311,13 +8319,13 @@ enifed("ember-handlebars/helpers/each",
|
|
8311
8319
|
```javascript
|
8312
8320
|
App.PersonView = Ember.View.extend({
|
8313
8321
|
tagName: 'li',
|
8314
|
-
template: '{{name}}'
|
8322
|
+
template: '{{developer.name}}'
|
8315
8323
|
});
|
8316
8324
|
```
|
8317
8325
|
|
8318
8326
|
```handlebars
|
8319
8327
|
<ul>
|
8320
|
-
{{each developers itemViewClass="person"}}
|
8328
|
+
{{each developer in developers itemViewClass="person"}}
|
8321
8329
|
</ul>
|
8322
8330
|
```
|
8323
8331
|
|
@@ -8335,8 +8343,8 @@ enifed("ember-handlebars/helpers/each",
|
|
8335
8343
|
|
8336
8344
|
```handlebars
|
8337
8345
|
<ul>
|
8338
|
-
{{#each developers emptyViewClass="no-people"}}
|
8339
|
-
<li>{{name}}</li>
|
8346
|
+
{{#each developer in developers emptyViewClass="no-people"}}
|
8347
|
+
<li>{{developer.name}}</li>
|
8340
8348
|
{{/each}}
|
8341
8349
|
</ul>
|
8342
8350
|
```
|
@@ -8379,12 +8387,13 @@ enifed("ember-handlebars/helpers/each",
|
|
8379
8387
|
function eachHelper(path) {
|
8380
8388
|
var options = arguments[arguments.length - 1];
|
8381
8389
|
var helperName = 'each';
|
8390
|
+
var keywordName;
|
8382
8391
|
|
8383
8392
|
if (arguments.length === 4) {
|
8384
8393
|
Ember.assert("If you pass more than one argument to the each helper," +
|
8385
8394
|
" it must be in the form #each foo in bar", arguments[1] === "in");
|
8386
8395
|
|
8387
|
-
|
8396
|
+
keywordName = arguments[0];
|
8388
8397
|
path = arguments[2];
|
8389
8398
|
|
8390
8399
|
helperName += ' ' + keywordName + ' in ' + path;
|
@@ -8396,6 +8405,8 @@ enifed("ember-handlebars/helpers/each",
|
|
8396
8405
|
helperName += ' ' + path;
|
8397
8406
|
}
|
8398
8407
|
|
8408
|
+
Ember.deprecate('Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each foo in bar}}`) instead. See http://emberjs.com/guides/deprecations/#toc_more-consistent-handlebars-scope for more details.', keywordName);
|
8409
|
+
|
8399
8410
|
options.hash.emptyViewClass = Ember._MetamorphView;
|
8400
8411
|
options.hash.dataSourceBinding = path;
|
8401
8412
|
options.hashTypes.dataSourceBinding = 'STRING';
|
@@ -8654,16 +8665,6 @@ enifed("ember-handlebars/helpers/partial",
|
|
8654
8665
|
changes, the partial will be re-rendered using the new template
|
8655
8666
|
name.
|
8656
8667
|
|
8657
|
-
## Setting the partial's context with `with`
|
8658
|
-
|
8659
|
-
The `partial` helper can be used in conjunction with the `with`
|
8660
|
-
helper to set a context that will be used by the partial:
|
8661
|
-
|
8662
|
-
```handlebars
|
8663
|
-
{{#with currentUser}}
|
8664
|
-
{{partial "user_info"}}
|
8665
|
-
{{/with}}
|
8666
|
-
```
|
8667
8668
|
|
8668
8669
|
@method partial
|
8669
8670
|
@for Ember.Handlebars.helpers
|
@@ -9282,40 +9283,9 @@ enifed("ember-handlebars/helpers/with",
|
|
9282
9283
|
});
|
9283
9284
|
|
9284
9285
|
/**
|
9285
|
-
Use the `{{with}}` helper when you want to
|
9286
|
-
|
9287
|
-
|
9288
|
-
<h5>{{user.name}}</h5>
|
9289
|
-
|
9290
|
-
<div class="role">
|
9291
|
-
<h6>{{user.role.label}}</h6>
|
9292
|
-
<span class="role-id">{{user.role.id}}</span>
|
9293
|
-
|
9294
|
-
<p class="role-desc">{{user.role.description}}</p>
|
9295
|
-
</div>
|
9296
|
-
```
|
9297
|
-
|
9298
|
-
`{{with}}` can be our best friend in these cases,
|
9299
|
-
instead of writing `user.role.*` over and over, we use `{{#with user.role}}`.
|
9300
|
-
Now the context within the `{{#with}} .. {{/with}}` block is `user.role` so you can do the following:
|
9301
|
-
|
9302
|
-
```handlebars
|
9303
|
-
<h5>{{user.name}}</h5>
|
9304
|
-
|
9305
|
-
<div class="role">
|
9306
|
-
{{#with user.role}}
|
9307
|
-
<h6>{{label}}</h6>
|
9308
|
-
<span class="role-id">{{id}}</span>
|
9309
|
-
|
9310
|
-
<p class="role-desc">{{description}}</p>
|
9311
|
-
{{/with}}
|
9312
|
-
</div>
|
9313
|
-
```
|
9314
|
-
|
9315
|
-
### `as` operator
|
9316
|
-
|
9317
|
-
This operator aliases the scope to a new name. It's helpful for semantic clarity and to retain
|
9318
|
-
default scope or to reference from another `{{with}}` block.
|
9286
|
+
Use the `{{with}}` helper when you want to aliases the to a new name. It's helpful
|
9287
|
+
for semantic clarity and to retain default scope or to reference from another
|
9288
|
+
`{{with}}` block.
|
9319
9289
|
|
9320
9290
|
```handlebars
|
9321
9291
|
// posts might not be
|
@@ -9339,18 +9309,18 @@ enifed("ember-handlebars/helpers/with",
|
|
9339
9309
|
### `controller` option
|
9340
9310
|
|
9341
9311
|
Adding `controller='something'` instructs the `{{with}}` helper to create and use an instance of
|
9342
|
-
the specified controller
|
9312
|
+
the specified controller wrapping the aliased keyword.
|
9343
9313
|
|
9344
9314
|
This is very similar to using an `itemController` option with the `{{each}}` helper.
|
9345
9315
|
|
9346
9316
|
```handlebars
|
9347
|
-
{{#with users.posts controller='userBlogPosts'}}
|
9348
|
-
{{!-
|
9317
|
+
{{#with users.posts as posts controller='userBlogPosts'}}
|
9318
|
+
{{!- `posts` is wrapped in our controller instance }}
|
9349
9319
|
{{/with}}
|
9350
9320
|
```
|
9351
9321
|
|
9352
|
-
In the above example, the
|
9353
|
-
|
9322
|
+
In the above example, the `posts` keyword is now wrapped in the `userBlogPost` controller,
|
9323
|
+
which provides an elegant way to decorate the context with custom
|
9354
9324
|
functions/properties.
|
9355
9325
|
|
9356
9326
|
@method with
|
@@ -9389,6 +9359,8 @@ enifed("ember-handlebars/helpers/with",
|
|
9389
9359
|
options = localizedOptions;
|
9390
9360
|
preserveContext = true;
|
9391
9361
|
} else {
|
9362
|
+
Ember.deprecate('Using the context switching form of `{{with}}` is deprecated. Please use the keyword form (`{{with foo as bar}}`) instead. See http://emberjs.com/guides/deprecations/#toc_more-consistent-handlebars-scope for more details.');
|
9363
|
+
|
9392
9364
|
Ember.assert("You must pass exactly one argument to the with helper", arguments.length === 2);
|
9393
9365
|
Ember.assert("You must pass a block to the with helper", options.fn && options.fn !== Handlebars.VM.noop);
|
9394
9366
|
|
@@ -11016,7 +10988,9 @@ enifed("ember-metal/binding",
|
|
11016
10988
|
addObserver(obj, fromPath, this, this.fromDidChange);
|
11017
10989
|
|
11018
10990
|
// if the binding is a two-way binding, also set up an observer on the target
|
11019
|
-
if (!this._oneWay) {
|
10991
|
+
if (!this._oneWay) {
|
10992
|
+
addObserver(obj, toPath, this, this.toDidChange);
|
10993
|
+
}
|
11020
10994
|
|
11021
10995
|
this._readyToSync = true;
|
11022
10996
|
|
@@ -11041,7 +11015,9 @@ enifed("ember-metal/binding",
|
|
11041
11015
|
removeObserver(obj, this._from, this, this.fromDidChange);
|
11042
11016
|
|
11043
11017
|
// if the binding is two-way, remove the observer from the target as well
|
11044
|
-
if (twoWay) {
|
11018
|
+
if (twoWay) {
|
11019
|
+
removeObserver(obj, this._to, this, this.toDidChange);
|
11020
|
+
}
|
11045
11021
|
|
11046
11022
|
this._readyToSync = false; // disable scheduled syncs...
|
11047
11023
|
return this;
|
@@ -11427,7 +11403,9 @@ enifed("ember-metal/chains",
|
|
11427
11403
|
var queue = pendingQueue;
|
11428
11404
|
pendingQueue = [];
|
11429
11405
|
|
11430
|
-
forEach.call(queue, function(q) {
|
11406
|
+
forEach.call(queue, function(q) {
|
11407
|
+
q[0].add(q[1]);
|
11408
|
+
});
|
11431
11409
|
|
11432
11410
|
warn('Watching an undefined global, Ember expects watched globals to be' +
|
11433
11411
|
' setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
|
@@ -11443,7 +11421,9 @@ enifed("ember-metal/chains",
|
|
11443
11421
|
nodes = m.chainWatchers = {};
|
11444
11422
|
}
|
11445
11423
|
|
11446
|
-
if (!nodes[keyName]) {
|
11424
|
+
if (!nodes[keyName]) {
|
11425
|
+
nodes[keyName] = [];
|
11426
|
+
}
|
11447
11427
|
nodes[keyName].push(node);
|
11448
11428
|
watchKey(obj, keyName, m);
|
11449
11429
|
}
|
@@ -11487,7 +11467,9 @@ enifed("ember-metal/chains",
|
|
11487
11467
|
this._paths = {};
|
11488
11468
|
if (this._watching) {
|
11489
11469
|
this._object = parent.value();
|
11490
|
-
if (this._object) {
|
11470
|
+
if (this._object) {
|
11471
|
+
addChainWatcher(this._object, this._key, this);
|
11472
|
+
}
|
11491
11473
|
}
|
11492
11474
|
|
11493
11475
|
// Special-case: the EachProxy relies on immediate evaluation to
|
@@ -11507,9 +11489,13 @@ enifed("ember-metal/chains",
|
|
11507
11489
|
|
11508
11490
|
var meta = obj['__ember_meta__'];
|
11509
11491
|
// check if object meant only to be a prototype
|
11510
|
-
if (meta && meta.proto === obj)
|
11492
|
+
if (meta && meta.proto === obj) {
|
11493
|
+
return undefined;
|
11494
|
+
}
|
11511
11495
|
|
11512
|
-
if (key === "@each")
|
11496
|
+
if (key === "@each") {
|
11497
|
+
return get(obj, key);
|
11498
|
+
}
|
11513
11499
|
|
11514
11500
|
// if a CP only return cached value
|
11515
11501
|
var desc = meta && meta.descs[key];
|
@@ -11535,7 +11521,9 @@ enifed("ember-metal/chains",
|
|
11535
11521
|
ChainNodePrototype.destroy = function() {
|
11536
11522
|
if (this._watching) {
|
11537
11523
|
var obj = this._object;
|
11538
|
-
if (obj) {
|
11524
|
+
if (obj) {
|
11525
|
+
removeChainWatcher(obj, this._key, this);
|
11526
|
+
}
|
11539
11527
|
this._watching = false; // so future calls do nothing
|
11540
11528
|
}
|
11541
11529
|
};
|
@@ -11547,7 +11535,10 @@ enifed("ember-metal/chains",
|
|
11547
11535
|
var path;
|
11548
11536
|
|
11549
11537
|
for (path in paths) {
|
11550
|
-
|
11538
|
+
// this check will also catch non-number vals.
|
11539
|
+
if (paths[path] <= 0) {
|
11540
|
+
continue;
|
11541
|
+
}
|
11551
11542
|
ret.add(path);
|
11552
11543
|
}
|
11553
11544
|
return ret;
|
@@ -11594,7 +11585,9 @@ enifed("ember-metal/chains",
|
|
11594
11585
|
var obj, tuple, key, src, paths;
|
11595
11586
|
|
11596
11587
|
paths = this._paths;
|
11597
|
-
if (paths[path] > 0) {
|
11588
|
+
if (paths[path] > 0) {
|
11589
|
+
paths[path]--;
|
11590
|
+
}
|
11598
11591
|
|
11599
11592
|
obj = this.value();
|
11600
11593
|
tuple = normalizeTuple(obj, path);
|
@@ -11617,10 +11610,14 @@ enifed("ember-metal/chains",
|
|
11617
11610
|
ChainNodePrototype.chain = function(key, path, src) {
|
11618
11611
|
var chains = this._chains;
|
11619
11612
|
var node;
|
11620
|
-
if (!chains) {
|
11613
|
+
if (!chains) {
|
11614
|
+
chains = this._chains = {};
|
11615
|
+
}
|
11621
11616
|
|
11622
11617
|
node = chains[key];
|
11623
|
-
if (!node) {
|
11618
|
+
if (!node) {
|
11619
|
+
node = chains[key] = new ChainNode(this, key, src);
|
11620
|
+
}
|
11624
11621
|
node.count++; // count chains...
|
11625
11622
|
|
11626
11623
|
// chain rest of path if there is one
|
@@ -11636,10 +11633,10 @@ enifed("ember-metal/chains",
|
|
11636
11633
|
var node = chains[key];
|
11637
11634
|
|
11638
11635
|
// unchain rest of path first...
|
11639
|
-
if (path && path.length>1) {
|
11640
|
-
|
11641
|
-
|
11642
|
-
node.unchain(
|
11636
|
+
if (path && path.length > 1) {
|
11637
|
+
var nextKey = firstKey(path);
|
11638
|
+
var nextPath = path.slice(nextKey.length + 1);
|
11639
|
+
node.unchain(nextKey, nextPath);
|
11643
11640
|
}
|
11644
11641
|
|
11645
11642
|
// delete node if needed.
|
@@ -11655,16 +11652,22 @@ enifed("ember-metal/chains",
|
|
11655
11652
|
var chains = this._chains;
|
11656
11653
|
if (chains) {
|
11657
11654
|
for(var key in chains) {
|
11658
|
-
if (!chains.hasOwnProperty(key)) {
|
11655
|
+
if (!chains.hasOwnProperty(key)) {
|
11656
|
+
continue;
|
11657
|
+
}
|
11659
11658
|
chains[key].willChange(events);
|
11660
11659
|
}
|
11661
11660
|
}
|
11662
11661
|
|
11663
|
-
if (this._parent) {
|
11662
|
+
if (this._parent) {
|
11663
|
+
this._parent.chainWillChange(this, this._key, 1, events);
|
11664
|
+
}
|
11664
11665
|
};
|
11665
11666
|
|
11666
11667
|
ChainNodePrototype.chainWillChange = function(chain, path, depth, events) {
|
11667
|
-
if (this._key) {
|
11668
|
+
if (this._key) {
|
11669
|
+
path = this._key + '.' + path;
|
11670
|
+
}
|
11668
11671
|
|
11669
11672
|
if (this._parent) {
|
11670
11673
|
this._parent.chainWillChange(this, path, depth+1, events);
|
@@ -11680,7 +11683,10 @@ enifed("ember-metal/chains",
|
|
11680
11683
|
};
|
11681
11684
|
|
11682
11685
|
ChainNodePrototype.chainDidChange = function(chain, path, depth, events) {
|
11683
|
-
if (this._key) {
|
11686
|
+
if (this._key) {
|
11687
|
+
path = this._key + '.' + path;
|
11688
|
+
}
|
11689
|
+
|
11684
11690
|
if (this._parent) {
|
11685
11691
|
this._parent.chainDidChange(this, path, depth+1, events);
|
11686
11692
|
} else {
|
@@ -11707,8 +11713,9 @@ enifed("ember-metal/chains",
|
|
11707
11713
|
|
11708
11714
|
// Special-case: the EachProxy relies on immediate evaluation to
|
11709
11715
|
// establish its observers.
|
11710
|
-
if (this._parent && this._parent._key === '@each')
|
11716
|
+
if (this._parent && this._parent._key === '@each') {
|
11711
11717
|
this.value();
|
11718
|
+
}
|
11712
11719
|
}
|
11713
11720
|
|
11714
11721
|
// then notify chains...
|
@@ -11721,22 +11728,30 @@ enifed("ember-metal/chains",
|
|
11721
11728
|
}
|
11722
11729
|
|
11723
11730
|
// if no events are passed in then we only care about the above wiring update
|
11724
|
-
if (events === null) {
|
11731
|
+
if (events === null) {
|
11732
|
+
return;
|
11733
|
+
}
|
11725
11734
|
|
11726
11735
|
// and finally tell parent about my path changing...
|
11727
|
-
if (this._parent) {
|
11736
|
+
if (this._parent) {
|
11737
|
+
this._parent.chainDidChange(this, this._key, 1, events);
|
11738
|
+
}
|
11728
11739
|
};
|
11729
11740
|
|
11730
11741
|
function finishChains(obj) {
|
11731
11742
|
// We only create meta if we really have to
|
11732
|
-
var m = obj['__ember_meta__']
|
11733
|
-
|
11743
|
+
var m = obj['__ember_meta__'];
|
11744
|
+
var chains, chainWatchers, chainNodes;
|
11745
|
+
|
11734
11746
|
if (m) {
|
11735
11747
|
// finish any current chains node watchers that reference obj
|
11736
11748
|
chainWatchers = m.chainWatchers;
|
11737
11749
|
if (chainWatchers) {
|
11738
11750
|
for(var key in chainWatchers) {
|
11739
|
-
if (!chainWatchers.hasOwnProperty(key)) {
|
11751
|
+
if (!chainWatchers.hasOwnProperty(key)) {
|
11752
|
+
continue;
|
11753
|
+
}
|
11754
|
+
|
11740
11755
|
chainNodes = chainWatchers[key];
|
11741
11756
|
if (chainNodes) {
|
11742
11757
|
for (var i=0,l=chainNodes.length;i<l;i++) {
|
@@ -11789,18 +11804,18 @@ enifed("ember-metal/computed",
|
|
11789
11804
|
//
|
11790
11805
|
|
11791
11806
|
/**
|
11792
|
-
A computed property transforms an
|
11807
|
+
A computed property transforms an object's function into a property.
|
11793
11808
|
|
11794
11809
|
By default the function backing the computed property will only be called
|
11795
11810
|
once and the result will be cached. You can specify various properties
|
11796
|
-
that your computed property
|
11811
|
+
that your computed property depends on. This will force the cached
|
11797
11812
|
result to be recomputed if the dependencies are modified.
|
11798
11813
|
|
11799
11814
|
In the following example we declare a computed property (by calling
|
11800
|
-
`.property()` on the fullName function) and setup the
|
11815
|
+
`.property()` on the fullName function) and setup the property
|
11801
11816
|
dependencies (depending on firstName and lastName). The fullName function
|
11802
11817
|
will be called once (regardless of how many times it is accessed) as long
|
11803
|
-
as
|
11818
|
+
as its dependencies have not changed. Once firstName or lastName are updated
|
11804
11819
|
any future calls (or anything bound) to fullName will incorporate the new
|
11805
11820
|
values.
|
11806
11821
|
|
@@ -12096,7 +12111,9 @@ enifed("ember-metal/computed",
|
|
12096
12111
|
}
|
12097
12112
|
|
12098
12113
|
chainNodes = meta.chainWatchers && meta.chainWatchers[keyName];
|
12099
|
-
if (chainNodes) {
|
12114
|
+
if (chainNodes) {
|
12115
|
+
finishChains(chainNodes);
|
12116
|
+
}
|
12100
12117
|
addDependentKeys(this, obj, keyName, meta);
|
12101
12118
|
} else {
|
12102
12119
|
ret = this.func.call(obj, keyName);
|
@@ -12338,7 +12355,9 @@ enifed("ember-metal/computed",
|
|
12338
12355
|
var cache = meta && meta.cache;
|
12339
12356
|
var ret = cache && cache[key];
|
12340
12357
|
|
12341
|
-
if (ret === UNDEFINED) {
|
12358
|
+
if (ret === UNDEFINED) {
|
12359
|
+
return undefined;
|
12360
|
+
}
|
12342
12361
|
return ret;
|
12343
12362
|
}
|
12344
12363
|
|
@@ -12352,7 +12371,9 @@ enifed("ember-metal/computed",
|
|
12352
12371
|
|
12353
12372
|
cacheFor.get = function(cache, key) {
|
12354
12373
|
var ret = cache[key];
|
12355
|
-
if (ret === UNDEFINED) {
|
12374
|
+
if (ret === UNDEFINED) {
|
12375
|
+
return undefined;
|
12376
|
+
}
|
12356
12377
|
return ret;
|
12357
12378
|
};
|
12358
12379
|
|
@@ -13097,7 +13118,7 @@ enifed("ember-metal/core",
|
|
13097
13118
|
|
13098
13119
|
@class Ember
|
13099
13120
|
@static
|
13100
|
-
@version 1.9.0-beta.
|
13121
|
+
@version 1.9.0-beta.3
|
13101
13122
|
*/
|
13102
13123
|
|
13103
13124
|
if ('undefined' === typeof Ember) {
|
@@ -13124,10 +13145,10 @@ enifed("ember-metal/core",
|
|
13124
13145
|
/**
|
13125
13146
|
@property VERSION
|
13126
13147
|
@type String
|
13127
|
-
@default '1.9.0-beta.
|
13148
|
+
@default '1.9.0-beta.3'
|
13128
13149
|
@static
|
13129
13150
|
*/
|
13130
|
-
Ember.VERSION = '1.9.0-beta.
|
13151
|
+
Ember.VERSION = '1.9.0-beta.3';
|
13131
13152
|
|
13132
13153
|
/**
|
13133
13154
|
Standard environmental variables. You can define these in a global `EmberENV`
|
@@ -13242,7 +13263,7 @@ enifed("ember-metal/core",
|
|
13242
13263
|
Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false);
|
13243
13264
|
|
13244
13265
|
/**
|
13245
|
-
Determines whether Ember should add ECMAScript 5 shims to older browsers.
|
13266
|
+
Determines whether Ember should add ECMAScript 5 Array shims to older browsers.
|
13246
13267
|
|
13247
13268
|
@property SHIM_ES5
|
13248
13269
|
@type Boolean
|
@@ -14775,7 +14796,8 @@ enifed("ember-metal/keys",
|
|
14775
14796
|
throw new TypeError('Object.keys called on non-object');
|
14776
14797
|
}
|
14777
14798
|
|
14778
|
-
var result = []
|
14799
|
+
var result = [];
|
14800
|
+
var prop, i;
|
14779
14801
|
|
14780
14802
|
for (prop in obj) {
|
14781
14803
|
if (prop !== '_super' &&
|
@@ -14865,8 +14887,12 @@ enifed("ember-metal/logger",
|
|
14865
14887
|
var method = typeof consoleObj === 'object' ? consoleObj[name] : null;
|
14866
14888
|
|
14867
14889
|
if (method) {
|
14868
|
-
// Older IE doesn't support
|
14869
|
-
if (typeof method.
|
14890
|
+
// Older IE doesn't support bind, but Chrome needs it
|
14891
|
+
if (typeof method.bind === 'function') {
|
14892
|
+
logToConsole = method.bind(consoleObj);
|
14893
|
+
logToConsole.displayName = 'console.' + name;
|
14894
|
+
return logToConsole;
|
14895
|
+
} else if (typeof method.apply === 'function') {
|
14870
14896
|
logToConsole = function() {
|
14871
14897
|
method.apply(consoleObj, arguments);
|
14872
14898
|
};
|
@@ -15559,7 +15585,6 @@ enifed("ember-metal/mixin",
|
|
15559
15585
|
var Ember = __dependency1__["default"];
|
15560
15586
|
// warn, assert, wrap, et;
|
15561
15587
|
var merge = __dependency2__["default"];
|
15562
|
-
var a_map = __dependency3__.map;
|
15563
15588
|
var a_indexOf = __dependency3__.indexOf;
|
15564
15589
|
var a_forEach = __dependency3__.forEach;
|
15565
15590
|
var o_create = __dependency4__.create;
|
@@ -15614,22 +15639,6 @@ enifed("ember-metal/mixin",
|
|
15614
15639
|
return ret;
|
15615
15640
|
}
|
15616
15641
|
|
15617
|
-
function initMixin(mixin, args) {
|
15618
|
-
if (args && args.length > 0) {
|
15619
|
-
mixin.mixins = a_map.call(args, function(x) {
|
15620
|
-
if (x instanceof Mixin) { return x; }
|
15621
|
-
|
15622
|
-
// Note: Manually setup a primitive mixin here. This is the only
|
15623
|
-
// way to actually get a primitive mixin. This way normal creation
|
15624
|
-
// of mixins will give you combined mixins...
|
15625
|
-
var mixin = new Mixin();
|
15626
|
-
mixin.properties = x;
|
15627
|
-
return mixin;
|
15628
|
-
});
|
15629
|
-
}
|
15630
|
-
return mixin;
|
15631
|
-
}
|
15632
|
-
|
15633
15642
|
function isMethod(obj) {
|
15634
15643
|
return 'function' === typeof obj &&
|
15635
15644
|
obj.isMethod !== false &&
|
@@ -16076,12 +16085,29 @@ enifed("ember-metal/mixin",
|
|
16076
16085
|
@namespace Ember
|
16077
16086
|
*/
|
16078
16087
|
__exports__["default"] = Mixin;
|
16079
|
-
function Mixin(
|
16080
|
-
|
16081
|
-
|
16082
|
-
|
16083
|
-
|
16084
|
-
|
16088
|
+
function Mixin(args, properties) {
|
16089
|
+
this.properties = properties;
|
16090
|
+
|
16091
|
+
var length = args && args.length;
|
16092
|
+
|
16093
|
+
if (length > 0) {
|
16094
|
+
var m = new Array(length);
|
16095
|
+
|
16096
|
+
for (var i = 0; i < length; i++) {
|
16097
|
+
var x = args[i];
|
16098
|
+
if (x instanceof Mixin) {
|
16099
|
+
m[i] = x;
|
16100
|
+
} else {
|
16101
|
+
m[i] = new Mixin(undefined, x);
|
16102
|
+
}
|
16103
|
+
}
|
16104
|
+
|
16105
|
+
this.mixins = m;
|
16106
|
+
} else {
|
16107
|
+
this.mixins = undefined;
|
16108
|
+
}
|
16109
|
+
this.ownerConstructor = undefined;
|
16110
|
+
}
|
16085
16111
|
|
16086
16112
|
Mixin._apply = applyMixin;
|
16087
16113
|
|
@@ -16104,7 +16130,12 @@ enifed("ember-metal/mixin",
|
|
16104
16130
|
// ES6TODO: this relies on a global state?
|
16105
16131
|
Ember.anyUnprocessedMixins = true;
|
16106
16132
|
var M = this;
|
16107
|
-
|
16133
|
+
var length = arguments.length;
|
16134
|
+
var args = new Array(length);
|
16135
|
+
for (var i = 0; i < length; i++) {
|
16136
|
+
args[i] = arguments[i];
|
16137
|
+
}
|
16138
|
+
return new M(args, undefined);
|
16108
16139
|
};
|
16109
16140
|
|
16110
16141
|
var MixinPrototype = Mixin.prototype;
|
@@ -16114,12 +16145,11 @@ enifed("ember-metal/mixin",
|
|
16114
16145
|
@param arguments*
|
16115
16146
|
*/
|
16116
16147
|
MixinPrototype.reopen = function() {
|
16117
|
-
var mixin
|
16148
|
+
var mixin;
|
16118
16149
|
|
16119
16150
|
if (this.properties) {
|
16120
|
-
mixin = Mixin.
|
16121
|
-
|
16122
|
-
delete this.properties;
|
16151
|
+
mixin = new Mixin(undefined, this.properties);
|
16152
|
+
this.properties = undefined;
|
16123
16153
|
this.mixins = [mixin];
|
16124
16154
|
} else if (!this.mixins) {
|
16125
16155
|
this.mixins = [];
|
@@ -16138,9 +16168,7 @@ enifed("ember-metal/mixin",
|
|
16138
16168
|
if (mixin instanceof Mixin) {
|
16139
16169
|
mixins.push(mixin);
|
16140
16170
|
} else {
|
16141
|
-
|
16142
|
-
tmp.properties = mixin;
|
16143
|
-
mixins.push(tmp);
|
16171
|
+
mixins.push(new Mixin(undefined, mixin));
|
16144
16172
|
}
|
16145
16173
|
}
|
16146
16174
|
|
@@ -16192,7 +16220,7 @@ enifed("ember-metal/mixin",
|
|
16192
16220
|
};
|
16193
16221
|
|
16194
16222
|
MixinPrototype.without = function() {
|
16195
|
-
var ret = new Mixin(this);
|
16223
|
+
var ret = new Mixin([this]);
|
16196
16224
|
ret._without = a_slice.call(arguments);
|
16197
16225
|
return ret;
|
16198
16226
|
};
|
@@ -16217,7 +16245,9 @@ enifed("ember-metal/mixin",
|
|
16217
16245
|
var ret = [];
|
16218
16246
|
_keys(keys, this, seen);
|
16219
16247
|
for(var key in keys) {
|
16220
|
-
if (keys.hasOwnProperty(key)) {
|
16248
|
+
if (keys.hasOwnProperty(key)) {
|
16249
|
+
ret.push(key);
|
16250
|
+
}
|
16221
16251
|
}
|
16222
16252
|
return ret;
|
16223
16253
|
};
|
@@ -17175,9 +17205,18 @@ enifed("ember-metal/property_events",
|
|
17175
17205
|
var proto = m && m.proto;
|
17176
17206
|
var desc = m && m.descs[keyName];
|
17177
17207
|
|
17178
|
-
if (!watching) {
|
17179
|
-
|
17180
|
-
|
17208
|
+
if (!watching) {
|
17209
|
+
return;
|
17210
|
+
}
|
17211
|
+
|
17212
|
+
if (proto === obj) {
|
17213
|
+
return;
|
17214
|
+
}
|
17215
|
+
|
17216
|
+
if (desc && desc.willChange) {
|
17217
|
+
desc.willChange(obj, keyName);
|
17218
|
+
}
|
17219
|
+
|
17181
17220
|
dependentKeysWillChange(obj, keyName, m);
|
17182
17221
|
chainsWillChange(obj, keyName, m);
|
17183
17222
|
notifyBeforeObservers(obj, keyName);
|
@@ -17204,11 +17243,18 @@ enifed("ember-metal/property_events",
|
|
17204
17243
|
var proto = m && m.proto;
|
17205
17244
|
var desc = m && m.descs[keyName];
|
17206
17245
|
|
17207
|
-
if (proto === obj) {
|
17246
|
+
if (proto === obj) {
|
17247
|
+
return;
|
17248
|
+
}
|
17208
17249
|
|
17209
17250
|
// shouldn't this mean that we're watching this key?
|
17210
|
-
if (desc && desc.didChange) {
|
17211
|
-
|
17251
|
+
if (desc && desc.didChange) {
|
17252
|
+
desc.didChange(obj, keyName);
|
17253
|
+
}
|
17254
|
+
|
17255
|
+
if (!watching && keyName !== 'length') {
|
17256
|
+
return;
|
17257
|
+
}
|
17212
17258
|
|
17213
17259
|
if (m && m.deps && m.deps[keyName]) {
|
17214
17260
|
dependentKeysDidChange(obj, keyName, m);
|
@@ -17227,9 +17273,16 @@ enifed("ember-metal/property_events",
|
|
17227
17273
|
if (meta && meta.deps && (deps = meta.deps[depKey])) {
|
17228
17274
|
var seen = WILL_SEEN;
|
17229
17275
|
var top = !seen;
|
17230
|
-
|
17276
|
+
|
17277
|
+
if (top) {
|
17278
|
+
seen = WILL_SEEN = {};
|
17279
|
+
}
|
17280
|
+
|
17231
17281
|
iterDeps(propertyWillChange, obj, deps, depKey, seen, meta);
|
17232
|
-
|
17282
|
+
|
17283
|
+
if (top) {
|
17284
|
+
WILL_SEEN = null;
|
17285
|
+
}
|
17233
17286
|
}
|
17234
17287
|
}
|
17235
17288
|
|
@@ -17241,15 +17294,26 @@ enifed("ember-metal/property_events",
|
|
17241
17294
|
if (meta && meta.deps && (deps = meta.deps[depKey])) {
|
17242
17295
|
var seen = DID_SEEN;
|
17243
17296
|
var top = !seen;
|
17244
|
-
|
17297
|
+
|
17298
|
+
if (top) {
|
17299
|
+
seen = DID_SEEN = {};
|
17300
|
+
}
|
17301
|
+
|
17245
17302
|
iterDeps(propertyDidChange, obj, deps, depKey, seen, meta);
|
17246
|
-
|
17303
|
+
|
17304
|
+
if (top) {
|
17305
|
+
DID_SEEN = null;
|
17306
|
+
}
|
17247
17307
|
}
|
17248
17308
|
}
|
17249
17309
|
|
17250
17310
|
function keysOf(obj) {
|
17251
17311
|
var keys = [];
|
17252
|
-
|
17312
|
+
|
17313
|
+
for (var key in obj) {
|
17314
|
+
keys.push(key);
|
17315
|
+
}
|
17316
|
+
|
17253
17317
|
return keys;
|
17254
17318
|
}
|
17255
17319
|
|
@@ -17257,8 +17321,15 @@ enifed("ember-metal/property_events",
|
|
17257
17321
|
var keys, key, i, desc;
|
17258
17322
|
var guid = guidFor(obj);
|
17259
17323
|
var current = seen[guid];
|
17260
|
-
|
17261
|
-
if (current
|
17324
|
+
|
17325
|
+
if (!current) {
|
17326
|
+
current = seen[guid] = {};
|
17327
|
+
}
|
17328
|
+
|
17329
|
+
if (current[depKey]) {
|
17330
|
+
return;
|
17331
|
+
}
|
17332
|
+
|
17262
17333
|
current[depKey] = true;
|
17263
17334
|
|
17264
17335
|
if (deps) {
|
@@ -17267,7 +17338,11 @@ enifed("ember-metal/property_events",
|
|
17267
17338
|
for (i=0; i<keys.length; i++) {
|
17268
17339
|
key = keys[i];
|
17269
17340
|
desc = descs[key];
|
17270
|
-
|
17341
|
+
|
17342
|
+
if (desc && desc._suspended === obj) {
|
17343
|
+
continue;
|
17344
|
+
}
|
17345
|
+
|
17271
17346
|
method(obj, key);
|
17272
17347
|
}
|
17273
17348
|
}
|
@@ -17840,14 +17915,8 @@ enifed("ember-metal/run_loop",
|
|
17840
17915
|
@return {Object} Return value from invoking the passed function. Please note,
|
17841
17916
|
when called within an existing loop, no return value is possible.
|
17842
17917
|
*/
|
17843
|
-
run.join = function(
|
17844
|
-
|
17845
|
-
return Ember.run.apply(Ember, arguments);
|
17846
|
-
}
|
17847
|
-
|
17848
|
-
var args = slice.call(arguments);
|
17849
|
-
args.unshift('actions');
|
17850
|
-
run.schedule.apply(run, args);
|
17918
|
+
run.join = function() {
|
17919
|
+
return backburner.join.apply(backburner, arguments);
|
17851
17920
|
};
|
17852
17921
|
|
17853
17922
|
/**
|
@@ -19654,7 +19723,8 @@ enifed("ember-metal/watch_key",
|
|
19654
19723
|
|
19655
19724
|
|
19656
19725
|
function unwatchKey(obj, keyName, meta) {
|
19657
|
-
var m = meta || metaFor(obj)
|
19726
|
+
var m = meta || metaFor(obj);
|
19727
|
+
var watching = m.watching;
|
19658
19728
|
|
19659
19729
|
if (watching[keyName] === 1) {
|
19660
19730
|
watching[keyName] = 0;
|
@@ -25429,11 +25499,15 @@ enifed("ember-routing/system/route",
|
|
25429
25499
|
}
|
25430
25500
|
|
25431
25501
|
function generateTopLevelTeardown(view) {
|
25432
|
-
return function() {
|
25502
|
+
return function() {
|
25503
|
+
view.destroy();
|
25504
|
+
};
|
25433
25505
|
}
|
25434
25506
|
|
25435
25507
|
function generateOutletTeardown(parentView, outlet) {
|
25436
|
-
return function() {
|
25508
|
+
return function() {
|
25509
|
+
parentView.disconnectOutlet(outlet);
|
25510
|
+
};
|
25437
25511
|
}
|
25438
25512
|
|
25439
25513
|
function getFullQueryParams(router, state) {
|
@@ -28633,8 +28707,8 @@ enifed("ember-runtime/controllers/array_controller",
|
|
28633
28707
|
Then, create a view that binds to your new controller:
|
28634
28708
|
|
28635
28709
|
```handlebars
|
28636
|
-
{{#each MyApp.listController}}
|
28637
|
-
{{firstName}} {{lastName}}
|
28710
|
+
{{#each person in MyApp.listController}}
|
28711
|
+
{{person.firstName}} {{person.lastName}}
|
28638
28712
|
{{/each}}
|
28639
28713
|
```
|
28640
28714
|
|
@@ -39120,7 +39194,7 @@ enifed("ember-views/system/event_dispatcher",
|
|
39120
39194
|
},
|
39121
39195
|
|
39122
39196
|
_bubbleEvent: function(view, evt, eventName) {
|
39123
|
-
return run(view, view.handleEvent, eventName, evt);
|
39197
|
+
return run.join(view, view.handleEvent, eventName, evt);
|
39124
39198
|
},
|
39125
39199
|
|
39126
39200
|
destroy: function() {
|
@@ -40743,6 +40817,30 @@ enifed("ember-views/views/component",
|
|
40743
40817
|
action: actionName,
|
40744
40818
|
actionContext: contexts
|
40745
40819
|
});
|
40820
|
+
},
|
40821
|
+
|
40822
|
+
send: function(actionName) {
|
40823
|
+
var args = [].slice.call(arguments, 1);
|
40824
|
+
var target;
|
40825
|
+
var hasAction = this._actions && this._actions[actionName];
|
40826
|
+
|
40827
|
+
if (hasAction) {
|
40828
|
+
if (this._actions[actionName].apply(this, args) === true) {
|
40829
|
+
// handler returned true, so this action will bubble
|
40830
|
+
} else {
|
40831
|
+
return;
|
40832
|
+
}
|
40833
|
+
}
|
40834
|
+
|
40835
|
+
if (target = get(this, 'target')) {
|
40836
|
+
Ember.assert("The `target` for " + this + " (" + target +
|
40837
|
+
") does not have a `send` method", typeof target.send === 'function');
|
40838
|
+
target.send.apply(target, arguments);
|
40839
|
+
} else {
|
40840
|
+
if (!hasAction) {
|
40841
|
+
throw new Error(Ember.inspect(this) + ' had no action handler for: ' + actionName);
|
40842
|
+
}
|
40843
|
+
}
|
40746
40844
|
}
|
40747
40845
|
});
|
40748
40846
|
|