ember-source 1.9.0.beta.1.1 → 1.9.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|
|