ember-source 2.16.0.beta.1 → 2.16.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +110 -77
- data/dist/ember-template-compiler.js +174 -132
- data/dist/ember-testing.js +1 -1
- data/dist/ember-tests.js +1329 -1251
- data/dist/ember-tests.prod.js +1279 -1249
- data/dist/ember.debug.js +631 -424
- data/dist/ember.min.js +204 -198
- data/dist/ember.prod.js +650 -436
- metadata +3 -3
data/dist/ember.debug.js
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
7
7
|
* @license Licensed under MIT license
|
8
8
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
9
|
-
* @version 2.16.0-beta.
|
9
|
+
* @version 2.16.0-beta.2
|
10
10
|
*/
|
11
11
|
|
12
12
|
var enifed, requireModule, Ember;
|
@@ -9157,7 +9157,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9157
9157
|
this.name = name;
|
9158
9158
|
this.options = options;
|
9159
9159
|
this.globalOptions = globalOptions;
|
9160
|
-
this.globalOptions.onError = getOnError(globalOptions);
|
9161
9160
|
}
|
9162
9161
|
|
9163
9162
|
Queue.prototype.push = function push(target, method, args, stack) {
|
@@ -9192,8 +9191,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9192
9191
|
var method = void 0;
|
9193
9192
|
var args = void 0;
|
9194
9193
|
var errorRecordedForStack = void 0;
|
9195
|
-
var onError = this.globalOptions.onError;
|
9196
|
-
var invoke = onError ? this.invokeWithOnError : this.invoke;
|
9197
9194
|
this.targetQueues = Object.create(null);
|
9198
9195
|
var queueItems = void 0;
|
9199
9196
|
if (this._queueBeingFlushed.length > 0) {
|
@@ -9205,33 +9202,38 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9205
9202
|
if (before) {
|
9206
9203
|
before();
|
9207
9204
|
}
|
9208
|
-
|
9209
|
-
|
9210
|
-
|
9211
|
-
|
9212
|
-
|
9213
|
-
|
9214
|
-
|
9215
|
-
|
9216
|
-
|
9217
|
-
|
9218
|
-
//
|
9219
|
-
|
9220
|
-
|
9221
|
-
|
9222
|
-
|
9223
|
-
|
9224
|
-
|
9225
|
-
|
9226
|
-
|
9227
|
-
|
9228
|
-
|
9229
|
-
|
9230
|
-
|
9231
|
-
|
9232
|
-
|
9233
|
-
|
9234
|
-
|
9205
|
+
var invoke = void 0;
|
9206
|
+
if (queueItems.length > 0) {
|
9207
|
+
var onError = getOnError(this.globalOptions);
|
9208
|
+
invoke = onError ? this.invokeWithOnError : this.invoke;
|
9209
|
+
for (var i = this.index; i < queueItems.length; i += 4) {
|
9210
|
+
this.index += 4;
|
9211
|
+
target = queueItems[i];
|
9212
|
+
method = queueItems[i + 1];
|
9213
|
+
args = queueItems[i + 2];
|
9214
|
+
errorRecordedForStack = queueItems[i + 3]; // Debugging assistance
|
9215
|
+
// method could have been nullified / canceled during flush
|
9216
|
+
if (method !== null) {
|
9217
|
+
//
|
9218
|
+
// ** Attention intrepid developer **
|
9219
|
+
//
|
9220
|
+
// To find out the stack of this task when it was scheduled onto
|
9221
|
+
// the run loop, add the following to your app.js:
|
9222
|
+
//
|
9223
|
+
// Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
|
9224
|
+
//
|
9225
|
+
// Once that is in place, when you are at a breakpoint and navigate
|
9226
|
+
// here in the stack explorer, you can look at `errorRecordedForStack.stack`,
|
9227
|
+
// which will be the captured stack when this job was scheduled.
|
9228
|
+
//
|
9229
|
+
// One possible long-term solution is the following Chrome issue:
|
9230
|
+
// https://bugs.chromium.org/p/chromium/issues/detail?id=332624
|
9231
|
+
//
|
9232
|
+
invoke(target, method, args, onError, errorRecordedForStack);
|
9233
|
+
}
|
9234
|
+
if (this.index !== this._queueBeingFlushed.length && this.globalOptions.mustYield && this.globalOptions.mustYield()) {
|
9235
|
+
return 1 /* Pause */;
|
9236
|
+
}
|
9235
9237
|
}
|
9236
9238
|
}
|
9237
9239
|
if (after) {
|
@@ -9432,7 +9434,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9432
9434
|
|
9433
9435
|
// accepts a function that when invoked will return an iterator
|
9434
9436
|
// iterator will drain until completion
|
9435
|
-
// accepts a function that when invoked will return an iterator
|
9436
9437
|
var iteratorDrain = function (fn) {
|
9437
9438
|
var iterator = fn();
|
9438
9439
|
var result = iterator.next();
|
@@ -9442,7 +9443,6 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9442
9443
|
}
|
9443
9444
|
};
|
9444
9445
|
|
9445
|
-
var now = Date.now;
|
9446
9446
|
var noop = function () {};
|
9447
9447
|
|
9448
9448
|
var Backburner = function () {
|
@@ -9483,6 +9483,9 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9483
9483
|
return platform.setTimeout(fn, 0);
|
9484
9484
|
};
|
9485
9485
|
platform.clearNext = _platform.clearNext || platform.clearTimeout;
|
9486
|
+
platform.now = _platform.now || function () {
|
9487
|
+
return Date.now();
|
9488
|
+
};
|
9486
9489
|
this._platform = platform;
|
9487
9490
|
this._boundRunExpiredTimers = function () {
|
9488
9491
|
_this._runExpiredTimers();
|
@@ -9768,7 +9771,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9768
9771
|
}
|
9769
9772
|
}
|
9770
9773
|
var onError = getOnError(this.options);
|
9771
|
-
var executeAt = now() + wait;
|
9774
|
+
var executeAt = this._platform.now() + wait;
|
9772
9775
|
var fn = void 0;
|
9773
9776
|
if (onError) {
|
9774
9777
|
fn = function () {
|
@@ -9977,7 +9980,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
9977
9980
|
var l = timers.length;
|
9978
9981
|
var i = 0;
|
9979
9982
|
var defaultQueue = this.options.defaultQueue;
|
9980
|
-
var n = now();
|
9983
|
+
var n = this._platform.now();
|
9981
9984
|
for (; i < l; i += 2) {
|
9982
9985
|
var executeAt = timers[i];
|
9983
9986
|
if (executeAt <= n) {
|
@@ -10009,7 +10012,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
10009
10012
|
return;
|
10010
10013
|
}
|
10011
10014
|
var minExpiresAt = this._timers[0];
|
10012
|
-
var n = now();
|
10015
|
+
var n = this._platform.now();
|
10013
10016
|
var wait = Math.max(0, minExpiresAt - n);
|
10014
10017
|
this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
|
10015
10018
|
};
|
@@ -10031,7 +10034,7 @@ enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel)
|
|
10031
10034
|
|
10032
10035
|
exports.default = Backburner;
|
10033
10036
|
});
|
10034
|
-
enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'ember/features'
|
10037
|
+
enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'ember/features'], function (exports, _emberBabel, _emberUtils, _emberDebug, _features) {
|
10035
10038
|
'use strict';
|
10036
10039
|
|
10037
10040
|
exports.Container = exports.privatize = exports.Registry = undefined;
|
@@ -10413,7 +10416,7 @@ enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'em
|
|
10413
10416
|
if (typeof this.class._initFactory === 'function') {
|
10414
10417
|
this.class._initFactory(this);
|
10415
10418
|
} else {
|
10416
|
-
// in the non-
|
10419
|
+
// in the non-EmberObject case we need to still setOwner
|
10417
10420
|
// this is required for supporting glimmer environment and
|
10418
10421
|
// template instantiation which rely heavily on
|
10419
10422
|
// `options[OWNER]` being passed into `create`
|
@@ -12351,7 +12354,7 @@ enifed('ember-application/system/engine-parent', ['exports', 'ember-utils'], fun
|
|
12351
12354
|
@param {EngineInstance} engine An engine instance.
|
12352
12355
|
@return {EngineInstance} The parent engine instance.
|
12353
12356
|
@for Ember
|
12354
|
-
@
|
12357
|
+
@private
|
12355
12358
|
*/
|
12356
12359
|
function getEngineParent(engine) {
|
12357
12360
|
return engine[ENGINE_PARENT];
|
@@ -12499,65 +12502,83 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12499
12502
|
* `name` allows you to specify under which name the initializer is registered.
|
12500
12503
|
This must be a unique name, as trying to register two initializers with the
|
12501
12504
|
same name will result in an error.
|
12502
|
-
```
|
12503
|
-
|
12504
|
-
|
12505
|
-
|
12506
|
-
|
12507
|
-
|
12508
|
-
|
12505
|
+
```app/initializer/named-initializer.js
|
12506
|
+
import { debug } from '@ember/debug';
|
12507
|
+
export function initialize() {
|
12508
|
+
debug('Running namedInitializer!');
|
12509
|
+
}
|
12510
|
+
export default {
|
12511
|
+
name: 'named-initializer',
|
12512
|
+
initialize
|
12513
|
+
};
|
12509
12514
|
```
|
12510
12515
|
* `before` and `after` are used to ensure that this initializer is ran prior
|
12511
12516
|
or after the one identified by the value. This value can be a single string
|
12512
12517
|
or an array of strings, referencing the `name` of other initializers.
|
12513
12518
|
An example of ordering initializers, we create an initializer named `first`:
|
12514
|
-
```
|
12515
|
-
|
12519
|
+
```app/initializer/first.js
|
12520
|
+
import { debug } from '@ember/debug';
|
12521
|
+
export function initialize() {
|
12522
|
+
debug('First initializer!');
|
12523
|
+
}
|
12524
|
+
export default {
|
12516
12525
|
name: 'first',
|
12517
|
-
|
12518
|
-
|
12519
|
-
|
12520
|
-
|
12521
|
-
|
12526
|
+
initialize
|
12527
|
+
};
|
12528
|
+
```
|
12529
|
+
```bash
|
12530
|
+
// DEBUG: First initializer!
|
12522
12531
|
```
|
12523
12532
|
We add another initializer named `second`, specifying that it should run
|
12524
12533
|
after the initializer named `first`:
|
12525
|
-
```
|
12526
|
-
|
12534
|
+
```app/initializer/second.js
|
12535
|
+
import { debug } from '@ember/debug';
|
12536
|
+
export function initialize() {
|
12537
|
+
debug('Second initializer!');
|
12538
|
+
}
|
12539
|
+
export default {
|
12527
12540
|
name: 'second',
|
12528
12541
|
after: 'first',
|
12529
|
-
|
12530
|
-
|
12531
|
-
|
12532
|
-
|
12533
|
-
|
12542
|
+
initialize
|
12543
|
+
};
|
12544
|
+
```
|
12545
|
+
```
|
12546
|
+
// DEBUG: First initializer!
|
12534
12547
|
// DEBUG: Second initializer!
|
12535
12548
|
```
|
12536
12549
|
Afterwards we add a further initializer named `pre`, this time specifying
|
12537
12550
|
that it should run before the initializer named `first`:
|
12538
|
-
```
|
12539
|
-
|
12551
|
+
```app/initializer/pre.js
|
12552
|
+
import { debug } from '@ember/debug';
|
12553
|
+
export function initialize() {
|
12554
|
+
debug('Pre initializer!');
|
12555
|
+
}
|
12556
|
+
export default {
|
12540
12557
|
name: 'pre',
|
12541
12558
|
before: 'first',
|
12542
|
-
|
12543
|
-
|
12544
|
-
|
12545
|
-
|
12546
|
-
|
12559
|
+
initialize
|
12560
|
+
};
|
12561
|
+
```
|
12562
|
+
```bash
|
12563
|
+
// DEBUG: Pre initializer!
|
12547
12564
|
// DEBUG: First initializer!
|
12548
12565
|
// DEBUG: Second initializer!
|
12549
12566
|
```
|
12550
12567
|
Finally we add an initializer named `post`, specifying it should run after
|
12551
12568
|
both the `first` and the `second` initializers:
|
12552
|
-
```
|
12553
|
-
|
12569
|
+
```app/initializer/post.js
|
12570
|
+
import { debug } from '@ember/debug';
|
12571
|
+
export function initialize() {
|
12572
|
+
debug('Post initializer!');
|
12573
|
+
}
|
12574
|
+
export default {
|
12554
12575
|
name: 'post',
|
12555
12576
|
after: ['first', 'second'],
|
12556
|
-
|
12557
|
-
|
12558
|
-
|
12559
|
-
|
12560
|
-
|
12577
|
+
initialize
|
12578
|
+
};
|
12579
|
+
```
|
12580
|
+
```bash
|
12581
|
+
// DEBUG: Pre initializer!
|
12561
12582
|
// DEBUG: First initializer!
|
12562
12583
|
// DEBUG: Second initializer!
|
12563
12584
|
// DEBUG: Post initializer!
|
@@ -12565,13 +12586,16 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12565
12586
|
* `initialize` is a callback function that receives one argument,
|
12566
12587
|
`application`, on which you can operate.
|
12567
12588
|
Example of using `application` to register an adapter:
|
12568
|
-
```
|
12569
|
-
|
12570
|
-
|
12571
|
-
|
12572
|
-
|
12573
|
-
|
12574
|
-
|
12589
|
+
```app/initializer/api-adapter.js
|
12590
|
+
import ApiAdapter from '../utils/api-adapter';
|
12591
|
+
export function initialize(application) {
|
12592
|
+
application.register('api-adapter:main', ApiAdapter);
|
12593
|
+
}
|
12594
|
+
export default {
|
12595
|
+
name: 'post',
|
12596
|
+
after: ['first', 'second'],
|
12597
|
+
initialize
|
12598
|
+
};
|
12575
12599
|
```
|
12576
12600
|
@method initializer
|
12577
12601
|
@param initializer {Object}
|
@@ -12591,13 +12615,15 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12591
12615
|
* `name` allows you to specify under which name the instanceInitializer is
|
12592
12616
|
registered. This must be a unique name, as trying to register two
|
12593
12617
|
instanceInitializer with the same name will result in an error.
|
12594
|
-
```
|
12595
|
-
|
12596
|
-
|
12597
|
-
|
12598
|
-
|
12599
|
-
|
12600
|
-
|
12618
|
+
```app/initializer/named-instance-initializer.js
|
12619
|
+
import { debug } from '@ember/debug';
|
12620
|
+
export function initialize() {
|
12621
|
+
debug('Running named-instance-initializer!');
|
12622
|
+
}
|
12623
|
+
export default {
|
12624
|
+
name: 'named-instance-initializer',
|
12625
|
+
initialize
|
12626
|
+
};
|
12601
12627
|
```
|
12602
12628
|
* `before` and `after` are used to ensure that this initializer is ran prior
|
12603
12629
|
or after the one identified by the value. This value can be a single string
|
@@ -12605,10 +12631,9 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12605
12631
|
* See Ember.Application.initializer for discussion on the usage of before
|
12606
12632
|
and after.
|
12607
12633
|
Example instanceInitializer to preload data into the store.
|
12608
|
-
```
|
12609
|
-
|
12610
|
-
|
12611
|
-
initialize: function(application) {
|
12634
|
+
```app/initializer/preload-data.js
|
12635
|
+
import $ from 'jquery';
|
12636
|
+
export function initialize(application) {
|
12612
12637
|
var userConfig, userConfigEncoded, store;
|
12613
12638
|
// We have a HTML escaped JSON representation of the user's basic
|
12614
12639
|
// configuration generated server side and stored in the DOM of the main
|
@@ -12617,17 +12642,19 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12617
12642
|
// needed for immediate rendering of the page. Keep in mind, this data,
|
12618
12643
|
// like all local models and data can be manipulated by the user, so it
|
12619
12644
|
// should not be relied upon for security or authorization.
|
12620
|
-
|
12621
|
-
|
12622
|
-
|
12623
|
-
// Unescape the text, then parse the resulting JSON into a real object
|
12645
|
+
// Grab the encoded data from the meta tag
|
12646
|
+
userConfigEncoded = $('head meta[name=app-user-config]').attr('content');
|
12647
|
+
// Unescape the text, then parse the resulting JSON into a real object
|
12624
12648
|
userConfig = JSON.parse(unescape(userConfigEncoded));
|
12625
|
-
|
12649
|
+
// Lookup the store
|
12626
12650
|
store = application.lookup('service:store');
|
12627
|
-
|
12651
|
+
// Push the encoded JSON into the store
|
12628
12652
|
store.pushPayload(userConfig);
|
12629
|
-
|
12630
|
-
|
12653
|
+
}
|
12654
|
+
export default {
|
12655
|
+
name: 'named-instance-initializer',
|
12656
|
+
initialize
|
12657
|
+
};
|
12631
12658
|
```
|
12632
12659
|
@method instanceInitializer
|
12633
12660
|
@param instanceInitializer
|
@@ -12655,7 +12682,7 @@ enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-util
|
|
12655
12682
|
|
12656
12683
|
/**
|
12657
12684
|
Set this to provide an alternate class to `Ember.DefaultResolver`
|
12658
|
-
|
12685
|
+
@deprecated Use 'Resolver' instead
|
12659
12686
|
@property resolver
|
12660
12687
|
@public
|
12661
12688
|
*/
|
@@ -12808,12 +12835,16 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
12808
12835
|
in a subclass. For example, you could enhance how a template
|
12809
12836
|
is resolved like so:
|
12810
12837
|
|
12811
|
-
```
|
12812
|
-
|
12813
|
-
|
12814
|
-
|
12838
|
+
```app/app.js
|
12839
|
+
import Application from '@ember/application';
|
12840
|
+
import GlobalsResolver from '@ember/application/globals-resolver';
|
12841
|
+
|
12842
|
+
App = Application.create({
|
12843
|
+
Resolver: GlobalsResolver.extend({
|
12844
|
+
resolveTemplate(parsedName) {
|
12815
12845
|
let resolvedTemplate = this._super(parsedName);
|
12816
12846
|
if (resolvedTemplate) { return resolvedTemplate; }
|
12847
|
+
|
12817
12848
|
return Ember.TEMPLATES['not_found'];
|
12818
12849
|
}
|
12819
12850
|
})
|
@@ -13111,10 +13142,10 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13111
13142
|
|
13112
13143
|
|
13113
13144
|
/**
|
13114
|
-
|
13115
|
-
|
13116
|
-
|
13117
|
-
|
13145
|
+
@method _logLookup
|
13146
|
+
@param {Boolean} found
|
13147
|
+
@param {Object} parsedName
|
13148
|
+
@private
|
13118
13149
|
*/
|
13119
13150
|
_logLookup: function (found, parsedName) {
|
13120
13151
|
var symbol = found ? '[✓]' : '[ ]';
|
@@ -13131,11 +13162,11 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13131
13162
|
|
13132
13163
|
|
13133
13164
|
/**
|
13134
|
-
|
13135
|
-
|
13136
|
-
|
13137
|
-
|
13138
|
-
|
13165
|
+
Used to iterate all items of a given type.
|
13166
|
+
@method knownForType
|
13167
|
+
@param {String} type the type to search for
|
13168
|
+
@private
|
13169
|
+
*/
|
13139
13170
|
knownForType: function (type) {
|
13140
13171
|
var namespace = (0, _emberMetal.get)(this, 'namespace');
|
13141
13172
|
var suffix = _emberRuntime.String.classify(type);
|
@@ -13158,16 +13189,15 @@ enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-me
|
|
13158
13189
|
|
13159
13190
|
|
13160
13191
|
/**
|
13161
|
-
|
13162
|
-
|
13163
|
-
|
13164
|
-
|
13165
|
-
|
13166
|
-
|
13167
|
-
|
13168
|
-
|
13169
|
-
|
13170
|
-
|
13192
|
+
Converts provided name from the backing namespace into a container lookup name.
|
13193
|
+
Examples:
|
13194
|
+
* App.FooBarHelper -> helper:foo-bar
|
13195
|
+
* App.THelper -> helper:t
|
13196
|
+
@method translateToContainerFullname
|
13197
|
+
@param {String} type
|
13198
|
+
@param {String} name
|
13199
|
+
@private
|
13200
|
+
*/
|
13171
13201
|
translateToContainerFullname: function (type, name) {
|
13172
13202
|
var suffix = _emberRuntime.String.classify(type);
|
13173
13203
|
var namePrefix = name.slice(0, suffix.length * -1);
|
@@ -15964,9 +15994,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
15964
15994
|
`hello` for the `person-profile` component:
|
15965
15995
|
|
15966
15996
|
```app/components/person-profile.js
|
15967
|
-
import
|
15997
|
+
import Component from '@ember/component';
|
15968
15998
|
|
15969
|
-
export default
|
15999
|
+
export default Component.extend({
|
15970
16000
|
actions: {
|
15971
16001
|
hello(name) {
|
15972
16002
|
console.log("Hello", name);
|
@@ -15998,9 +16028,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
15998
16028
|
The following component class:
|
15999
16029
|
|
16000
16030
|
```app/components/emphasized-paragraph.js
|
16001
|
-
import
|
16031
|
+
import Component from '@ember/component';
|
16002
16032
|
|
16003
|
-
export default
|
16033
|
+
export default Component.extend({
|
16004
16034
|
tagName: 'em'
|
16005
16035
|
});
|
16006
16036
|
```
|
@@ -16018,9 +16048,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16018
16048
|
`classNames` property that is set to an array of strings:
|
16019
16049
|
|
16020
16050
|
```app/components/my-widget.js
|
16021
|
-
import
|
16051
|
+
import Component from '@ember/component';
|
16022
16052
|
|
16023
|
-
export default
|
16053
|
+
export default Component.extend({
|
16024
16054
|
classNames: ['my-class', 'my-other-class']
|
16025
16055
|
});
|
16026
16056
|
```
|
@@ -16037,9 +16067,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16037
16067
|
attribute. These properties can be computed properties:
|
16038
16068
|
|
16039
16069
|
```app/components/my-widget.js
|
16040
|
-
import
|
16070
|
+
import Component from '@ember/component';
|
16041
16071
|
|
16042
|
-
export default
|
16072
|
+
export default Component.extend({
|
16043
16073
|
classNameBindings: ['propertyA', 'propertyB'],
|
16044
16074
|
propertyA: 'from-a',
|
16045
16075
|
propertyB: Ember.computed(function() {
|
@@ -16059,9 +16089,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16059
16089
|
The class name will not be added if the value is `false` or `undefined`.
|
16060
16090
|
|
16061
16091
|
```app/components/my-widget.js
|
16062
|
-
import
|
16092
|
+
import Component from '@ember/component';
|
16063
16093
|
|
16064
|
-
export default
|
16094
|
+
export default Component.extend({
|
16065
16095
|
classNameBindings: ['hovered'],
|
16066
16096
|
hovered: true
|
16067
16097
|
});
|
@@ -16078,9 +16108,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16078
16108
|
preferred value after a ":" character when defining the binding:
|
16079
16109
|
|
16080
16110
|
```app/components/my-widget.js
|
16081
|
-
import
|
16111
|
+
import Component from '@ember/component';
|
16082
16112
|
|
16083
|
-
export default
|
16113
|
+
export default Component.extend({
|
16084
16114
|
classNameBindings: ['awesome:so-very-cool'],
|
16085
16115
|
awesome: true
|
16086
16116
|
});
|
@@ -16096,9 +16126,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16096
16126
|
camelCase-style format will be converted to a dasherized format:
|
16097
16127
|
|
16098
16128
|
```app/components/my-widget.js
|
16099
|
-
import
|
16129
|
+
import Component from '@ember/component';
|
16100
16130
|
|
16101
|
-
export default
|
16131
|
+
export default Component.extend({
|
16102
16132
|
classNameBindings: ['isUrgent'],
|
16103
16133
|
isUrgent: true
|
16104
16134
|
});
|
@@ -16114,9 +16144,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16114
16144
|
traversing a path relative to the component itself:
|
16115
16145
|
|
16116
16146
|
```app/components/my-widget.js
|
16117
|
-
import
|
16147
|
+
import Component from '@ember/component';
|
16118
16148
|
|
16119
|
-
export default
|
16149
|
+
export default Component.extend({
|
16120
16150
|
classNameBindings: ['messages.empty'],
|
16121
16151
|
messages: Ember.Object.create({
|
16122
16152
|
empty: true
|
@@ -16135,9 +16165,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16135
16165
|
like this:
|
16136
16166
|
|
16137
16167
|
```app/components/my-widget.js
|
16138
|
-
import
|
16168
|
+
import Component from '@ember/component';
|
16139
16169
|
|
16140
|
-
export default
|
16170
|
+
export default Component.extend({
|
16141
16171
|
classNameBindings: ['isEnabled:enabled:disabled'],
|
16142
16172
|
isEnabled: true
|
16143
16173
|
});
|
@@ -16159,10 +16189,10 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16159
16189
|
This syntax offers the convenience to add a class if a property is `false`:
|
16160
16190
|
|
16161
16191
|
```app/components/my-widget.js
|
16162
|
-
import
|
16192
|
+
import Component from '@ember/component';
|
16163
16193
|
|
16164
16194
|
// Applies no class when isEnabled is true and class 'disabled' when isEnabled is false
|
16165
|
-
export default
|
16195
|
+
export default Component.extend({
|
16166
16196
|
classNameBindings: ['isEnabled::disabled'],
|
16167
16197
|
isEnabled: true
|
16168
16198
|
});
|
@@ -16198,9 +16228,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16198
16228
|
HTML associated attribute:
|
16199
16229
|
|
16200
16230
|
```app/components/my-anchor.js
|
16201
|
-
import
|
16231
|
+
import Component from '@ember/component';
|
16202
16232
|
|
16203
|
-
export default
|
16233
|
+
export default Component.extend({
|
16204
16234
|
tagName: 'a',
|
16205
16235
|
attributeBindings: ['href'],
|
16206
16236
|
href: 'http://google.com'
|
@@ -16217,9 +16247,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16217
16247
|
the source property and the destination property:
|
16218
16248
|
|
16219
16249
|
```app/components/my-anchor.js
|
16220
|
-
import
|
16250
|
+
import Component from '@ember/component';
|
16221
16251
|
|
16222
|
-
export default
|
16252
|
+
export default Component.extend({
|
16223
16253
|
tagName: 'a',
|
16224
16254
|
attributeBindings: ['url:href'],
|
16225
16255
|
url: 'http://google.com'
|
@@ -16236,9 +16266,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16236
16266
|
mapped, since `:` is not a valid character for properties in Javascript:
|
16237
16267
|
|
16238
16268
|
```app/components/my-use.js
|
16239
|
-
import
|
16269
|
+
import Component from '@ember/component';
|
16240
16270
|
|
16241
|
-
export default
|
16271
|
+
export default Component.extend({
|
16242
16272
|
tagName: 'use',
|
16243
16273
|
attributeBindings: ['xlinkHref:xlink:href'],
|
16244
16274
|
xlinkHref: '#triangle'
|
@@ -16255,9 +16285,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16255
16285
|
the attribute will be present or absent depending on the value:
|
16256
16286
|
|
16257
16287
|
```app/components/my-text-input.js
|
16258
|
-
import
|
16288
|
+
import Component from '@ember/component';
|
16259
16289
|
|
16260
|
-
export default
|
16290
|
+
export default Component.extend({
|
16261
16291
|
tagName: 'input',
|
16262
16292
|
attributeBindings: ['disabled'],
|
16263
16293
|
disabled: false
|
@@ -16273,9 +16303,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16273
16303
|
`attributeBindings` can refer to computed properties:
|
16274
16304
|
|
16275
16305
|
```app/components/my-text-input.js
|
16276
|
-
import
|
16306
|
+
import Component from '@ember/component';
|
16277
16307
|
|
16278
|
-
export default
|
16308
|
+
export default Component.extend({
|
16279
16309
|
tagName: 'input',
|
16280
16310
|
attributeBindings: ['disabled'],
|
16281
16311
|
disabled: Ember.computed(function() {
|
@@ -16292,9 +16322,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16292
16322
|
return value of the `attributeBindings` monitored property:
|
16293
16323
|
|
16294
16324
|
```app/components/my-text-input.js
|
16295
|
-
import
|
16325
|
+
import Component from '@ember/component';
|
16296
16326
|
|
16297
|
-
export default
|
16327
|
+
export default Component.extend({
|
16298
16328
|
tagName: 'form',
|
16299
16329
|
attributeBindings: ['novalidate'],
|
16300
16330
|
novalidate: null
|
@@ -16322,10 +16352,10 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16322
16352
|
```
|
16323
16353
|
|
16324
16354
|
```app/components/person-profile.js
|
16325
|
-
import
|
16355
|
+
import Component from '@ember/component';
|
16326
16356
|
import layout from '../templates/components/person-profile';
|
16327
16357
|
|
16328
|
-
export default
|
16358
|
+
export default Component.extend({
|
16329
16359
|
layout
|
16330
16360
|
});
|
16331
16361
|
```
|
@@ -16355,9 +16385,9 @@ enifed('ember-glimmer/component', ['exports', 'ember-utils', 'ember-views', 'emb
|
|
16355
16385
|
argument to this method.
|
16356
16386
|
|
16357
16387
|
```app/components/my-widget.js
|
16358
|
-
import
|
16388
|
+
import Component from '@ember/component';
|
16359
16389
|
|
16360
|
-
export default
|
16390
|
+
export default Component.extend({
|
16361
16391
|
click(event) {
|
16362
16392
|
// will be called when an instance's
|
16363
16393
|
// rendered element is clicked
|
@@ -17262,13 +17292,13 @@ enifed('ember-glimmer/components/link-to', ['exports', 'ember-console', 'ember-d
|
|
17262
17292
|
|
17263
17293
|
### Allowing Default Action
|
17264
17294
|
|
17265
|
-
|
17266
|
-
|
17267
|
-
|
17268
|
-
|
17295
|
+
By default the `{{link-to}}` component prevents the default browser action
|
17296
|
+
by calling `preventDefault()` as this sort of action bubbling is normally
|
17297
|
+
handled internally and we do not want to take the browser to a new URL (for
|
17298
|
+
example).
|
17269
17299
|
|
17270
|
-
|
17271
|
-
|
17300
|
+
If you need to override this behavior specify `preventDefault=false` in
|
17301
|
+
your template:
|
17272
17302
|
|
17273
17303
|
```handlebars
|
17274
17304
|
{{#link-to 'photoGallery' aPhotoId preventDefault=false}}
|
@@ -17402,7 +17432,8 @@ enifed('ember-glimmer/components/text_field', ['exports', 'ember-metal', 'ember-
|
|
17402
17432
|
layout: _empty.default,
|
17403
17433
|
classNames: ['ember-text-field'],
|
17404
17434
|
tagName: 'input',
|
17405
|
-
attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', '
|
17435
|
+
attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', 'type', // needs to be before min and max. See #15675
|
17436
|
+
'max', 'min', 'multiple', 'name', 'pattern', 'size', 'step', 'value', 'width'],
|
17406
17437
|
|
17407
17438
|
/**
|
17408
17439
|
The `value` attribute of the input element. As the user inputs text, this
|
@@ -17863,8 +17894,10 @@ enifed('ember-glimmer/helper', ['exports', 'ember-utils', 'ember-runtime', '@gli
|
|
17863
17894
|
|
17864
17895
|
Helpers defined using a class must provide a `compute` function. For example:
|
17865
17896
|
|
17866
|
-
```js
|
17867
|
-
|
17897
|
+
```app/helpers/format-currency.js
|
17898
|
+
import Helper from '@ember/component/helper';
|
17899
|
+
|
17900
|
+
export default Helper.extend({
|
17868
17901
|
compute(params, hash) {
|
17869
17902
|
let cents = params[0];
|
17870
17903
|
let currency = hash.currency;
|
@@ -17921,9 +17954,10 @@ enifed('ember-glimmer/helper', ['exports', 'ember-utils', 'ember-runtime', '@gli
|
|
17921
17954
|
The `helper` method create pure-function helpers without instances. For
|
17922
17955
|
example:
|
17923
17956
|
|
17924
|
-
```js
|
17925
|
-
|
17926
|
-
|
17957
|
+
```app/helpers/format-currency.js
|
17958
|
+
import { helper } from '@ember/component/helper';
|
17959
|
+
|
17960
|
+
export default helper(function(params, hash) {
|
17927
17961
|
let cents = params[0];
|
17928
17962
|
let currency = hash.currency;
|
17929
17963
|
return `${currency}${cents * 0.01}`;
|
@@ -18132,10 +18166,10 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18132
18166
|
|
18133
18167
|
Here is an example action handler on a component:
|
18134
18168
|
|
18135
|
-
```js
|
18136
|
-
import
|
18169
|
+
```app/components/my-component.js
|
18170
|
+
import Component from '@ember/component';
|
18137
18171
|
|
18138
|
-
export default
|
18172
|
+
export default Component.extend({
|
18139
18173
|
actions: {
|
18140
18174
|
save() {
|
18141
18175
|
this.get('model').save();
|
@@ -18164,8 +18198,10 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18164
18198
|
additional arguments are passed to the action function. This has interesting
|
18165
18199
|
properties combined with currying of arguments. For example:
|
18166
18200
|
|
18167
|
-
```js
|
18168
|
-
|
18201
|
+
```app/components/my-component.js
|
18202
|
+
import Component from '@ember/component';
|
18203
|
+
|
18204
|
+
export default Component.extend({
|
18169
18205
|
actions: {
|
18170
18206
|
// Usage {{input on-input=(action (action 'setName' model) value="target.value")}}
|
18171
18207
|
setName(model, name) {
|
@@ -18184,9 +18220,9 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18184
18220
|
with `on-input` above. For example:
|
18185
18221
|
|
18186
18222
|
```app/components/my-input.js
|
18187
|
-
import
|
18223
|
+
import Component from '@ember/component';
|
18188
18224
|
|
18189
|
-
export default
|
18225
|
+
export default Component.extend({
|
18190
18226
|
actions: {
|
18191
18227
|
setName(model, name) {
|
18192
18228
|
model.set('name', name);
|
@@ -18200,9 +18236,9 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18200
18236
|
```
|
18201
18237
|
|
18202
18238
|
```app/components/my-component.js
|
18203
|
-
import
|
18239
|
+
import Component from '@ember/component';
|
18204
18240
|
|
18205
|
-
export default
|
18241
|
+
export default Component.extend({
|
18206
18242
|
click() {
|
18207
18243
|
// Note that model is not passed, it was curried in the template
|
18208
18244
|
this.sendAction('submit', 'bob');
|
@@ -18258,7 +18294,7 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18258
18294
|
```
|
18259
18295
|
|
18260
18296
|
```app/helpers/disable-bubbling.js
|
18261
|
-
import
|
18297
|
+
import { helper } from '@ember/component/helper';
|
18262
18298
|
|
18263
18299
|
export function disableBubbling([action]) {
|
18264
18300
|
return function(event) {
|
@@ -18266,7 +18302,7 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18266
18302
|
return action(event);
|
18267
18303
|
};
|
18268
18304
|
}
|
18269
|
-
export default
|
18305
|
+
export default helper(disableBubbling);
|
18270
18306
|
```
|
18271
18307
|
|
18272
18308
|
If you need the default handler to trigger you should either register your
|
@@ -18323,10 +18359,11 @@ enifed('ember-glimmer/helpers/action', ['exports', 'ember-utils', 'ember-metal',
|
|
18323
18359
|
```
|
18324
18360
|
|
18325
18361
|
```app/controllers/application.js
|
18326
|
-
import
|
18362
|
+
import Controller from '@ember/controller';
|
18363
|
+
import { inject as service } from '@ember/service';
|
18327
18364
|
|
18328
|
-
export default
|
18329
|
-
someService:
|
18365
|
+
export default Controller.extend({
|
18366
|
+
someService: service()
|
18330
18367
|
});
|
18331
18368
|
```
|
18332
18369
|
|
@@ -18773,7 +18810,7 @@ enifed('ember-glimmer/helpers/get', ['exports', 'ember-babel', 'ember-metal', 'e
|
|
18773
18810
|
var path = this.lastPath = this.pathReference.value();
|
18774
18811
|
|
18775
18812
|
if (path !== lastPath) {
|
18776
|
-
if (path) {
|
18813
|
+
if (path !== undefined && path !== null) {
|
18777
18814
|
var pathType = typeof path;
|
18778
18815
|
|
18779
18816
|
if (pathType === 'string') {
|
@@ -20629,10 +20666,31 @@ enifed('ember-glimmer/syntax/mount', ['exports', 'ember-babel', 'ember-debug', '
|
|
20629
20666
|
{{mount "ember-chat"}}
|
20630
20667
|
```
|
20631
20668
|
|
20632
|
-
|
20633
|
-
|
20669
|
+
Additionally, you can also pass in a `model` argument that will be
|
20670
|
+
set as the engines model. This can be an existing object:
|
20671
|
+
|
20672
|
+
```
|
20673
|
+
<div>
|
20674
|
+
{{mount 'admin' model=userSettings}}
|
20675
|
+
</div>
|
20676
|
+
```
|
20677
|
+
|
20678
|
+
Or an inline `hash`, and you can even pass components:
|
20679
|
+
|
20680
|
+
```
|
20681
|
+
<div>
|
20682
|
+
<h1>Application template!</h1>
|
20683
|
+
{{mount 'admin' model=(hash
|
20684
|
+
title='Secret Admin'
|
20685
|
+
signInButton=(component 'sign-in-button')
|
20686
|
+
)}}
|
20687
|
+
</div>
|
20688
|
+
```
|
20634
20689
|
|
20635
20690
|
@method mount
|
20691
|
+
@param {String} name Name of the engine to mount.
|
20692
|
+
@param {Object} [model] Object that will be set as
|
20693
|
+
the model of the engine.
|
20636
20694
|
@for Ember.Templates.helpers
|
20637
20695
|
@category ember-application-engines
|
20638
20696
|
@public
|
@@ -20805,9 +20863,10 @@ enifed('ember-glimmer/syntax/outlet', ['exports', 'ember-babel', '@glimmer/refer
|
|
20805
20863
|
Your routes can then render into a specific one of these `outlet`s by specifying the `outlet`
|
20806
20864
|
attribute in your `renderTemplate` function:
|
20807
20865
|
|
20808
|
-
```
|
20809
|
-
|
20810
|
-
|
20866
|
+
```app/routes/menu.js
|
20867
|
+
import Route from '@ember/routing/route';
|
20868
|
+
|
20869
|
+
export default Route.extend({
|
20811
20870
|
renderTemplate() {
|
20812
20871
|
this.render({ outlet: 'menu' });
|
20813
20872
|
}
|
@@ -20891,8 +20950,10 @@ enifed('ember-glimmer/syntax/render', ['exports', '@glimmer/reference', 'ember-d
|
|
20891
20950
|
|
20892
20951
|
Example:
|
20893
20952
|
|
20894
|
-
```
|
20895
|
-
|
20953
|
+
```app/controllers/navigation.js
|
20954
|
+
import Controller from '@ember/controller';
|
20955
|
+
|
20956
|
+
export default Controller.extend({
|
20896
20957
|
who: "world"
|
20897
20958
|
});
|
20898
20959
|
```
|
@@ -22995,7 +23056,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
22995
23056
|
*/
|
22996
23057
|
function hasListeners(obj, eventName) {
|
22997
23058
|
var meta$$1 = exports.peekMeta(obj);
|
22998
|
-
if (
|
23059
|
+
if (meta$$1 === undefined) {
|
22999
23060
|
return false;
|
23000
23061
|
}
|
23001
23062
|
var matched = meta$$1.matchingListeners(eventName);
|
@@ -23058,6 +23119,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23058
23119
|
|
23059
23120
|
var func = args.pop();
|
23060
23121
|
var events = args;
|
23122
|
+
|
23123
|
+
true && !(typeof func === 'function') && emberDebug.assert('Ember.on expects function as last argument', typeof func === 'function');
|
23124
|
+
true && !(events.length > 0 && events.every(function (p) {
|
23125
|
+
return typeof p === 'string' && p.length;
|
23126
|
+
})) && emberDebug.assert('Ember.on called without valid event names', events.length > 0 && events.every(function (p) {
|
23127
|
+
return typeof p === 'string' && p.length;
|
23128
|
+
}));
|
23129
|
+
|
23061
23130
|
func.__ember_listens__ = events;
|
23062
23131
|
return func;
|
23063
23132
|
}
|
@@ -23660,7 +23729,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23660
23729
|
function DEFAULT_GETTER_FUNCTION(name) {
|
23661
23730
|
return function GETTER_FUNCTION() {
|
23662
23731
|
var meta$$1 = exports.peekMeta(this);
|
23663
|
-
if (meta$$1 !==
|
23732
|
+
if (meta$$1 !== undefined) {
|
23664
23733
|
return meta$$1.peekValues(name);
|
23665
23734
|
}
|
23666
23735
|
};
|
@@ -23670,7 +23739,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23670
23739
|
function IGETTER_FUNCTION() {
|
23671
23740
|
var meta$$1 = exports.peekMeta(this);
|
23672
23741
|
var val = void 0;
|
23673
|
-
if (meta$$1 !==
|
23742
|
+
if (meta$$1 !== undefined) {
|
23674
23743
|
val = meta$$1.readInheritedValue('values', name);
|
23675
23744
|
}
|
23676
23745
|
|
@@ -23732,7 +23801,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23732
23801
|
become the explicit value of this property.
|
23733
23802
|
*/
|
23734
23803
|
function defineProperty(obj, keyName, desc, data, meta$$1) {
|
23735
|
-
if (meta$$1 ===
|
23804
|
+
if (meta$$1 === undefined) {
|
23736
23805
|
meta$$1 = meta(obj);
|
23737
23806
|
}
|
23738
23807
|
|
@@ -23920,7 +23989,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
23920
23989
|
var meta$$1 = _meta || exports.peekMeta(obj);
|
23921
23990
|
|
23922
23991
|
// do nothing of this object has already been destroyed
|
23923
|
-
if (
|
23992
|
+
if (meta$$1 === undefined || meta$$1.isSourceDestroyed()) {
|
23924
23993
|
return;
|
23925
23994
|
}
|
23926
23995
|
|
@@ -24131,9 +24200,9 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
24131
24200
|
return;
|
24132
24201
|
}
|
24133
24202
|
|
24134
|
-
var meta$$1 = _meta
|
24203
|
+
var meta$$1 = _meta === undefined ? exports.peekMeta(obj) : _meta;
|
24135
24204
|
|
24136
|
-
if (
|
24205
|
+
if (meta$$1 === undefined || meta$$1.readableChainWatchers() === undefined) {
|
24137
24206
|
return;
|
24138
24207
|
}
|
24139
24208
|
|
@@ -25594,7 +25663,8 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25594
25663
|
*/
|
25595
25664
|
function ComputedProperty(config, opts) {
|
25596
25665
|
this.isDescriptor = true;
|
25597
|
-
|
25666
|
+
var hasGetterOnly = typeof config === 'function';
|
25667
|
+
if (hasGetterOnly) {
|
25598
25668
|
this._getter = config;
|
25599
25669
|
} else {
|
25600
25670
|
true && !(typeof config === 'object' && !Array.isArray(config)) && emberDebug.assert('Ember.computed expects a function or an object as last argument.', typeof config === 'object' && !Array.isArray(config));
|
@@ -25612,8 +25682,9 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25612
25682
|
this._suspended = undefined;
|
25613
25683
|
this._meta = undefined;
|
25614
25684
|
this._volatile = false;
|
25685
|
+
|
25615
25686
|
this._dependentKeys = opts && opts.dependentKeys;
|
25616
|
-
this._readOnly =
|
25687
|
+
this._readOnly = opts && hasGetterOnly && opts.readOnly === true;
|
25617
25688
|
}
|
25618
25689
|
|
25619
25690
|
ComputedProperty.prototype = new Descriptor();
|
@@ -25731,10 +25802,13 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25731
25802
|
You can pass a hash of these values to a computed property like this:
|
25732
25803
|
|
25733
25804
|
```
|
25734
|
-
|
25805
|
+
import { computed } from '@ember/object';
|
25806
|
+
import Person from 'my-app/utils/person';
|
25807
|
+
|
25808
|
+
person: computed(function() {
|
25735
25809
|
let personId = this.get('personId');
|
25736
|
-
return
|
25737
|
-
}).meta({ type:
|
25810
|
+
return Person.create({ id: personId });
|
25811
|
+
}).meta({ type: Person })
|
25738
25812
|
```
|
25739
25813
|
|
25740
25814
|
The hash that you pass to the `meta()` function will be saved on the
|
@@ -25766,12 +25840,12 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25766
25840
|
|
25767
25841
|
// don't create objects just to invalidate
|
25768
25842
|
var meta$$1 = exports.peekMeta(obj);
|
25769
|
-
if (
|
25843
|
+
if (meta$$1 === undefined || meta$$1.source !== obj) {
|
25770
25844
|
return;
|
25771
25845
|
}
|
25772
25846
|
|
25773
25847
|
var cache = meta$$1.readableCache();
|
25774
|
-
if (cache && cache[keyName] !== undefined) {
|
25848
|
+
if (cache !== undefined && cache[keyName] !== undefined) {
|
25775
25849
|
cache[keyName] = undefined;
|
25776
25850
|
removeDependentKeys(this, obj, keyName, meta$$1);
|
25777
25851
|
}
|
@@ -25793,14 +25867,10 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25793
25867
|
}
|
25794
25868
|
|
25795
25869
|
var ret = this._getter.call(obj, keyName);
|
25796
|
-
|
25797
|
-
cache[keyName] = UNDEFINED;
|
25798
|
-
} else {
|
25799
|
-
cache[keyName] = ret;
|
25800
|
-
}
|
25870
|
+
cache[keyName] = ret === undefined ? UNDEFINED : ret;
|
25801
25871
|
|
25802
25872
|
var chainWatchers = meta$$1.readableChainWatchers();
|
25803
|
-
if (chainWatchers) {
|
25873
|
+
if (chainWatchers !== undefined) {
|
25804
25874
|
chainWatchers.revalidate(keyName);
|
25805
25875
|
}
|
25806
25876
|
addDependentKeys(this, obj, keyName, meta$$1);
|
@@ -25850,15 +25920,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
25850
25920
|
};
|
25851
25921
|
|
25852
25922
|
ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) {
|
25853
|
-
// cache requires own meta
|
25854
25923
|
var meta$$1 = meta(obj);
|
25855
|
-
// either there is a writable cache or we need one to update
|
25856
25924
|
var cache = meta$$1.writableCache();
|
25857
25925
|
var hadCachedValue = false;
|
25858
25926
|
var cachedValue = void 0;
|
25859
|
-
|
25860
|
-
|
25861
|
-
|
25927
|
+
var val = cache[keyName];
|
25928
|
+
if (val !== undefined) {
|
25929
|
+
if (val !== UNDEFINED) {
|
25930
|
+
cachedValue = val;
|
25862
25931
|
}
|
25863
25932
|
hadCachedValue = true;
|
25864
25933
|
}
|
@@ -26472,6 +26541,12 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26472
26541
|
};
|
26473
26542
|
|
26474
26543
|
var onerror = void 0;
|
26544
|
+
var onErrorTarget = {
|
26545
|
+
get onerror() {
|
26546
|
+
return dispatchOverride || onerror;
|
26547
|
+
}
|
26548
|
+
};
|
26549
|
+
|
26475
26550
|
// Ember.onerror getter
|
26476
26551
|
function getOnerror() {
|
26477
26552
|
return onerror;
|
@@ -26563,7 +26638,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26563
26638
|
}
|
26564
26639
|
|
26565
26640
|
var meta$$1 = exports.peekMeta(obj);
|
26566
|
-
if (meta$$1) {
|
26641
|
+
if (meta$$1 !== undefined) {
|
26567
26642
|
var map = meta$$1.readableWeak();
|
26568
26643
|
if (map !== undefined) {
|
26569
26644
|
var val = map[this._id];
|
@@ -26608,7 +26683,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26608
26683
|
}
|
26609
26684
|
|
26610
26685
|
var meta$$1 = exports.peekMeta(obj);
|
26611
|
-
if (meta$$1) {
|
26686
|
+
if (meta$$1 !== undefined) {
|
26612
26687
|
var map = meta$$1.readableWeak();
|
26613
26688
|
if (map !== undefined) {
|
26614
26689
|
return map[this._id] !== undefined;
|
@@ -26800,15 +26875,6 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26800
26875
|
run.currentRunLoop = next;
|
26801
26876
|
}
|
26802
26877
|
|
26803
|
-
var onErrorTarget = {
|
26804
|
-
get onerror() {
|
26805
|
-
return dispatchError;
|
26806
|
-
},
|
26807
|
-
set onerror(handler) {
|
26808
|
-
return setOnerror(handler);
|
26809
|
-
}
|
26810
|
-
};
|
26811
|
-
|
26812
26878
|
var backburner$1 = new Backburner(['sync', 'actions', 'destroy'], {
|
26813
26879
|
GUID_KEY: emberUtils.GUID_KEY,
|
26814
26880
|
sync: {
|
@@ -26916,16 +26982,26 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26916
26982
|
We can use that setup option to do some additional setup for our component.
|
26917
26983
|
The component itself could look something like the following:
|
26918
26984
|
|
26919
|
-
```
|
26920
|
-
|
26985
|
+
```app/components/rich-text-editor.js
|
26986
|
+
import Component from '@ember/component';
|
26987
|
+
import { bind } from '@ember/runloop';
|
26988
|
+
|
26989
|
+
export default Component.extend({
|
26921
26990
|
initializeTinyMCE: Ember.on('didInsertElement', function() {
|
26922
26991
|
tinymce.init({
|
26923
26992
|
selector: '#' + this.$().prop('id'),
|
26924
26993
|
setup: Ember.run.bind(this, this.setupEditor)
|
26925
26994
|
});
|
26926
26995
|
}),
|
26996
|
+
|
26997
|
+
didInsertElement() {
|
26998
|
+
tinymce.init({
|
26999
|
+
selector: '#' + this.$().prop('id'),
|
27000
|
+
setup: Ember.run.bind(this, this.setupEditor)
|
27001
|
+
});
|
27002
|
+
}
|
26927
27003
|
|
26928
|
-
setupEditor
|
27004
|
+
setupEditor(editor) {
|
26929
27005
|
this.set('editor', editor);
|
26930
27006
|
|
26931
27007
|
editor.on('change', function() {
|
@@ -26936,7 +27012,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
26936
27012
|
```
|
26937
27013
|
|
26938
27014
|
In this example, we use Ember.run.bind to bind the setupEditor method to the
|
26939
|
-
context of the
|
27015
|
+
context of the RichTextEditor component and to have the invocation of that
|
26940
27016
|
method be safely handled and executed by the Ember run loop.
|
26941
27017
|
|
26942
27018
|
@method bind
|
@@ -27170,9 +27246,23 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27170
27246
|
});
|
27171
27247
|
```
|
27172
27248
|
|
27173
|
-
Also note that
|
27174
|
-
|
27175
|
-
|
27249
|
+
Also note that for `run.scheduleOnce` to prevent additional calls, you need to
|
27250
|
+
pass the same function instance. The following case works as expected:
|
27251
|
+
|
27252
|
+
```javascript
|
27253
|
+
function log() {
|
27254
|
+
console.log('Logging only once');
|
27255
|
+
}
|
27256
|
+
|
27257
|
+
function scheduleIt() {
|
27258
|
+
run.scheduleOnce('actions', myContext, log);
|
27259
|
+
}
|
27260
|
+
|
27261
|
+
scheduleIt();
|
27262
|
+
scheduleIt();
|
27263
|
+
```
|
27264
|
+
|
27265
|
+
But this other case will schedule the function multiple times:
|
27176
27266
|
|
27177
27267
|
```javascript
|
27178
27268
|
function scheduleIt() {
|
@@ -27185,7 +27275,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27185
27275
|
scheduleIt();
|
27186
27276
|
|
27187
27277
|
// "Closure" will print twice, even though we're using `run.scheduleOnce`,
|
27188
|
-
// because the function we pass to it
|
27278
|
+
// because the function we pass to it won't match the
|
27189
27279
|
// previously scheduled operation.
|
27190
27280
|
```
|
27191
27281
|
|
@@ -27233,8 +27323,10 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
27233
27323
|
|
27234
27324
|
Example:
|
27235
27325
|
|
27236
|
-
```
|
27237
|
-
|
27326
|
+
```app/components/my-component.js
|
27327
|
+
import Component from '@ember/component';
|
27328
|
+
|
27329
|
+
export Component.extend({
|
27238
27330
|
didInsertElement() {
|
27239
27331
|
this._super(...arguments);
|
27240
27332
|
run.scheduleOnce('afterRender', this, 'processChildElements');
|
@@ -28780,16 +28872,14 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28780
28872
|
|
28781
28873
|
if (baseValue === null || baseValue === undefined) {
|
28782
28874
|
ret = emberUtils.makeArray(value);
|
28783
|
-
} else {
|
28784
|
-
if (
|
28785
|
-
|
28786
|
-
ret = baseValue;
|
28787
|
-
} else {
|
28788
|
-
ret = a_concat.call(baseValue, value);
|
28789
|
-
}
|
28875
|
+
} else if (isArray(baseValue)) {
|
28876
|
+
if (value === null || value === undefined) {
|
28877
|
+
ret = baseValue;
|
28790
28878
|
} else {
|
28791
|
-
ret = a_concat.call(
|
28879
|
+
ret = a_concat.call(baseValue, value);
|
28792
28880
|
}
|
28881
|
+
} else {
|
28882
|
+
ret = a_concat.call(emberUtils.makeArray(baseValue), value);
|
28793
28883
|
}
|
28794
28884
|
|
28795
28885
|
{
|
@@ -28860,7 +28950,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28860
28950
|
} else {
|
28861
28951
|
if (concats && concats.indexOf(key) >= 0 || key === 'concatenatedProperties' || key === 'mergedProperties') {
|
28862
28952
|
value = applyConcatenatedProperties(base, key, value, values);
|
28863
|
-
} else if (mergings && mergings.indexOf(key)
|
28953
|
+
} else if (mergings && mergings.indexOf(key) > -1) {
|
28864
28954
|
value = applyMergedProperties(base, key, value, values);
|
28865
28955
|
} else if (isMethod(value)) {
|
28866
28956
|
value = giveMethodSuper(base, key, value, values, descs);
|
@@ -28972,9 +29062,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28972
29062
|
return { desc: desc, value: value };
|
28973
29063
|
}
|
28974
29064
|
|
28975
|
-
function updateObserversAndListeners(obj, key,
|
28976
|
-
var paths = observerOrListener[pathsKey];
|
28977
|
-
|
29065
|
+
function updateObserversAndListeners(obj, key, paths, updateMethod) {
|
28978
29066
|
if (paths) {
|
28979
29067
|
for (var i = 0; i < paths.length; i++) {
|
28980
29068
|
updateMethod(obj, paths[i], null, key);
|
@@ -28985,16 +29073,16 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
28985
29073
|
function replaceObserversAndListeners(obj, key, observerOrListener) {
|
28986
29074
|
var prev = obj[key];
|
28987
29075
|
|
28988
|
-
if ('function'
|
28989
|
-
updateObserversAndListeners(obj, key, prev
|
28990
|
-
updateObserversAndListeners(obj, key, prev
|
28991
|
-
updateObserversAndListeners(obj, key, prev
|
29076
|
+
if (typeof prev === 'function') {
|
29077
|
+
updateObserversAndListeners(obj, key, prev.__ember_observesBefore__, _removeBeforeObserver);
|
29078
|
+
updateObserversAndListeners(obj, key, prev.__ember_observes__, removeObserver);
|
29079
|
+
updateObserversAndListeners(obj, key, prev.__ember_listens__, removeListener);
|
28992
29080
|
}
|
28993
29081
|
|
28994
|
-
if ('function'
|
28995
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
28996
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
28997
|
-
updateObserversAndListeners(obj, key, observerOrListener
|
29082
|
+
if (typeof observerOrListener === 'function') {
|
29083
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_observesBefore__, _addBeforeObserver);
|
29084
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_observes__, addObserver);
|
29085
|
+
updateObserversAndListeners(obj, key, observerOrListener.__ember_listens__, addListener);
|
28998
29086
|
}
|
28999
29087
|
}
|
29000
29088
|
|
@@ -29201,7 +29289,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29201
29289
|
Mixin.mixins = function mixins(obj) {
|
29202
29290
|
var meta$$1 = exports.peekMeta(obj);
|
29203
29291
|
var ret = [];
|
29204
|
-
if (
|
29292
|
+
if (meta$$1 === undefined) {
|
29205
29293
|
return ret;
|
29206
29294
|
}
|
29207
29295
|
|
@@ -29318,7 +29406,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29318
29406
|
return _detect(obj, this, {});
|
29319
29407
|
}
|
29320
29408
|
var meta$$1 = exports.peekMeta(obj);
|
29321
|
-
if (
|
29409
|
+
if (meta$$1 === undefined) {
|
29322
29410
|
return false;
|
29323
29411
|
}
|
29324
29412
|
return !!meta$$1.peekMixins(emberUtils.guidFor(this));
|
@@ -29393,15 +29481,21 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29393
29481
|
/**
|
29394
29482
|
Makes a method available via an additional name.
|
29395
29483
|
|
29396
|
-
```
|
29397
|
-
|
29398
|
-
|
29484
|
+
```app/utils/person.js
|
29485
|
+
import EmberObject, {
|
29486
|
+
aliasMethod
|
29487
|
+
} from '@ember/object';
|
29488
|
+
|
29489
|
+
export default EmberObject.extend({
|
29490
|
+
name() {
|
29399
29491
|
return 'Tomhuda Katzdale';
|
29400
29492
|
},
|
29401
|
-
moniker:
|
29493
|
+
moniker: aliasMethod('name')
|
29402
29494
|
});
|
29495
|
+
```
|
29403
29496
|
|
29404
|
-
|
29497
|
+
```javascript
|
29498
|
+
let goodGuy = Person.create();
|
29405
29499
|
|
29406
29500
|
goodGuy.name(); // 'Tomhuda Katzdale'
|
29407
29501
|
goodGuy.moniker(); // 'Tomhuda Katzdale'
|
@@ -29640,7 +29734,7 @@ enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-deb
|
|
29640
29734
|
function isProxy(value) {
|
29641
29735
|
if (typeof value === 'object' && value !== null) {
|
29642
29736
|
var meta$$1 = exports.peekMeta(value);
|
29643
|
-
return meta$$1
|
29737
|
+
return meta$$1 === undefined ? false : meta$$1.isProxy();
|
29644
29738
|
}
|
29645
29739
|
|
29646
29740
|
return false;
|
@@ -30451,14 +30545,14 @@ enifed('ember-routing/location/history_location', ['exports', 'ember-metal', 'em
|
|
30451
30545
|
|
30452
30546
|
Example:
|
30453
30547
|
|
30454
|
-
```
|
30455
|
-
|
30548
|
+
```app/router.js
|
30549
|
+
Router.map(function() {
|
30456
30550
|
this.route('posts', function() {
|
30457
30551
|
this.route('new');
|
30458
30552
|
});
|
30459
30553
|
});
|
30460
30554
|
|
30461
|
-
|
30555
|
+
Router.reopen({
|
30462
30556
|
location: 'history'
|
30463
30557
|
});
|
30464
30558
|
```
|
@@ -30947,9 +31041,91 @@ enifed('ember-routing/services/router', ['exports', 'ember-runtime', 'ember-rout
|
|
30947
31041
|
*/
|
30948
31042
|
|
30949
31043
|
var RouterService = _emberRuntime.Service.extend({
|
31044
|
+
|
31045
|
+
/**
|
31046
|
+
Name of the current route.
|
31047
|
+
This property represent the logical name of the route,
|
31048
|
+
which is comma separated.
|
31049
|
+
For the following router:
|
31050
|
+
```app/router.js
|
31051
|
+
Router.map(function() {
|
31052
|
+
this.route('about);
|
31053
|
+
this.route('blog', function () {
|
31054
|
+
this.route('post', { path: ':post_id' });
|
31055
|
+
});
|
31056
|
+
});
|
31057
|
+
```
|
31058
|
+
It will return:
|
31059
|
+
* `index` when you visit `/`
|
31060
|
+
* `about` when you visit `/about`
|
31061
|
+
* `blog.index` when you visit `/blog`
|
31062
|
+
* `blog.post` when you visit `/blog/some-post-id`
|
31063
|
+
@property currentRouteName
|
31064
|
+
@type String
|
31065
|
+
@public
|
31066
|
+
*/
|
30950
31067
|
currentRouteName: (0, _emberRuntime.readOnly)('_router.currentRouteName'),
|
31068
|
+
|
31069
|
+
/**
|
31070
|
+
Current URL for the application.
|
31071
|
+
This property represent the URL path for this route.
|
31072
|
+
For the following router:
|
31073
|
+
```app/router.js
|
31074
|
+
Router.map(function() {
|
31075
|
+
this.route('about);
|
31076
|
+
this.route('blog', function () {
|
31077
|
+
this.route('post', { path: ':post_id' });
|
31078
|
+
});
|
31079
|
+
});
|
31080
|
+
```
|
31081
|
+
It will return:
|
31082
|
+
* `/` when you visit `/`
|
31083
|
+
* `/about` when you visit `/about`
|
31084
|
+
* `/blog/index` when you visit `/blog`
|
31085
|
+
* `/blog/post` when you visit `/blog/some-post-id`
|
31086
|
+
@property currentURL
|
31087
|
+
@type String
|
31088
|
+
@public
|
31089
|
+
*/
|
30951
31090
|
currentURL: (0, _emberRuntime.readOnly)('_router.currentURL'),
|
31091
|
+
|
31092
|
+
/**
|
31093
|
+
The `location` property determines the type of URL's that your
|
31094
|
+
application will use.
|
31095
|
+
The following location types are currently available:
|
31096
|
+
* `auto`
|
31097
|
+
* `hash`
|
31098
|
+
* `history`
|
31099
|
+
* `none`
|
31100
|
+
@property location
|
31101
|
+
@default 'hash'
|
31102
|
+
@see {Ember.Location}
|
31103
|
+
@public
|
31104
|
+
*/
|
30952
31105
|
location: (0, _emberRuntime.readOnly)('_router.location'),
|
31106
|
+
|
31107
|
+
/**
|
31108
|
+
The `rootURL` property represents the URL of the root of
|
31109
|
+
the application, '/' by default.
|
31110
|
+
This prefix is assumed on all routes defined on this app.
|
31111
|
+
IF you change the `rootURL` in your environment configuration
|
31112
|
+
like so:
|
31113
|
+
```config/environment.js
|
31114
|
+
'use strict';
|
31115
|
+
module.exports = function(environment) {
|
31116
|
+
let ENV = {
|
31117
|
+
modulePrefix: 'router-service',
|
31118
|
+
environment,
|
31119
|
+
rootURL: '/my-root',
|
31120
|
+
…
|
31121
|
+
}
|
31122
|
+
]
|
31123
|
+
```
|
31124
|
+
This property will return `/my-root`.
|
31125
|
+
@property rootURL
|
31126
|
+
@default '/'
|
31127
|
+
@public
|
31128
|
+
*/
|
30953
31129
|
rootURL: (0, _emberRuntime.readOnly)('_router.rootURL'),
|
30954
31130
|
_router: null,
|
30955
31131
|
|
@@ -31777,10 +31953,10 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31777
31953
|
A hook you can use to reset controller values either when the model
|
31778
31954
|
changes or the route is exiting.
|
31779
31955
|
```app/routes/articles.js
|
31780
|
-
import
|
31781
|
-
export default
|
31956
|
+
import Route from '@ember/routing/route';
|
31957
|
+
export default Route.extend({
|
31782
31958
|
resetController(controller, isExiting, transition) {
|
31783
|
-
if (isExiting) {
|
31959
|
+
if (isExiting && transition.targetName !== 'error') {
|
31784
31960
|
controller.set('page', 1);
|
31785
31961
|
}
|
31786
31962
|
}
|
@@ -31817,8 +31993,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31817
31993
|
The name of the template to use by default when rendering this routes
|
31818
31994
|
template.
|
31819
31995
|
```app/routes/posts/list.js
|
31820
|
-
import
|
31821
|
-
export default
|
31996
|
+
import Route from '@ember/routing/route';
|
31997
|
+
export default Route.extend({
|
31822
31998
|
templateName: 'posts/list'
|
31823
31999
|
});
|
31824
32000
|
```
|
@@ -31864,8 +32040,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31864
32040
|
A good example is preventing navigation when a form is
|
31865
32041
|
half-filled out:
|
31866
32042
|
```app/routes/contact-form.js
|
31867
|
-
import
|
31868
|
-
export default
|
32043
|
+
import Route from '@ember/routing/route';
|
32044
|
+
export default Route.extend({
|
31869
32045
|
actions: {
|
31870
32046
|
willTransition(transition) {
|
31871
32047
|
if (this.controller.get('userHasEnteredData')) {
|
@@ -31902,8 +32078,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31902
32078
|
however, it can be useful for tracking page views or resetting
|
31903
32079
|
state on the controller.
|
31904
32080
|
```app/routes/login.js
|
31905
|
-
import
|
31906
|
-
export default
|
32081
|
+
import Route from '@ember/routing/route';
|
32082
|
+
export default Route.extend({
|
31907
32083
|
actions: {
|
31908
32084
|
didTransition() {
|
31909
32085
|
this.controller.get('errors.base').clear();
|
@@ -31923,7 +32099,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31923
32099
|
`Transition` object is the first parameter and the route that
|
31924
32100
|
triggered the loading event is the second parameter.
|
31925
32101
|
```app/routes/application.js
|
31926
|
-
|
32102
|
+
import Route from '@ember/routing/route';
|
32103
|
+
export default Route.extend({
|
31927
32104
|
actions: {
|
31928
32105
|
loading(transition, route) {
|
31929
32106
|
let controller = this.controllerFor('foo');
|
@@ -31952,8 +32129,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31952
32129
|
for rejected promises from the various hooks on the route,
|
31953
32130
|
as well as any unhandled errors from child routes:
|
31954
32131
|
```app/routes/admin.js
|
31955
|
-
import
|
31956
|
-
export default
|
32132
|
+
import Route from '@ember/routing/route';
|
32133
|
+
export default Route.extend({
|
31957
32134
|
beforeModel() {
|
31958
32135
|
return Ember.RSVP.reject('bad things!');
|
31959
32136
|
},
|
@@ -31977,8 +32154,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31977
32154
|
specify your own global default error handler by overriding the
|
31978
32155
|
`error` handler on `ApplicationRoute`:
|
31979
32156
|
```app/routes/application.js
|
31980
|
-
import
|
31981
|
-
export default
|
32157
|
+
import Route from '@ember/routing/route';
|
32158
|
+
export default Route.extend({
|
31982
32159
|
actions: {
|
31983
32160
|
error(error, transition) {
|
31984
32161
|
this.controllerFor('banner').displayError(error.message);
|
@@ -31997,8 +32174,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
31997
32174
|
This event is triggered when the router enters the route. It is
|
31998
32175
|
not executed when the model for the route changes.
|
31999
32176
|
```app/routes/application.js
|
32000
|
-
import
|
32001
|
-
export default
|
32177
|
+
import Route from '@ember/routing/route';
|
32178
|
+
export default Route.extend({
|
32002
32179
|
collectAnalytics: Ember.on('activate', function(){
|
32003
32180
|
collectAnalytics();
|
32004
32181
|
})
|
@@ -32013,8 +32190,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32013
32190
|
This event is triggered when the router completely exits this
|
32014
32191
|
route. It is not executed when the model for the route changes.
|
32015
32192
|
```app/routes/index.js
|
32016
|
-
import
|
32017
|
-
export default
|
32193
|
+
import Route from '@ember/routing/route';
|
32194
|
+
export default Route.extend({
|
32018
32195
|
trackPageLeaveAnalytics: Ember.on('deactivate', function(){
|
32019
32196
|
trackPageLeaveAnalytics();
|
32020
32197
|
})
|
@@ -32029,8 +32206,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32029
32206
|
The controller associated with this route.
|
32030
32207
|
Example
|
32031
32208
|
```app/routes/form.js
|
32032
|
-
import
|
32033
|
-
export default
|
32209
|
+
import Route from '@ember/routing/route';
|
32210
|
+
export default Route.extend({
|
32034
32211
|
actions: {
|
32035
32212
|
willTransition(transition) {
|
32036
32213
|
if (this.controller.get('userHasEnteredData') &&
|
@@ -32317,8 +32494,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32317
32494
|
logic that can only take place after the model has already
|
32318
32495
|
resolved.
|
32319
32496
|
```app/routes/posts.js
|
32320
|
-
import
|
32321
|
-
export default
|
32497
|
+
import Route from '@ember/routing/route';
|
32498
|
+
export default Route.extend({
|
32322
32499
|
afterModel(posts, transition) {
|
32323
32500
|
if (posts.get('length') === 1) {
|
32324
32501
|
this.transitionTo('post.show', posts.get('firstObject'));
|
@@ -32458,8 +32635,8 @@ enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', '
|
|
32458
32635
|
});
|
32459
32636
|
```
|
32460
32637
|
```app/routes/post.js
|
32461
|
-
import
|
32462
|
-
export default
|
32638
|
+
import Route from '@ember/routing/route';
|
32639
|
+
export default Route.extend({
|
32463
32640
|
model(params) {
|
32464
32641
|
// the server returns `{ id: 12 }`
|
32465
32642
|
return Ember.$.getJSON('/posts/' + params.post_id);
|
@@ -32875,7 +33052,7 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
32875
33052
|
* `hash` - use `#` to separate the server part of the URL from the Ember part: `/blog/#/posts/new`
|
32876
33053
|
* `none` - do not store the Ember URL in the actual browser URL (mainly used for testing)
|
32877
33054
|
* `auto` - use the best option based on browser capabilities: `history` if possible, then `hash` if possible, otherwise `none`
|
32878
|
-
|
33055
|
+
This value is defaulted to `auto` by the `locationType` setting of `/config/environment.js`
|
32879
33056
|
@property location
|
32880
33057
|
@default 'hash'
|
32881
33058
|
@see {Ember.Location}
|
@@ -33697,6 +33874,8 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
33697
33874
|
if (originRoute !== route) {
|
33698
33875
|
var errorRouteName = findRouteStateName(route, 'error');
|
33699
33876
|
if (errorRouteName) {
|
33877
|
+
var _errorId = (0, _emberUtils.guidFor)(error);
|
33878
|
+
router._markErrorAsHandled(_errorId);
|
33700
33879
|
router.intermediateTransitionTo(errorRouteName, error);
|
33701
33880
|
return false;
|
33702
33881
|
}
|
@@ -33705,6 +33884,8 @@ enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console'
|
|
33705
33884
|
// Check for an 'error' substate route
|
33706
33885
|
var errorSubstateName = findRouteSubstateName(route, 'error');
|
33707
33886
|
if (errorSubstateName) {
|
33887
|
+
var errorId = (0, _emberUtils.guidFor)(error);
|
33888
|
+
router._markErrorAsHandled(errorId);
|
33708
33889
|
router.intermediateTransitionTo(errorSubstateName, error);
|
33709
33890
|
return false;
|
33710
33891
|
}
|
@@ -35237,9 +35418,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35237
35418
|
return initialValue;
|
35238
35419
|
}
|
35239
35420
|
return arr.reduce(callback, initialValue, this);
|
35240
|
-
}, { dependentKeys: [dependentKey + '.[]'] });
|
35421
|
+
}, { dependentKeys: [dependentKey + '.[]'], readOnly: true });
|
35241
35422
|
|
35242
|
-
return cp
|
35423
|
+
return cp;
|
35243
35424
|
}
|
35244
35425
|
|
35245
35426
|
function arrayMacro(dependentKey, callback) {
|
@@ -35259,9 +35440,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35259
35440
|
} else {
|
35260
35441
|
return (0, _native_array.A)();
|
35261
35442
|
}
|
35262
|
-
}, { dependentKeys: [dependentKey] });
|
35443
|
+
}, { dependentKeys: [dependentKey], readOnly: true });
|
35263
35444
|
|
35264
|
-
return cp
|
35445
|
+
return cp;
|
35265
35446
|
}
|
35266
35447
|
|
35267
35448
|
function multiArrayMacro(_dependentKeys, callback) {
|
@@ -35271,9 +35452,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35271
35452
|
|
35272
35453
|
var cp = new _emberMetal.ComputedProperty(function () {
|
35273
35454
|
return (0, _native_array.A)(callback.call(this, _dependentKeys));
|
35274
|
-
}, { dependentKeys: dependentKeys });
|
35455
|
+
}, { dependentKeys: dependentKeys, readOnly: true });
|
35275
35456
|
|
35276
|
-
return cp
|
35457
|
+
return cp;
|
35277
35458
|
}
|
35278
35459
|
|
35279
35460
|
/**
|
@@ -35659,7 +35840,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35659
35840
|
@public
|
35660
35841
|
*/
|
35661
35842
|
function uniqBy(dependentKey, propertyKey) {
|
35662
|
-
|
35843
|
+
var cp = new _emberMetal.ComputedProperty(function () {
|
35663
35844
|
var uniq = (0, _native_array.A)();
|
35664
35845
|
var seen = Object.create(null);
|
35665
35846
|
var list = (0, _emberMetal.get)(this, dependentKey);
|
@@ -35673,7 +35854,9 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35673
35854
|
});
|
35674
35855
|
}
|
35675
35856
|
return uniq;
|
35676
|
-
}
|
35857
|
+
}, { dependentKeys: [dependentKey + '.[]'], readOnly: true });
|
35858
|
+
|
35859
|
+
return cp;
|
35677
35860
|
}
|
35678
35861
|
|
35679
35862
|
/**
|
@@ -35810,7 +35993,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35810
35993
|
(true && !(arguments.length === 2) && (0, _emberDebug.assert)('Ember.computed.setDiff requires exactly two dependent arrays.', arguments.length === 2));
|
35811
35994
|
|
35812
35995
|
|
35813
|
-
|
35996
|
+
var cp = new _emberMetal.ComputedProperty(function () {
|
35814
35997
|
var setA = this.get(setAProperty);
|
35815
35998
|
var setB = this.get(setBProperty);
|
35816
35999
|
|
@@ -35824,7 +36007,12 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
35824
36007
|
return setA.filter(function (x) {
|
35825
36008
|
return setB.indexOf(x) === -1;
|
35826
36009
|
});
|
35827
|
-
}
|
36010
|
+
}, {
|
36011
|
+
dependentKeys: [setAProperty + '.[]', setBProperty + '.[]'],
|
36012
|
+
readOnly: true
|
36013
|
+
});
|
36014
|
+
|
36015
|
+
return cp;
|
35828
36016
|
}
|
35829
36017
|
|
35830
36018
|
/**
|
@@ -36007,11 +36195,11 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
36007
36195
|
activeObserversMap.set(this, activeObservers);
|
36008
36196
|
|
36009
36197
|
return sortByNormalizedSortProperties(items, normalizedSortProperties);
|
36010
|
-
}, { dependentKeys: [sortPropertiesKey + '.[]'] });
|
36198
|
+
}, { dependentKeys: [sortPropertiesKey + '.[]'], readOnly: true });
|
36011
36199
|
|
36012
36200
|
cp._activeObserverMap = undefined;
|
36013
36201
|
|
36014
|
-
return cp
|
36202
|
+
return cp;
|
36015
36203
|
}
|
36016
36204
|
|
36017
36205
|
function normalizeSortProperties(sortProperties) {
|
@@ -36038,7 +36226,6 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-utils
|
|
36038
36226
|
return direction === 'desc' ? -1 * result : result;
|
36039
36227
|
}
|
36040
36228
|
}
|
36041
|
-
|
36042
36229
|
return 0;
|
36043
36230
|
}));
|
36044
36231
|
}
|
@@ -36072,9 +36259,13 @@ enifed('ember-runtime/controllers/controller', ['exports', 'ember-debug', 'ember
|
|
36072
36259
|
|
36073
36260
|
Example:
|
36074
36261
|
|
36075
|
-
```
|
36076
|
-
|
36077
|
-
|
36262
|
+
```app/controllers/post.js
|
36263
|
+
import Controller, {
|
36264
|
+
inject as controller
|
36265
|
+
} from '@ember/controller';
|
36266
|
+
|
36267
|
+
export default Controller.extend({
|
36268
|
+
posts: controller()
|
36078
36269
|
});
|
36079
36270
|
```
|
36080
36271
|
|
@@ -36082,10 +36273,13 @@ enifed('ember-runtime/controllers/controller', ['exports', 'ember-debug', 'ember
|
|
36082
36273
|
looks up the `posts` controller in the container, making it easy to
|
36083
36274
|
reference other controllers. This is functionally equivalent to:
|
36084
36275
|
|
36085
|
-
```
|
36086
|
-
|
36276
|
+
```app/controllers/post.js
|
36277
|
+
import Controller from '@ember/controller';
|
36278
|
+
import { alias } from '@ember/object/computed';
|
36279
|
+
|
36280
|
+
export default Controller.extend({
|
36087
36281
|
needs: 'posts',
|
36088
|
-
posts:
|
36282
|
+
posts: alias('controllers.posts')
|
36089
36283
|
});
|
36090
36284
|
```
|
36091
36285
|
|
@@ -36213,15 +36407,18 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36213
36407
|
when `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Function` is
|
36214
36408
|
`true`, which is the default.
|
36215
36409
|
Computed properties allow you to treat a function like a property:
|
36216
|
-
```
|
36217
|
-
|
36410
|
+
```app/utils/president.js
|
36411
|
+
import EmberObject from '@ember/object';
|
36412
|
+
export default EmberObject.extend({
|
36218
36413
|
firstName: '',
|
36219
36414
|
lastName: '',
|
36220
36415
|
fullName: function() {
|
36221
36416
|
return this.get('firstName') + ' ' + this.get('lastName');
|
36222
36417
|
}.property() // Call this flag to mark the function as a property
|
36223
36418
|
});
|
36224
|
-
|
36419
|
+
```
|
36420
|
+
```javascript
|
36421
|
+
let president = President.create({
|
36225
36422
|
firstName: 'Barack',
|
36226
36423
|
lastName: 'Obama'
|
36227
36424
|
});
|
@@ -36233,8 +36430,9 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36233
36430
|
example, in the above example, the `fullName` property depends on
|
36234
36431
|
`firstName` and `lastName` to determine its value. You can tell Ember
|
36235
36432
|
about these dependencies like this:
|
36236
|
-
```
|
36237
|
-
|
36433
|
+
```app/utils/president.js
|
36434
|
+
import EmberObject from '@ember/object';
|
36435
|
+
export default EmberObject.extend({
|
36238
36436
|
firstName: '',
|
36239
36437
|
lastName: '',
|
36240
36438
|
fullName: function() {
|
@@ -36266,7 +36464,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36266
36464
|
call to the end of your method declarations in classes that you write.
|
36267
36465
|
For example:
|
36268
36466
|
```javascript
|
36269
|
-
|
36467
|
+
import EmberObject from '@ember/object';
|
36468
|
+
EmberObject.extend({
|
36270
36469
|
valueObserver: function() {
|
36271
36470
|
// Executes whenever the "value" property changes
|
36272
36471
|
}.observes('value')
|
@@ -36310,7 +36509,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36310
36509
|
call to the end of your method declarations in classes that you write.
|
36311
36510
|
For example:
|
36312
36511
|
```javascript
|
36313
|
-
|
36512
|
+
import EmberObject from '@ember/object';
|
36513
|
+
EmberObject.extend({
|
36314
36514
|
valueObserver: function() {
|
36315
36515
|
// Executes immediately after the "value" property changes
|
36316
36516
|
}.observesImmediately('value')
|
@@ -36333,7 +36533,8 @@ enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember
|
|
36333
36533
|
You can listen for events simply by adding the `on` call to the end of
|
36334
36534
|
your method declarations in classes or mixins that you write. For example:
|
36335
36535
|
```javascript
|
36336
|
-
|
36536
|
+
import Mixin from '@ember/mixin';
|
36537
|
+
Mixin.create({
|
36337
36538
|
doSomethingWithElement: function() {
|
36338
36539
|
// Executes whenever the "didInsertElement" event fires
|
36339
36540
|
}.on('didInsertElement')
|
@@ -37365,11 +37566,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37365
37566
|
}
|
37366
37567
|
|
37367
37568
|
function objectAt(content, idx) {
|
37368
|
-
|
37369
|
-
return content.objectAt(idx);
|
37370
|
-
}
|
37371
|
-
|
37372
|
-
return content[idx];
|
37569
|
+
return typeof content.objectAt === 'function' ? content.objectAt(idx) : content[idx];
|
37373
37570
|
}
|
37374
37571
|
|
37375
37572
|
function arrayContentWillChange(array, startIdx, removeAmt, addAmt) {
|
@@ -37448,7 +37645,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37448
37645
|
(0, _emberMetal.sendEvent)(array, '@array:change', [array, startIdx, removeAmt, addAmt]);
|
37449
37646
|
|
37450
37647
|
var meta = (0, _emberMetal.peekMeta)(array);
|
37451
|
-
var cache = meta
|
37648
|
+
var cache = meta !== undefined ? meta.readableCache() : undefined;
|
37452
37649
|
if (cache !== undefined) {
|
37453
37650
|
var length = (0, _emberMetal.get)(array, 'length');
|
37454
37651
|
var addedAmount = addAmt === -1 ? 0 : addAmt;
|
@@ -37478,7 +37675,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37478
37675
|
var EMBER_ARRAY = (0, _emberUtils.symbol)('EMBER_ARRAY');
|
37479
37676
|
|
37480
37677
|
function isEmberArray(obj) {
|
37481
|
-
return obj &&
|
37678
|
+
return obj && obj[EMBER_ARRAY];
|
37482
37679
|
}
|
37483
37680
|
|
37484
37681
|
// ..........................................................
|
@@ -37558,17 +37755,13 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', '
|
|
37558
37755
|
|
37559
37756
|
if ((0, _emberMetal.isNone)(beginIndex)) {
|
37560
37757
|
beginIndex = 0;
|
37758
|
+
} else if (beginIndex < 0) {
|
37759
|
+
beginIndex = length + beginIndex;
|
37561
37760
|
}
|
37562
37761
|
|
37563
37762
|
if ((0, _emberMetal.isNone)(endIndex) || endIndex > length) {
|
37564
37763
|
endIndex = length;
|
37565
|
-
}
|
37566
|
-
|
37567
|
-
if (beginIndex < 0) {
|
37568
|
-
beginIndex = length + beginIndex;
|
37569
|
-
}
|
37570
|
-
|
37571
|
-
if (endIndex < 0) {
|
37764
|
+
} else if (endIndex < 0) {
|
37572
37765
|
endIndex = length + endIndex;
|
37573
37766
|
}
|
37574
37767
|
|
@@ -38550,22 +38743,22 @@ enifed('ember-runtime/mixins/evented', ['exports', 'ember-metal'], function (exp
|
|
38550
38743
|
exports.default = _emberMetal.Mixin.create({
|
38551
38744
|
|
38552
38745
|
/**
|
38553
|
-
|
38554
|
-
|
38555
|
-
|
38556
|
-
|
38557
|
-
|
38558
|
-
|
38559
|
-
|
38560
|
-
|
38561
|
-
|
38562
|
-
|
38563
|
-
|
38564
|
-
|
38565
|
-
|
38566
|
-
|
38567
|
-
|
38568
|
-
|
38746
|
+
Subscribes to a named event with given function.
|
38747
|
+
```javascript
|
38748
|
+
person.on('didLoad', function() {
|
38749
|
+
// fired once the person has loaded
|
38750
|
+
});
|
38751
|
+
```
|
38752
|
+
An optional target can be passed in as the 2nd argument that will
|
38753
|
+
be set as the "this" for the callback. This is a good way to give your
|
38754
|
+
function access to the object triggering the event. When the target
|
38755
|
+
parameter is used the callback becomes the third argument.
|
38756
|
+
@method on
|
38757
|
+
@param {String} name The name of the event
|
38758
|
+
@param {Object} [target] The "this" binding for the callback
|
38759
|
+
@param {Function} method The callback to execute
|
38760
|
+
@return this
|
38761
|
+
@public
|
38569
38762
|
*/
|
38570
38763
|
on: function (name, target, method) {
|
38571
38764
|
(0, _emberMetal.addListener)(this, name, target, method);
|
@@ -39417,8 +39610,9 @@ enifed('ember-runtime/mixins/observable', ['exports', 'ember-metal', 'ember-debu
|
|
39417
39610
|
observer should be prepared to handle that.
|
39418
39611
|
### Observer Methods
|
39419
39612
|
Observer methods have the following signature:
|
39420
|
-
```
|
39421
|
-
|
39613
|
+
```app/components/my-component.js
|
39614
|
+
import Component from '@ember/component';
|
39615
|
+
export default Component.extend({
|
39422
39616
|
init() {
|
39423
39617
|
this._super(...arguments);
|
39424
39618
|
this.addObserver('foo', this, 'fooDidChange');
|
@@ -39615,7 +39809,7 @@ enifed('ember-runtime/mixins/promise_proxy', ['exports', 'ember-metal', 'ember-d
|
|
39615
39809
|
let ObjectPromiseProxy = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);
|
39616
39810
|
|
39617
39811
|
let proxy = ObjectPromiseProxy.create({
|
39618
|
-
promise: Ember.RSVP.
|
39812
|
+
promise: Ember.RSVP.resolve($.getJSON('/some/remote/data.json'))
|
39619
39813
|
});
|
39620
39814
|
|
39621
39815
|
proxy.then(function(json){
|
@@ -39638,7 +39832,7 @@ enifed('ember-runtime/mixins/promise_proxy', ['exports', 'ember-metal', 'ember-d
|
|
39638
39832
|
When the $.getJSON completes, and the promise is fulfilled
|
39639
39833
|
with json, the life cycle attributes will update accordingly.
|
39640
39834
|
Note that $.getJSON doesn't return an ECMA specified promise,
|
39641
|
-
it is useful to wrap this with an `RSVP.
|
39835
|
+
it is useful to wrap this with an `RSVP.resolve` so that it behaves
|
39642
39836
|
as a spec compliant promise.
|
39643
39837
|
|
39644
39838
|
```javascript
|
@@ -41315,8 +41509,10 @@ enifed('ember-runtime/system/native_array', ['exports', 'ember-metal', 'ember-en
|
|
41315
41509
|
|
41316
41510
|
Example
|
41317
41511
|
|
41318
|
-
```js
|
41319
|
-
|
41512
|
+
```app/components/my-component.js
|
41513
|
+
import Component from '@ember/component';
|
41514
|
+
|
41515
|
+
export default Component.extend({
|
41320
41516
|
tagName: 'ul',
|
41321
41517
|
classNames: ['pagination'],
|
41322
41518
|
|
@@ -41449,9 +41645,12 @@ enifed('ember-runtime/system/service', ['exports', 'ember-runtime/system/object'
|
|
41449
41645
|
|
41450
41646
|
Example:
|
41451
41647
|
|
41452
|
-
```
|
41453
|
-
|
41454
|
-
|
41648
|
+
```app/routes/application.js
|
41649
|
+
import Route from '@ember/routing/route';
|
41650
|
+
import { inject as service } from '@ember/service';
|
41651
|
+
|
41652
|
+
export default Route.extend({
|
41653
|
+
authManager: service('auth'),
|
41455
41654
|
|
41456
41655
|
model() {
|
41457
41656
|
return this.get('authManager').findCurrentUser();
|
@@ -45179,17 +45378,20 @@ enifed('ember-utils', ['exports'], function (exports) {
|
|
45179
45378
|
`audioType` passed as an attribute:
|
45180
45379
|
|
45181
45380
|
```app/components/play-audio.js
|
45182
|
-
import
|
45183
|
-
|
45381
|
+
import Component from '@ember/component';
|
45382
|
+
import { computed } from '@ember/object';
|
45383
|
+
import { getOwner } from '@ember/application';
|
45384
|
+
|
45184
45385
|
// Usage:
|
45185
45386
|
//
|
45186
45387
|
// {{play-audio audioType=model.audioType audioFile=model.file}}
|
45187
45388
|
//
|
45188
|
-
export default
|
45189
|
-
audioService:
|
45190
|
-
let owner =
|
45389
|
+
export default Component.extend({
|
45390
|
+
audioService: computed('audioType', function() {
|
45391
|
+
let owner = getOwner(this);
|
45191
45392
|
return owner.lookup(`service:${this.get('audioType')}`);
|
45192
45393
|
}),
|
45394
|
+
|
45193
45395
|
click() {
|
45194
45396
|
let player = this.get('audioService');
|
45195
45397
|
player.play(this.get('audioFile'));
|
@@ -45486,7 +45688,7 @@ enifed('ember-utils', ['exports'], function (exports) {
|
|
45486
45688
|
*/
|
45487
45689
|
function tryInvoke(obj, methodName, args) {
|
45488
45690
|
if (canInvoke(obj, methodName)) {
|
45489
|
-
return
|
45691
|
+
return applyStr(obj, methodName, args);
|
45490
45692
|
}
|
45491
45693
|
}
|
45492
45694
|
|
@@ -45839,9 +46041,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45839
46041
|
For example a component for playing or pausing music may translate click events
|
45840
46042
|
into action notifications of "play" or "stop" depending on some internal state
|
45841
46043
|
of the component:
|
45842
|
-
```
|
45843
|
-
|
45844
|
-
|
46044
|
+
```app/components/play-button.js
|
46045
|
+
import Component from '@ember/component';
|
46046
|
+
export default Component.extend({
|
45845
46047
|
click() {
|
45846
46048
|
if (this.get('isPlaying')) {
|
45847
46049
|
this.sendAction('play');
|
@@ -45859,9 +46061,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45859
46061
|
When the component receives a browser `click` event it translate this
|
45860
46062
|
interaction into application-specific semantics ("play" or "stop") and
|
45861
46063
|
calls the specified action.
|
45862
|
-
```
|
45863
|
-
|
45864
|
-
|
46064
|
+
```app/controller/application.js
|
46065
|
+
import Controller from '@ember/controller';
|
46066
|
+
export default Controller.extend({
|
45865
46067
|
actions: {
|
45866
46068
|
musicStarted() {
|
45867
46069
|
// called when the play button is clicked
|
@@ -45876,9 +46078,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45876
46078
|
```
|
45877
46079
|
If no action is passed to `sendAction` a default name of "action"
|
45878
46080
|
is assumed.
|
45879
|
-
```
|
45880
|
-
|
45881
|
-
|
46081
|
+
```app/components/next-button.js
|
46082
|
+
import Component from '@ember/component';
|
46083
|
+
export default Component.extend({
|
45882
46084
|
click() {
|
45883
46085
|
this.sendAction();
|
45884
46086
|
}
|
@@ -45888,9 +46090,9 @@ enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-me
|
|
45888
46090
|
{{! app/templates/application.hbs }}
|
45889
46091
|
{{next-button action=(action "playNextSongInAlbum")}}
|
45890
46092
|
```
|
45891
|
-
```
|
45892
|
-
|
45893
|
-
|
46093
|
+
```app/controllers/application.js
|
46094
|
+
import Controller from '@ember/controller';
|
46095
|
+
export default Controller.extend({
|
45894
46096
|
actions: {
|
45895
46097
|
playNextSongInAlbum() {
|
45896
46098
|
...
|
@@ -46430,8 +46632,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46430
46632
|
is a string value, the value of that string will be applied as the value
|
46431
46633
|
for an attribute of the property's name.
|
46432
46634
|
The following example creates a tag like `<div priority="high" />`.
|
46433
|
-
```
|
46434
|
-
|
46635
|
+
```app/components/my-component.js
|
46636
|
+
import Component from '@ember/component';
|
46637
|
+
export default Component.extend({
|
46435
46638
|
attributeBindings: ['priority'],
|
46436
46639
|
priority: 'high'
|
46437
46640
|
});
|
@@ -46440,8 +46643,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46440
46643
|
an HTML Boolean attribute. It will be present if the property is `true`
|
46441
46644
|
and omitted if the property is `false`.
|
46442
46645
|
The following example creates markup like `<div visible />`.
|
46443
|
-
```
|
46444
|
-
|
46646
|
+
```app/components/my-component.js
|
46647
|
+
import Component from '@ember/component';
|
46648
|
+
export default Component.extend({
|
46445
46649
|
attributeBindings: ['visible'],
|
46446
46650
|
visible: true
|
46447
46651
|
});
|
@@ -46449,8 +46653,9 @@ enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-meta
|
|
46449
46653
|
If you would prefer to use a custom value instead of the property name,
|
46450
46654
|
you can create the same markup as the last example with a binding like
|
46451
46655
|
this:
|
46452
|
-
```
|
46453
|
-
|
46656
|
+
```app/components/my-component.js
|
46657
|
+
import Component from '@ember/component';
|
46658
|
+
export default Component.extend({
|
46454
46659
|
attributeBindings: ['isVisible:visible'],
|
46455
46660
|
isVisible: true
|
46456
46661
|
});
|
@@ -47838,15 +48043,15 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47838
48043
|
computed.collect = _emberRuntime.collect;
|
47839
48044
|
|
47840
48045
|
/**
|
47841
|
-
|
47842
|
-
|
47843
|
-
|
48046
|
+
Defines the hash of localized strings for the current language. Used by
|
48047
|
+
the `Ember.String.loc()` helper. To localize, add string values to this
|
48048
|
+
hash.
|
47844
48049
|
|
47845
|
-
|
47846
|
-
|
47847
|
-
|
47848
|
-
|
47849
|
-
|
48050
|
+
@property STRINGS
|
48051
|
+
@for Ember
|
48052
|
+
@type Object
|
48053
|
+
@private
|
48054
|
+
*/
|
47850
48055
|
Object.defineProperty(_emberMetal.default, 'STRINGS', {
|
47851
48056
|
configurable: false,
|
47852
48057
|
get: _emberRuntime.getStrings,
|
@@ -47854,19 +48059,19 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47854
48059
|
});
|
47855
48060
|
|
47856
48061
|
/**
|
47857
|
-
|
48062
|
+
Whether searching on the global for new Namespace instances is enabled.
|
47858
48063
|
|
47859
|
-
|
47860
|
-
|
47861
|
-
|
48064
|
+
This is only exported here as to not break any addons. Given the new
|
48065
|
+
visit API, you will have issues if you treat this as a indicator of
|
48066
|
+
booted.
|
47862
48067
|
|
47863
|
-
|
48068
|
+
Internally this is only exposing a flag in Namespace.
|
47864
48069
|
|
47865
|
-
|
47866
|
-
|
47867
|
-
|
47868
|
-
|
47869
|
-
|
48070
|
+
@property BOOTED
|
48071
|
+
@for Ember
|
48072
|
+
@type Boolean
|
48073
|
+
@private
|
48074
|
+
*/
|
47870
48075
|
Object.defineProperty(_emberMetal.default, 'BOOTED', {
|
47871
48076
|
configurable: false,
|
47872
48077
|
enumerable: false,
|
@@ -47903,15 +48108,15 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47903
48108
|
_emberRuntime.String.isHTMLSafe = _emberGlimmer.isHTMLSafe;
|
47904
48109
|
|
47905
48110
|
/**
|
47906
|
-
|
47907
|
-
|
47908
|
-
|
48111
|
+
Global hash of shared templates. This will automatically be populated
|
48112
|
+
by the build tools so that you can store your Handlebars templates in
|
48113
|
+
separate files that get loaded into JavaScript at buildtime.
|
47909
48114
|
|
47910
|
-
|
47911
|
-
|
47912
|
-
|
47913
|
-
|
47914
|
-
|
48115
|
+
@property TEMPLATES
|
48116
|
+
@for Ember
|
48117
|
+
@type Object
|
48118
|
+
@private
|
48119
|
+
*/
|
47915
48120
|
Object.defineProperty(_emberMetal.default, 'TEMPLATES', {
|
47916
48121
|
get: _emberGlimmer.getTemplates,
|
47917
48122
|
set: _emberGlimmer.setTemplates,
|
@@ -47923,11 +48128,12 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47923
48128
|
|
47924
48129
|
|
47925
48130
|
/**
|
47926
|
-
|
47927
|
-
|
47928
|
-
|
47929
|
-
|
47930
|
-
|
48131
|
+
The semantic version
|
48132
|
+
|
48133
|
+
@property VERSION
|
48134
|
+
@type String
|
48135
|
+
@public
|
48136
|
+
*/
|
47931
48137
|
_emberMetal.default.VERSION = _version.default;
|
47932
48138
|
|
47933
48139
|
_emberMetal.libraries.registerCoreLibrary('Ember', _version.default);
|
@@ -47935,13 +48141,14 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
47935
48141
|
// require the main entry points for each of these packages
|
47936
48142
|
// this is so that the global exports occur properly
|
47937
48143
|
|
48144
|
+
|
47938
48145
|
/**
|
47939
|
-
|
48146
|
+
Alias for jQuery
|
47940
48147
|
|
47941
|
-
|
47942
|
-
|
47943
|
-
|
47944
|
-
|
48148
|
+
@method $
|
48149
|
+
@for Ember
|
48150
|
+
@public
|
48151
|
+
*/
|
47945
48152
|
_emberMetal.default.$ = _emberViews.jQuery;
|
47946
48153
|
|
47947
48154
|
_emberMetal.default.ViewTargetActionSupport = _emberViews.ViewTargetActionSupport;
|
@@ -48001,7 +48208,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
48001
48208
|
(0, _emberRuntime.runLoadHooks)('Ember');
|
48002
48209
|
|
48003
48210
|
/**
|
48004
|
-
|
48211
|
+
@module ember
|
48005
48212
|
*/
|
48006
48213
|
exports.default = _emberMetal.default;
|
48007
48214
|
|
@@ -48016,7 +48223,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
|
|
48016
48223
|
enifed("ember/version", ["exports"], function (exports) {
|
48017
48224
|
"use strict";
|
48018
48225
|
|
48019
|
-
exports.default = "2.16.0-beta.
|
48226
|
+
exports.default = "2.16.0-beta.2";
|
48020
48227
|
});
|
48021
48228
|
enifed("handlebars", ["exports"], function (exports) {
|
48022
48229
|
"use strict";
|